Nodes/ComfyUI_Eclipse/System Audio Recorder
ComfyUI Node

System Audio Recorder

Recording Whatever Your PC Is Playing Straight Into a ComfyUI Workflow

By r-vage·Created 11 months ago·Updated about 22 hours ago· 35
System Audio Recorder
    • audio
    • wav_path
    • mp3_path
    • duration
    filename_prefixaudio/system_recording
    formatwav
    mp3_bitrate320 kbps
    output_deviceDefault
    strip_start_silencetrue
    silence_threshold_db-70
    recording_token

    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 - Default plus discovered outputs. Hit Refresh Devices after new hardware; the list doesn't refresh itself.
    • format - wav, wav + mp3, or mp3. 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_silence and silence_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.

    Category🌒 Eclipse/ Audio

    Inputs (7)

    NameTypeDefaultDescription
    filename_prefixSTRINGaudio/system_recordingOutput-relative folder and filename prefix. Eclipse adds a collision-safe counter and the requested extension.
    formatCOMBOwavPublish WAV, MP3, or both formats.
    mp3_bitrateCOMBO320 kbpsConstant MP3 bitrate. Disabled when MP3 is not selected.
    output_deviceCOMBODefaultSystem output device or monitor to capture.
    strip_start_silenceBOOLEANtrueRemove leading silence in 10 ms windows while preserving 50 ms before the detected onset.
    silence_threshold_dbFLOAT-70-96–-20Per-channel RMS activity threshold in dBFS.
    recording_tokenSTRINGPrivate recorder session token managed by the Eclipse UI.

    Outputs (4)

    NameTypeDescription
    audioAUDIO
    wav_pathSTRING
    mp3_pathSTRING
    durationFLOAT