⚡ Batch Colorway
The node that renders every colorway in one queue
- image
- mask_0
- mask_1
- mask_2
- mask_3
- mask_4
- mask_5
- mask_6
- mask_7
- batch
- names
Where the colorway pipeline actually pays off
MultiZone Recolor does one garment in one colorway. This node does the part that makes the pack worth installing: give it a JSON array of colorways and it runs them all in a single pass, returning one stacked batch of recolored images plus the names that go with them. For an apparel workflow where an article ships in six colorways - red, navy, sage, black, each with its own zone colors - you write the list once and get six images out of one queue.
It's effectively MultiZone Recolor wrapped in a loop. Each entry in the JSON is a colorway: a name plus the same per-zone config MultiZone takes, so everything you learned there transfers.
[
{
"name": "JI8124",
"zones": [
{"mask_index": 0, "r": 204, "g": 18, "b": 37, "label": "Main"},
{"mask_index": 1, "r": 4, "g": 0, "b": 0, "label": "3bar"}
]
},
{
"name": "JX3291",
"zones": [
{"mask_index": 0, "r": 182, "g": 166, "b": 201, "label": "Main"},
{"mask_index": 1, "r": 4, "g": 0, "b": 0, "label": "3bar"}
]
}
]
The README's examples/colorway_configs.json has full sets like this for its Adidas article selections - copy the shape from there rather than inventing your own.
Inputs and outputs
Required inputs are image, the colorways_json string above, and method (direct_replace, statistical, percentile - same choice as MultiZone, applied to every colorway). Then the shared tuning: luminance_strength (0.7), texture_preserve (0.15), edge_feather (2). Optional mask_0…mask_7 slots are wired exactly like MultiZone, and they're shared across all colorways in the batch - each colorway just changes the target colors, not the masks.
Outputs: batch, a single IMAGE tensor with one frame per colorway (stacked along the batch dimension), and names, a comma-separated STRING of the colorway names in order. Save Image handles the batch fine; if you want individual files, split the batch first or use a node that writes each frame.
Read this before you run it - there's a bug in the first release
The version we inspected (the single Feb 2026 commit) has a genuine break in BatchColorwayProcessor: it instantiates a class called MultiZoneRecolorV2, which doesn't exist anywhere in the pack. Run it and you'll get a NameError: name 'MultiZoneRecolorV2' is not defined the moment it processes. You're not doing anything wrong.
The fix is one line in ComfyUI-Recolor/nodes/recolor_nodes.py:
mn = MultiZoneRecolor() # was MultiZoneRecolorV2()
Change it, restart ComfyUI, and the node works. If a later commit fixes this, great - but check your version before you spend an hour blaming your JSON. It's also worth a sanity check that the pack you're using has actually been updated, since this is a young, single-author repo.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/benjamin-bertram/ComfyUI-Recolor
cd ComfyUI-Recolor
pip install -r requirements.txt
Restart, or use Manager and search "ComfyUI-Recolor". No model downloads - pure torch / opencv-python / scikit-image math. The masks still come from SAM via ComfyUI-Impact-Pack or your segmentation node of choice, and they're the same eight slots for the whole batch.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| colorways_json | STRING | [] | — |
| method | COMBO | 3 options: direct_replace, statistical, percentile | |
| luminance_strength | FLOAT | 0.700–1 | — |
| texture_preserve | FLOAT | 0.150–1 | — |
| edge_feather | INT | 20–50 | — |
| mask_0opt | MASK | — | |
| mask_1opt | MASK | — | |
| mask_2opt | MASK | — | |
| mask_3opt | MASK | — | |
| mask_4opt | MASK | — | |
| mask_5opt | MASK | — | |
| mask_6opt | MASK | — | |
| mask_7opt | MASK | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| batch | IMAGE | — |
| names | STRING | — |