Skip to content

feat(streamdeck): save-replay key, one-press install, real icons - #54

Merged
DarrellVS merged 1 commit into
devfrom
streamdeck-replay-install
Sep 23, 2026
Merged

DarrellVS merged 1 commit into
devfrom
streamdeck-replay-install

Conversation

@DarrellVS

Copy link
Copy Markdown
Owner

Feedback: a GoodBit button to install the Stream Deck plugin, a key that saves the replay, and real icons.

  • Save the replay key. Presses the hotkey OBS already has (read from the GoodBit profile) with a small SendInput helper. No obs-websocket, nothing in OBS changes. It reports "saved" only once a new recording lands, otherwise one of four reasons shown on the key.
  • Install the plugin button in Settings > Connections. The plugin ships in the installer; GoodBit writes the address and token into the installed plugin (connection.json), so there is nothing to paste.
  • Icons: Phosphor (MIT), rendered at the sizes Elgato requires.

Gates: npm run check 866; streamdeck-check.mjs passes (the save key says OBS is off and presses nothing); streamdeck validate OK; the helper compiles and Windows accepts its keypress (F24).

Hand test: a real save with OBS and the replay buffer running, and installing on your Stream Deck.

🤖 Generated with Claude Code

…nd real icons

**Save the replay from the Stream Deck.** The plugin used to send people to
Elgato's OBS plugin for this. GoodBit now presses the hotkey OBS already
listens for, read from the profile it records with (the GoodBit one when it
exists), through a small `SendInput` helper compiled on demand like the
foreground helper. obs-websocket was the alternative and was not taken: it
is a server OBS binds to every interface once enabled, and a config of
OBS's own to write. Nothing in OBS changes. The key goes to the
foreground, the game, exactly as the physical key would.

**It answers on the file, not the press.** "Saved" only once a new
recording lands in the folder OBS writes to (12 s), and otherwise one of
four reasons the key shows in words: OBS off, no key bound, a key GoodBit
cannot press (a mouse button), or a press that produced nothing, which is
a buffer that is not running. `replayHotkey.ts` maps OBS key names to
virtual keys and is unit-tested, because a wrong entry presses a
different key in somebody's game.

**One press installs the plugin.** It ships in the installer
(`resources/streamdeck/`, built by `npm run build:streamdeck`, which
`build:win` runs first). Settings, Connections gets *Install the plugin*:
Windows hands the package to the Stream Deck app, which asks, and GoodBit
then writes the address and token into the installed plugin's own
`connection.json`, again whenever the server starts. Nothing to paste; a
key's own settings still win over the file.

**Icons.** Phosphor (MIT), bold weight, rendered by
`streamdeck-plugin/scripts/render-icons.mjs` with resvg: key images on
GoodBit's dark ground (the save key in the accent, discard in danger),
list icons as a single light glyph on transparent, and the plugin icon is
GoodBit's own app icon. Replaces the flat colour placeholders.

Gates: `npm run check` 866 (17 new); `streamdeck-check.mjs` exit 0,
including the save key answering "OBS is off" and pressing nothing;
`streamdeck validate` successful; the helper compiles and Windows accepts
its keypress (F24, which nothing listens to). Not verified: a real save
with OBS running, and the install on your Stream Deck, which is the hand
test.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@DarrellVS DarrellVS added this to the 3.5.0 milestone Sep 23, 2026
@DarrellVS DarrellVS added enhancement New feature or request stream-deck The Elgato plugin labels Sep 23, 2026
@DarrellVS DarrellVS self-assigned this Sep 23, 2026
@DarrellVS
DarrellVS merged commit 4ef037b into dev Sep 23, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request stream-deck The Elgato plugin

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant