Skip to content

Repository files navigation

Stream Deck Audio Recorder

A Stream Deck plugin that records audio from your microphone with a single press of a key or dial.

Platform Stream Deck License

plugin01 plugin02

Features

  • Keypad action — one press to start, one press to stop. The icon flips between idle and recording states.
  • Dedicated dial (encoder) action for Stream Deck + / Stream Deck + XL
    • Turn the dial to cycle through your audio input devices on the fly
    • Live elapsed-time timer and recording status on the touchscreen
  • Elapsed-time timer displayed on the key button during recording
  • Pick any audio input — USB microphones, audio interfaces, the built-in mic, anything macOS exposes.
  • Configurable save folder — defaults to ~/Desktop.
  • Clean WAV output — 16-bit PCM, 48 kHz, mono.
  • Universal native helper — runs on Apple Silicon and Intel.

Stream Deck button behavior

Capture d’écran 2026-04-12 à 08 14 38 Capture d’écran 2026-04-12 à 08 14 45

Stream Deck dial (Stream Deck + and Stream Deck + XL only) behavior

Capture d’écran 2026-04-12 à 08 14 16 Capture d’écran 2026-04-12 à 08 14 25

Stream Deck + / + XL users get the best experience: press the dial to start/stop recording, and rotate it to switch between audio input devices without opening any settings — the current device name and recording timer update live on the touchscreen display.

Capture d’écran 2026-04-12 à 08 15 13

Requirements

  • macOS 10.15 (Catalina) or later
  • Stream Deck application 6.5 or later
  • Node.js 20+ — only required if you build from source

Install

Option 1: Download a release (recommended)

Download the latest .streamDeckPlugin from the Releases page and double-click it. The Stream Deck app will install and load the plugin automatically.

Option 2: Build from source

See Development below.

First-run permission: the first time you record, macOS will ask for Microphone permission. Grant it under System Settings → Privacy & Security → Microphone. The permission is requested by the helper app StreamDeckAudioRecorder, not by Stream Deck itself.

Usage

  1. Open the Stream Deck app and find Audio Recorder in the action drawer.
  2. Drag Record Audio onto a key, or Record Audio (Dial) onto a dial.
  3. Open the action's Property Inspector and:
    • Pick an input device from the dropdown.
    • Pick a save folder (optional — defaults to your Desktop).
  4. Press the key (or push the dial) to start recording. Press again to stop.

Recordings are saved as <save folder>/recording-YYYY-MM-DDTHH-MM-SS.wav.

Configuration

Setting Default Notes
Input device System default Per-action. The dial action lets you cycle devices by rotating.
Save to ~/Desktop Stored globally — shared across every Audio Recorder action.

Development

git clone https://github.com/HypeUpErik/StreamDeckAudioRecorder.git
cd StreamDeckAudioRecorder
npm install
npm run build      # TypeScript -> com.erik.streamdeck-audio-recorder.sdPlugin/bin/plugin.js
npm run link       # registers the plugin with Stream Deck
npm run watch      # rebuilds and restarts the plugin on every save
npm run validate   # Elgato CLI sanity check on the bundle
npm run pack       # produces a distributable .streamDeckPlugin

The compiled bin/plugin.js is gitignored, so a fresh clone needs npm run build before npm run link or npm run pack will work.

Rebuilding the native helper (optional)

The Swift helper that actually captures audio (StreamDeckAudioRecorder.app) is precompiled as a universal binary and committed to the repo. You only need to rebuild it if you edit com.erik.streamdeck-audio-recorder.sdPlugin/bin/record.swift.

SD_PLUGIN="com.erik.streamdeck-audio-recorder.sdPlugin"
APP="$SD_PLUGIN/bin/StreamDeckAudioRecorder.app"

swiftc -O -target arm64-apple-macosx10.15 \
  -o /tmp/StreamDeckAudioRecorder-arm64 "$SD_PLUGIN/bin/record.swift" \
  -framework AVFoundation -framework CoreAudio

swiftc -O -target x86_64-apple-macosx10.15 \
  -o /tmp/StreamDeckAudioRecorder-x86_64 "$SD_PLUGIN/bin/record.swift" \
  -framework AVFoundation -framework CoreAudio

lipo -create /tmp/StreamDeckAudioRecorder-arm64 /tmp/StreamDeckAudioRecorder-x86_64 \
  -output "$APP/Contents/MacOS/StreamDeckAudioRecorder"

codesign --force --deep --sign - "$APP"

How it works

The plugin has two halves:

  • A Node.js plugin (src/, compiled to bin/plugin.js) that talks to Stream Deck via @elgato/streamdeck and handles the UI side: Property Inspector, key states, dial layout, device list.
  • A native macOS helper (StreamDeckAudioRecorder.app, written in Swift, source in bin/record.swift) that owns the actual AVFoundation recording pipeline. The plugin launches it with open -a so it runs in its own process and is the one that holds the macOS Microphone permission.

When you press record, the helper writes its PID to /tmp/com.erik.streamdeck-audio-recorder.pid. Stopping a recording calls StreamDeckAudioRecorder --stop, which reads that PID and sends SIGINT so the WAV header is finalized cleanly.

Troubleshooting

  • Pressing record does nothing and the icon flips back to idle. macOS denied microphone permission. Open System Settings → Privacy & Security → Microphone and enable StreamDeckAudioRecorder. If it is not listed or still doesn't work, reset and try again:
    tccutil reset Microphone
  • My device doesn't appear in the dropdown. Unplug and replug the device, then click the dropdown again — it re-queries on open.
  • A recording got stuck and the icon is still red. Force-stop the helper:
    pkill -INT -x StreamDeckAudioRecorder

License

MIT © HypeUpErik

Acknowledgements

Built on the Elgato Stream Deck SDK.

About

Record any audio source in just one Stream Deck click

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages