Generate H3 Character Thumbnail
A preview image for your saved character
- vae
- character
- preview_path
Why you'd reach for it
A saved H3 RefMod character package is a folder with a .safetensors full of latent encodings in it. Which is great for the model and useless for you: a directory of binary files gives you no way to tell Alice from Alice-2, and if you have six characters you'll be opening manifests to work out which is which.
Generate H3 Character Thumbnail decodes a character's stored visual and writes a small PNG next to the package, so the browser in the picker has something to show. It's a one-off housekeeping node, not part of a generation lane, and the pack's own example coverage explicitly exempts it - it's the node nobody demos.
How it works
character_path selects the package. vae is required and must be the full H3 visual VAE, because the node does something slightly clever: it decodes the complete saved latent, not a single frame's slice.
m = load_mod(c['visuals'][0])
frames = vae.decode(m.latent)
That's the author's comment about temporal VAE semantics, and it's correct - H3's video VAE encodes clips as clips, so decoding a stored encoding the way you'd decode a still image can produce something that doesn't look like the character at all. Take the whole thing, then use frame 0 as the thumbnail.
regenerate is off by default, and when a package already has a preview the node returns the existing path and does no work. Flip it to True when you've changed the character and want the image refreshed. When it does write, it saves to <package-name>.preview.png beside the manifest, and it does that atomically - it writes a temp file in the same directory and then replaces - so an interrupted run doesn't leave you with a half-written PNG. The manifest is then updated with the new preview path.
Outputs: character (the package, so you can hand it to a picker downstream) and preview_path. It's an output node, so it also reports "Thumbnail saved for @alias" on the node face.
Two limits worth knowing
Images are thumbnailed to a maximum of 512×512 with image.thumbnail, which preserves aspect ratio and never enlarges. Small by design - these are browsing aids, and the README is explicit that generation does not substitute thumbnails for saved reference data. Nothing downstream reads this PNG. If you delete it, you lose a picture, not fidelity.
The second limit is more interesting: an audio-only character returns Audio-only character: no visual thumbnail. That's not a failure. It means the package has a voice and no visuals, which is a perfectly valid thing to save - and it's the case where this node has literally nothing to do.
Install
ComfyUI Manager → search WorkflowX Configurator, or:
cd ComfyUI/custom_nodes
git clone https://github.com/haroonaslam/WorkflowX-Configurator
cd WorkflowX-Configurator && pip install -r requirements.txt
Restart and hard-refresh the browser. Beyond the pack's own light dependency list, all you need is the H3 visual VAE and a character package already on disk - you don't need the H3 weights loaded to make a thumbnail, but you do need to be able to load the VAE, which effectively means having H3 support in ComfyUI.
Where it goes wrong
Passing a non-H3 VAE - a standard SDXL VAE, say - is the classic error, and it won't always fail loudly; it'll just produce a thumbnail that looks like noise. If your preview image is abstract, check the VAE before you check anything else.
If the character list in the picker is still showing placeholders after a successful run, it's a browser cache problem, not a file problem: hard-refresh and the new PNGs appear.
And if you're wondering why the node needs a VAE connected just to make a picture, that's the honest answer - the character's visual is an encoding, and something has to turn it back into pixels. This is the node that pays for the savings the rest of the suite gets.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| character_path | STRING | — | |
| regenerate | BOOLEAN | false | — |
| vae | VAE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| character | H3RC_CHARACTER | — |
| preview_path | STRING | — |