ComfyUI Node

PersonaPalette

Five sliders between you and the character voice you actually wanted

By kantan-kanto·Created 4 months ago·Updated 4 months ago· 1
PersonaPalette
  • audio
  • persona_ref_audio
  • dsp_preview_audio
  • metadata_json
youth0.00
brightness0.00
energy0.00
softness0.00
composure0.00
similarity_cfg0.50
intelligibility_cfg0.50
diffusion_steps50

You found a reference voice for your TTS workflow and it's almost the character. Just a bit too flat, or too bright, or too slow. The usual answer is hours of hunting for a better sample. PersonaPalette is the other approach: keep the voice you have and push it the last few degrees yourself.

It's not a TTS engine. It won't read your script. It's a preparation step for reference-based TTS and voice cloning - feed it a source voice, it nudges the character impression, and hands back a reference a downstream TTS like Irodori-TTS can actually use. The author is upfront that this is Phase 1 and the persona API is experimental, so don't hard-code exact numbers into your pipeline yet. But the direction is right, and it fills a real gap: nobody else is doing character-voice sculpting as a ComfyUI node.

How it works - DSP first, then naturalization

Two stages, and they're worth knowing apart because one of them is the whole trick.

Stage one is DSP. Each of the five axes maps to concrete signal processing, not a neural network. In persona_palette/dsp.py it's all there: youth shifts pitch and formants (the classic "chipmunk but tasteful" direction), brightness drives a high-shelf boost at 6 kHz plus presence, energy changes tempo, compression and transient emphasis, softness tilts the spectrum down and damps things, composure slows the tempo, stabilizes f0 and even applies a little denoise. These are empirical audio-design choices, the README says, not psychometrics - which is the right way to think about them.

Stage two is Seed-VC v2. The DSP output is then run through the Seed-VC voice-conversion model (the popular zero-shot VC people reach for as an RVC alternative) to naturalize it. That's what keeps your edited voice from sounding like a radio-EQ'd recording - it re-synthesizes it into something a TTS reference is supposed to be, and it's why the heavy model stack below exists.

Inputs and outputs that matter

Nine inputs, and you only really set six of them. audio is your source voice. The five axes - youth, brightness, energy, softness, composure - each go from -1.0 to +1.0, default 0.0 (unchanged), and negative values go the opposite direction. Start in the -0.5 to +0.5 band; ±1.0 is "strong exploration setting" territory, which is author-speak for "things will get weird."

Then there's the Seed-VC trio:

  • similarity_cfg (default 0.5) - how hard Seed-VC clings to the content of the source. Lower it if the accent or prosody drifts too far.
  • intelligibility_cfg (default 0.5) - how hard it tries to keep pronunciation crisp. Lower it if the voice turns artificial.
  • diffusion_steps (default 50) - more steps, cleaner output, slower run.

Three outputs: persona_ref_audio (the AUDIO you wire into your TTS), dsp_preview_audio (the raw DSP result before Seed-VC - listen to this to gauge how much your axes are doing), and metadata_json (a STRING with every parameter, the DSP values, Seed-VC settings, and sample rates - handy for tracking what you ran).

Installing it

Install via ComfyUI Manager (search "PersonaPalette") or the manual route:

cd ComfyUI/custom_nodes
git clone https://github.com/kantan-kanto/ComfyUI-PersonaPalette
pip install -r ComfyUI-PersonaPalette/requirements.txt

Then restart ComfyUI. The requirements pull in torchaudio, librosa, soundfile, pydub, and - the one that should make you pause - transformers>=4.46.3 and huggingface-hub>=0.28.1. Audio node packs are famous for transformers/torch conflicts, so install in the same Python environment ComfyUI uses and expect to babysit version pins.

The model download nobody warns you about enough

Here's the trap: PersonaPalette does not auto-download its models. The node validates its model directory at load and raises a FileNotFoundError listing whatever's missing. Seed-VC needs six pieces placed under ComfyUI/models/seedvc/:

ComfyUI/models/seedvc/v2/ar_base.pth
ComfyUI/models/seedvc/v2/cfm_small.pth
ComfyUI/models/seedvc/hf/whisper-small/        (whole repo)
ComfyUI/models/seedvc/hf/hubert-large-ll60k/   (whole repo)
ComfyUI/models/seedvc/hf/ASTRAL-quantization/  (bsq32 + bsq2048 .pth files)
ComfyUI/models/seedvc/hf/campplus/             (campplus_cn_common.bin)
ComfyUI/models/seedvc/hf/bigvgan_v2_22khz_80band_256x/  (config.json + bigvgan_generator.pt)

It's several gigabytes of plumbing, and the README links each Hugging Face repo. Do this before your first run, not after the error.

Troubleshooting

  • "Seed-VC model files were not found" - you skipped the downloads above. The error names the missing files; go fill them.
  • CPU is slow - the README says it plainly: CPU execution is slow, especially on longer audio. Seed-VC wants a GPU.
  • Accent or prosody changed too much - drop similarity_cfg.
  • Pronunciation got hard or artificial - drop intelligibility_cfg.
  • DSP changes are too subtle - push the axis value up; the preview output tells you if you're overshooting.
  • Output WAV smaller than source - normal. Seed-VC outputs 22050 Hz; your source or DSP preview may be 44.1/48 kHz.

Reach for this when the difference between "fine" and "in character" is a slider you can't find anywhere else. For that job, there isn't really a competitor.

CategoryPersonaPalette

Inputs (9)

NameTypeDefaultDescription
audioAUDIO
youthFLOAT0.00-1–1
brightnessFLOAT0.00-1–1
energyFLOAT0.00-1–1
softnessFLOAT0.00-1–1
composureFLOAT0.00-1–1
similarity_cfgFLOAT0.500–1
intelligibility_cfgFLOAT0.500–1
diffusion_stepsINT501–200

Outputs (3)

NameTypeDescription
persona_ref_audioAUDIO
dsp_preview_audioAUDIO
metadata_jsonSTRING