Nodes/ComfyUI-EagleBridge/Eagle Save Video
ComfyUI Node

Eagle Save Video

A native-VIDEO output node, and the one combo it refuses

By jambread-git·Created 30 days ago·Updated 23 days ago· 1
Eagle Save Video
  • video
  • video
◄eagle_folder_id►
◄file_name_template%datetime%_%rand%►
◄local_subfolderEagleBridge/Video/%date%/►
◄formatmp4►
◄codecauto►
◄save_local_copytrue►
◄previewtrue►
◄memo►
◄website►

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 native VIDEO output of your video model's save/decode node. Passed straight through on the video output, so it can stay mid-graph.
  • format / codec - mp4 (default), webm, mkv; auto (default), h264, av1. webm + h264 is rejected outright with an explicit error telling you to pick auto or av1, because WebM doesn't carry H.264. Which codec actually works still depends on the PyAV/FFmpeg build in your ComfyUI environment, which is why auto is the sane default.
  • eagle_folder_id - Copy Link on the Eagle folder, paste the part after id=; blank files to the library root. http://127.0.0.1:41595/api/folder/list lists 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.

CategoryEagleBridge

Inputs (10)

NameTypeDefaultDescription
videoVIDEO—
eagle_folder_idSTRINGPaste 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_templateSTRING%datetime%_%rand%Supports %date%, %time%, %datetime%, %index%, %rand%.
local_subfolderSTRINGEagleBridge/Video/%date%/Supports %date%, %time%, %datetime%, %model%.
formatCOMBOmp43 options: mp4, webm, mkv
codecCOMBOauto3 options: auto, h264, av1
save_local_copyBOOLEANtrue—
previewBOOLEANtrueShow an in-node video player after saving.
memoSTRING—
websiteSTRING—

Outputs (1)

NameTypeDescription
videoVIDEO—