feat(streamdeck): save-replay key, one-press install, real icons - #54
Merged
Merged
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Feedback: a GoodBit button to install the Stream Deck plugin, a key that saves the replay, and real icons.
connection.json), so there is nothing to paste.Gates:
npm run check866;streamdeck-check.mjspasses (the save key says OBS is off and presses nothing);streamdeck validateOK; 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