Nodes/ComfyTV/Audio Saturate
ComfyUI Node

Audio Saturate

Audio Saturate — the character knob for your sterile-sounding mixes

By jtydhr88·Created 3 months ago·Updated about 17 hours ago· 725
Audio Saturate
  • audio
  • video
  • audio
  • fx_spec
force_run_token0
project_id
parent_output_id0
modesoftclip
sc_typehard
sc_threshold1.00
py_clip1.00
py_adaptive0.50
cr_bits8.00
cr_mix0.50
cr_modelin
ex_amount1.00
ex_drive8.50
ex_blend0.00
ex_freq7500
cz_i2.00

Generated music is clean. Sometimes too clean - it can sit in a mix like it's wearing a lab coat. Audio Saturate is the stage that adds the dirt: it shapes the waveform's peaks to add harmonics and grit the way tape, tube preamps, and bit-crushed game audio do. Five modes, each a real FFmpeg filter, none of it AI:

  • softclip - the tape/preamp character box. asoftclip with a sc_type (hard, tanh, atan, cubic, exp, and more) and a sc_threshold (0.01–1). tanh is the warm one; hard is the harsher one.
  • psyclip - adaptive lookahead soft-clipping (apsyclip) that rides peaks, py_clip for the ceiling and py_adaptive for how much it adjusts. This is the "loud but not crunchy" glue.
  • crush - bit-crusher (acrusher): cr_bits (1–64, default 8) drops the resolution, cr_mix blends dry/wet, cr_mode linear vs log. The instant "retro game console" button; 8-bit at full mix is very much a taste.
  • exciter - harmonic exciter (aexciter) that adds sparkle above ex_freq (default 7.5 kHz) via amount/drive/blend. The "make it pop in the highs without turning up the volume" trick.
  • crystalizer - crystalizer with a single cz_i intensity. Adds a shimmering high-end presence, the kind of thing you hear on modern vocal chains.

Input is audio or video; outputs are audio and an fx_spec for stacking into an FX Chain. Same hidden-input plumbing as every ComfyTV AudioFX stage - ignore force_run_token, project_id, parent_output_id.

Where people get burned: saturation is additive, so the output gets louder and peakier as you push it. A softclip at full threshold is fine; an exciter at ex_amount 64 with ex_drive 10 will turn your gentle piano into a distorted wall before you hear it coming. The classic mistake is applying it per-track when you only wanted it on the bus - do that and every element fights for the same harmonic space. Start at the defaults, A/B against bypass, and mix the effects stage in subtly.

There's a lovely irony here that's worth knowing: this is also where you manufacture the damage the Repair stage fixes. Bit-crush something and then try to de-click it, and you'll understand why audio people say "print it right the first time."

Install is the pack-wide story: ComfyUI Manager search "ComfyTV", or git clone https://github.com/jtydhr88/ComfyTV into custom_nodes/ and fully restart the backend. On Desktop/macOS with multiple ComfyUI installs, clone by absolute path into the running instance or the pack never registers. Zero extra pip dependencies - these are stock PyAV/FFmpeg filters, CPU-only, no model downloads.

CategoryComfyTV/AudioFX

Inputs (18)

NameTypeDefaultDescription
force_run_tokenINT00–2147483647Internal — bumped on Run to invalidate ComfyUI's input cache.
project_idSTRINGInternal — populated by the projectStore on the frontend.
parent_output_idINT00–2147483647Internal — lineage parent set by spawn handlers on the frontend.
modeCOMBOsoftclip5 options: softclip, psyclip, crush, exciter, crystalizer
sc_typeCOMBOhard9 options: hard, tanh, atan, cubic, exp, alg, +3
sc_thresholdFLOAT1.000.01–1
py_clipFLOAT1.000.015625–1
py_adaptiveFLOAT0.500–1
cr_bitsFLOAT8.001–64
cr_mixFLOAT0.500–1
cr_modeCOMBOlin2 options: lin, log
ex_amountFLOAT1.000–64
ex_driveFLOAT8.500.1–10
ex_blendFLOAT0.00-10–10
ex_freqFLOAT75002000–12000
cz_iFLOAT2.00-10–10
audiooptCOMFYTV_AUDIO
videooptCOMFYTV_VIDEO

Outputs (2)

NameTypeDescription
audioCOMFYTV_AUDIO
fx_specCOMFYTV_FXSPEC