Voxta: Export Character
Save character expressions Voxta can actually use — the filename is the whole game
- images
- combination_ids
So you're building a character for Voxta, the local AI companion/roleplay platform, and you want it to show emotions - a happy face when it's happy, a pout when it's sulking. Voxta doesn't accept a batch of anonymous renders; it needs each expression saved as its own image in the character's asset folder, named in a way the platform can map to an emotion. That's exactly what this node does. You feed it the batch of images plus the list of combinations you generated, and it writes each one to disk with a clean, deterministic name like Neutral_01.webp or Talking1_02.webp.
The filename is the point. Voxta's expression system keys off those names, which is why the node bothers to build them from your prompt-combination IDs instead of just saving 00001.png. If you're coming from plain Save Image, this is the "save but make it usable by the platform" upgrade.
How it works
VoxtaExportCharacter is an output node - it has no outputs and must be the last stop in your chain. It takes your IMAGES batch and a combination_ids list (the PROMPTCOMBINATORIDS type, which comes from the PromptCombinator node in the comfyui-prompt-combinator pack) and pairs each image with its combination. It sanitizes the combo ID parts into a filename stem, then adds a two-digit enumeration, scanning the target directory so append mode always continues from the highest existing number. The cap is 99 variations per stem - if you somehow generate 100 of the same expression, it raises an error rather than silently clobbering.
The on_exists option (default append) decides what happens on re-runs: append keeps counting up, overwrite replaces files in batch order, and skip leaves existing files alone and reports how many it skipped.
The inputs that matter
output_pathandsubfolder- where to save. Subfolder defaults toAvatars/Default, which matches Voxta's expression folder. Either type these directly or wire them from the pack's Output Folder node.output_format-.webp lossy 90is the default and honestly the right call: Voxta loads these constantly, and webp keeps your asset folder small..png losslessexists if you want pixel-perfect.images,prompts,combination_ids- the batch. One gotcha: the number of images must equal the number of combination IDs, or the node throws a length-mismatch error. A single prompt is fine - it gets broadcast to every image.
Install
This ships in the small Voxta ComfyUI Nodes pack by Team Voxta (MIT, no model downloads - its only deps are Pillow, NumPy and aiohttp, all already in a stock ComfyUI). Easiest via ComfyUI Manager: search "Voxta". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/voxta-ai/ComfyUI-VoxtaNodes
Then restart ComfyUI. Note that the combination_ids input is useless without a node that emits PROMPTCOMBINATORIDS - the included workflows use PromptCombinator, so grab comfyui-prompt-combinator too if you don't have it.
Where people get burned: keeping this node mid-chain (it won't output anything), mismatched image/combination counts, and expecting append to restart numbering after you delete files - it scans what's actually on disk, so that works fine, but only for the exact stem_XX.ext pattern the node itself writes.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| output_path | STRING | — | |
| subfolder | STRING | Avatars/Default | — |
| output_format | COMBO | .webp lossy 90 | 4 options: .webp lossy 80, .webp lossy 90, .webp lossless, .png lossless |
| images | IMAGE | — | |
| prompts | STRING | — | |
| combination_ids | PROMPTCOMBINATORIDS | — | |
| on_existsopt | COMBO | append | 3 options: append, overwrite, skip |
Outputs (0)
No outputs