Integration

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.

1

Install Stream Deck Software

Make sure you have the Elgato Stream Deck software installed and your Stream Deck is connected and working.

2

Enable in FaustBot

In FaustBot, go to Integrations → Stream Deck. Enable the integration. FaustBot will detect connected Stream Deck devices.

Screenshot: Stream Deck settings
3

Configure Buttons

In Stream Deck software, add the FaustBot Action to a button. Select which FaustBot action to trigger when the button is pressed.

4

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 pressed
Button Released A Stream Deck button was released
Button Long Press Button held for extended time
Dial Rotated Stream Deck+ dial was turned
Dial Pressed Stream Deck+ dial was pressed
Touch Tap Stream Deck+ touchscreen tapped
Profile Changed Stream Deck profile switched
Device Connected Stream Deck was connected
Device Disconnected Stream Deck was disconnected

Trigger 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

Update button images and titles
# 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

Manage button states
# 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 profiles and pages
# 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

Control device settings
# 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

Display live stats on 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
# 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.