BOME MIDI TRANSLATOR PRO // ztranslator PORT REPORT

Every feature enumerated from the BOME user manual (vendored at vendor/bome/), each hand-assessed against the real source. Status is conservative: an action whose engine works but whose editor is a single text box is PARTIAL, not FULL.
73 features tracked · 4 out-of-scope · 0 overclaim flag(s) · generated 2026-07-03

⚠ Read this first — what this number is, and isn't

This is a code-verified coverage map, not a vibe. Status lives in scripts/port_features.tsv and is set by hand, conservatively: FULL only when behaviour AND editor match BOME; PARTIAL when the engine runs the action but the editor/UI is incomplete (missing fields, no Test button, no Delay UI); MISSING when neither runtime nor editor exists. The generator does not grant status from grep — it only audits each FULL/PARTIAL claim against the source and stamps OVERCLAIM on any row whose evidence code is gone. Coverage weights FULL=1, PARTIAL=0.5. The big gaps are real and named: incoming keystroke hook, app-focus watch, per-action Description/Parameters/Advanced/Test/Delay editors, mouse + preset-control editors.

Coverage: 71.9%

🟢 full 45 · 🟡 partial 15 · 🔴 missing 13 · weighted 71.9% of 73 tracked features
71.9%weighted coverage
45full
15partial
13missing
4out-of-scope
0overclaim flags

Every BOME feature

ChapterFeatureStatusNotes / gap
3 MIDI SetupVirtual MIDI ports (create in/out)PARTIALengine creates them; no settings UI to name/persist virtual ports (11.5)
3 MIDI SetupMIDI devices + aliasesMISSINGno alias mapping layer (BOME 3.2 / 6.3)
3 MIDI SetupProject default MIDI portsPARTIALmodel + project panel list; no full alias/device picker
3 MIDI SetupMIDI Router / MIDI Thru (IN->OUT)FULLroutes applied independently of translators; add/remove in project panel
4 InterfaceToolbar (file/edit/view groups)PARTIALmost buttons cloned; no real menu bar, Properties is a focus jump not a toggle
4 InterfaceMenu bar (File/Edit/MIDI/View/Help)MISSINGno native menu bar; toolbar covers a subset
4 InterfacePreset list (+ enable checkboxes)FULL
4 InterfaceTranslator list (+ enable checkboxes)FULLplus fzf filter bar (not in BOME)
4 InterfaceProperties sidebarPARTIALalways-visible editor; no Ctrl+3/4/8 jumps, no Enter-to-open semantics
4 InterfaceEvent MonitorFULLconsole Monitor tab + MIDI-learn capture
4 InterfaceLog windowFULLconsole Log tab
7 PresetActive / InactiveFULLcheckbox in preset tree
7 PresetAlways ActivePARTIALmodel field; no editor checkbox
7 PresetChange presets via outgoing actionFULL
7 PresetPreset default MIDI portsPARTIALmodel only; no per-preset port editor
8 TranslatorNameFULL
8 TranslatorActiveFULL
8 TranslatorStop ProcessingFULLflag + checkbox
8 TranslatorOutgoing-once / Swallow flagsFULLflags + checkboxes
8 TranslatorDelay outgoing action (8.5.1)PARTIALeditor has the Delay checkbox + ms field; variable-delay (delay from a variable) not yet supported
8 TranslatorDescription field on actionFULLDescription field on the outgoing editor; documentation only, round-trips in JSON
8 TranslatorTest button on actionFULLTest button applies then fires the outgoing action once via ztr_test_translator
9.1 MIDI MsgIncoming MIDI (note/cc/pc/bend/pressure)PARTIALmatches type/channel/value with fixed/any/range/var per field; no raw/sysex byte editor yet
9.1 MIDI MsgIncoming system common/realtimePARTIALmodelled; editor exposes the common types only
9.1 MIDI MsgOutgoing MIDI messagePARTIALsends typed msg; no raw byte-sequence editor, limited port selection
9.1 MIDI MsgNRPN/RPN/14-bit/MPE (in + out)FULLstate machine in, sequence out; editor exposes all modes
9.2 MIDI PortIncoming MIDI Port actionMISSINGnot in the incoming-type dropdown
9.2 MIDI PortOutgoing MIDI Port (open/close/restart)FULLeditor op + port
9.3 RouterOutgoing Router action (add/remove/enable/disable)FULLeditor op + from + to
9.4 KeystrokeIncoming keystroke (global keyboard hook)MISSINGimported payload is read-only; no CGEventTap listener to fire on host keystrokes
9.4 KeystrokeOutgoing keystroke (key-by-key, modifiers, press/release, repeat)PARTIALtypes literal text + imported combos; editor is a single Type-text box, no key/modifier/press-release builder
9.5 TimerIncoming timer (named, elapsed)FULL
9.5 TimerOutgoing timer (start/kill, repeat, delay, period)FULLeditor name/op/repeat/delay/period
9.6 PresetIncoming preset (activated/deactivated)FULLeditor preset + when
9.6 PresetOutgoing preset controlFULLeditor: preset name + enable/disable; runtime enables/disables the named preset
9.7 ProjectIncoming project actionMISSINGnot in incoming dropdown
9.7 ProjectOutgoing project action (enable/disable processing)FULLBOME 9.7.2 = Enable/Disable global processing; both ops + an Open-project-file extension, with the engine gate
9.7 ProjectDisable bypasses translators, Enable re-armsFULLwhen disabled only an Enable-Processing translator runs (manual 9.7.2)
9.8 MouseOutgoing mouse move / absoluteFULLeditor: action + X/Y (fixed or variable) + relative flag
9.8 MouseOutgoing mouse button clicksFULLeditor exposes left/right/middle click + left down/up
9.8 MouseOutgoing mouse wheelFULLeditor: wheel delta field
9.8 MouseMultiple display supportMISSINGno multi-display coordinate mapping
9.9 Exec FileOutgoing execute/launch fileFULLeditor path + args
9.10 SerialOutgoing serial send (hex/text, baud)FULLeditor port/baud/data
9.10 SerialIncoming serial portFULLengine serial reader fires Incoming::Serial per byte (auto-reconnects); editor has the Serial byte trigger panel
9.10 SerialSerial as MIDI deviceMISSINGnot supported
9.11 AppleScriptOutgoing AppleScript (run script)FULLeditor: Script + Description + Parameters + Advanced handler; runs script with global handlers prepended
9.11 AppleScriptParameters (pass MT vars into script)FULLeditor Parameters field; engine injects `set <var> to <value>` for each listed MT variable
9.11 AppleScriptAdvanced: unique handler namePARTIALhandler-name field stored + round-trips; not yet used to expose the action for cross-script calls
9.11 AppleScriptsetVariable()/getVariable() back into engineMISSINGscript cannot read/write MT variables
9.11 AppleScriptGlobal AppleScript handler blockFULLproject-level handlers prepended at fire time
9.11 AppleScriptControl MT via external AppleScript (sdef)MISSINGno AppleScript scripting interface on the host app
9.12 App FocusIncoming application focus (frontmost watch)MISSINGno NSWorkspace monitor to fire on app switch
9.12 App FocusOutgoing application focus (raise app)FULLeditor app name
10 RulesAssignmentFULL
10 RulesExpression (arith/bitwise/shift)FULL
10 RulesGoto / LabelFULL
10 RulesLogFULL
10 RulesSkip / Skip-NFULL
10 RulesExit & execute / Exit & ignoreFULL
10 RulesConditional (IF a cmp b THEN)FULL
10 RulesCommentFULL
10 RulesLocal variables (oo..xx, pp/qq)FULL
10 RulesGlobal variables (ga..z9, g0..g9)FULL
10 RulesRules Wizard (Add Rule dropdown, 9 types)FULLplus free-text editor; no per-rule structured form like BOME
11 SettingsStartup / appearance / options / confirm prefsMISSINGapp-level preference panes not implemented
11 SettingsExport/Import settings (.bmts)MISSINGno .bmts settings file support
12 EngineIncoming event processing pipelineFULLrouter -> match -> rules -> outgoing
12 EngineOutgoing execution + delayed fireFULL
12 EngineParallel processingPARTIALsingle worker thread; not per-translator parallel like BOME
bmtpImport (.bmtp INI + payloads)PARTIALall 44 corpus files import with 0 errors AND 0 unparsed rules (5760 translators); StMa decode {4hex desc}{4hex count}{rules} verified vs BOME; only serial payloads (SerP, 0.03%) remain Raw
bmtpExport (.bmtp, unsigned)PARTIALwrites a loadable unsigned file; not byte-identical to BOME, no RSA signature
bmtpRSA [Signatures] blockMISSINGcannot re-sign without BOME private key (import ignores it)

