ComfyUI Node

Voice ChangerX

No AI model, no GPU — a real voice shifter that runs on your CPU

By haroonaslam·Created 4 months ago·Updated a day ago· 10
Voice ChangerX
  • source_audio
  • reference_audio
  • audio
pitch_shift0.00
formant_shift0.00
timbre0.0
breathiness0
pitch_variation100
output_gain0.0

If you Googled "voice changer" expecting an RVC-style clone - upload a sample, get an AI that speaks like the target - stop right there. Voice ChangerX is the opposite. The name is a slight lie: there's no model download, no GPU, no online service, and it will not clone anyone's identity. What it does is remap the acoustics of a voice you already have - pitch, resonance, brightness, airiness, intonation. Think surgical EQ-plus-pitch editor for speech, not an AI voice actor.

That's genuinely useful in ComfyUI, though. Audio is the thinnest, newest layer of the ecosystem, bolted on once silent video clips needed to talk. Assembling a character voice for a talking head? Most tools want a model and a pile of VRAM. This node needs neither: deterministic CPU DSP, no inference, no randomness, and it renders identically every run.

How it works

Under the hood it's PyWORLD, the Python wrapper for the classic WORLD vocoder. The pipeline: Harvest estimates pitch, CheapTrick analyzes the spectral envelope (the shape of your vocal tract - where the formants are), and D4C estimates aperiodicity (the breathy noise in voiced sound). The node modifies those three layers and resynthesizes the voice from scratch.

The one trick worth understanding: pitch and formant aren't the same thing. Shift only pitch and you get a chipmunk who still sounds chipmunk-sized. To sound genuinely bigger or smaller - monster versus fairy - you must shift the formants, the resonances of your throat and mouth. That's why formant_shift is a separate dial: negative makes the resonance larger and deeper, positive smaller and lighter.

A nice detail: with all controls at default, the node returns your source audio completely untouched, and PyWORLD isn't even loaded. Neutral, gain-only, and silent paths skip analysis entirely.

The controls that matter

Only two sockets exist - source_audio (required, "the voice to transform") and optional reference_audio - plus one AUDIO output that wires straight into ComfyUI's Preview Audio node to audition. Everything else is on-node sliders, all defaulted to "no change" (zero, or 100 where noted) so you nudge outward:

  • pitch_shift - semitones, −24 to +24, at the same duration.
  • formant_shift - resonance in semitones, −12 to +12. The "how big is the person" knob.
  • timbre - brightness in dB/octave; negative warmer/darker, positive brighter.
  • breathiness - ±100, more or less airy.
  • pitch_variation - 0 flattens intonation, 100 is original, 200 exaggerates.
  • output_gain - final loudness, peak-limited so you don't hard-clip.

If that list makes your eyes glaze over, there's a shortcut: the Match Reference button. Connect a clear recording of the target voice to reference_audio (it needn't say the same words, though similar content and recording conditions help), click Match, and the node compares median pitch, pitch range, spectral shape, aperiodicity, and level - then fills all six sliders as one undoable edit. Fine-tune by ear. Caveat from the author's own docs: this matches acoustic characteristics, not identity, accent, or articulation. It steers a voice toward "deeper and warmer like this sample," not "be this sample."

Installing it

Voice ChangerX ships inside the WorkflowX-Configurator pack - install the pack, get the node. In ComfyUI Manager search "WorkflowX Configurator", or:

cd ComfyUI/custom_nodes
git clone https://github.com/haroonaslam/WorkflowX-Configurator

then restart ComfyUI. The pack's requirements.txt is small - pyworld, numpy, scipy - but the gotcha is that PyWORLD must land in the same Python that runs ComfyUI. On the Windows portable build that means python_embeded\python.exe -m pip install pyworld, not your system Python. If pip can't find a compatible wheel, you may need a C++ build toolchain. Because PyWORLD lazy-loads only when a real transform runs, a missing or broken install won't stop the rest of WorkflowX from loading - you just get an actionable error on this node when you try to change a voice.

Where people get burned

  • Big shifts sound synthetic. The docs are blunt: there's no universal setting, and large pitch/formant moves invite artifacts. Start modest and listen.
  • Garbage in, garbage out. Background music, overlapping speakers, and whispers confuse pitch detection. Feed it one clear spoken voice.
  • It's queued, not live. Long recordings are analyzed in memory proportional to their length - this isn't a real-time effects pedal.
  • Match Reference failing on silence or a too-short clip leaves your sliders untouched, which is the right failure mode - better than a garbage estimate overwriting your work.

That's the whole pitch: the character-voice shaper you reach for when you don't need (or can't afford) a full cloning model. Subtle shifts, one clean spoken voice, CPU-only, zero downloads - while the heavy voice stuff in ComfyUI, real cloning and big TTS, lives in packs that actually want that GPU.

CategoryWorkflowX/Audio

Inputs (8)

NameTypeDefaultDescription
source_audioAUDIOThe voice to transform.
pitch_shiftFLOAT0.00-24–24Pitch shift in semitones; duration stays unchanged.
formant_shiftFLOAT0.00-12–12Resonance shift in semitones: negative = larger/deeper, positive = smaller/lighter.
timbreFLOAT0.0-12–12Brightness in dB/octave: negative = warmer/darker, positive = brighter. Tilt is bounded to +/-24 dB.
breathinessFLOAT0-100–100Relative noise adjustment on voiced speech: negative = less airy, positive = more airy.
pitch_variationFLOAT1000–200Intonation range: 0% = flat voiced pitch, 100% = original, 200% = exaggerated.
output_gainFLOAT0.0-24–12Output gain in dB. Peaks above full scale are attenuated to prevent clipping.
reference_audiooptAUDIOOptional target voice. Click Match Reference to estimate slider settings.

Outputs (1)

NameTypeDescription
audioAUDIO