Prompt Stack Manager
A prompt playlist that advances one cue per cycle while you autopilot
- current_prompt
- previous_prompt
- current_frame
Prompt Stack Manager is the less glamorous half of the Dream Zoom workflow's live-prompting pair. Live Prompt Interpolation handles the smooth morphing; this node handles the playlist. You type a stack of prompts into a multiline box, one per line, and the node cycles through them, always handing you the current prompt and the one before it. That "previous" output is the whole trick - your workflow can always blend from where you were to where you're going.
The README says it was designed as a sister node to Atomic Perception's "Attack Hold Weighted Prompt" node (which lives in a different repo, ap_Nodes, as part of the same Dream-Zoom collaboration). The author credits that collaboration as the thing that got him into custom node development at all.
How it works
The frame-cycling is the clever bit, and it's also the part that'll confuse you for a second. There's no frame input. Instead, the node derives its position from the seed input:
current_frame = seed % (frames_per_prompt * num_prompts)
current_index = current_frame // frames_per_prompt
So the seed is doing double duty as a frame counter. In an auto-queue workflow the seed increments with every run, which means the index steps forward one prompt per frames_per_prompt runs, wraps around at the end of the stack, and loops forever. Feed it a static seed and it just sits on one prompt - which is also a valid way to use it, as a glorified picker.
The node's IS_CHANGED always returns True, which is worth knowing: ComfyUI will re-execute it on every queue run rather than caching results. That's intentional - it's the mechanism that makes the playlist advance. It's also why you'll see it fire in the log even when nothing else changed.
The inputs
prompt_stack- multiline string, one prompt per line. The only thing you'll edit regularly.frames_per_prompt(default 1) - how many queue runs each prompt stays current.seed- the "frame counter." Set ComfyUI's queue to auto-increment this and the stack advances on its own.
The outputs
current_prompt- the prompt currently "on stage."previous_prompt- the one before it, for the blend. On the very first run the previous equals the current, which is a sensible no-op start.current_frame- the computed position in the cycle, handy if another node needs the raw count.
Installing it
Standard FrameFX install - ComfyUI Manager, search ComfyUI-FrameFX, install, restart. Or clone:
cd ComfyUI/custom_nodes
git clone https://github.com/mgfxer/ComfyUI-FrameFX
No extra dependencies, no model files. It's a few dozen lines of pure Python.
Where people get burned
The seed-as-frame-counter design is the main thing that trips people. If the stack isn't advancing, the seed isn't incrementing - check your auto-queue seed widget rather than the node. Also keep frames_per_prompt modest: it multiplies into the cycle length, and with the seed modulo arithmetic, a big number just means long pauses between prompts, not smoother transitions. And remember this node only picks prompts - it doesn't interpolate. If you want the fade between them, wire previous_prompt into the Live Prompt Interpolation node next to it.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt_stack | STRING | Prompt 1 Prompt 2 Prompt 3 | — |
| frames_per_prompt | INT | 11–1000 | — |
| seed | INT | 00–1000000 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| current_prompt | STRING | — |
| previous_prompt | STRING | — |
| current_frame | INT | — |