arkennemasis Cell Fan-Out (one chain, N cells, concurrent)
One chain, N cells, actually concurrent
- cell_json
- key
- target_region
- reference
- reference_2
- reference_3
- target_hex
- target_rgb
- spec_type
- index
- count
ArkCellFanOut is the concurrency answer to "I have 120 variation cells and one generation chain." It fans the cell list out so a single chain of nodes renders every cell, natively and concurrently - and it does it the ComfyUI-native way, which is the part that actually matters.
Why a list, not a loop
The pack's own comment on the node is the clearest explanation of the mechanism anywhere: with a list output, ComfyUI runs each downstream node once per cell, and that's what makes concurrency possible at all. A for-loop (easy forLoop and friends) is strictly sequential - an async generator inside one can only ever have a single call in flight, however high its concurrency widget is set. With a fan-out there are N chains, and the generator's own concurrency gate decides how many overlap.
So this node is a drop-in replacement for Cell At + a for-loop, with one extra requirement spelled out in the description: set the generator's run_mode to all at once and cap it with max_concurrent. In the arkennemasis Image Gen and Codex nodes, run_mode defaults to one at a time, which serialises every API node in the graph via an asyncio lock. Flip it to all at once and max_concurrent (default 2) decides how many calls are actually in flight. That default of 2 is the safe number for a paid API - Replicate throttles hard under $5 credit, and parallel calls without a cap reliably return 429s.
The I/O
Required input is just cells_json from ArkCellMatrix. Everything fans out as a list - cell_json, key, target_region, the three reference images, target_hex, target_rgb, spec_type, and index - identical unpacked payloads to ArkCellAt, but each as a per-cell list. count is the one non-list output: the number of cells, handy for a report node or a filename.
The outputs wire into exactly the same chain you'd build after ArkCellAt - prompt build, generation, verify, deliver. The difference is you get one of those chains for each cell simultaneously.
Where it bites
Two caveats, and both are real:
- Resume doesn't work behind a fan-out. The Cell Matrix tooltip explains it: ComfyUI unions every item's lazy decision, so one unfinished cell would bill the generator for all of them. That's why
skip_deliveredlives on the matrix node - leave delivered cells out of the list before the fan-out, and the per-cell Job Skip logic stays honest. Don't try to wire per-cell skip in here; you'll pay for cells you've already finished. - Partial runs are fine for per-branch saves, broken for collectors. If some cells fail, nodes that gather every branch (collect/unpack pairs) get blocked along with the failed branch. Give each branch its own save if you want partial runs to still produce files - the pack's own Shot Selector docs make the same point.
Installing
Part of the comfyui-arkennemasis pack:
cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis
pip install replicate httpx
or ComfyUI Manager → Install via Git URL → the repo URL, then restart. It sits under arkennemasis/Variation. If your first fan-out run feels like it's not parallel, you've left the generator on one at a time - that lock is global across every arkennemasis API node in the graph, and it will happily serialise your whole run while you watch.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| cells_json | STRING | [] | — |
Outputs (11)
| Name | Type | Description |
|---|---|---|
| cell_json | STRING | — |
| key | STRING | — |
| target_region | STRING | — |
| reference | IMAGE | — |
| reference_2 | IMAGE | — |
| reference_3 | IMAGE | — |
| target_hex | STRING | — |
| target_rgb | STRING | — |
| spec_type | STRING | — |
| index | INT | — |
| count | INT | — |