π΅ Geeky AudioMixer
Mix voice, music, and SFX in ComfyUI without leaving the graph
- audio_1
- audio_2
- audio_3
- audio_4
- mixed_audio
- mix_info
- total_duration
- level_meters
ComfyUI's audio story is thin. If you're doing a lip-sync or talking-head workflow you'll eventually have narration on one wire, a music track on another, and nowhere to combine them - which is exactly the hole π΅ Geeky AudioMixer fills. It's a genuine four-track mixer that lives inside the graph: voice in one input, background music in a second, sound effects in a third and fourth, and out the other side comes one timed, leveled, stereo audio track ready to feed your video-combine node. No API, no key, no model files to download - the name isn't a lie for once.
How it works
The node is basically a little console-style mixer built on torchaudio. Each incoming AUDIO input - including ComfyUI's LazyAudioMap lazy-loading format, which trips up plenty of audio nodes - gets extracted into a waveform tensor and resampled to your target sample_rate with sinc interpolation. Then per track it applies volume, fade in/out, and a start-time offset, and adds the result onto a shared stereo timeline. The mix is done additively, so the relative loudness you set is the relative loudness you get. After that come the master stages in order: pre-gain, master volume, normalization, optional compression, and a soft limiter, with a final safety clamp so nothing hard-clips.
The inputs that matter
There are a lot of knobs here (three control groups Γ four tracks plus master), but for a beginner the handful that actually do the work are:
audio_1- the required main track (voice/narration).audio_2,audio_3,audio_4are optional, so you can start with just voice + music.normalization_mode- the one to understand.prevent_clipping(default) only scales down if your mix would clip, leaving your volume relationships intact.offdoes literally nothing.full_normalizeboosts everything to peak level - and here's the trap: it's the old behavior that destroyed carefully set ratios.smart_normalizeonly lifts mixes that are genuinely quiet (roughly below -30dB RMS).master_volume,pre_gain_boost- the two you reach for when output is too quiet. Pre-gain (0.1β10x) is the cleaner fix for a weak source; master volume applies to everything.output_duration,sample_rate- timeline length in seconds (1β300) and the target rate (8kβ96k; 44100 is the sensible default for most content).
Per-track you get *_volume (0β500%), *_start_time (0β60s), and *_fade_in/*_fade_out (0β5s). A quick honesty note: the output_format dropdown (wav/mp3/flac) mostly gets recorded into the info JSON - the node returns ComfyUI's native audio dict, so whatever node writes your file downstream decides the real container.
Outputs
mixed_audio (AUDIO) is the one that matters - wire it into a video-combine or audio-save node. The others are for debugging: mix_info and level_meters are JSON strings with RMS/peak levels and the processing steps that ran, and total_duration is a float you can feed into video nodes that need a frame count.
Install
ComfyUI Manager, search "Geeky AudioMixer", install, restart. Or manually:
cd ComfyUI/custom_nodes/
git clone https://github.com/GeekyGhost/ComfyUI_Geeky_AudioMixer.git
cd ComfyUI_Geeky_AudioMixer
pip install -r requirements.txt
Dependencies are light: torchaudio, soundfile, numpy, and scipy (marked optional but recommended). The one that bites: torchaudio isn't always bundled with every ComfyUI install, so if the node errors on import, run that requirements line - it's the whole fix.
Common issues
LazyAudioMaperrors - the README's most-called-out failure. Update ComfyUI, restart after installing, and double-check your audio source nodes are compatible.- Volume ratios mysteriously flat - you're on
full_normalize. Switch toprevent_clippingoroff. - Too quiet - raise
pre_gain_boost(1.5β3x for quiet sources) before cranking master volume; that keeps your track balance intact. - Clipping/distortion - drop
master_volume, or setlimiter_thresholdlower (β3dB or below) andcompression_ratioto 2β4. The console prints exact RMS/peak at every stage, so watch that output instead of guessing.
It's a small, single-author pack with no install drama and one genuinely good idea - the normalization modes that respect your levels. For in-graph mixing it's hard to beat.
Inputs (28)
| Name | Type | Default | Description |
|---|---|---|---|
| audio_1 | AUDIO | β | |
| output_duration | FLOAT | 10.01β300 | β |
| output_format | COMBO | wav | 3 options: wav, mp3, flac |
| sample_rate | INT | 441008000β96000 | β |
| audio_1_volume | FLOAT | 1.500β5 | β |
| audio_1_start_time | FLOAT | 0.00β60 | β |
| audio_1_fade_in | FLOAT | 0.00β5 | β |
| audio_1_fade_out | FLOAT | 0.00β5 | β |
| audio_2opt | AUDIO | β | |
| audio_3opt | AUDIO | β | |
| audio_4opt | AUDIO | β | |
| audio_2_volumeopt | FLOAT | 1.200β5 | β |
| audio_2_start_timeopt | FLOAT | 0.00β60 | β |
| audio_2_fade_inopt | FLOAT | 1.00β5 | β |
| audio_2_fade_outopt | FLOAT | 1.00β5 | β |
| audio_3_volumeopt | FLOAT | 1.000β5 | β |
| audio_3_start_timeopt | FLOAT | 0.00β60 | β |
| audio_3_fade_inopt | FLOAT | 0.00β5 | β |
| audio_3_fade_outopt | FLOAT | 0.00β5 | β |
| audio_4_volumeopt | FLOAT | 1.000β5 | β |
| audio_4_start_timeopt | FLOAT | 0.00β60 | β |
| audio_4_fade_inopt | FLOAT | 0.00β5 | β |
| audio_4_fade_outopt | FLOAT | 0.00β5 | β |
| master_volumeopt | FLOAT | 1.000β5 | β |
| normalization_modeopt | COMBO | prevent_clipping | 4 options: off, prevent_clipping, full_normalize, smart_normalize |
| compression_ratioopt | FLOAT | 1.01β10 | β |
| limiter_thresholdopt | FLOAT | -1.0-20β0 | β |
| pre_gain_boostopt | FLOAT | 1.00.1β10 | β |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| mixed_audio | AUDIO | β |
| mix_info | STRING | β |
| total_duration | FLOAT | β |
| level_meters | STRING | β |