ComfyUI Node

Blend Style

Mix up to 16 styles and get a ready-to-use prompt

By Immac·Created 6 months ago·Updated 6 months ago· 0
Blend Style
  • style_entries
  • blend_json
  • prompt
  • negative
on_duplicateSkip (keep first)
weight_modeAs-is

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 weights and Average weights merge 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, and Equal weights flattens 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.

CategoryImmac/Style Mixer

Inputs (3)

NameTypeDefaultDescription
style_entriesCOMFY_AUTOGROW_V3
on_duplicateCOMBOSkip (keep first)4 options: Skip (keep first), Skip (keep last), Sum weights, Average weights
weight_modeCOMBOAs-is4 options: As-is, Normalize (sum to 1.0), Normalize (max to 1.0), Equal weights

Outputs (3)

NameTypeDescription
blend_jsonSTRING
promptSTRING
negativeSTRING