Skip to main content

Supported devices

Every deck DeckBridge can drive, generated straight from the device registry (ts/src/devices/registry.ts), so it cannot drift from the code that talks to the hardware. Looking for the values themselves — image spec, wire framing, key maps? Those are on Device specs.

Platform status

DeckBridge is tested on macOS only, and the GitHub releases ship macOS builds only. Linux and Windows support exists in the code but is untested. "Untested" below means no one has run DeckBridge against that physical deck — the model is derived from a board that was tested, or from the reference implementations.

Elgato​

Elgato's own hardware, driven over native HID. No CORA panel emulation needed.

DeviceVendorUSB VID:PIDKeys (grid)Panel pxImageExtra keysTested
Stream Deck MK.2elgato0x0fd9:0x0080
0x0fd9:0x006d
0x0fd9:0x00a5
15 (5×3)72×72JPEG—✓ tested (macOS, 2026-09-15)
Stream Deck Minielgato0x0fd9:0x0063
0x0fd9:0x0090
0x0fd9:0x00b3
0x0fd9:0x00b8
6 (3×2)80×80BMP—✓ tested (macOS)

Mirabox v3 board​

The 293V3 board and its rebadges: 1024-byte CRT packets (512 on the D6 rev. 1), JPEG keys, press and release events.

DeviceVendorUSB VID:PIDKeys (grid)Panel pxImageExtra keysTested
Mirabox 293V3mirabox0x6603:0x1005
0x6603:0x1006
0x6603:0x1010
0x6603:0x1014
15 (5×3)112×112JPEG—✓ tested (macOS)
Mirabox K1 Promirabox0x6603:0x1015
0x6603:0x1019
6 (3×2)64×64JPEG—✓ tested (macOS)
Ajazz AKP153E (rev. 2)ajazz0x0300:0x301015 (5×3)95×95JPEG—✓ tested (Windows, 2026-09-15)
Ajazz AKP153R (rev. 2)ajazz0x0300:0x301115 (5×3)112×112JPEG—— untested
Fifine AmpliGame D6fifine0x3142:0x000715 (5×3)112×112JPEG—— untested
Fifine AmpliGame D6 (rev. 2)fifine0x3142:0x006015 (5×3)112×112JPEG—✓ tested (macOS, 2026-09-11)

Mirabox v1 board​

The 293S board and its rebadges: 512-byte packets, keydown-only firmware, a shared hardcoded serial, and a 6th key column outside the emulated MK.2 grid.

DeviceVendorUSB VID:PIDKeys (grid)Panel pxImageExtra keysTested
Mirabox 293S Stream Deckmirabox0x5548:0x667015 (5×3)85×85JPEG3✓ tested (macOS)
Ajazz AKP153ajazz0x5548:0x667415 (5×3)85×85JPEG3— untested
Ajazz AKP153E (rev. 1)ajazz0x0300:0x101015 (5×3)85×85JPEG3— untested
Ajazz AKP153R (rev. 1)ajazz0x0300:0x102015 (5×3)85×85JPEG3— untested
Mars Gaming MSD-ONEmars-gaming0x0b00:0x100015 (5×3)85×85JPEG3— untested
Mad Dog GK150Kmad-dog0x0c00:0x100015 (5×3)85×85JPEG3— untested
Risemode Vision 01risemode0x0a00:0x100115 (5×3)85×85JPEG3— untested
TMICE Stream Controllertmice0x0500:0x100115 (5×3)85×85JPEG3— untested

AJAZZ AKP05 family​

Dedicated 1024-byte CRT protocol: ten JPEG keys (CRT BAT uploads committed with CRT ULEND), four rotary encoders, a four-zone touch strip, and a 10 s keepalive.

DeviceVendorUSB VID:PIDKeys (grid)Panel pxImageExtra keysTested
AJAZZ AKP05Eajazz0x0300:0x300410 (5×2)112×112JPEG—✓ tested (macOS, 2026-09-21)
AJAZZ AKP05ajazz0x0300:0x300610 (5×2)112×112JPEG2— untested

Devices in detail​

Stream Deck MK.2​

Elgato's own 15-key deck. Driven natively over HID (no CORA emulation of the panel itself), so DeckBridge forwards the app's JPEG unchanged.

USB0x0fd9:0x0080 0x006d 0x00a5
Keys15 (5×3)
Panel72×72 JPEG
Protocolelgato-gen2
Tested✓ tested (macOS, 2026-09-15)
  • Hardware testing with PID 0x0080 confirmed the native 72×72 JPEG passthrough and image.rotate: 0. The other accepted PIDs (0x006d and 0x00a5) remain source-derived.
  • The only non-Elgato-emulating model: cora.usePhysicalIdentity is true, so the deck's real serial and firmware version are forwarded to the app.

Full spec →

Stream Deck Mini​

Elgato's 6-key deck. BMP panel, not JPEG: the app's bitmap is forwarded as-is by the format: 'bmp' short-circuit in image-pipeline.

USB0x0fd9:0x0063 0x0090 0x00b3 0x00b8
Keys6 (3×2)
Panel80×80 BMP
Protocolelgato-gen1
Tested✓ tested (macOS)
  • BGR pixel order plus a 90° CW rotation, matching the reference 6-key implementation's rotate + yFlip.
  • Fixed-size payload: 54-byte BMP header + 80×80×3 = 19254 bytes, 20 packets per key.
  • Splash sources are upright, so the splash path overrides the transform to rotate 90 + flipH.

Full spec →

Mirabox 293V3​

The reference v3 board, and the device every other v3 model in this table is derived from. 15 JPEG keys at 112×112, 1024-byte CRT packets, press and release events.

Also sold as: HSV293SV3 / "293S V3" refresh (PID 0x1014)

USB0x6603:0x1005 0x1006 0x1010 0x1014
Keys15 (5×3)
Panel112×112 JPEG
Protocolmirabox-cora
Tested✓ tested (macOS)
  • Four PIDs: 0x1005 is the hardware-verified one; 0x1006 (EN variant) and 0x1010 (v2.5) come from the vendor's own PID tables; 0x1014 is the HSV293SV3 refresh. The last three are untested here.
  • Upscales 72×72 CORA frames to 112×112, so it uses the lanczos3 filter plus a 0.6 unsharp pass to claw back the softness.

Full spec →

Mirabox 293S Stream Deck​

The reference v1 board: physically 3×6 = 18 keys, of which the left 5 columns are exposed as a 15-key MK.2 and the right column becomes DeckBridge-native extra keys.

USB0x5548:0x6670
Keys15 (5×3) + 3 extra
Panel85×85 JPEG
Protocolmirabox-cora-v1
Tested✓ tested (macOS)
  • Keydown-only firmware — the driver synthesizes the key-up event.
  • The app sends MK.2-native 72×72 but the panel is 85×85, so the image is padded (pixels stay 1:1) with an edge-clamped border instead of being upscaled.
  • Net image transform is the anti-transpose (rotate 90 ∘ flipV). The opendeck-akp153 guess of rotate90 + flipH + flipV reduces to a plain rotate270 and renders vertically flipped.
  • The right column's wire ids (16, 17, 18) are derived from the opendeck-akp153 wire-id namespace, not hardware-verified.
  • v1 firmware reports one hardcoded serial (355499441494) on every unit of every v1 model, so sharedSerial makes the settings key include the model id.

Full spec →

Mirabox K1 Pro​

6 LCD keys (3×2) plus 3 rotary encoders, advertised to the Elgato app as a Stream Deck Mini. The encoders are not wired up — their input codes fall outside the key map and are dropped.

USB0x6603:0x1015 0x1019
Keys6 (3×2)
Panel64×64 JPEG
Protocolmirabox-cora
Tested✓ tested (macOS)
  • Report ID 0x04, not the 0x00 the rest of the family uses.
  • Firmware drops the last byte of every full 1024-byte image chunk. chunkPadByte wire-encodes a sacrificial byte after every packetSize - 1 payload bytes so the drop only ever eats padding — hardware-verified clean at q90–q100 for 2/3/5-chunk files.
  • The app sends an 80×80 Mini BMP whose outer edge is dead border, so 6 px is cropped from every side before the 64×64 resize.
  • JPEG must stay baseline with a single interleaved scan (the vendored jpeg-encoder fork), with the header through SOS inside the first 1023 payload bytes.

Full spec →

AJAZZ AKP05E​

AJAZZ AKP05E (VID 0x0300, PID 0x3004): ten 112×112 LCD keys in a 2×5 grid, plus four rotary encoders (press + rotate, emitted as CORA dial events) and a touch strip whose four zones render DeckBridge widget displays (or a Stream Deck + window image when re-paired as a Plus). Dedicated protocol driver: CRT VER on open, the CRT DIS / LIG / CLE / STP init sequence, CRT BAT uploads committed with CRT ULEND, and a CRT CONNECT keepalive.

USB0x0300:0x3004
Keys10 (5×2)
Panel112×112 JPEG
Protocolajazz-akp05
Tested✓ tested (macOS, 2026-09-21)
  • Only PID 0x3004 is hardware-tested; the retail AKP05 (0x3006) is registered from opendeck-akp05 evidence. Do not add Pro, Mirabox, or hub siblings without their own evidence packet.
  • The firmware reports nothing until it receives the init sequence (CRT DIS, CRT LIG, CRT CLE 0xff, CRT STP). Without it images still paint, but no key report ever arrives.
  • The host is dropped after roughly 15 s of silence: the panel blanks and key reporting stops until a key press partially wakes it. The keepalive runs every 10 s and repeats CRT DIS + CRT LIG before CRT CONNECT — CONNECT alone leaves the panel refusing further image updates (zeccola/ajazz-akp05 0.10.1, reverted in 0.10.2). The LIG carries the live brightness so a tick cannot reset it.
  • Input codes are not the image wire ids: keys report 0x01–0x0a in row order, while their images address wire ids 11–15 (top row) and 6–10 (bottom row).
  • The touch strip is 800×112 at wire id 1, rotated 180°. Wire ids 1–4 are also 176×112 slot windows at x = 0 / 204 / 406 / 610 (26–28 px gaps). Every BAT upload draws in place over the strip without clearing it, so an 800-wide image at wire 1 covers the whole strip and a 176-wide one only its slot. A whole-strip frame from the app goes out as one upload; a partial frame re-sends only the slots it touches (settings.json touchStripZoneFit / touchStripUpload, see docs/side-keys.md).
  • The firmware decodes only about the first 10 100 B of an image upload and drops the rest; the lost tail shows as noise or old content at the top of the image. A 10 123 B full-strip frame lost its top-left corner, so the earlier 10 240 B cap was too high; 10 100 B and 9 216 B caps drew it intact. Pacing and the terminator (ULEND or STP) make no difference. Strip images therefore use maxBytes: 10100. CLE 0xff + STP clears the strip. BGPIC positioned frames and BE32-length BAT uploads do nothing.
  • The CRT VER reply never arrives. The firmware version is read from feature report 0x01 (20 B) at open instead; key input keeps working after the read.
  • Encoder press and twist codes are decoded as dial events: press 0x37 / 0x35 / 0x33 / 0x36 left to right (state 1, no release report, so the driver synthesizes the release), twist 0xa0-0xa1 / 0x50-0x51 / 0x90-0x91 / 0x70-0x71 (CCW-CW, state always 0). Touch-strip swipes 0x38 / 0x39 are decoded as left/right swipes; taps 0x40–0x43 (one per zone, left to right, no coordinates) are decoded as taps at each zone's centre. Dials, swipes and taps reach the Elgato app only when the device is re-paired as a Stream Deck + — the native MK.2-PID pairing advertises no encoders or strip. Re-paired as a Plus, the 4×2 grid covers the left four columns; the right column (input codes 0x05/0x0a, images 15/10) becomes DeckBridge side keys with a widget and an optional press command. A 7-byte header-only report with no code byte also appears and carries nothing.

Full spec →

AJAZZ AKP05​

Retail AJAZZ AKP05 (VID 0x0300, PID 0x3006). It uses the AKP05 dedicated driver, with ten 112×112 LCD keys, CRT BAT uploads, CRT ULEND commits, and CRT LIG brightness.

