Nodes/Voxta ComfyUI Nodes/Voxta: Export Character
ComfyUI Node

Voxta: Export Character

Save character expressions Voxta can actually use — the filename is the whole game

By voxta-ai·Created 11 months ago·Updated 11 months ago· 2
Voxta: Export Character
  • images
  • combination_ids
    output_path
    subfolderAvatars/Default
    output_format.webp lossy 90
    prompts
    on_existsappend

    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_path and subfolder - where to save. Subfolder defaults to Avatars/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 90 is the default and honestly the right call: Voxta loads these constantly, and webp keeps your asset folder small. .png lossless exists 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.

    CategoryVoxta

    Inputs (7)

    NameTypeDefaultDescription
    output_pathSTRING
    subfolderSTRINGAvatars/Default
    output_formatCOMBO.webp lossy 904 options: .webp lossy 80, .webp lossy 90, .webp lossless, .png lossless
    imagesIMAGE
    promptsSTRING
    combination_idsPROMPTCOMBINATORIDS
    on_existsoptCOMBOappend3 options: append, overwrite, skip

    Outputs (0)

    No outputs