Nodes/koo-nodes-pack/KoO Carousel Executor
ComfyUI Node

KoO Carousel Executor

The Node That Fans Lists Back Out

By kooailab·Created 15 days ago·Updated 4 days ago· 0
KoO Carousel Executor
    • prompt
    • seed
    • filename_prefix
    • index
    • total
    • status
    ◄prompts—►
    ◄seeds—►
    ◄filenames—►
    ◄indices—►
    ◄active_count—►
    ◄status—►

    Here's the bit that trips people up: the KoO Carousel chain has two nodes that look like they do the same thing, and you need both. The Manager (or Unlimited) produces lists. The Executor consumes those lists and produces lists. It feels redundant until you know what ComfyUI does with list sockets, and then it's obvious.

    A node that returns a Python list on an output declared OUTPUT_IS_LIST hands downstream a list, not six sequential runs. Whether that fans out into separate executions depends on what it's plugged into. The Executor is the thing that accepts lists on every input (INPUT_IS_LIST = True), unwraps them, filters them, and hands back matched lists on six outputs - which is the shape the rest of the graph can actually iterate on. Manager → Executor → sampler is the chain. Skip it and the lists go nowhere.

    What it does, step by step

    It takes six list inputs: prompts, seeds, filenames, indices, active_count, status. All of them are declared forceInput, meaning they can only be wired, never typed - you can't run this node standalone, and that's intentional.

    Then it walks them in lockstep. For each position up to active_count:

    • if the prompt is empty or whitespace-only, the position is skipped and the prompt's index is recorded for the status line;
    • otherwise it clamps the seed to the valid range, falls back to a KoO_Carousel_NN filename if the incoming one is blank, and appends to four output lists.

    Anything downstream of prompt, seed, filename_prefix, index, total or status then runs once per surviving prompt. total is repeated once per item so downstream nodes always know how many frames the run has, and status is a per-item progress string like Carousel 3/5 - Prompt 3 | skipped empty prompt(s): 1.

    It also validates hard, which is the part I like: if you gave it fewer seeds than prompts, it raises with the counts (Received 2 seed(s) for 5 enabled prompt(s)) instead of quietly reusing seed zero. If every enabled prompt is blank, it raises rather than rendering nothing.

    The outputs you wire

    • prompt → your CLIP Text Encode. This is the main one.
    • seed → the sampler's seed, after converting the widget to an input.
    • filename_prefix → Save Image, so your carousel lands as KoO_Carousel_01, _02, _03 instead of overwriting itself.
    • index → anything that needs to know which scene it's on - a prompt-name overlay, a notes node, a filename template.
    • total → same idea, for n of 5 style labels.
    • status → a text display. Wire it to a Preview Any or similar while you're setting up; it names exactly which slots were skipped, which is the fastest diagnosis for "why did I only get four images".

    Installing it

    Same pack as everything else KoO:

    cd ComfyUI/custom_nodes
    git clone https://github.com/kevintronchin-blip/koo-nodes-pack
    

    Restart ComfyUI. No pip install beyond what ComfyUI already has (torch, numpy, Pillow, aiohttp), no model downloads. This node has no frontend component, so it works regardless of renderer. Category is KoO/Carousel - note that its two partner nodes are filed under KoO Tools / Prompt, so if you right-click-add and can't find all three in the same category, that's the reason, not a broken install.

    Registry/Manager listing at v1.0.3 depends on moderation approval; the README's supported install is the ZIP extracted as ComfyUI/custom_nodes/koo-nodes-pack. The pack also ships an API-format example at docs/examples/carousel_prompt_manager_minimal_api.json - useful for reading, but as the README says, API JSON isn't drag-and-drop.

    Where people get burned

    Multiple images with the same filename. If filename_prefix isn't wired, every iteration writes to whatever prefix Save Image has, and you end up with _00001_ suffixed files that are hard to match back to prompts. Wire it.

    The seed loop. In ComfyUI, seed widgets default to control_after_generate behaviour that rewrites the value after a run. If your sampler's seed is being fed by the Executor but the widget still has a randomize control attached, you can get confusing results across queue runs. Convert the seed to an input, wire it, and leave it alone.

    Fewer images than prompts. Either active_count disagrees with the actual prompt list length, or some prompts are blank. The status output tells you which, explicitly.

    Duplicate node IDs. If you previously installed any of the separate KoO dev repos, remove or disable them before testing - several IDs are shared, and the pack's own docs call that out as the first place to look when something behaves strangely.

    CategoryKoO/Carousel

    Inputs (6)

    NameTypeDefaultDescription
    promptsSTRING—
    seedsINT—
    filenamesSTRING—
    indicesINT—
    active_countINT—
    statusSTRING—

    Outputs (6)

    NameTypeDescription
    promptSTRING—
    seedINT—
    filename_prefixSTRING—
    indexINT—
    totalINT—
    statusSTRING—