Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Streaming Workflows

Complete OBS Studio and streaming platform integration using gamepads as free Stream Deck alternatives.

Overview

Turn your Xbox or PlayStation controller into a professional streaming control surface. Save $150-300 by repurposing existing gamepad hardware instead of buying a Stream Deck.

What You’ll Learn:

  • Scene switching and source control
  • Audio mixing with velocity-sensitive fading
  • Multi-platform setup (OBS + Discord + Spotify)
  • Emergency controls (instant mute, BRB scene)
  • Advanced: Button chords for complex actions

Quick Start: Basic OBS Control

Essential streaming controls on a gamepad.

[device]
name = "Basic Streaming Setup"
auto_connect = true

[[modes]]
name = "Streaming"
color = "purple"

# Face Buttons: Core Controls
[[modes.mappings]]
description = "A Button: Start/Stop Recording"
[modes.mappings.trigger]
type = "GamepadButton"
button = 128
[modes.mappings.action]
type = "Keystroke"
keys = "r"
modifiers = ["ctrl", "shift"]

[[modes.mappings]]
description = "B Button: Mute/Unmute Microphone"
[modes.mappings.trigger]
type = "GamepadButton"
button = 129
[modes.mappings.action]
type = "Keystroke"
keys = "m"
modifiers = ["ctrl", "shift"]

[[modes.mappings]]
description = "X Button: Scene 1 (Gameplay)"
[modes.mappings.trigger]
type = "GamepadButton"
button = 130
[modes.mappings.action]
type = "Keystroke"
keys = "1"
modifiers = ["ctrl", "shift"]

[[modes.mappings]]
description = "Y Button: Scene 2 (Webcam)"
[modes.mappings.trigger]
type = "GamepadButton"
button = 131
[modes.mappings.action]
type = "Keystroke"
keys = "2"
modifiers = ["ctrl", "shift"]

Setup Required: Configure OBS hotkeys to match (File → Settings → Hotkeys)


Professional Streaming Setup

Complete Xbox/PlayStation controller configuration for OBS + Discord + Spotify.

Hardware

  • Xbox Controller: Xbox One, Series X/S ($30-60)
  • PlayStation Controller: DualShock 4, DualSense ($30-70)
  • Cost vs Stream Deck: $30-70 vs $150-300 (save $120-230!)

Full Configuration

[device]
name = "Pro Streaming Controller"
auto_connect = true

[advanced_settings]
hold_threshold_ms = 1000
double_tap_timeout_ms = 300

[[modes]]
name = "Live Streaming"
color = "red"

# ========== Scene Switching ==========
# Face Buttons: Primary Scenes
[[modes.mappings]]
description = "A: Gameplay Scene"
[modes.mappings.trigger]
type = "GamepadButton"
button = 128
[modes.mappings.action]
type = "Keystroke"
keys = "1"
modifiers = ["ctrl", "shift"]

[[modes.mappings]]
description = "B: Webcam Scene"
[modes.mappings.trigger]
type = "GamepadButton"
button = 129
[modes.mappings.action]
type = "Keystroke"
keys = "2"
modifiers = ["ctrl", "shift"]

[[modes.mappings]]
description = "X: Desktop Scene"
[modes.mappings.trigger]
type = "GamepadButton"
button = 130
[modes.mappings.action]
type = "Keystroke"
keys = "3"
modifiers = ["ctrl", "shift"]

[[modes.mappings]]
description = "Y: BRB Scene"
[modes.mappings.trigger]
type = "GamepadButton"
button = 131
[modes.mappings.action]
type = "Keystroke"
keys = "4"
modifiers = ["ctrl", "shift"]

# ========== Audio Control ==========
# D-Pad: Volume & Music
[[modes.mappings]]
description = "D-Pad Up: Desktop Volume Up"
[modes.mappings.trigger]
type = "GamepadButton"
button = 132
[modes.mappings.action]
type = "VolumeControl"
operation = "Up"

[[modes.mappings]]
description = "D-Pad Down: Desktop Volume Down"
[modes.mappings.trigger]
type = "GamepadButton"
button = 133
[modes.mappings.action]
type = "VolumeControl"
operation = "Down"

[[modes.mappings]]
description = "D-Pad Left: Previous Track (Spotify)"
[modes.mappings.trigger]
type = "GamepadButton"
button = 134
[modes.mappings.action]
type = "Keystroke"
keys = "Previous"

[[modes.mappings]]
description = "D-Pad Right: Next Track (Spotify)"
[modes.mappings.trigger]
type = "GamepadButton"
button = 135
[modes.mappings.action]
type = "Keystroke"
keys = "Next"

# ========== Recording & Streaming ==========
# Shoulders: Record & Stream
[[modes.mappings]]
description = "LB: Toggle Recording"
[modes.mappings.trigger]
type = "GamepadButton"
button = 136
[modes.mappings.action]
type = "Keystroke"
keys = "r"
modifiers = ["ctrl", "shift"]

[[modes.mappings]]
description = "RB: Toggle Streaming"
[modes.mappings.trigger]
type = "GamepadButton"
button = 137
[modes.mappings.action]
type = "Keystroke"
keys = "s"
modifiers = ["ctrl", "shift"]

# ========== Velocity-Sensitive Audio Fading ==========
# Triggers: Audio Mixing
[[modes.mappings]]
description = "LT: Fade Out Desktop Audio"
[modes.mappings.trigger]
type = "GamepadTrigger"
trigger = 132
threshold = 64
[modes.mappings.action]
type = "Sequence"
actions = [
    { VolumeControl = { operation = "Down" } },
    { Delay = { duration_ms = 50 } },
    { VolumeControl = { operation = "Down" } },
    { Delay = { duration_ms = 50 } },
    { VolumeControl = { operation = "Down" } }
]

