Stream Deck
Connect your Elgato Stream Deck to trigger FaustBot actions with physical buttons, update button icons dynamically, and switch profiles.
Overview
FaustBot integrates with Elgato Stream Deck for hardware-based action control:
Button Triggers
Trigger actions on button press.
Dynamic Icons
Update button images on the fly.
Profile Switching
Switch between Stream Deck profiles.
Page Navigation
Navigate to specific pages.
Multi-Device
Support for multiple Stream Decks.
State Feedback
Show status on button icons.
Setup
Connect Stream Deck
Install the FaustBot plugin for Stream Deck or use the built-in integration.
Install Stream Deck Software
Make sure you have the Elgato Stream Deck software installed and your Stream Deck is connected and working.
Enable in FaustBot
In FaustBot, go to Integrations → Stream Deck. Enable the integration. FaustBot will detect connected Stream Deck devices.
Configure Buttons
In Stream Deck software, add the FaustBot Action to a button. Select which FaustBot action to trigger when the button is pressed.
Test Button Press
Press the configured button on your Stream Deck. The action should trigger in FaustBot and you'll see it in the action log.
Multiple Stream Decks
FaustBot supports multiple Stream Deck devices. Each device is identified by its serial number. You can target specific devices in your actions and scripts.
Triggers
Respond to Stream Deck events:
Button Pressed A Stream Deck button was pressedButton Released A Stream Deck button was releasedButton Long Press Button held for extended timeDial Rotated Stream Deck+ dial was turnedDial Pressed Stream Deck+ dial was pressedTouch Tap Stream Deck+ touchscreen tappedProfile Changed Stream Deck profile switchedDevice Connected Stream Deck was connectedDevice Disconnected Stream Deck was disconnectedTrigger Variables
These variables are available in your actions:
%sdDeviceId% Device serial number%sdDeviceName% Device friendly name%sdButtonRow% Button row (0-indexed)%sdButtonCol% Button column (0-indexed)%sdButtonIndex% Button index (0-indexed)%sdActionId% FaustBot action UUID%sdProfileName% Current profile name%sdDialValue% Dial rotation value (+/-)Effects
Button Control
Set Button Image
Change button icon.
Set Button Title
Change button text.
Set Button State
Toggle button state.
Flash Button
Flash button to get attention.
Profile & Navigation
Switch Profile
Change to a different profile.
Go to Page
Navigate to a profile page.
Next Page
Go to next page.
Previous Page
Go to previous page.
Device Control
Set Brightness
Adjust screen brightness.
Sleep
Put Stream Deck to sleep.
Wake
Wake up Stream Deck.
Scripting API
Control Stream Deck from your scripts:
Button Updates
# Set button image from file
CPH.StreamDeckSetImage(row=0, col=0, imagePath="/path/to/icon.png")
# Set button image from URL
CPH.StreamDeckSetImageFromUrl(row=0, col=0, url="https://example.com/icon.png")
# Set button title
CPH.StreamDeckSetTitle(row=1, col=2, title="LIVE")
# Set title with styling
CPH.StreamDeckSetTitle(
row=1, col=2,
title="LIVE",
fontSize=14,
fontColor="#FF0000",
backgroundColor="#000000"
)
# Flash a button to get attention
CPH.StreamDeckFlashButton(row=0, col=0, color="#FF0000", count=3)State Management
# Get current button state
state = CPH.StreamDeckGetState(row=0, col=0)
CPH.LogInfo(f"Button state: {state}")
# Set button state (for toggle buttons)
CPH.StreamDeckSetState(row=0, col=0, state=1) # On
CPH.StreamDeckSetState(row=0, col=0, state=0) # Off
# Update button based on condition
is_muted = CPH.ObsGetMute("Mic/Aux")
if is_muted:
CPH.StreamDeckSetImage(row=0, col=0, imagePath="/icons/mic_muted.png")
CPH.StreamDeckSetTitle(row=0, col=0, title="MUTED")
else:
CPH.StreamDeckSetImage(row=0, col=0, imagePath="/icons/mic_on.png")
CPH.StreamDeckSetTitle(row=0, col=0, title="MIC ON")Profile & Page Navigation
# Switch to a profile
CPH.StreamDeckSwitchProfile("Gaming")
# Switch profile on specific device
CPH.StreamDeckSwitchProfile("Gaming", deviceId="ABC123")
# Navigate to a specific page
CPH.StreamDeckGoToPage(2)
# Next/previous page
CPH.StreamDeckNextPage()
CPH.StreamDeckPreviousPage()
# Get current profile
profile = CPH.StreamDeckGetCurrentProfile()
CPH.LogInfo(f"Current profile: {profile}")Device Control
# Set brightness (0-100)
CPH.StreamDeckSetBrightness(75)
# Dim during BRB
CPH.StreamDeckSetBrightness(25)
CPH.SendMessage("Be right back!")
# Get connected devices
devices = CPH.StreamDeckGetDevices()
for device in devices:
CPH.LogInfo(f"Device: {device['name']} ({device['id']})")
CPH.LogInfo(f" Model: {device['model']}")
CPH.LogInfo(f" Rows: {device['rows']}, Cols: {device['cols']}")
# Sleep/wake device
CPH.StreamDeckSleep()
CPH.StreamDeckWake()Dynamic Status Buttons
# Update viewer count on button
viewer_count = CPH.GetViewerCount()
CPH.StreamDeckSetTitle(
row=2, col=0,
title=f"{viewer_count}",
fontSize=18
)
# Update follower goal progress
current = CPH.GetFollowerCount()
goal = 1000
percent = int((current / goal) * 100)
CPH.StreamDeckSetTitle(
row=2, col=1,
title=f"{percent}%\n{current}/{goal}"
)
# Show stream uptime
uptime = CPH.GetStreamUptime()
hours = uptime // 3600
mins = (uptime % 3600) // 60
CPH.StreamDeckSetTitle(
row=2, col=2,
title=f"{hours}h {mins}m"
)Dial Control (Stream Deck+)
# Handle dial rotation from trigger
dial_value = int(CPH.GetArg("sdDialValue"))
# Use dial to control volume
current_vol = CPH.ObsGetVolume("Desktop Audio")
new_vol = max(0, min(1, current_vol + (dial_value * 0.05)))
CPH.ObsSetVolume("Desktop Audio", new_vol)
# Update dial display
CPH.StreamDeckSetDialTitle(index=0, title=f"{int(new_vol * 100)}%")See the full API reference for all available Stream Deck methods.