Tube Compressor (CRT)
A 'tube' compressor for generated video audio
- audio
- audio
- gr_meter_data
Video models with audio - LTX 2.3's whole selling point is synchronized sound - hand you audio that's often uneven: quiet sections, loud spikes, mumbly patches. Tube Compressor (CRT) is the pack's audio glue for exactly that problem: a compressor with a warmth control that evens out the level and tames the peaks before you export. It's one of the few full-featured audio-processing nodes in the ComfyUI ecosystem, and it lives in the CRT pack's growing audio drawer alongside the EQ, preview, mono-to-stereo, and save nodes.
The "tube" in the name is worth a skeptical look: this isn't an analog-tube emulation with transformer saturation curves. It's a clean DSP chain - a compressor plus a distortion stage for "warmth" - built on the pedalboard library. It sounds good and does the job; it's just not the boutique tube emulation the name might imply. Call it a mastering-style compressor with a saturation flavor knob and you'll have the right mental model.
How it works
The chain, in order: normalize to the input's peak, optionally run a distortion stage (warmth maps to a drive of 0–12dB) for that "tube" color, compress with threshold_db / ratio / attack_ms / release_ms, mix wet and dry (mix_wet), match loudness back to the input, apply makeup_gain_db, optionally soft-clip, then cap at −1dB so nothing blows out. It even measures the plugin's latency with an impulse and aligns wet/dry so the mix doesn't smear.
The inputs that actually matter for most people:
threshold_db(−60 to 0, default −20) andratio(1–20, default 4) - the heart of it. −20dB at 4:1 is a gentle "everything louder than −20 gets squashed by 4:1" setting. Lower threshold = more compression; higher ratio = heavier squash.attack_ms(default 5) andrelease_ms(default 100) - how fast it grabs and lets go. Fast attack catches transients; the default is a good all-rounder.warmth(0–1, default 0.1) - the saturation. A touch adds body; past ~0.5 it starts audibly distorting.mix_wet(default 1) - full wet by default; back it off toward 0.5–0.8 for parallel compression.makeup_gain_dbandmatch_input_peak- the level-matching side. Withmatch_input_peakON the output peaks match the input; OFF matches RMS instead.
Outputs: audio (the processed AUDIO) and gr_meter_data (a JSON-ish string of the gain-reduction envelope over time, which the node's UI renders as a gain-reduction meter - that's what the "tube" front panel is showing you).
Where it fits
After generation and before save/export. LTX 2.3 audio tends to run hot in places and quiet in others; a compressor pass makes the whole clip sit consistently in the mix. It also slots into the pack's audio workflow: EQ → compressor → preview → save. If you're doing voiceover-style LTX audio, threshold around −20 to −25 with ratio 3–4 and a little warmth is a genuinely good starting point.
Install and gotchas
cd ComfyUI/custom_nodes
git clone https://github.com/PGCRT/CRT-Nodes.git
pip install -r requirements.txt
or ComfyUI Manager → search "CRT-Nodes". pedalboard is in the requirements, but two real gotchas: the library needs a CPU with AVX2, so on old hardware the import fails and the node shows a warning and returns your audio unchanged rather than crashing - and if pedalboard is missing entirely, same graceful fallback. Both cases print a clear message to the console. And if the output sounds late by a hair, that's the latency alignment doing its job - the node compensates internally, but at very fast attack times the transient handling is worth a listen rather than a blind default.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| threshold_db | FLOAT | -20.0-60–0 | — |
| ratio | FLOAT | 4.01–20 | — |
| attack_ms | FLOAT | 5.00.1–200 | — |
| release_ms | FLOAT | 10010–2000 | — |
| warmth | FLOAT | 0.100–1 | — |
| mix_wet | FLOAT | 1.000–1 | — |
| makeup_gain_db | FLOAT | 0.0-24–24 | — |
| match_input_peak | COMBO | OFF | 2 options: OFF, ON |
| soft_clipper_toggle | COMBO | OFF | 2 options: OFF, ON |
| clipper_threshold | FLOAT | 1.000.1–1 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| gr_meter_data | STRING | — |