System Audio Recorder
Recording Whatever Your PC Is Playing Straight Into a ComfyUI Workflow
- audio
- wav_path
- mp3_path
- duration
What this thing actually is
Every other audio node in ComfyUI generates audio - Chatterbox for a voice, ACE-Step for music, MMAudio for foley. System Audio Recorder doesn't. It taps whatever your machine is already playing (Spotify, a YouTube tab, a DAW) and hands it to the graph as a standard ComfyUI AUDIO: drive a lip-sync pass with it, mux it into a saved video, or just keep the take next to a track you're building.
That's narrower than it sounds. Audio in ComfyUI is a retrofitted layer - good models, plumbing held together by whichever transformers build didn't break this week - and this is one of the few pieces of it that isn't fighting Python to do its job. Manual, button-driven, no "record when the sampler hits" magic.
How it works
The backend is SoundCard - PulseAudio/PipeWire monitor devices on Linux, WASAPI loopback on Windows. Pick an output device, hit Start, and capture begins before Eclipse submits the prompt; execution then parks at this node while the recorder keeps running. Stop unblocks the queue with the audio attached. Closer to a phone call than a node, and only one recording can be live across the whole ComfyUI process.
Capture is fixed at 48 kHz stereo, 16-bit, streamed to a private WAV under .eclipse-system-audio-staging instead of held in RAM, so length is disk-limited. On Stop, Eclipse writes the WAV (and optionally MP3, via PyAV's bundled libmp3lame - no external ffmpeg) and decodes the selected PCM range into audio.
The retained private source is the good part. The capture survives after Stop while the node exists, so you can change format, prefix, or trim threshold and hit Update Output for another version of the same take. No re-recording. Changed configs get fresh collision-safe filenames so earlier takes stay put, and an identical retry after a queue failure reuses the prepared result. The source is deleted on node deletion, replacement, or shutdown; published files always survive.
Trimming works in 10 ms RMS windows per channel: the first window where either channel crosses the threshold is the onset, Eclipse keeps 50 ms before it and drops everything earlier. Nothing crosses, nothing gets trimmed.
The inputs that matter
output_device-Defaultplus discovered outputs. Hit Refresh Devices after new hardware; the list doesn't refresh itself.format-wav,wav + mp3, ormp3.mp3_bitrate(128–320 kbps) only matters when MP3 is in play.filename_prefix- output-relative, e.g.audio/system_recording. Eclipse appends a five-digit counter and the extension, so you get<prefix>_00001.wav. Paths that escape the output directory are rejected.strip_start_silenceandsilence_threshold_db- on by default at −70 dBFS. Raise it toward −20 if a quiet lead-in survives; the range is −96 to −20.recording_token- hidden, socketless, UI-managed. Don't touch it. Empty at execution gives you "No active recording session. Press Start…", which is what happens when you press Queue without pressing Start.
Outputs: audio (the latest processed range, 48 kHz - PCM, not a re-decode of the MP3), wav_path and mp3_path as output-relative strings (empty when that format wasn't requested), and duration in seconds. Wire audio into core Save/Preview Audio, Eclipse's Save Video, or any audio-driven video node.
Installing it
Manager → ComfyUI_Eclipse, or:
cd ComfyUI/custom_nodes
git clone https://github.com/r-vage/ComfyUI_Eclipse
Restart ComfyUI. The pack extracts its own prompt/style/pattern files into its repo folder at startup, so expect things to appear under custom_nodes/ComfyUI_Eclipse/. It's Apache 2.0 and V3-schema authored (io.ComfyNode, comfy_api.latest), so it wants a recent ComfyUI - and the Start/Stop/Update buttons come from a JS extension in the pack, so missing buttons mean a stale frontend or browser cache.
Where it bites
SoundCard isn't in requirements.txt. It's declared in pyproject.toml (SoundCard>=0.4.6,<0.5) but not in the requirements file, so pip install -r custom_nodes/ComfyUI_Eclipse/requirements.txt can leave you without it - you'll get "SoundCard is unavailable" the moment you hit Start.
pip install "SoundCard>=0.4.6,<0.5"
# portable Windows: python_embeded\python.exe -m pip install "SoundCard>=0.4.6,<0.5"
macOS isn't supported. SoundCard has no CoreAudio system-output loopback, so you get a clear platform error instead of a weird failure. Use a virtual audio device.
"No loopback monitor was found for the selected output device." Usually a stale device list - refresh and re-pick. On Linux it's also the signature of running ComfyUI in a container or over SSH with no PulseAudio/PipeWire session to monitor.
MP3 errors about libmp3lame mean your PyAV build lacks the encoder. Choose wav; it's lossless anyway.
One at a time. A second Start returns a 409, even from another node in the same graph.
Coming from RvTools. 4.0.0 deleted every legacy node, so old workflows won't just load. Run the built-in Workflow Migration Tool (or python tools/migrate_workflow.py <path>, which backs up first), then re-check audio nodes by hand.
The main failure mode here is human: Queue without Start, or Stop thirty seconds into a silent lead-in and publish a take you didn't mean. That's what the trim settings and Update Output are for - fix it without performing the whole session again.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| filename_prefix | STRING | audio/system_recording | Output-relative folder and filename prefix. Eclipse adds a collision-safe counter and the requested extension. |
| format | COMBO | wav | Publish WAV, MP3, or both formats. |
| mp3_bitrate | COMBO | 320 kbps | Constant MP3 bitrate. Disabled when MP3 is not selected. |
| output_device | COMBO | Default | System output device or monitor to capture. |
| strip_start_silence | BOOLEAN | true | Remove leading silence in 10 ms windows while preserving 50 ms before the detected onset. |
| silence_threshold_db | FLOAT | -70-96–-20 | Per-channel RMS activity threshold in dBFS. |
| recording_token | STRING | Private recorder session token managed by the Eclipse UI. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| wav_path | STRING | — |
| mp3_path | STRING | — |
| duration | FLOAT | — |