USB0x0300:0x3006
Keys10 (5×2) + 2 extra
Panel112×112 JPEG
Protocolajazz-akp05
Tested— untested
  • VID, PID, vendor HID collection, protocol version 3 and 112×112 JPEG format come from ambiso/opendeck-akp05; the key transform is the AKP05E's (upright keys, 180° splash). DeckBridge hardware has not tested this SKU.
  • Pairs as Stream Deck + by default. Shares the AKP05E init sequence, CRT CONNECT keepalive, Plus key map, encoder, swipe and tap decoding, and the AKP05E strip geometry and 10 100 B upload cap (both untested on this SKU). See the AKP05E notes for the captured input codes.
  • Close sends no disconnect command — the firmware can wedge after speculative commands. Unplug and replug if the panel wedges.

Full spec →

Ajazz AKP153E (rev. 2)​

The Mirabox 293V3 protocol behind VID 0x0300, with hardware-confirmed 95×95 key images and AKP153E-specific input/image mapping.

USB0x0300:0x3010
Keys15 (5×3)
Panel95×95 JPEG
Protocolmirabox-cora
Tested✓ tested (Windows, 2026-09-15)
  • Issue #67 hardware testing confirmed 95×95 images; inherited 112×112 images were clipped and became centered only after overriding both dimensions to 95.
  • Issue #67 also confirmed the AKP153E-specific input and image mapping. AKP153R remains unverified and deliberately keeps inherited defaults.
  • Do not confuse rev. 2 (PID 0x3010, v3, 1024-byte packets) with rev. 1 (PID 0x1010, v1, 512-byte packets). Same VID, adjacent PIDs, completely different protocol.

Full spec →

Ajazz AKP153R (rev. 2)​

The Mirabox 293V3 board behind VID 0x0300, PID 0x3011. Identical to the AKP153E rev. 2 apart from the PID.

USB0x0300:0x3011
Keys15 (5×3)
Panel112×112 JPEG
Protocolmirabox-cora
Tested— untested
  • Not hardware-tested; inherits the 293V3's hardware-verified tuning verbatim.
  • Rev. 1 of the same name (PID 0x1020) is a v1 board and is a separate model in this table.

Full spec →

Fifine AmpliGame D6​

Rev. 1 of the Fifine AmpliGame D6 (PID 0x0007) — the 293V3 board behind VID 0x3142, writing at 512-byte packets.

USB0x3142:0x0007
Keys15 (5×3)
Panel112×112 JPEG
Protocolmirabox-cora
Tested— untested
  • Not hardware-tested. The 512-byte packet size is inferred, and its own source called it surprising ("Not sure why, but it works with it"). packetSizeCandidates lets the HID report descriptor overrule it at open().
  • Upstream runs this board at mirajazz v1 for writes but forces the event reader to v3, which is why the model is tagged mirabox-cora with synthesizeKeyUp: false rather than mirabox-cora-v1.
  • sharedSerial is deliberately false. If two rev. 1 units ever collide on one settings key, setting it true on this model alone is the fix.

Full spec →

Fifine AmpliGame D6 (rev. 2)​

Rev. 2 of the Fifine AmpliGame D6 (PID 0x0060) — the 293V3 board behind VID 0x3142, writing at 1024-byte packets.

Also sold as: "D6 Pro" in Fifine's own Windows software (the retail box just says D6)

USB0x3142:0x0060
Keys15 (5×3)
Panel112×112 JPEG
Protocolmirabox-cora
Tested✓ tested (macOS, 2026-09-11)
  • Hardware-verified on macOS: enumerates via the 0xffa0/1 usage path, all 15 keys render full-bleed, press and release both map correctly.
  • 512-byte writes render BLACK on this revision. The board reports MaxOutputReportSize = 1024, so every 513-byte write is discarded by the firmware while write() still returns success — the deck enumerates and reports presses while the screen stays black. Do not unify the packet size with rev. 1.
  • The 112×112 panel size cannot be probed and the reference projects are split four ways (95 / 100 / 105 / 112). 112 is the value two independent owners derived from the hardware, and it holds up on a real unit.
  • The HID report descriptor was captured off a real unit (macOS, mise run d6-capture) and is checked in at ts/test/fixtures/fifine-d6-rev2.report-descriptor.json: 54 bytes, one unnumbered vendor collection declaring a 1024-byte output report and a 512-byte input report. Both wire.packetSize: 1024 and wire.inSize: 512 therefore come from the device's own self-description rather than from inference.
  • Serials are per-unit, not the shared mirajazz 355499441494. Two independent 0x0060 samples share the 81D0DA78 prefix and differ in the tail — 81D0DA784037 from the companion issue #32 dump, a different tail on the unit captured here — so sharedSerial stays false.
  • maxBytes: 10240 is headroom, not a ceiling: a size ladder on real hardware (mise run d6-capture -- s3) rendered 7.9 / 10.8 / 14.0 / 22.7 / 22.9 KB keys intact. The cap is left as inherited because desktop keys arrive at 1.9–4.8 KB, so it almost never binds, and every extra KB is another 1024-byte HID write per key.

Full spec →

Ajazz AKP153​

A v1 rebadge of the Mirabox 293S board (VID 0x5548, PID 0x6674). Every field is inherited from the 293S model by construction, so it cannot drift out of sync.

USB0x5548:0x6674
Keys15 (5×3) + 3 extra
Panel85×85 JPEG
Protocolmirabox-cora-v1
Tested— untested
  • Not hardware-tested; see the 293S for the tuning rationale and its own caveats.
  • Shares VID 0x5548 with the 293S; only the PID separates them.

Full spec →

Ajazz AKP153E (rev. 1)​

Rev. 1 of the AKP153E — a v1 rebadge of the Mirabox 293S board (VID 0x0300, PID 0x1010).

USB0x0300:0x1010
Keys15 (5×3) + 3 extra
Panel85×85 JPEG
Protocolmirabox-cora-v1
Tested— untested
  • Not hardware-tested; inherits the 293S model verbatim.
  • Do not merge with ajazz-akp153e-rev2 (PID 0x3010): same VID, adjacent PIDs, completely different protocol.

Full spec →

Ajazz AKP153R (rev. 1)​

Rev. 1 of the AKP153R — a v1 rebadge of the Mirabox 293S board (VID 0x0300, PID 0x1020).

USB0x0300:0x1020
Keys15 (5×3) + 3 extra
Panel85×85 JPEG
Protocolmirabox-cora-v1
Tested— untested
  • Not hardware-tested; inherits the 293S model verbatim.
  • Do not merge with ajazz-akp153r-rev2 (PID 0x3011).

Full spec →

Mars Gaming MSD-ONE​

A v1 rebadge of the Mirabox 293S board (VID 0x0b00, PID 0x1000).

USB0x0b00:0x1000
Keys15 (5×3) + 3 extra
Panel85×85 JPEG
Protocolmirabox-cora-v1
Tested— untested
  • Not hardware-tested; inherits the 293S model verbatim.

Full spec →

Mad Dog GK150K​

A v1 rebadge of the Mirabox 293S board (VID 0x0c00, PID 0x1000).

USB0x0c00:0x1000
Keys15 (5×3) + 3 extra
Panel85×85 JPEG
Protocolmirabox-cora-v1
Tested— untested
  • Not hardware-tested; inherits the 293S model verbatim.

Full spec →

Risemode Vision 01​

A v1 rebadge of the Mirabox 293S board (VID 0x0a00, PID 0x1001).

USB0x0a00:0x1001
Keys15 (5×3) + 3 extra
Panel85×85 JPEG
Protocolmirabox-cora-v1
Tested— untested
  • Not hardware-tested; inherits the 293S model verbatim.

Full spec →

TMICE Stream Controller​

A v1 rebadge of the Mirabox 293S board (VID 0x0500, PID 0x1001).

USB0x0500:0x1001
Keys15 (5×3) + 3 extra
Panel85×85 JPEG
Protocolmirabox-cora-v1
Tested— untested
  • Not hardware-tested; inherits the 293S model verbatim.

Full spec →