DIGIT Image Saver
Saving frames the way a VFX pipeline expects
- image
- filepath
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.
folderdefaults tocomfy/comp(subfolder/task combined); there are also optionalsubfolderandtaskstring inputs if you want to set them separately. - filename - leave empty to get the automatic
PREFIX_SHOT_TASKnaming. Set it and frame number + extension get appended. - format -
png,jpg, orexr. - tonemap - only for EXR:
linear,sRGB, orReinhard. 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
.1001and names zero-pad to four digits. - show_preview - toggle the ComfyUI preview panel.
- save_workflow -
ui,api,ui + api, ornone. 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.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| projekts_root | COMBO | 1 options: /root/PROJEKTS | |
| project | COMBO | 1 options: | |
| shot | COMBO | 1 options: | |
| folder | COMBO | 1 options: comfy/comp | |
| filename | STRING | What to name the file. Leave empty for PREFIX_SHOT_TASK. Frame number and extension are added. | |
| format | COMBO | 3 options: png, jpg, exr | |
| tonemap | COMBO | 3 options: linear, sRGB, Reinhard | |
| quality | INT | 951–100 | — |
| start_frame | INT | 10010–99999999 | — |
| frame_pad | INT | 41–8 | — |
| show_preview | BOOLEAN | true | — |
| save_workflow | COMBO | 4 options: ui, api, ui + api, none | |
| subfolderopt | STRING | comfy | — |
| taskopt | STRING | comp | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| filepath | STRING | — |