No description
- TypeScript 61.8%
- JavaScript 28.3%
- HTML 9.9%
| com.redlintu16.crosssound.sdPlugin | ||
| scripts | ||
| src | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| rollup.config.mjs | ||
| tsconfig.json | ||
CrossSound — Elgato Stream Deck plugin
Control the CrossSound desktop app from a Stream Deck (and Stream Deck +):
| Control | What it does |
|---|---|
| Play / Pause button | Toggles playback (icon reflects playing state) |
| Next Track button | Skips forward |
| Previous Track button | Skips back |
| Like / Unlike button | Likes/unlikes the current track (icon reflects liked state) |
| Now Playing dial (SD+) | Touch strip shows album art · progress bar · countdown; the dial turns volume; press the dial or tap the strip to play/pause |
How it works
CrossSound's Electron main process runs a tiny dependency-free HTTP bridge on
http://127.0.0.1:52124 (otherservices/streamdeck.js):
GET /state→ the current now-playing snapshot (title, artist, artwork, position, duration,isPlaying,isLiked,volume).POST /command{ "action": "playpause" | "next" | "prev" | "like" | "volume", ... }→ forwarded to the renderer over the existingcrosssound-media-actionIPC channel (the same one hotkeys / tray / Xbox Game Bar already use).
The plugin polls /state once a second and interpolates the position locally, so
the countdown and progress bar tick smoothly. CrossSound must be running for
the plugin to connect (it shows "CrossSound offline" otherwise).
Prerequisites
- Node.js 20+
- Stream Deck software 6.5+ (6.5 is the minimum for encoder/touch-strip layouts)
- Elgato CLI:
npm install -g @elgato/cli
Build & install
cd streamdeck-plugin
npm install
npm run build # generates placeholder icons + bundles src → .sdPlugin/bin/plugin.js
streamdeck link com.redlintu16.crosssound.sdPlugin
streamdeck restart com.redlintu16.crosssound
During development: npm run watch rebuilds and restarts the plugin on save.
Then, in the SCSC repo, rebuild the desktop app so the bridge is included and launch it:
cd ..
npm run build && npm run vmp-sign && electron .
Drag the CrossSound actions onto your Stream Deck from the CrossSound category.
Notes
- Icons are solid-colour placeholders generated by
scripts/gen-icons.mjs. Replace them with real artwork by dropping PNGs at the sameimgs/...paths (keep the@2xvariants: action-list icons 20/40px, key images 72/144px). - The Now Playing touch-strip action requires a Stream Deck +. The four buttons work on any Stream Deck.
- Bridge port is
52124(the OAuth callback server uses52123). Change it in bothotherservices/streamdeck.jsandsrc/crosssound.tsif it clashes. - Volume step is
0.02per tick — tweakVOLUME_STEPinsrc/actions/now-playing.ts.