[[modes.mappings]]
description = "RT: Fade In Desktop Audio"
[modes.mappings.trigger]
type = "GamepadTrigger"
trigger = 133
threshold = 64
[modes.mappings.action]
type = "Sequence"
actions = [
    { VolumeControl = { operation = "Up" } },
    { Delay = { duration_ms = 50 } },
    { VolumeControl = { operation = "Up" } },
    { Delay = { duration_ms = 50 } },
    { VolumeControl = { operation = "Up" } }
]

# ========== Emergency Controls ==========
# Button Chords: Emergency Actions
[[modes.mappings]]
description = "LB+RB: Mute All (Mic + Desktop)"
[modes.mappings.trigger]
type = "GamepadButtonChord"
buttons = [136, 137]
timeout_ms = 50
[modes.mappings.action]
type = "Sequence"
actions = [
    { Keystroke = { keys = "m", modifiers = ["ctrl", "shift"] } },  # Mute mic
    { VolumeControl = { operation = "Mute" } }  # Mute desktop
]

[[modes.mappings]]
description = "LT+RT: Emergency BRB Scene"
[modes.mappings.trigger]
type = "GamepadButtonChord"
buttons = [138, 139]
timeout_ms = 50
[modes.mappings.action]
type = "Keystroke"
keys = "9"
modifiers = ["ctrl", "shift"]  # Scene 9 = Emergency BRB

# ========== Source Control ==========
# Menu Buttons: Source Visibility
[[modes.mappings]]
description = "Start: Toggle Webcam Visibility"
[modes.mappings.trigger]
type = "GamepadButton"
button = 140
[modes.mappings.action]
type = "Keystroke"
keys = "w"
modifiers = ["ctrl", "shift"]

[[modes.mappings]]
description = "Select: Screenshot"
[modes.mappings.trigger]
type = "GamepadButton"
button = 141
[modes.mappings.action]
type = "Keystroke"
keys = "3"
modifiers = ["cmd", "shift"]

OBS Hotkey Setup

Configure these hotkeys in OBS (File → Settings → Hotkeys):

ActionHotkeyController Button
Scene 1Ctrl+Shift+1A
Scene 2Ctrl+Shift+2B
Scene 3Ctrl+Shift+3X
Scene 4Ctrl+Shift+4Y
Start RecordingCtrl+Shift+RLB
Start StreamingCtrl+Shift+SRB
Mute MicrophoneCtrl+Shift+MB (double-tap)
Toggle WebcamCtrl+Shift+WStart

Multi-Platform Integration

Discord Integration

# Push-to-Talk
[[modes.mappings]]
description = "LT (Hold): Push-to-Talk Discord"
[modes.mappings.trigger]
type = "GamepadTriggerHold"
trigger = 132
threshold = 64
duration_ms = 100
[modes.mappings.action]
type = "Keystroke"
keys = "grave"  # Backtick key
modifiers = ["ctrl"]

# Mute/Deafen
[[modes.mappings]]
description = "Select (Double-Tap): Toggle Deafen"
[modes.mappings.trigger]
type = "GamepadButtonDoubleTap"
button = 141
timeout_ms = 300
[modes.mappings.action]
type = "Keystroke"
keys = "d"
modifiers = ["ctrl", "shift"]

Spotify Control

# Music Playback
[[modes.mappings]]
description = "D-Pad Center: Play/Pause Spotify"
[modes.mappings.trigger]
type = "GamepadButton"
button = 142  # Guide/Home button
[modes.mappings.action]
type = "Keystroke"
keys = "PlayPause"

Advanced: Instant Replay & Highlights

# Save Last 30 Seconds (Instant Replay)
[[modes.mappings]]
description = "RT (Hold 2s): Save Instant Replay"
[modes.mappings.trigger]
type = "GamepadTriggerHold"
trigger = 133
threshold = 64
duration_ms = 2000
[modes.mappings.action]
type = "Keystroke"
keys = "i"
modifiers = ["ctrl", "shift"]

# Add Stream Marker
[[modes.mappings]]
description = "Y (Hold): Add Stream Marker"
[modes.mappings.trigger]
type = "GamepadButtonHold"
button = 131
duration_ms = 1000
[modes.mappings.action]
type = "Keystroke"
keys = "k"
modifiers = ["ctrl", "shift"]

Troubleshooting

OBS Hotkeys Not Working

  • Problem: Button presses don’t trigger OBS actions
  • Solution: Ensure OBS hotkeys match exactly (case-sensitive)
  • Check: Run OBS as administrator (Windows) or grant permissions (macOS)

Audio Fading Too Fast/Slow

  • Problem: Volume changes too abruptly
  • Solution: Adjust delay duration in Sequence actions (increase from 50ms to 100ms+)

Button Chords Not Detecting

  • Problem: Pressing LB+RB doesn’t trigger chord action
  • Solution: Reduce chord timeout_ms (try 30ms instead of 50ms)

Cost Comparison

SetupHardwareCostSavings
ConductorXbox Controller (owned)$0$150-300
ConductorNew Xbox Controller$30-60$90-270
ConductorPlayStation DualSense$60-70$80-240
Stream DeckStream Deck Mini$79.99-
Stream DeckStream Deck MK.2$149.99-
Stream DeckStream Deck XL$249.99-

Bottom Line: Reusing an existing gamepad = $150-300 saved, same functionality.


Next Steps