Nodes/ComfyUI-PersonaPalette/Unload PersonaPalette
ComfyUI Node

Unload PersonaPalette

The Unload PersonaPalette node you didn't know you needed

By kantan-kanto·Created 4 months ago·Updated 4 months ago· 1
Unload PersonaPalette
  • trigger
  • trigger
unload_nowfalse

Here's a thing about PersonaPalette nobody tells you: once it runs, the whole Seed-VC stack stays parked in your VRAM. Whisper, HuBERT, the AR model, the CFM diffusion model, BigVGAN, the speaker embedding net - that's a real chunk of memory sitting there holding nothing. Fine if you're doing another voice run. Annoying if you're switching to image work and wondering why your model won't load.

Unload PersonaPalette is the release valve. It's an optional output node that explicitly drops the cached Seed-VC models and clears the torch device caches. You don't need it for the pack to work - but if you've ever hit "CUDA out of memory" after a TTS pass, you'll want it.

Why it exists

PersonaPalette deliberately caches its models in a module-level global (vc_wrapper_v2 in the bundled Seed-VC runtime), because loading that whole stack takes seconds and re-running it on every queue would make iteration miserable. That's the right call for a voice-tweaking workflow where you run the node over and over. It's only a problem at the end of your session, when the models are dead weight.

That's the trade the node formalizes: keep the models hot for repeated runs, or unload them the moment you're done. The README's guidance is unambiguous - keep them loaded while you're iterating, use this only when you need the VRAM for other work. First run after an unload pays the full model-load cost again.

What it does

Flip unload_now to true and queue it, and the node deletes the cached wrapper, runs garbage collection, and clears every device cache it can find - soft_empty_cache through ComfyUI's own model management, plus torch.cuda, xpu, and mps empty caches. It prints [PersonaPalette] Unloaded cached models and cleared device cache. to the console so you can tell it actually worked, versus No cached models were loaded when there was nothing to free (which also clears caches, so it's still a light cleanup).

Two inputs:

  • unload_now (BOOL, default False) - the actual switch. Toggle it true, queue, and the models drop.
  • trigger (ANY, optional) - a passthrough used purely to control execution order.

And one output, trigger (ANY), which just passes its input through unchanged. That passthrough is the whole trick for using the node properly: wire it downstream of your last PersonaPalette or TTS step. The node is an output node, so it sits at the end of your graph, and the trigger wire ensures it only fires after the work that needs the models has finished. It's an execution-order lever, not a data path.

Installing it

No extra work - it ships in the same pack as the other two:

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

Or install via ComfyUI Manager by searching "PersonaPalette". Restart after, and it'll appear in the graph alongside PersonaPalette and the Irodori connector.

Gotchas

  • It's off by default for a reason. Leave unload_now at false during a session where you're iterating on voices; every unload means a cold reload next run.
  • It won't save you mid-run. The unload fires when the node executes - if you're out of VRAM while the graph is still running, that's a different problem (shorten your audio, or drop diffusion_steps).
  • There's no "auto." This is a manual hygiene node: you toggle it, you queue it, you move on.

If you bounce between TTS and image generation in one session, add this to the end of your voice workflows and you'll stop fighting phantom OOM errors. If you live entirely in voice-land, you can skip it - the caching it undoes is exactly what makes repeated runs fast.

CategoryPersonaPalette

Inputs (2)

NameTypeDefaultDescription
unload_nowBOOLEANfalseToggle true and queue this node to unload the cached PersonaPalette models.
triggeropt*

Outputs (1)

NameTypeDescription
trigger*