Nodes/CMK Flow/CMK LoRA ZIT Pack -Pipe-
ComfyUI Node

CMK LoRA ZIT Pack -Pipe-

Bundling LoRAs for Z-Image Turbo in One Socket

By CMKFlow·Created 3 months ago·Updated a day ago· 6
CMK LoRA ZIT Pack -Pipe-
  • lora_stack
  • LoRA ZIT
◄active_loras—►
◄trigger_words—►

There's a specific kind of graph rot that sets in around LoRA work. You've got a stack loader, an on/off list, strengths, and trigger words - and now every sampler, every refiner and every detailer needs all four of those. You copy the wires. You miss one. Your refiner silently samples without the LoRA that defines the entire style, and you spend an evening wondering why the second pass looks like a different picture.

CMK LoRA ZIT Pack -Pipe- is CMK's answer: bundle the LoRA state into one typed socket, wire the socket, stop copying wires.

It's also an officially internal node - category CMK/Internal - so it's not in the beginner's browsing path. You'll see it inside CMK's flows and subgraphs, and this article exists mainly because somebody's workflow threw a missing-node error naming it.

What it takes, what it gives

Three required inputs, all forceInput:

  • lora_stack (LORA_STACK) - the stack itself, typically from a LoRA stack loader or a LoRA Manager subgraph.
  • active_loras (STRING) - a text summary of which LoRAs are on.
  • trigger_words (STRING) - the trigger terms those LoRAs want in your prompt.

One output: LoRA ZIT (CMK_LORA_ZIT_PIPE).

That's the whole node. It packs the three values into a dict with family: "z_image_turbo" and returns it. Total source: one helper function and a subclass.

The family field is the point

The pack has a sibling, CMK LoRA SDXL Pack -Pipe-, with the same three inputs and output type CMK_LORA_SDXL_PIPE. Same code path, one string different: "sdxl" versus "z_image_turbo".

That single field is why there are two nodes instead of one. CMK Flow keeps SDXL, Z-Image Turbo and HYBRID as mechanically separate generation paths - the README states it plainly, and you can see it in the socket types. CMK Flow · 01 START HERE · Create Image has separate LoRA SDXL and LoRA ZIT optional inputs, and separate PROCESS SDXL / PROCESS ZIT outputs. A ZIT bundle can't be wired into an SDXL input, because a Z-Image Turbo LoRA on an SDXL checkpoint gives you noise, not a subtle style shift. The type system is doing the babysitting.

If you're running the HYBRID path - SDXL builds the composition, Z-Image Turbo finishes - you'd wire both bundles, each to its own input, and the flow routes them to the correct half.

There's a second reason ZIT gets its own bundle, and it's a settings one. Z-Image Turbo is a guidance-distilled model: it wants a CFG of essentially 1.0, because the guidance is baked into the weights rather than applied at sample time. Once CFG stops being a dial you can push, LoRA strength becomes your main handle on how hard a concept hits - which makes carrying per-family LoRA state and strengths in a typed bundle more useful here than it is on a plain SDXL path, not less.

Why trigger_words travels with the stack

This is the quietly good idea. Trigger words aren't a property of your prompt; they're a property of the LoRA. Keeping them in the same object as the stack means that when the LoRA is active, its triggers are available to whatever consumes the bundle - instead of depending on you to remember that this style LoRA needs ohwx style in the positive prompt, spelled correctly, at the right position.

The strings are trimmed on the way in (str(value or "").strip()). That matters more than it sounds: this bundle participates in the flow's cache identity, and a trailing space would be enough to invalidate a branch.

Install

ComfyUI Manager → search CMK Flow → install the CMKFlow entry → restart. Manual, ComfyUI fully closed:

git clone https://github.com/CMKFlow/cmk_nodes.git custom_nodes/cmk_nodes
python3 custom_nodes/cmk_nodes/scripts/install_cmk_requirements.py

CMK dependency check: OK is the finish line. That second command is mandatory on a manual clone - a git clone never runs pip on its own.

The dependency that actually bites here

The README is candid about this one: the optional subgraphs LoRA Stack · SDXL, LoRA Stack · ZIT and LoRA Stack · Combined require ComfyUI LoRA Manager (willmiao's), and so do the reference workflows that use them. Without it, the rest of CMK still works - the README says so explicitly - but any workflow built on a LoRA Stack subgraph will be missing pieces.

That's a deliberate, acknowledged exception in a pack that otherwise brags about not needing a chain of unrelated custom nodes, and CMK credits LoRA Manager as an inspiration. It's an honest position: rather than reimplement a LoRA browser, they depend on the good one.

The practical consequence is the ordinary one for optional dependencies. A pipe-only workflow is clean. A LoRA-stack workflow has two places to go wrong, and "the node is missing" usually means LoRA Manager isn't installed rather than that CMK half-loaded.

Traps

forceInput on all three sockets means no typing values into widgets. Everything is a wire, including the strings - use a primitive/string node for hand-supplied trigger words.

Stack order is not validated. Whatever the upstream stack says is what the bundle declares. If your LoRAs apply in an order you didn't expect, look at the stack loader, not here.

CategoryCMK/Internal/LoRA

Inputs (3)

NameTypeDefaultDescription
lora_stackLORA_STACK—
active_lorasSTRING—
trigger_wordsSTRING—

Outputs (1)

NameTypeDescription
LoRA ZITCMK_LORA_ZIT_PIPE—