Nodes/DJZ-Nodes/Unclean Speech
ComfyUI Node

Unclean Speech

Make any voiceover sound like a walkie-talkie, radio, or burned tape

By MushroomFleet·Created 2 years ago·Updated 5 months ago· 77
Unclean Speech
  • audio
  • audio
preset
compression_ratio1.0
compression_threshold-20.0
low_cut20
high_cut20000
distortion_amount0.00
noise_level0.00
noise_color
reverb_amount0.00
room_size0.50

Unclean Speech is the audio branch of a pack that mostly does video and images, and it does one thing well: it takes clean audio and makes it sound like it was recorded through something worse. A full degradation chain - compression, EQ, soft-clip distortion, noise, reverb - in one node that takes an AUDIO in and returns an AUDIO out. If you've ever needed a voiceover to sound like a phone call, a walkie-talkie, or a radio in another room, this is the node you didn't know you were missing.

How it works

It's a proper effect chain, applied in order in the code:

  1. Compression - dynamic range squashing via compression_ratio (1–20) and compression_threshold in dB (default -20). This is the "professional radio" factor; the ratio is how hard the loud parts get pulled down.
  2. EQ - low_cut (below 20–2000 Hz attenuated) and high_cut (above 1000–20000 Hz rolled off). A high low-cut plus a low high-cut is the classic telephone-bandwidth sound.
  3. Distortion - soft clipping via distortion_amount (0–1). Cheap and convincing for "overdriven" voice.
  4. Noise - additive noise at noise_level (0–1) in your pick of white, pink, or brown. Pink is tape hiss; brown is rumble; white is harsh signal noise.
  5. Reverb - reverb_amount (0–1) with a room_size (0.1–1) to place it in a space.

Everything auto-normalizes on the way out so a degraded track doesn't come back at a wildly different loudness - a small detail that keeps the node usable mid-pipeline.

Inputs and outputs

  • audio - the AUDIO you want to degrade
  • preset - a preset dropdown that ships with only one option: none. The author built a JSON preset system and loads from a presets folder, but none ship in the pack, so you'll be dialing the sliders yourself.
  • Then the chain above: compression_ratio, compression_threshold, low_cut, high_cut, distortion_amount, noise_level, noise_color, reverb_amount, room_size.

Output: audio, ready to wire into an audio player or a video muxer.

Where it sits in a workflow

Voiceover work, mostly. Load a clean TTS or narration track, run it through Unclean Speech with high low-cut + low high-cut + a touch of noise, and suddenly the line "reads" as a radio transmission or an old answering machine. For a pack that's 90% visual, this is a surprisingly useful glue node for video-with-dialogue - the kind of thing you'd otherwise open an audio editor for.

Install

Part of DJZ-Nodes by Drift Johnson. ComfyUI Manager → "DJZ-Nodes", or:

cd ComfyUI/custom_nodes
git clone https://github.com/MushroomFleet/DJZ-Nodes
cd DJZ-Nodes
pip install -r requirements.txt

Restart ComfyUI. This node specifically imports scipy.signal, which is not in the pack's requirements.txt - it arrives transitively (librosa depends on scipy, and ComfyUI ships it anyway), so it works in practice, but it's a reminder that this pack's dependency story is "install everything, use what you need."

Gotchas

You need a real AUDIO input - this node doesn't load audio files, so you need a Load Audio node from VideoHelperSuite or similar feeding it. And the effect is easy to overshoot: distortion_amount at 1.0 plus reverb plus noise at 0.5 is not a radio, it's noise. The sound is in the modest settings - thin the bandwidth, add a little noise, and let the listener's brain do the rest.

Categorysd

Inputs (11)

NameTypeDefaultDescription
audioAUDIO
presetCOMBO1 options: none
compression_ratioFLOAT1.01–20
compression_thresholdFLOAT-20.0-60–0
low_cutFLOAT2020–2000
high_cutFLOAT200001000–20000
distortion_amountFLOAT0.000–1
noise_levelFLOAT0.000–1
noise_colorCOMBO3 options: white, pink, brown
reverb_amountFLOAT0.000–1
room_sizeFLOAT0.500.1–1

Outputs (1)

NameTypeDescription
audioAUDIO