CMK Pipe Set Face Result
Push a processed face image back onto the pipe
- pipe
- image
- pipe
pipe and image in, pipe out. The image is stored under image_face, and also under image_final.
If you've read the detailer sibling of this node, you already know the shape - and the difference is one word. Face modules and detailer modules each stamp their own result key (image_face, image_detailer) but both claim image_final, because whichever one ran last is genuinely the final image. That last-writer-wins on a single key is how the pack's output stage knows what to save without being told which order you chained the modules in.
Again, image is left alone. The original generation stays available for comparisons and for the visualiser's before/after panels.
Why a face-specific node exists
Face processing in this pack is a family: FaceRebuild (InstantID-driven identity replacement with mask and pasteback), FaceProcess (a restore-or-detail switch), FaceSwap with its own ContentGuard, plus the toolbox-level Face Select / Crop / Mask / Restore chain. They all end with an image that has to rejoin the main pipe. Rather than one generic setter with a confusing name, the pack has one per family so the graph reads honestly.
This one is also the parent class of CMK Pipe Set Face Process Result - same behaviour, subclassed purely so the name records where the node belongs in the chain. If you're staring at both in the node menu wondering which to use, the answer is "the one that matches the module you're inside."
When it matters
You'd reach for it when you take face processing out of the packaged modules. The common one: you want to run a face swap or a restore on a face crop, then put the whole image back into the CMK pipeline. The face module returns an image; something has to reattach it to the bus, and this is the node that does it without pretending the result is a detailer result.
It also matters for cache hygiene. CMK's detailer and FaceProcess boundaries are backed by branch caches whose entries only validate when their dependency manifest matches the branch revisions actually materialised. Wrapping a hand-built face stage in the right result node is what keeps that contract intact - a custom node that mutates image_final out of band gives you a boundary that hits on stale content.
Installing the pack
Manager route: search CMK Flow in ComfyUI Manager, install the entry by CMKFlow, restart ComfyUI. Registry package name is cmk-flow, and the pack does not care what the install folder ends up being called.
Git route, 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
Success message is CMK dependency check: OK. That installer resolves the interpreter ComfyUI is actually running and installs requirements.txt there - important on Desktop installs, where standalone-env and ComfyUI/.venv can both exist. Nothing here is a model, so weights are still your own; the pack's resource checker will tell you exactly which files the bundled workflows want and can fetch the ones with a clean public source.
The pack expects Vue Nodes / Nodes 2.0 enabled, and Execution → Live preview method: auto if you want live previews during sampling. This node is under CMK/Developer/, the pack's internal wiring category - it does not appear in the Flow Browser, only in the node search.
Two cautions
Face work is the part of this pack that carries the sharpest edges. If you're using the FaceSwap paths, be aware there's a mandatory local ContentGuard - NudeNet plus InsightFace age estimation - that hard-stops explicit content, estimated under-18 faces, and source faces under a conservative 25 threshold, with no bypass in the public UI. It's local, it's deliberate, and a swap that refuses to run is usually the guard doing its job rather than a missing model.
Second, licensing, if you're building something you intend to sell. InsightFace's library is MIT but its pretrained models are not, and that restriction flows through to every tool built on them. Worth knowing before your face stage becomes load-bearing in a commercial pipeline.
And the standing bundle warning: a value written here is a snapshot. If the output looks like the previous face, confirm which image actually landed on image_final.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | CMK_PIPE | — | |
| image | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipe | CMK_PIPE | — |