Eagle Save Video
A native-VIDEO output node, and the one combo it refuses
- video
- video
Video is where your disk goes and where your files get least identifiable. A Wan or LTX clip is 5 seconds, several hundred megabytes, and named ComfyUI_00023_ until you rename it - which you won't. Eagle Save Video encodes the clip, registers it in your Eagle library with the prompt, the primary model, size, duration, FPS and the sampler settings where it can find them, and shows you the result in-node so you can decide whether it's worth keeping.
How it works
This node talks to ComfyUI's native VIDEO socket, not to an image batch. It checks that the object it got actually has a save_to() method and that ComfyUI's video API imports at all; if either fails you get a clear RuntimeError instead of a mystery. Encoding itself is ComfyUI's job - the node calls video.save_to(path, format=..., codec=..., metadata=...) and lets PyAV do the work. Eagle metadata comes from two directions: the encoder records size, duration and frame rate by asking the VIDEO object (get_dimensions(), get_duration(), get_frame_rate()), each wrapped in a try/except, and the annotation gets built by walking the graph upstream for prompt text and sampler values.
That upstream walk is the interesting part for video, because video workflows rarely look like an image KSampler. Prompt text is searched for as prompt, positive_prompt, positive_text, prompt_text, text_prompt, caption, description, text, with negative_prompt, negative_text, negative for the other side. And the model name - this is the bit that earns its keep - is chosen by scoring every model-like filename it finds upstream. Names containing t2v, i2v, v2v or fl2v get a big boost, unet_name and diffusion_model inputs score above ckpt_name, and anything matching vae, clip, text_encoder, qwen, t5, llama or vit takes a heavy penalty. On a modern Wan or LTX graph with a Qwen text encoder sitting next to the DiT, the tag you get is the video model, not the text encoder. Duration and FPS are rounded before writing (5.167 sec → 5.17 sec).
The inputs worth setting
video- the nativeVIDEOoutput of your video model's save/decode node. Passed straight through on thevideooutput, so it can stay mid-graph.format/codec-mp4(default),webm,mkv;auto(default),h264,av1.webm+h264is rejected outright with an explicit error telling you to pickautoorav1, because WebM doesn't carry H.264. Which codec actually works still depends on the PyAV/FFmpeg build in your ComfyUI environment, which is whyautois the sane default.eagle_folder_id- Copy Link on the Eagle folder, paste the part afterid=; blank files to the library root.http://127.0.0.1:41595/api/folder/listlists them.preview- plays the file back in the node with a seek bar after saving.save_local_copy- keep the encoded clip in ComfyUI's output folder or hand Eagle a temp file instead.
One structural thing: unlike the image node, there's no batch handling here. One VIDEO in, one file out. If you're generating a grid of clips, one node per clip.
What's inside the file, and what isn't
The node forwards the prompt and workflow data to ComfyUI's own save_to(metadata=...), so whether the graph actually ends up inside the container depends on ComfyUI, the container and the codec - not on this pack. Treat the Eagle annotation as the reliable record and don't count on dragging an mp4 back onto the canvas. If you genuinely need the graph, save the workflow JSON alongside.
Installing it
ComfyUI Manager, search ComfyUI-EagleBridge or eagle-bridge. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/jambread-git/ComfyUI-EagleBridge
pip install -r ComfyUI-EagleBridge/requirements.txt
Requirements are just requests>=2.31.0 - encoding relies on the PyAV that ComfyUI already ships. Eagle must be running with a library open, on the same machine, since the node POSTs an absolute local path to 127.0.0.1:41595/api/item/addFromPath.
Where it goes wrong
Two errors you'll actually see. ComfyUI VIDEO API could not be imported means your ComfyUI predates the native VIDEO type - update it; this node can't help you on an old build. The connected value is not a native ComfyUI VIDEO object (missing save_to()) means you wired in something that only looks like video, typically an IMAGE batch from a frame-based pipeline; those need a save node that understands frames.
Beyond that: Eagle not running gives Could not connect to Eagle API, and because the client sets no request timeout, a hung Eagle blocks the queue rather than failing fast. Re-encoding a long clip and then importing it into Eagle is genuinely slow, so budget for it. If the preview player vanishes after you update the pack, restart ComfyUI and hard-refresh the browser - the player is bundled JavaScript, and stale front-end state is the usual culprit.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| video | VIDEO | — | |
| 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/Video/%date%/ | Supports %date%, %time%, %datetime%, %model%. |
| format | COMBO | mp4 | 3 options: mp4, webm, mkv |
| codec | COMBO | auto | 3 options: auto, h264, av1 |
| save_local_copy | BOOLEAN | true | — |
| preview | BOOLEAN | true | Show an in-node video player after saving. |
| memo | STRING | — | |
| website | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |