CMK Pipe Set KSampler
The one-wire way to drop a latent into the pipe
- pipe
- latent
- pipe
This is a two-input, one-output node that does nothing clever, and that is the point. pipe in, latent in, pipe out - with your latent now parked inside the bundle under the names CMK's sampler path actually looks for.
You reach for it when a latent arrives from outside the CMK pipe line. The obvious case is an img2img or inpaint graph: you VAE-encode your own image, you have a real LATENT in hand, and the CMK sampler module is expecting to find one in the pipe. Without this node you'd be re-encoding through the pack's own prepare nodes just to get the value into the bus. With it, you drop it straight in.
The mechanism
It writes the same object under three keys: latent, latent_image, and latent_1st_pass. That's not indecision - different CMK nodes were written at different times against different key names, and this node populates all three so whichever one reads it finds it. If you're tracing a graph and wondering why the latent seems to exist twice, this is why.
It also declares IS_CHANGED returning False. Translated: this node never marks itself dirty, so ComfyUI treats it as unchanged between runs and skips re-evaluating it. For a pure dictionary write that's exactly right - there's nothing expensive here and nothing to invalidate. It also means the node won't force a downstream re-execution on its own; if you change something upstream of it, that change propagates normally, but the node itself is a free pass.
Output is the modified pipe, same wire, one socket. Nothing else. No boolean, no diagnostic, no log.
Installing the pack
Manager → search CMK Flow → install the CMKFlow entry → restart. Manually, from the folder containing main.py:
git clone https://github.com/CMKFlow/cmk_nodes.git custom_nodes/cmk_nodes
python3 custom_nodes/cmk_nodes/scripts/install_cmk_requirements.py
Wait for CMK dependency check: OK. A git clone never installs pip packages by itself, so that second command is not optional - the pack's imports include ultralytics, onnxruntime, insightface and segment-anything, and if the import of any of them fails, the pack's node mappings come up short and nodes vanish from the menu. On updates:
git -C custom_nodes/cmk_nodes pull --ff-only
python3 custom_nodes/cmk_nodes/scripts/install_cmk_requirements.py
Enable Vue Nodes / Nodes 2.0 in ComfyUI settings - the pack is built for it and falls back to degraded LiteGraph rendering without it.
This node sits under CMK/Developer/, which is the pack's internal plumbing category. It won't show up in the CMK Flow Browser (that catalogue only lists the guided CMK/Flow/ blueprints), so search the node menu for CMK Pipe Set.
Things worth knowing
The CMK_PIPE is a plain dictionary, and this node shallow-copies it and overwrites three keys. Anything already in those keys is gone. If you set a latent early in the graph and then run this node with a different one, the early value is what you'd expect - replaced, silently, no warning.
And the usual caution for every bus-style pack in ComfyUI: your graph now reads as one wire, so a wrong latent is invisible on the canvas. If an image comes out looking like a previous generation, the first thing to check is which latent actually landed in the pipe, not the sampler settings. Wire the latent out through a CMK Pipe Peek Preprocess Refiner (its latent_image output) or your favourite latent preview and look at it. Two minutes of that beats twenty minutes of re-running the sampler at different CFG values.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | CMK_PIPE | — | |
| latent | LATENT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipe | CMK_PIPE | — |