Sound Mixer
A tiny timeline editor for laying audio onto your video, inside ComfyUI
- audio
The moment you run a video model that doesn't make sound - and most of them don't - you realize ComfyUI has almost nothing for audio. There's no timeline, no waveform, nowhere to put a whoosh at 3.2 seconds. Sound Mixer is that place. It's a mini DAW hiding behind a single button, and it's the node you reach for when the video looks right but needs foley, a score, or a voiceover dropped in at exact timestamps.
What it does is simple: mix up to 16 audio files into one AUDIO output. Click Edit Mix, upload files, trim each one, give it a fade in and fade out, and place it - possibly more than once - anywhere on the timeline with its own gain. You can even load a reference video, scrub to the exact frame, and drop a sound right there, with the video and mix playing back together in real time. The editor is the whole point; the node underneath is a dumb mixer.
How it works matters for one reason: portability. The editor serializes your entire mix into a single mix_state JSON string - a hidden STRING widget saved with the workflow - while the audio files themselves are uploaded straight into ComfyUI's input folder. Every run, the node decodes each source, crops to your trim, applies linear fades, resamples everything to your sample_rate, and sums it all into a stereo buffer with the per-placement gain. So the workflow JSON remembers how the mix is built, but the files live outside it.
The three inputs you'll ever touch:
- duration (FLOAT, default 10s) - total mix length. Anything placed past this gets clipped off.
- sample_rate (INT, default 44100) - everything is resampled to this, so pick one standard and leave it. 44.1k or 48k, your call.
- mix_state (STRING) - don't touch this. It's the editor's memory, hidden from the node UI.
The single audio output is a standard AUDIO tensor, so it wires into whatever your video pipeline already uses to save or mux - VideoHelperSuite's audio save, or a Combine node if you're running one.
Where people get burned: the audio files aren't embedded in the workflow. Build a mix, move the workflow to another machine, and the node quietly skips the missing files - it just prints a console line and hands you a silent or half-empty mix with no UI error. Keep the input files with your workflow or re-upload them. Also know what this isn't: linear fades, linear gains, no curves, no ducking, no crossfade automation. It's for getting sound onto a timeline fast, not for final mixing.
This node ships in the comfyui-daz-tools pack, which has no Python requirements of its own - just torch, PIL and numpy, all already in ComfyUI. Clean install:
cd ComfyUI/custom_nodes
git clone https://github.com/denyazzolin/comfyui-daz-tools
Restart ComfyUI. Or use ComfyUI Manager and search comfyui-daz-tools. That's the whole install: no model downloads, no extra dependencies for this node.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| duration | FLOAT | 10.0000–3600 | — |
| sample_rate | INT | 441008000–192000 | — |
| mix_state | STRING | {"overall_gain": 1.0, "sources": {}, "blocks": []} | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |