Save Image (api)
The request-driven saver that skips the workflow metadata
- images
- TASK_DONE
Save Image (api) is the output end of the bmad nodes request system, and it exists to solve a specific problem: when a caller is driving ComfyUI over its API, you don't want the normal "Save Image" behavior of embedding the whole workflow as PNG metadata and naming files by counter. You want clean files, deterministic names tied to the request, and a record of what was produced that another process can read. That's this node.
It saves your images as PNGs with no metadata - just pixels - under a filename derived from a SHA-256 hash of the request id plus your resource_name. It then registers those filenames in the request's status JSON (the one CreateRequestMetadata created), tagged under resource_name. Finally it emits a TASK_DONE token on its output, which is exactly what the next node wants to hear.
The inputs that matter
images- the IMAGE batch to save.resource_name- the logical name for the output (default"image"). It's part of the hashed filename and the key under which files appear in the request JSON, so give it something meaningful if a caller will look for it ("result", "mask", "preview").
Output: TASK_DONE. Wire it to SetRequestStateToComplete, which flips the request status to "complete" once everything's saved.
Save Image (api) --TASK_DONE--> SetRequestStateToComplete
This is also why the node needs CreateRequestMetadata elsewhere in the workflow: the saver reads the current request id to build the hash and find the status file. Run it without one and it raises - that's by design, not a bug.
How it works, briefly
The hash is sha256(request_id + resource_name), so the same request + same resource name always maps to the same base filename, with a counter suffix for batch frames (_00001_.png etc.). Everything lands in ComfyUI's output directory. The metadata that core "Save Image" would normally embed is deliberately stripped - that's the point of the "api" variant, so the files stay small and clean for programmatic consumption.
Honest take
Like all the API nodes in this pack, this is barebones by the author's own admission - the README says better, more complete API solutions exist elsewhere. If you're building a serious service, that's fair. But for a small internal setup where you want a request's outputs in a predictable, machine-readable spot, this works and has no extra dependencies to fight with.
Installing
Ships in comfyui_bmad_nodes. ComfyUI Manager - search "comfyui_bmad_nodes" (or "Bmad Nodes") - install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/bmad4ever/comfyui_bmad_nodes
cd comfyui_bmad_nodes
pip install -r requirements.txt
Restart after; no model files to download.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| resource_name | STRING | image | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| TASK_DONE | TASK_DONE | — |