γ½οΈ Majoor Save Image πΎ
SaveImage, but it keeps a stopwatch on every render
- images
- geninfo_override
The short version
Majoor Save Image is a drop-in replacement for ComfyUI's built-in SaveImage node. Same job - write your PNGs to the output folder with the prompt and workflow JSON baked in - but it adds one thing the core node won't give you: generation_time_ms, embedded right in the PNG text chunks. That number is what the Majoor Assets Manager sidebar (the pack this node ships in) uses so you can sort, filter, and find outputs by how long they took to render.
Honest framing: if you never open the Assets Manager sidebar, this is still a perfectly good SaveImage that happens to write an sRGB ICC profile into its files. But the real point is the pair - the node feeds the library. Open the pack's sidebar, and every render you saved through this node shows up with its timing, prompt, and workflow ready to browse or drag back onto the canvas.
Why the extra metadata matters
ComfyUI's culture runs on "workflow included" - the prompt and workflow JSON get stuffed into every PNG as text chunks, which is exactly how you drag an old image onto the canvas and reconstruct the whole graph. Core SaveImage already does that. What Majoor adds is the timing dimension and the majoor_geninfo chunk, which makes the difference between "I know this took a while" and "I know this exact render took 14.2 seconds and here's the seed." If you're reviewing batches or building a dataset, that's not a nicety, it's the point.
How it works
When you run the node, it writes the standard chunks - prompt, workflow - plus:
generation_time_ms- elapsed time since the prompt startedCreationTime- an ISO timestamp- a
majoor_geninfochunk, if you've fed it from Majoor Gen Info Override
The auto-detection is the neat part. Leave generation_time_ms at -1 (the default) and the node reads the prompt start time from the pack's runtime_activity module, which hooks into the ComfyUI prompt lifecycle. You get an accurate wall-clock measurement with zero wiring. Want to record something else - say, a render you resumed? Just type the number in milliseconds.
One thing worth knowing: ComfyUI's frontend only rewrites %date% placeholders in the prefix for its own core save nodes, so the Majoor devs had to handle it server-side. The node resolves %date:...% tokens itself, which means prefixes like Majoor_%date:%Y-%m-%d% just work here.
Inputs that matter
images(IMAGE) - the batch you're saving. Same as core SaveImage.filename_prefix(STRING, defaultMajoor) - filename prefix, supports the usual ComfyUI placeholders including%date:...%.generation_time_ms(INT, default-1) - leave at-1to auto-detect, or set it explicitly.geninfo_override(MAJOOR_GENINFO) - optional; wire it from Majoor Gen Info Override when you want the recorded generation info to be explicit instead of auto-traced.
It's an output node, so there are no output sockets - just the save action. ComfyUI shows the saved images in the UI result, same as SaveImage.
Install
ComfyUI Manager β search "Majoor Assets Manager" β install β restart. Or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager
cd ComfyUI-Majoor-AssetsManager
pip install -r requirements.txt
The pack is heavier than it looks at a glance - aiohttp, aiosqlite, PyAV, watchdog, and friends - because it's a full media library, not just these three nodes. The save node itself only needs the runtime deps above, and ComfyUI Manager installs those for you.
Gotchas
- If you launch ComfyUI with
--disable-metadata, the extra chunks aren't written at all. Check your launch flags before assuming the node is broken. - The sidebar won't pick up new files until it rescans - hit Ctrl+S in the Assets Manager tab.
generation_time_msshowing 0 means the runtime hook hadn't recorded a prompt start, usually from an oddly-queued render. Not a real problem, and an explicit value fixes it.
This node is the boring half of the pack, and that's the compliment. It's a core SaveImage that also keeps receipts - and once you've used the library it feeds, you'll miss the receipts when you go back.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | The images to save. | |
| filename_prefix | STRING | Majoor | Prefix for the saved file. Supports ComfyUI formatting placeholders. |
| generation_time_msopt | INT | -1 | Generation time in milliseconds. -1 = auto-detect from prompt lifecycle. |
| geninfo_overrideopt | MAJOOR_GENINFO | Explicit geninfo override from Majoor Gen Info Override. |
Outputs (0)
No outputs