adding OBS support

This commit is contained in:
lwoodard
2026-04-16 15:23:46 -06:00
parent ae1ab88d4a
commit 6f2290bd6c
5 changed files with 326 additions and 23 deletions

View File

@@ -56,3 +56,76 @@ modules:
exec: |
curl -s -X POST https://slack.com/api/dnd.endSnooze \
-H "Authorization: Bearer {{env "SLACK_TOKEN"}}"
# OBS Studio — media player and streaming control via obs-cmd
#
# Requires: obs-cmd (https://github.com/grigio/obs-cmd)
# macOS: brew install grigio/obs-cmd/obs-cmd
# Linux: cargo install obs-cmd (or download binary from GitHub releases)
#
# OBS WebSocket must be enabled: Tools → WebSocket Server Settings (on by default in OBS 28+)
#
# Add to ~/.config/streamdeck-go/.env:
# OBS_WEBSOCKET_PASSWORD=your-password
# OBS_HOST=localhost (optional, default: localhost)
# OBS_PORT=4455 (optional, default: 4455)
obs:
play:
params:
source: "Media Source"
exec: |
/usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} media-input play "{{.source}}"
pause:
params:
source: "Media Source"
exec: |
/usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} media-input pause "{{.source}}"
stop:
params:
source: "Media Source"
exec: |
/usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} media-input stop "{{.source}}"
restart:
params:
source: "Media Source"
exec: |
/usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} media-input restart "{{.source}}"
toggle_record:
exec: |
/usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} recording toggle
toggle_record_pause:
exec: |
/usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} recording toggle-pause
is_recording_paused:
exec: |
/usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} recording status
toggle_stream:
exec: |
/usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} streaming toggle
scene_switch:
params:
scene: "Scene 1"
exec: |
/usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} scene switch "{{.scene}}"
toggle_mute:
params:
source: "Mic/Aux"
exec: |
/usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} input toggle-mute "{{.source}}"
is_recording:
exec: |
/usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} recording status
is_streaming:
exec: |
/usr/local/bin/obs-cmd --websocket obsws://{{envDefault "OBS_HOST" "localhost"}}:{{envDefault "OBS_PORT" "4455"}}/{{env "OBS_WEBSOCKET_PASSWORD"}} streaming status

View File

@@ -100,6 +100,15 @@ func funcMap() template.FuncMap {
// Use this to keep secrets (tokens, passwords) out of modules.yaml.
"env": os.Getenv,
// envDefault returns the value of an environment variable, or
// fallback if the variable is empty/unset.
"envDefault": func(key, fallback string) string {
if v := os.Getenv(key); v != "" {
return v
}
return fallback
},
// expiry converts a duration string like "+1h" to a Unix epoch timestamp string.
// Pass "" or "0" to get "0" (no expiry). Supports Go duration syntax (e.g. "30m", "2h").
// Note: time.ParseDuration does not support days (d) or weeks (w).