Eagle Save Image
File your render before you forget what made it
- image
- image
Save Image gives you ComfyUI_00417_.png in a folder with four thousand other files. Great if you enjoy archaeology. Eagle Save Image does the same write, then hands the file to Eagle - the local asset manager a lot of people in this hobby end up on once their library passes a few tens of thousands of images - with the prompt, model, seed and sampler scraped out of your graph and pasted into Eagle as a searchable annotation plus a tag. You get to search "that red-haired one, cfg 4.5, seed ending 88" later instead of scrolling.
It's also a normal output node that passes the IMAGE straight through, so it isn't a dead end. Chain one after your base render and another after an upscale, pointed at two different Eagle folders, and your library keeps the stages apart. That's the workflow this node is built for.
How it works
Two steps, in order. First it encodes the image to disk - ComfyUI's output folder if save_local_copy is on, the temp folder otherwise - and embeds generation metadata into the file where the format allows. Second, it makes a local HTTP call: POST http://127.0.0.1:41595/api/item/addFromPath with the absolute path, a name, your tags, the annotation text, the destination folderId and any website URL. Eagle then imports its own copy into its library.
The metadata isn't magic. The node receives ComfyUI's API-format prompt graph (hidden input), walks upstream from itself, finds the sampler node, and pulls seed, steps, cfg, sampler_name and scheduler off it, plus the positive and negative text through the sampler's conditioning links. Then it walks in search of a model filename. On a batch of four you get four files, suffixed _00 through _03, each registered separately.
Two things surprise people. Eagle tags get one tag - the first model name it finds, nothing else. And the extraction is best-effort: if a custom node hides the prompt somewhere the walker doesn't look, your annotation comes through with blanks and nothing tells you why.
The inputs worth setting
eagle_folder_id- the only field you must get right. In Eagle, right-click the target folder → Copy Link → you gethttp://localhost:41595/folder?id=MU2LXX7PLCV2P. Paste just the part afterid=. Leave it blank to dump everything in the library root. Not sure of the ID? Openhttp://127.0.0.1:41595/api/folder/listin a browser while Eagle is running and read it off the JSON. The string is passed through asfolderIdwith no name lookup, so pasting a folder name won't land where you meant.format/quality/lossless_webp-webp(default),png,jpg.quality(1–100, default 95) applies to lossy WebP and JPEG only; PNG ignores it.lossless_webpoverrides quality for WebP.save_local_copy- on keeps the file in ComfyUI's output library, off writes to temp and lets Eagle import from there.file_name_templateandlocal_subfolder-%datetime%_%rand%by default; the subfolder default isEagleBridge/Image/%date%/and also accepts%model%(falls back toUnknownModel).memoandwebsite- a note appended to the annotation and a URL stored on the Eagle item. Both optional, both handy for "which client was this for".
Pick PNG if you care about getting the graph back
Here's the part worth reading twice. In this ecosystem the PNG is the project file - the workflow travels inside it as text chunks, and dragging it back onto the canvas rebuilds the graph. The source embeds that for PNG (real prompt and workflow chunks) and for WebP fakes a ComfyUI-style EXIF shim. JPEG gets nothing at all, because the JPEG branch in the code writes pixels and no metadata whatsoever. So: WebP's default is fine for browsing and disk space, but if you ever want to drag a keeper back into ComfyUI and re-run it, save PNG. And if metadata is off server-wide (--disable-metadata, or the "disable saving prompt metadata" setting), nothing is embedded regardless of format.
Installing it
ComfyUI Manager, search ComfyUI-EagleBridge or eagle-bridge (it's on the Comfy Registry under that name). Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/jambread-git/ComfyUI-EagleBridge
pip install -r ComfyUI-EagleBridge/requirements.txt
The only declared dependency is requests>=2.31.0. Then start Eagle with a library open, start ComfyUI, and hard-refresh the browser if the node looks stale.
Where it goes wrong
Eagle not running is the big one: you get Could not connect to Eagle API at http://127.0.0.1:41595/api and the whole queue step fails. The client deliberately sets no timeout, so a wedged Eagle doesn't error out - it just sits there holding the render. Run Eagle on the same machine as ComfyUI; the file path you hand it is a local path.
Eagle deduplicates by file content, not filename, so re-running the same seed with a freshly timestamped name can look like the save silently failed. Change the seed to test. And the security note in the README is real: this node makes the ComfyUI backend write files and ping a local API, so don't hand workflow execution to strangers on a remote instance.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| eagle_folder_id | STRING | Paste the Eagle destination folder ID. Leave blank to save to the Eagle Library Root. To find folder IDs, open http://127.0.0.1:41595/api/folder/list in a browser while Eagle is running. | |
| file_name_template | STRING | %datetime%_%rand% | Supports %date%, %time%, %datetime%, %index%, %rand%. |
| local_subfolder | STRING | EagleBridge/Image/%date%/ | Supports %date%, %time%, %datetime%, %model%. |
| format | COMBO | webp | 3 options: webp, png, jpg |
| quality | INT | 951–100 | — |
| lossless_webp | BOOLEAN | false | — |
| save_local_copy | BOOLEAN | true | — |
| preview | BOOLEAN | true | — |
| memo | STRING | — | |
| website | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |