Blend Style
Mix up to 16 styles and get a ready-to-use prompt
- style_entries
- blend_json
- prompt
- negative
Blend Style is where the Immac Style Mixer pack actually does its mixing. It takes up to 16 weighted style entries - the style_entry JSON from Weight Style nodes - and aggregates them into three things: a blend_json you can save as a named mix, an assembled prompt string you can use immediately, and a negative that follows the same weighted logic. It's the middle of the chain: Pick Style → Weight Style → Blend Style → (prompt out, or Save Mix).
Reach for it when a single style isn't enough and you want a repeatable recipe - a character style plus a lighting style plus a film-look style, each at its own weight, blended into one prompt. The autogrow input means you start with a couple of slots and add more as your recipe grows, up to the 16-slot cap.
How it works
Each slot expects the JSON string that Weight Style emits. Blend Style parses them all, then runs two passes over the list: deduplication, then weight normalization. After that it assembles the prompt the same way the rest of the pack does - weight 1.0 as bare text, anything else as (text:weight) - and builds the negative from each style's negative field.
Two dropdowns control the passes, and they're the only inputs you'll fiddle with besides the slots:
- on_duplicate - what to do when the same style appears more than once. Default is
Skip (keep first);Sum weightsandAverage weightsmerge them, which is handy when two branches of your graph both feed the same style. - weight_mode - applied after dedup.
As-is(default) keeps your slider values untouched.Normalize (sum to 1.0)divides so all weights total 1.0 - useful when you're comparing blends and want a stable total emphasis.Normalize (max to 1.0)scales the biggest to 1.0, andEqual weightsflattens everything.
The defaults are sensible: Skip (keep first) + As-is gets you a plain weighted blend with zero thinking required.
The outputs
- blend_json - a JSON array of
{style_id, weight}pairs, stored exactly as blended (dedup and normalization already applied). This is what you pipe into a Save Mix node to persist the recipe. - prompt - the assembled positive string, ready for a CLIPTextEncode or sampler.
- negative - the assembled negative from the participating styles.
One nice tolerance: if a slot receives a raw style id instead of proper JSON (say you wired a Pick Style's style_id straight in), the node treats it as weight 1.0 rather than erroring. It's forgiving in exactly the way you want a mixer to be.
When it shines, and when it doesn't
Blend Style earns its keep the moment your recipes outgrow one snippet - that's most serious ComfyUI users eventually. And because the blend JSON round-trips through Save Mix, you can tune a blend on the canvas, save it, and pull it back later as a single dropdown via Pick Mix. That loop is the pack's whole thesis.
The honest caveat, same as the rest of the pack: weights are attention syntax for CLIP-based models (SDXL lineage, Pony, Illustrious, NoobAI). On LLM-encoded 2026 checkpoints the (value:weight) markers get dropped by the text encoder, so blends of weight-1.0 styles still work but your slider discipline is wasted. If you're on Flux 2 or Z-Image, this node is mostly a text-assembly convenience; on SDXL-derived models it's a real mixer.
Install
It's one of six nodes in ComfyUI-ImmacStyleMixer:
cd ComfyUI/custom_nodes
git clone https://github.com/Immac/ComfyUI-ImmacStyleMixer
Restart after cloning. No pip dependencies, no models to download, and the pack needs a current ComfyUI for its comfy_entrypoint extension API. Manager handles it if you give it the repo URL. Full steps in the pack README.
Gotchas
Empty or unexpected slots are usually a wiring problem: reconnect from Weight Style rather than typing JSON by hand. And remember blend_json is meant for Save Mix - if you drag the prompt output into the save node instead, you'll hit an error, because Save Mix expects a JSON array, not a string. The data lives in style_mixer_data.json in the pack folder, so back it up from the sidebar before any re-clone.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| style_entries | COMFY_AUTOGROW_V3 | — | |
| on_duplicate | COMBO | Skip (keep first) | 4 options: Skip (keep first), Skip (keep last), Sum weights, Average weights |
| weight_mode | COMBO | As-is | 4 options: As-is, Normalize (sum to 1.0), Normalize (max to 1.0), Equal weights |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| blend_json | STRING | — |
| prompt | STRING | — |
| negative | STRING | — |