Nodes/CMK Flow/CMK Save Project Image
ComfyUI Node

CMK Save Project Image

A save node that files your image under the right folder while you sleep

By CMKFlow·Created 3 months ago·Updated 2 days ago· 6
CMK Save Project Image
  • MODEL (opt)
  • PROCESS
  • IMAGE
  • LOG
  • MODEL
  • PROCESS
  • IMAGE
  • LOG
  • FULLPATH
◄SAVE ENABLEDtrue►
◄FILENAME PREFIXimage►
◄OUTPUT FOLDER►
◄USE DATE FOLDERtrue►

CMK Save Project Image is the finish line of a CMK Flow chain, and its one genuinely nice idea is that you don't tell it where to save. It reads PROCESS and works that out itself.

What it does

It writes a PNG and hands the same four wires straight back out, and it's an output node, so the path shows up on the node itself. The folder is assembled under ComfyUI's output/ like this:

OUTPUT FOLDER / <automatic folders from PROCESS> / <date> / {prefix}_00001.png

The automatic part comes from your process metadata: Text2Image or Inpaint if the image was generated, ImageProcessing if it came from a pixel-based path such as CMK Image Load and Resize -Pipe- - plus a folder per processing stage that actually ran, in a fixed order: Detailer, InstantID, FaceSwap, FaceProcess, FaceRebuild. So a portrait that went through InstantID and a detail pass lands under Text2Image/InstantID/Detailer/2026-10-05/, and the duplicate-avoidance logic means you won't get InstantID/InstantID if you also typed it into OUTPUT FOLDER.

It also writes a .txt sidecar next to the image containing the rendered LOG pipe. That's the part I'd keep it for - CMK's log blocks are structured, human-readable records of what each module decided, so your output folder ends up with a settings ledger next to every picture instead of you trying to remember whether FreeU was on.

Inputs and outputs

Optional sockets: MODEL (opt), PROCESS, IMAGE, LOG, then SAVE ENABLED (default true), FILENAME PREFIX (image), OUTPUT FOLDER (blank), USE DATE FOLDER (true). Outputs are MODEL, PROCESS, IMAGE, LOG plus FULLPATH - the last of which is the whole reason CMK Save Project Text exists: hand that string over and you can append your own notes to the same folder.

PROCESS is metadata-only here, so it accepts an SDXL, ZIT or already neutralised process. Relative OUTPUT FOLDER paths are cleaned and are not allowed to escape output/; anything trying to climb out raises instead of writing somewhere surprising.

Installing

Manager: search CMK Flow → install the CMKFlow entry → restart. Manual:

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

Run the resources check if any shipped workflow complains about missing models. Vue Nodes / Nodes 2.0 should be enabled - CMK's inputs and previews assume it.

Two things to know before you rely on it

Only the first image of a batch is saved. The node takes IMAGE[0], makes a PNG from it and moves on. If you're feeding it a batch - from a batch-size sampler or a video path - you'll get one file and wonder where the rest went. Use SaveImage alongside it while you're iterating on batches; this node's contract is the project file, not the batch dump.

SAVE ENABLED = false writes nothing at all - no file, no sidecar, no folder creation, just the wires passing through with an empty FULLPATH. Handy as a global kill switch on a chain you're still building, and it's a true bypass: nothing downstream of the save should be relying on that path existing.

One more for the pile: the LOG sidecar is only as good as the log pipe you feed it. If you're using this node standalone in your own graph rather than inside a CMK Flow chain, PROCESS must be a real CMK process dict - a bare image and a filename won't satisfy it.

CategoryCMK/Flow/Output

Inputs (8)

NameTypeDefaultDescription
MODEL (opt)optCMK_MODEL_PIPE—
PROCESSopt*—
IMAGEopt*—
LOGopt*—
SAVE ENABLEDoptBOOLEANtrue—
FILENAME PREFIXoptSTRINGimage—
OUTPUT FOLDERoptSTRING—
USE DATE FOLDERoptBOOLEANtrue—

Outputs (5)

NameTypeDescription
MODELCMK_MODEL_PIPE—
PROCESSCMK_PIPE—
IMAGEIMAGE—
LOGCMK_LOG_PIPE—
FULLPATHSTRING—