← Stream Deck setup

Stream Deck controls

Choose a command, learn the dial gestures, or run your own Event Flow workflow.

Connect once

  1. Download the plugin and open the .streamDeckPlugin file to install it.
  2. Keep SSApp or the Social Stream Ninja Chrome extension running and enabled. Copy your session ID from Stream Deck Setup in SSApp, or Settings in the extension.
  3. In the Stream Deck app, drag Setup onto a key and select it. Expand Setup and connection and paste your ID or full overlay URL.
  4. Keep Peer-to-peer (default) selected. Enter your session password if you use one, then choose Test Connection. Look for Online on the Setup key.
  5. Add a Preset Command key, choose a command, and fill in any required value. Press the key to run it.

All SSN actions and profiles share one connection. Keep your session ID and password private.

WebSocket and full overlay URLs

For WebSocket mode, enable SSN's remote API control and select WebSocket in the plugin. Keep the default host io.socialstream.ninja, TLS on, send channel 1 and listen channel 2 unless you use a custom server.

Pasting a full overlay URL can also import its password and connection mode. Check those settings before testing.

Choose an action

ActionPlace it onHow it works
SetupKeyHolds the shared connection settings. The key only shows connection status.
Preset CommandKeyChoose a command, fill in any required value, then press once.
Custom CommandKeySend any API action with an optional target and value (JSON for objects, arrays and booleans).
Timer DialStream Deck + dialAdjust, start and pause SSN's shared stream timer.
Chat ReviewStream Deck + dialBrowse recent chat, pin a message, and feature pinned messages.

No dials? Timer presets work on regular keys. Multi Actions don’t wait for delayed Event Flow workflows.

Control a desktop app source

  1. Add a Preset Command key and choose a desktop source command, such as Start source or Set mute.
  2. Choose the source by name. Stopped sources remain available so you can start them again.
  3. For Set mute, choose Mute or Unmute. For Set visibility, choose Show or Hide. Visibility controls the source window in the desktop app.

Use Refresh sources after changing sources in SSApp. If a saved source is unavailable, its value stays saved until you choose another. Use Edit ID or JSON for a manual source ID or advanced options.

The key preview shows the icon and title. Enter a short custom title to distinguish multiple sources; line breaks are supported.

Timer Dial gestures

Turn

Add or subtract one step. Default ±10 seconds.

Hold down and turn

Six steps per click. Default ±1 minute. Doesn’t start or pause.

Press

Start or pause the timer.

Tap the screen

Refresh the display. Doesn’t start or pause.

Hold the screen

Reset to the starting duration and pause.

Example: start at 5:00. Turn right once → 5:10. Hold the dial down and turn right once → 6:10. Press/release → countdown starts. Press/release again → pause. Hold the screen → 5:00.

Set Seconds per turn in the inspector. All Timer Dials share one SSN timer; add the SSN timer overlay to OBS to show it.

Chat Review: browse, pin, feature

  1. Open the default Social Stream dock with the same session. In WebSocket mode also enable Send chat messages to API server in SSN; chat uses channel 4. P2P receives the normal feed.
  2. Turn counterclockwise for older messages; clockwise for newer messages. The display's position/count tells you where you are.
  3. Press the dial to pin the displayed message in the dock.
  4. Tap the touchscreen above it to feature the next pinned message. This can be different from the message you are reviewing if the dock already has pinned messages.
  5. Hold that touchscreen area to unpin the reviewed message.

Only messages received while Chat Review is visible are listed. Empty? Chat relay may be off, or nothing new has arrived.

Run a custom Event Flow workflow

  1. Open Event Flow in SSN and create a dedicated flow.
  2. Add Run from Stream Deck / API from Stream Deck & API. Set the trigger name to intermission.
  3. Connect it to an action, such as Show Text, and set the text. Save and enable the flow.
  4. For visual/audio actions, open the Flow Actions overlay with the same session; add that URL as an OBS Browser Source for your audience.
  5. Add a Preset Command key, select Event Flow workflows → Run workflow, then Refresh workflows and choose your saved flow.
  6. Press once. A check mark acknowledges that SSN accepted the run. Delays and external integrations continue afterward.

After renaming, disabling or deleting the trigger, refresh and reselect it.

Advanced: pass values or use the API

In the Value field:

{"trigger":"intermission","flowId":"YOUR_FLOW_ID","data":{"name":"Back in five minutes"}}

Use {meta.workflow.data.name} in an action's text template. Omit flowId to run every enabled flow with that exact trigger name. Names are case-sensitive. Each press starts a run; add a Rate Limiter (THROTTLE) node if you want a cooldown. A delayed run can overlap a later press.

API clients use the same connection: {"action":"triggerWorkflow","value":{"trigger":"intermission"}}. getWorkflowTriggers lists enabled, saved triggers. Older hosts hide these presets until their capabilities advertise support.

Event Flow and API examples

What the key shows

Read the icons

The large symbol is the feature; the small badge is the operation.

Find a command

The plugin only lists commands your SSApp or extension supports. Desktop app commands need SSApp.