Superset extensions — beyond BOME (65)

▲ What this section is

Pure-Rust, in-engine features that take ztranslator past BOME to match or exceed the wider remapper field — Karabiner-Elements, QMK/VIA, AutoHotkey, Elgato Stream Deck, BetterTouchTool. Each is a real algorithm reachable through the dispatch surface (capi zt_invoke + the Tauri plugin) with a unit or C-ABI test. They are deliberately excluded from the BOME coverage % above because they are not BOME manual features.

FeatureCompetitor gap / originCommand
Response-curve value scaling (linear/exp/log/S-curve/invert)beyond BOME hand-math; Karabiner & Stream Deck have no value shapingztr_scale_value
Grid quantize / snap-to-stepDAW/BTT slider grids; BOME needs hand-written divisionztr_quantize
Analog deadzone with re-expansion (⭐ original)joystick/gamepad axes — no BOME/Karabiner/AHK equivalentztr_deadzone
Slew-rate smoothing / CC de-jitter (⭐ original)a stateful smoother the competitors leave to the userztr_slew
Musical-scale note snap, 14 scales (⭐ original)musical quantization beyond every keyboard/MIDI remapper (BOME, Karabiner, QMK)ztr_scale_snap
Note transpose (clamp / octave-fold / wrap)BOME does raw add only; adds range-overflow policyztr_transpose
14-bit value split / combine (pitch-bend, hi-res CC)BOME NRPN/14-bit parity helperztr_split_14bit, ztr_combine_14bit
Universal SysEx Identity Request builderbeyond BOME (raw byte editing only)ztr_sysex_identity_request
SysEx manufacturer-ID decode (1- & 3-byte)BOME shows raw bytes; this names the vendorztr_sysex_manufacturer
Roland/Boss DT1 checksumBOME users compute it by handztr_roland_checksum
HID usage <-> macOS keycode bridge (usage page 0x07)Karabiner & QMK/VIA name keys by HID usage ID; BOME cannotztr_hid_usage_to_keycode, ztr_hid_name_to_usage
Tap-hold / mod-tap resolver (permissive-hold)QMK MOD_TAP, Karabiner to_if_alone/to_if_held_down; BOME has noneztr_resolve_tap_hold
Chord / combo detection within a time windowQMK combos, Karabiner simultaneous; BOME has noneztr_detect_chords
Layer-stack resolver (momentary/toggle/to/one-shot)QMK/VIA layers; BOME has noneztr_resolve_layers
Karabiner-Elements config import (simple + basic complex)Karabiner-Elements — no BOME importer existsztr_import_karabiner
AutoHotkey hotkey-line grammar parseAutoHotkey — brings its hotkey syntax to macOSztr_parse_ahk_hotkey
MIDI 2.0 UMP pack/unpack (MIDI-1.0 channel voice)MIDI 2.0 spec — BOME is MIDI 1.0 onlyztr_ump_from_midi1, ztr_ump_to_midi1
MPE zone master/member channel layoutMPE spec — BOME has no MPE modelztr_mpe_zone
BPM <-> 24-PPQN MIDI clock intervalMIDI clock timing — BOME forwards clock but does no tempo mathztr_bpm_to_clock, ztr_clock_to_bpm
Song Position Pointer encode/decodeMIDI SPP — beyond BOME's raw byte forwardingztr_spp_encode, ztr_spp_decode
Event debounce + auto-repeat scheduleKarabiner/QMK debounce & key-repeat — no callable formula elsewhereztr_debounce, ztr_repeat_count
Standard MIDI File VLQ codecSMF spec — BOME cannot read/write .midztr_vlq_encode, ztr_vlq_decode
Standard MIDI File MThd header build/parseSMF spec — beyond BOME (no file model)ztr_smf_header, ztr_smf_parse_header
OSC 1.0 message encode/decode (i/f/s)OSC / TouchOSC / Lemur — BOME has no OSCztr_osc_encode, ztr_osc_decode
Pointer region hit-test + swipe classifyBetterTouchTool gestures — BOME/Karabiner/QMK have no 2-D pointerztr_hit_region, ztr_classify_gesture
Repeat/loop macro tree expansionKeyboard Maestro / Stream Deck multi-action — BOME has a flat listztr_expand_macro
Leader-key sequence matcherQMK LEADER / Vim — BOME has no sequence triggerztr_match_leader
Stream Deck paged profile-grid key indexElgato Stream Deck — BOME has no surface layout modelztr_streamdeck_index
AutoHotkey v2 expression evaluator (arith/compare/logic)AutoHotkey v2 — BOME rules do integer assignment onlyztr_ahk_eval
CC -> discrete action band matrix with hysteresisbeyond BOME single-value if comparisonsztr_cc_band
Remap config linter — conflicts/no-ops/dead targets (⭐ original)no competitor validates a remap set (BOME/Karabiner/AHK/QMK)ztr_lint_mappings
128-entry velocity/aftertouch response curve LUTQMK / Native Instruments velocity curves — BOME rescales one value by handztr_velocity_curve
Note-name <-> MIDI-number (scientific pitch, C4=60)BOME/Karabiner/QMK treat a note as a bare 0-127 intztr_note_name, ztr_note_number
Chord builder from root + quality (20 qualities)no remapper explodes a trigger into a chordztr_chord_notes
Scale note enumeration (root + mask, N octaves)beyond BOME — no scale modelztr_scale_notes
Chord identification from held notes (⭐ original)no MIDI remapper names a chord from its notesztr_identify_chord
Arpeggiator model (up/down/updown/downup/converge, octaves)hardware/DAW arps & QMK music mode — BOME just re-emitsztr_arpeggiate
Step-sequencer step + gate-length modelhardware step sequencers — BOME has no clocked gridztr_sequencer_step
MIDI-CI Discovery build/parse (28-bit MUID)MIDI 2.0 Capability Inquiry — BOME is MIDI 1.0 onlyztr_ci_discovery, ztr_ci_parse
MIDI-CI Property Exchange Get build/parse (JSON header)MIDI 2.0 Property Exchange — no BOME equivalentztr_ci_property_get, ztr_ci_parse_property_get
Pointer scroll-tick accumulation + point clampBetterTouchTool/Keyboard Maestro continuous pointer — BOME moves to a point onlyztr_scroll_accumulate, ztr_clamp_point
Conditional rule tree (if/else/while) + variable storeKeyboard Maestro/AHK nested logic — BOME rules are a flat listztr_eval_logic
SMF track event parse (meta/tempo/timesig, running status)SMF spec — BOME cannot read .midztr_smf_parse_track
Tempo <-> BPM (microseconds-per-quarter) conversionSMF/DAW tempo math — beyond BOMEztr_tempo_convert
MIDI Time Code quarter-frame encode/decodeMTC SMPTE sync — BOME forwards F1 bytes but never assembles a timecodeztr_mtc_encode, ztr_mtc_decode
Deterministic humanize timing/velocity jitter (⭐ original)hardware-sequencer groove/feel — BOME has noneztr_humanize
RPN/NRPN builder + CC-stream decoderBOME has 14-bit output but no callable (N)RPN build/parseztr_rpn_build, ztr_rpn_parse
HID Consumer usage page media keys (play/vol/brightness)Karabiner/QMK KC_MEDIA_* — BOME can't name usage page 0x0Cztr_consumer_usage, ztr_consumer_name
Stream Deck+ dial/encoder model (acceleration + clamp)Elgato Stream Deck+ rotary — BOME has no encoder modelztr_dial_rotate
Stream Deck multi-action timelineStream Deck Multi Action / Keyboard Maestro — BOME has a flat action listztr_multi_action
Key-sequence recording + normalization (canonical chords)Karabiner/Keyboard Maestro trigger capture — BOME has no recorderztr_normalize_sequence
MIDI 2.0 Channel Voice (type 0x4) note pack/unpackMIDI 2.0 64-bit UMP with 16-bit velocity + note attribute — BOME is MIDI 1.0 onlyztr_ump2_from_note, ztr_ump2_to_note
MIDI 2.0 velocity scaling (7<->16-bit, min-center-max)MIDI 2.0 spec bit-scaling — BOME has no 16-bit velocityztr_velocity_7_to_16, ztr_velocity_16_to_7
UMP JR (jitter-reduction) timestamp build/parseMIDI 2.0 transport timestamps — no BOME conceptztr_jr_timestamp, ztr_jr_parse
MPE pitch-bend range -> semitonesMPE per-note bend range — BOME has no bend-range modelztr_mpe_bend
SMF track serialize + MTrk chunk writeSMF spec writer — BOME cannot write .mid at allztr_smf_serialize_track, ztr_smf_write_mtrk
OSC bundle + NTP timetag encode/decodeOSC 1.0 temporal bundles — beyond ztranslator's message codec, no BOME OSCztr_osc_bundle_encode, ztr_osc_bundle_decode
LFO generator — 6 shapes incl. sample-and-hold (⭐ original)hardware/DAW LFOs sweep a CC over time — no remapper generates a moving valueztr_lfo_value
ADSR envelope generator (value over time) (⭐ original)synth envelope to shape a CC/velocity — BOME can only emit a fixed valueztr_adsr_value
Swing quantize (triplet feel) (⭐ original)DAW/MPC swing — BOME/Karabiner/QMK have no groove modelztr_swing_quantize
Groove templates (swing/shuffle/push/laid-back) (⭐ original)named per-step timing+velocity feel — no remapper equivalentztr_groove_apply
Chord strum (up/down, timed spread) (⭐ original)guitar/harp strum a chord across time — BOME re-emits simultaneouslyztr_strum
Note-repeat / drum roll with velocity ramp (⭐ original)hardware pad note-repeat — BOME re-emits onceztr_note_roll
Velocity compressor (threshold/ratio/makeup) (⭐ original)studio dynamics on velocity — beyond BOME's single-value rescaleztr_velocity_compress
Headless rules-VM simulator / debugger (⭐ original)BOME tests rules only by sending live MIDI — no offline evaluator that reports outcome, Log output and final varsztr_run_rules

Out of scope (not counted)

FeatureReason
BomeBox hardware runtimeno public firmware/runtime to target
MT-Player / signed project exportrequires BOME private key
HUI / Mackie Control protocolnot part of the .bmtp action set
Windows injected key/mouse events (9.4.3 / 9.8.6)Windows-only API
Generated by scripts/gen_port_report.sh from scripts/port_features.tsv. Regenerate after any port work: scripts/gen_port_report.sh --write. Spec source: vendor/bome/manual.pdf.