Scene Queue Controller
The brain that batch-renders your whole PromptDrafter library
- scene_combos
If you use ComfyUI-PromptDrafter, you know the manual grind: load an expression preset, load a pose preset, generate, save, swap, repeat. This node is the batch mode that pack never shipped with. You lay out a grid - scenes as rows, PromptDrafter nodes as columns, presets in each cell - press Queue once, and ComfyUI renders every combination as its own image in a single run. 3 expressions × 2 poses × 2 styles becomes 12 images from one click.
The Scene Queue Controller is the brain and the editor. Its partner, the Scene Queue Distributor, is the worker that pushes text into your PromptDrafter nodes each iteration. Drop a Controller and a Distributor is created and wired to it automatically - you mostly only ever touch the Controller.
How it works
The trick is ComfyUI's native OUTPUT_IS_LIST mechanism. At queue time the Controller reads your collection, builds the flat list of every combination across all enabled scenes, and emits it as a single SCENE_COMBO list. Because the output declares itself a list, ComfyUI iterates the whole downstream subgraph once per item - no re-queue loop, no external scheduler, no hidden "advance" messages. The README's changelog is honest about how this got here: v0.0.x used a clunky send_sync re-queue loop, and v1.0.0 threw it out for native list iteration. That rewrite is the reason this pack is usable rather than cursed.
Before it builds combos, the Controller pre-flights every assigned preset file on disk and fails with a readable error naming anything missing. It also marks itself always-changed (IS_CHANGED returns NaN), so ComfyUI never serves you a stale cached result.
The inputs and outputs that matter
Only three, and you'll rarely touch two of them:
scene_file(STRING, required) - the name of your saved collection file (lives in the pack'ssaved/scenes/). The editor writes it; you don't.sq_collection_data(STRING, optional) - a hidden widget holding the live JSON of the collection, serialized by the frontend. It takes precedence overscene_fileat queue time, which is why toggling a scene off without saving still works when you hit Queue.scene_combos(SCENE_COMBO, list output) - wire this to the Distributor'sscene_comboinput. That's the only wire you'll make by hand.
Everything else lives in the editor UI the node draws: New collection, + Add Node (one column per PromptDrafter), + Add Scene (rows), preset cells, and Save. When you add a PromptDrafter column here, the Distributor's output slots and wires update themselves.
Setting one up
- Place the Controller - the Distributor auto-creates.
- New collection, give it a name.
+ Add Nodeper PromptDrafter column.+ Add Scene, expand the row,+ Adda preset into each column.- Save, wire the Distributor's combination_tag to your SaveImage's
filename_prefix, and Queue.
Mind the multiplication: one scene's combination count is the product of presets per column. That's the feature, and also the thing that quietly quadruples your render time when you add one more style. Each enabled scene is summed into the same run.
Installing
PromptDrafter must already be installed - it's the one real dependency (there's no requirements.txt and nothing to download; this pack is pure orchestration). Then:
cd ComfyUI/custom_nodes
git clone https://github.com/Carasibana/ComfyUI-PromptDrafter-SceneQueue
…and restart ComfyUI. Or open ComfyUI Manager and search "ComfyUI-PromptDrafter-SceneQueue". Because the pack locates PromptDrafter's preset folder by sibling path, keep them side by side in custom_nodes - Manager does this anyway.
Where people get burned
The combination count is the trap - watch the grid before you queue a big batch. Preset validation is strict: rename or delete a preset and the run dies with a clear list; fix the cell rather than working around it. If you're not getting every combo, check no scene is accidentally disabled - that toggle is live and unsaved, which is convenient until you forget it. And the most common "why is nothing loading" case isn't this pack at all; it's that ComfyUI-PromptDrafter is missing entirely.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| scene_file | STRING | — | |
| sq_collection_dataopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| scene_combos | SCENE_COMBO | — |