IconCommandValue / default
Product State
getCommerceState
No value needed
Run Workflow
triggerWorkflow
Trigger name or workflow JSON
List Workflows
getWorkflowTriggers
No value needed
Open Giveaway
startgiveaway
Giveaway ID/config JSON
{"giveawayId":"default"}
Close Giveaway
closegiveaway
Giveaway ID JSON
{"giveawayId":"default"}
Draw Giveaway
drawgiveaway
Giveaway ID JSON
{"giveawayId":"default"}
Cancel & Refund Giveaway
cancelgiveaway
Giveaway ID JSON
{"giveawayId":"default"}
New Giveaway Round
resetgiveaway
Giveaway ID JSON
{"giveawayId":"default"}
Giveaway State
getgiveawaystate
Giveaway ID JSON
{"giveawayId":"default"}
Show Product
commerceShow
Saved product URL (optional)
Next Product
commerceNext
Seconds (0 = until changed)
0
Hide Products
commerceHide
Seconds (0 = until changed)
0
Resume Products
commerceResume
No value needed
Next In Queue
nextInQueue
No value needed
Clear Overlay
clearOverlay
No value needed
Clear Dock Messages
clearDock
No value needed
Clear Messages
clear
No value needed
Clear All Messages
clearAll
No value needed
Clear Saved History
clearHistory
Type confirm
confirm
Start Credits
creditsStart
No value needed
Preview Credits
creditsPreview
No value needed
Test Credits
creditsTest
No value needed
Reset Collected Credits
creditsReset
No value needed
Reset Leaderboard
resetleaderboard
No value needed
Queue Size
getQueueSize
No value needed
Send Chat
sendChat
Message
Hello from Stream Deck
Send Encoded Chat
sendEncodedChat
Encoded message
Hello%20from%20Stream%20Deck
Pin Dock Message
pin
Message ID or JSON message
Unpin Dock Message
unpin
Message ID
Next Pinned Message
nextPinned
No value needed
Draw Mode
drawmode
true, false, or toggle
toggle
Remove Waitlist Entry
removefromwaitlist
Entry number
1
Highlight Waitlist Entry
highlightwaitlist
Entry number
1
Reset Waitlist
resetwaitlist
No value needed
Stop Waitlist Entries
stopentries
No value needed
Start Waitlist Entries
startentries
No value needed
Open Waitlist Entries
openentries
No value needed
Resume Waitlist Entries
resumeentries
No value needed
Set Waitlist Message
waitlistmessage
Message
Type !join to enter!
Set Waitlist Message
setwaitlistmessage
Message
Type !join to enter!
Download Waitlist
downloadwaitlist
No value needed
Select Winner
selectwinner
Winner count
1
Start Timer
starttimer
No value needed
Pause Timer
pausetimer
No value needed
Toggle Timer
toggletimer
No value needed
Reset Timer
resettimer
Preset value included
{"confirm":true}
Add Timer Time
timeradd
Seconds
30
Subtract Timer Time
timersubtract
Seconds
30
Set Timer
settimer
Timer JSON
{"seconds":300}
Timer State
gettimerstate
No value needed
Load Poll Preset
loadpoll
{"pollId":"..."}
Set Poll Settings
setpollsettings
Poll settings JSON
Poll Presets
getpollpresets
No value needed
Create Poll
createpoll
Poll definition JSON
Reset Poll
resetpoll
No value needed
Close Poll
closepoll
No value needed
Start Map
startmap
No value needed
Pause Map
pausemap
No value needed
Reset Map
resetmap
No value needed
Desktop App Sources
getSources
Desktop app
No value needed
Desktop App Source
getSource
Desktop app
Choose a source
Add Source
addSource
Desktop app
Source JSON
Update Source
updateSource
Desktop app
{"sourceId":"...","updates":{...}}
Remove Source
removeSource
Desktop app
{"sourceId":"...","confirm":true}
Start Source
startSource
Desktop app
Choose a source
Stop Source
stopSource
Desktop app
Choose a source
Restart Source
restartSource
Desktop app
Choose a source
Start All Sources
startAllSources
Desktop app
Filter JSON
{}
Stop All Sources
stopAllSources
Desktop app
Filter JSON
{"confirm":true}
Restart All Sources
restartAllSources
Desktop app
Filter JSON
{"confirm":true}
Set Source Mute
setSourceMute
Desktop app
Choose a source, then Mute or Unmute
Toggle Source Mute
toggleSourceMute
Desktop app
Choose a source
Set Source Visibility
setSourceVisibility
Desktop app
Choose a source, then Show or Hide
Toggle Source Visibility
toggleSourceVisibility
Desktop app
Choose a source
Set Connection Mode
setSourceConnectionMode
Desktop app
{"sourceId":"...","mode":"websocket"}
Desktop App Settings
getSettings
Desktop app
No value needed
Update Desktop App Settings
updateSettings
Desktop app
Settings JSON

When a command does nothing

  1. Check that Setup says Online and uses the same session ID and password as SSN.
  2. Check the required destination is running: dock for queues/pins, Credits page for credits, Flow Actions for media/OBS, writable source for Send Chat, enabled saved products for commerce.
  3. For workflows, save and enable the flow, confirm the trigger name, and refresh the picker. The flow needs a Run from Stream Deck / API trigger.
  4. Read the selected action's Help and diagnostics. After a timeout, check the destination before pressing again; a lost acknowledgement does not prove failure.
  5. If a preset is unavailable, update SSApp or the extension and the Stream Deck plugin, then test the connection again.

HTTP fallback is optional in WebSocket mode. It can help when the socket connects without relaying responses. Do not change default channels unless your receiver uses the same custom routing.

Report a problem with the action, expected result, observed result and sanitized diagnostics. Do not share session IDs, passwords or private source URLs.