Nodes/Voxta ComfyUI Nodes/Voxta: Filter Existing Combinations
ComfyUI Node

Voxta: Filter Existing Combinations

Resume a half-finished expression batch without re-rendering everything

By voxta-ai·Created 11 months ago·Updated 11 months ago· 2
Voxta: Filter Existing Combinations
  • combination_ids
  • combination_ids
  • prompts
output_path
subfolderAvatars/Default
prompts
behaviorall

Here's the scenario that makes this node worth having: you set up a character generation workflow with eleven expressions - Neutral, Smile, Talking1 through Talking3, the works - queued it, and your GPU died six images in. Now you restart and the whole list re-renders from scratch, including the six you already have. Annoying. VoxtaFilterExistingCombinations fixes that by being the bored receptionist of your pipeline: it looks at what's already saved on disk, checks every combination against it, and only lets the un-finished ones through.

It's a filter, not a saver. You slot it between your PromptCombinator and the sampling/export chain, so it runs before any generation happens. It reads the same PROMPTCOMBINATORIDS + prompts your combinator produces, decides what actually needs doing, and passes the trimmed list onward.

How it works

The node scans the destination folder (same output_path + subfolder your export node writes to) for files matching the enumerated pattern stem_XX.ext - the exact naming scheme Voxta: Export Character produces. It then maps each incoming combination ID to the filename stem that saving it would create, and checks whether that stem already has files. Combos that already exist get dropped, and the survivors flow out the two outputs.

  • combination_ids (PROMPTCOMBINATORIDS) and prompts (STRING) - the outputs, both as lists. Wire them straight into your sampler chain and the Export Character node.
  • behavior - this is the control knob, with five modes:
    • all - pass everything through untouched.
    • new only - drop everything already on disk.
    • single (first) / single (last) / single (random) - collapse the whole batch to one pick, preferring a not-yet-generated combo.

The node also shows a small "Summary" widget after running - something like "Kept 5 of 11 combinations (Skipped: 6, Kept: 5)" - so you can see at a glance what was filtered.

Gotchas worth knowing

First, new only raises an error if everything is already generated. It doesn't silently do nothing - it fails the run, because feeding an empty list downstream would break things. If you rerun a finished batch, switch to all or single mode. Second, the existence check only recognizes files that match the export node's naming pattern (stem_02.webp). If you've got a folder with hand-named files, they won't be counted. Third, this isn't an output node, so don't use it as the end of your graph - it's specifically there to sit upstream of your KSampler and export chain.

Install

Part of the Voxta ComfyUI Nodes pack by Team Voxta - tiny, MIT, no model files, no heavy dependencies (just Pillow, NumPy, aiohttp). Through ComfyUI Manager, search "Voxta", or:

cd ComfyUI/custom_nodes
git clone https://github.com/voxta-ai/ComfyUI-VoxtaNodes

Restart ComfyUI and you're done. Pair it with comfyui-prompt-combinator (the workflows' PromptCombinator) to get the PROMPTCOMBINATORIDS input it needs. Given how young this pack is, treat the "exists on disk" check as the source of truth: if you've been fiddling with names or moved files around, the filter's view of "done" is exactly what's in that folder.

CategoryVoxta

Inputs (5)

NameTypeDefaultDescription
output_pathSTRING
subfolderSTRINGAvatars/Default
combination_idsPROMPTCOMBINATORIDS
promptsSTRING
behaviorCOMBOall5 options: all, new only, single (first), single (last), single (random)

Outputs (2)

NameTypeDescription
combination_idsPROMPTCOMBINATORIDS
promptsSTRING