Nodes/DIGIT Nodes/DIGIT Image Saver
ComfyUI Node

DIGIT Image Saver

Saving frames the way a VFX pipeline expects

By thedepartmentofexternalservices·Created 7 months ago·Updated 2 months ago· 0
DIGIT Image Saver
  • image
  • filepath
◄projekts_root▾►
◄project▾►
◄shot▾►
◄folder▾►
◄filename►
◄format▾►
◄tonemap▾►
◄quality95►
◄start_frame1001►
◄frame_pad4►
◄show_previewtrue►
◄save_workflow▾►
◄subfoldercomfy►
◄taskcomp►

The stock SaveImage node names your files ComfyUI_00001_.png in a flat output folder, which is fine until you're handing frames to a compositor, a Flame session, or a shot-based pipeline that expects project/shots/sh010/comfy/comp/10001_sh010_comp.1001.png. This node is built for that world: a VFX-folder convention with auto-incrementing frame numbers, EXR support with proper tone mapping, and workflow metadata saved alongside. If you've ever had to rename 400 files by hand before delivering, you already know why this exists.

It's clearly a studio tool - the pack it ships in comes from a shop that runs actual productions (the same PROJEKTS layout drives the Image Loader, the Video Saver, and the SRT nodes). For solo users it's a step up in organization; for anyone working with a review pipeline or a conform artist, it's the difference between "I'll email you the frames" and a deliverable.

How it works

The node writes to a structured root you pick as projekts_root (auto-detects common mounts, or set DIGIT_PROJEKTS_ROOTS to a colon-separated list of paths). Under that it walks project → shot → folder → filename, following the #####_name project pattern, and writes PREFIX_SHOT_TASK.FRAME.EXT. The frame number auto-increments: it scans for the highest existing frame and starts there, defaulting to start_frame 1001 with frame_pad 4.

The inputs that matter:

  • image - the IMAGE tensor. A batch saves as sequential frames.
  • projekts_root, project, shot, folder - the path controls. folder defaults to comfy/comp (subfolder/task combined); there are also optional subfolder and task string inputs if you want to set them separately.
  • filename - leave empty to get the automatic PREFIX_SHOT_TASK naming. Set it and frame number + extension get appended.
  • format - png, jpg, or exr.
  • tonemap - only for EXR: linear, sRGB, or Reinhard. EXR saves are full 32-bit float, and the pack handles the VFX convention of inverted alpha (RGBA with alpha inverted on disk, so it round-trips with compositing apps that expect that).
  • quality - JPEG quality, 1–100, default 95.
  • start_frame / frame_pad - 1001 / 4 by default, so your first frame is .1001 and names zero-pad to four digits.
  • show_preview - toggle the ComfyUI preview panel.
  • save_workflow - ui, api, ui + api, or none. This writes a workflow JSON sidecar beside the first output - the durable record of exactly what generated the frame.

The one output is filepath - the full path of the saved file. Wire it into the Image Loader's filepath input to hand the just-saved frame right back into the graph.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/thedepartmentofexternalservices/comfyui-digit.git
cd comfyui-digit
pip install -r requirements.txt

(Or ComfyUI Manager → search comfyui-digit → install.) Restart ComfyUI, look under DIGIT.

Common issues

The safety rails are deliberate: if shot or project is still on a (no shots found) placeholder, the node raises instead of creating a junk folder, and path segments containing / or .. are rejected - path traversal is a real concern in multi-user setups and this node just refuses. If the status line shows a storage error instead of PROJEKTS OK, the root isn't mounted (common on Mac/LucidLink setups where the mount dropped) - check the mount before blaming the node.

The one thing to internalize: EXR output is meant for compositing, not for looking at in an image viewer. If you're saving EXRs and they look flat, that's the linear color space - that's correct behavior, and the tone mapping options exist precisely so you can convert back when you need a viewable file.

CategoryDIGIT

Inputs (15)

NameTypeDefaultDescription
imageIMAGE—
projekts_rootCOMBO1 options: /root/PROJEKTS
projectCOMBO1 options:
shotCOMBO1 options:
folderCOMBO1 options: comfy/comp
filenameSTRINGWhat to name the file. Leave empty for PREFIX_SHOT_TASK. Frame number and extension are added.
formatCOMBO3 options: png, jpg, exr
tonemapCOMBO3 options: linear, sRGB, Reinhard
qualityINT951–100—
start_frameINT10010–99999999—
frame_padINT41–8—
show_previewBOOLEANtrue—
save_workflowCOMBO4 options: ui, api, ui + api, none
subfolderoptSTRINGcomfy—
taskoptSTRINGcomp—

Outputs (1)

NameTypeDescription
filepathSTRING—