Nodes/Allma Nodes/Allma Save Image
ComfyUI Node

Allma Save Image

Put the renders where the project actually lives

By OliveiraNickolas·Created 2 months ago·Updated 21 days ago· 1
Allma Save Image
  • images
  • images
  • paths
◄directory►
◄filename_prefixComfyUI►

ComfyUI's built-in Save Image is deliberately fenced in. Every path it writes goes through folder_paths.get_save_image_path, which resolves against the output directory and refuses anything that tries to climb out of it. That fence is exactly right when you're running a server other people reach. It's also completely in the way when the renders belong in a project folder, on another disk, or next to the files they were made from.

Allma Save Image is that same node with the fence removed: same PNG, same embedded workflow, your destination.

The three inputs, and why they're enough

  • directory - where to write. An absolute path (/home/you/renders, D:\art) is used as given; a relative one (project/today) is taken from inside output/; empty means output/ itself. It expands %date:yyyy-MM-dd%, and missing folders are created for you.
  • filename_prefix - default ComfyUI, and the save time is appended as _DDMMYYYY_HHMMSS. That's a deliberate change from the stock node's _00001_ counter: a folder full of these sorts by when things were made instead of by how many times you hit queue. A prefix may also carry folders of its own (video/clip), which join the directory rather than the filename.
  • images - the image(s) to save.

Two outputs, which is one more than you'd expect. images is a straight pass-through, so the node can sit mid-chain. paths is a STRING carrying the paths it just wrote, newline-joined - wire it into a text display or anything downstream that wants to know where the file landed.

Nothing is ever overwritten

Seconds aren't a unique key - a batch of four lands in the same one, and two quick runs can too. So the node stamps the whole batch once (a set saved together reads as a set), gives batch members an index, and then, if a name genuinely exists, walks _1, _2, _3 until it's free. If you've ever lost a good render to a careless re-queue, this is the behaviour you wanted.

What it deliberately doesn't do

No format picker. PNG only. The author tried a format dropdown and removed it, reasoning that a node whose whole point is the destination shouldn't be busier than the node it stands in for. If you wanted JPEG or WebP out of the graph, look elsewhere.

No A1111 parameter block. It writes the prompt and extra_pnginfo PNG text chunks the stock node writes, so the file still drops back onto the canvas and rebuilds its workflow - and it respects --disable-metadata. What it doesn't write is the flat A1111-style parameters string plus resource hashes that CivitAI's uploader keys on for auto-linking your model and LoRAs. If posting to CivitAI with auto-detection is the goal, that's a different node's job. Write that down before you swap this in expecting it to solve both problems.

The thumbnail caveat, explained

ComfyUI's /view endpoint only serves output/, input/ and temp/ - it refuses absolute paths outright. So a file written to your project folder has no URL, and therefore no thumbnail in the node. The node's answer: if the destination is inside output/, it points at the real files and duplicates nothing. Anywhere else, it writes a small copy into temp/ purely to have something to show, which is exactly how ComfyUI's own Preview Image has always worked, and temp/ cleans itself up. If even that fails, it prints the paths instead of failing the run - the files are already on disk and a broken preview is no reason to lose a generation.

Install

Manager → search Allma Nodes (publisher allma-lab), or:

cd ComfyUI/custom_nodes
git clone https://github.com/OliveiraNickolas/AllmaNodes

Restart ComfyUI. No pip install at all - requirements.txt is empty, pyproject.toml declares no dependencies, and the node only uses json/os/re/datetime plus the numpy and PIL ComfyUI already ships. The pack's LLM nodes need an Allma backend running; this one is pure file I/O. The pack is written against the newer V3 API (from comfy_api.latest import io), so a very old ComfyUI will fail to import it entirely.

Where people get burned

An absolute path means that machine. Inside Docker or on a remote ComfyUI box, /mnt/renders is the container's filesystem, not your desktop's. If the file "isn't there," you're probably looking at the wrong side of a mount.

Permissions. The node raises explicitly - cannot create '<folder>' or no write permission on '<folder>' - rather than failing quietly, so the error names the folder and you check it. A container running as a non-root user is the usual culprit.

You moved the master and lost the workflow. The node keeps metadata, so the PNG is still your editable project file. Converting it, screenshotting it, or posting it somewhere that recompresses deletes the graph. Keep the PNG.

It always runs. It's an output node, so the cache works backwards from it and every queue writes a fresh file. That's the point - but an unfinished session will spray a folder quickly.

CategoryAllma

Inputs (3)

NameTypeDefaultDescription
imagesIMAGEThe images to save.
directorySTRINGWhere to write. Absolute (/home/you/renders, D:\\art) goes there directly; relative (project/today) is taken from inside output/. Empty means output/ itself. Supports %date:yyyy-MM-dd%.
filename_prefixSTRINGComfyUIStart of the filename. The save time is appended as _DDMMYYYY_HHMMSS, so files sort by when they were made and nothing is overwritten. Supports %date:yyyy-MM-dd%.

Outputs (2)

NameTypeDescription
imagesIMAGE—
pathsSTRING—