Nodes/CMK Flow/CMK Result Bridge -Pipe-
ComfyUI Node

CMK Result Bridge -Pipe-

The adapter that lets old CMK modules eat a new neutral result

By CMKFlow·Created 3 months ago·Updated a day ago· 6
CMK Result Bridge -Pipe-
  • PROCESS
  • PROCESS

Display name CMK Result Bridge -Pipe-, one input, one output, and about twenty lines of Python. It is the least glamorous node in the pack and one of the few you'd genuinely notice the absence of, because it's the seam that keeps older CMK consumers working after the introduction of the family-neutral result contract.

The mechanism

The input is PROCESS typed CMK_RESULT_PIPE, the output is PROCESS typed CMK_PIPE. If you're looking at that and thinking "those are the same dict", you're right - the bridge checks that the incoming process is family-neutral (result_contract == "family_neutral") and fails loudly if it isn't, then hands on a shallow copy under the legacy type name.

Why bother? Because CMK's post-processing story is that a boundary ends the family-dependent section and produces a neutral result, but a lot of consumers - the save module being the obvious one - were written against the older family-agnostic pipe type. Rather than retrofit every consumer with a dual-type socket, the pack puts a one-line adapter at the seam. The copy is deliberate too: a consumer that mutates the process dict it received shouldn't be able to reach back up and change the neutral result everyone else is reading.

The source's own docstring calls it an "internal adapter for existing model-independent consumers", and that's the honest framing. This is not a node you drop into a workflow to solve a user-facing problem. It's part of how the pack reproduces the context-object pattern - one wire carrying model, process, image and log - while keeping the family separation intact. If you've read about CMK's pipe architecture and wondered how old modules keep loading, this node and CMK SDXL Result Bridge -Pipe- are the answer.

Inputs and outputs

  • PROCESS (CMK_RESULT_PIPE, required) → PROCESS (CMK_PIPE). That's the entire surface.

Installing

Manager is the easy route: search CMK Flow, install the CMKFlow entry, restart. Manually:

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

The install helper matters more than usual here because it locates the Python environment ComfyUI Desktop actually uses - system Python, standalone-env and ComfyUI/.venv can all coexist, and CMK pulls real dependencies (ultralytics, insightface, onnxruntime, nudenet, segment-anything, opencv). A manual clone never runs pip on its own; that second command is part of the install, not optional.

Two gotchas

First, it's a DEV_ONLY boundary node, so it doesn't appear in the normal node search - it stays available in saved workflows and shows up under the shared boundary runtime name. Second, it guards one direction only. Handing it a raw SDXL process raises "CMK Result Bridge requires a family-neutral PROCESS", which is the intended behaviour: that raw process belongs to the SDXL-specific bridge, not this one. If you're wiring a plain SDXL branch into a model-independent consumer and hitting that error, you've picked the wrong bridge, not a broken one.

CategoryCMK/Developer/Legacy Bridge

Inputs (1)

NameTypeDefaultDescription
PROCESSCMK_RESULT_PIPE—

Outputs (1)

NameTypeDescription
PROCESSCMK_PIPE—