Nodes/ComfyUI_Eclipse/Save Video with Generation Data
ComfyUI Node

Save Video with Generation Data

The video save node that keeps the whole recipe attached

By r-vage·Created 10 months ago·Updated about 23 hours ago· 32
Save Video with Generation Data
  • images
  • audio
  • pipe_opt
  • images
featuresembed_workflow,save_gen_data,trim
embed_workflowtrue
save_generation_datatrue
remove_promptsfalse
save_workflow_as_jsonfalse
add_loras_to_promptfalse
enable_trimtrue
fps24.00
filename_prefixvideo/ComfyUI_Eclipse
formatmp4
codech264
crf19
presetveryfast
trim_modevideo_to_audio
loop_search_pct50
loop_blend_frames8
loop_metricncc
loop_trim_startfalse

You know how a ComfyUI PNG carries the entire workflow inside the file - drag it back onto the canvas and the whole graph rebuilds? Save Video with Generation Data is that idea, applied to MP4. It takes your frame batch, writes an h264 video, and bakes the generation recipe into the file alongside it: the raw ComfyUI workflow, an A1111-style parameters string, model hashes, and optionally a .json sidecar of the graph. If you've ever come back to a video a week later and had no idea what sampler, seed, or model made it, this node is the fix.

It's the video sibling of the Eclipse pack's Save Images node (same metadata engine, different container). It ships with the r-vage/ComfyUI_Eclipse pack, sits at the end of a video workflow - WanVideo, an image-to-video chain, whatever - and is also the pack's most feature-loaded output node, because it folds in trim and seamless-loop controls that other save nodes don't have.

How it works

The encoding is done in-process with PyAV (Python bindings that bundle the ffmpeg libraries), so there's no external ffmpeg binary to hunt down. It writes with movflags=use_metadata_tags+faststart, meaning the metadata tags land before the media and the file starts playing before it's fully downloaded.

Two metadata streams get attached:

  • Raw workflow: with embed_workflow on (default), it embeds ComfyUI's raw prompt and workflow data as MP4 tags - the same payload that normally lives in a PNG's text chunks, just re-homed in the container.
  • A1111 generation data: with save_generation_data on and a PIPE connected, it writes a parameters tag in the flat A1111 dialect - prompt, Negative prompt:, then Steps:, Sampler:, CFG scale:, Seed:, Size:, model name, and short SHA-256 hashes for models, VAEs, LoRAs, and embeddings. That's the format Civitai's uploader auto-detects, so your video page gets its generation tab filled in for free.

The trim/loop logic runs on the frames before encoding: align video to audio, trim both to the shorter, or find a seamless loop point. Loop matching searches the head and tail (downsampled to 512px for speed) and can crossfade the tail back into the start with loop_match_blend.

The inputs that matter

You only really set a handful; the rest are sensible defaults.

  • images (required) - your frame batch, straight out of the video decoder or sampler.
  • audio and pipe_opt (both optional) - a WAV-style AUDIO track, and a Generation Data PIPE. That PIPE is what unlocks everything: without it, no parameters tag and no generation placeholders. It's the single most important optional input.
  • filename_prefix - defaults to video/ComfyUI_Eclipse, supports placeholders like %today, %basemodel, %seed, %sampler_name, %steps. video/%today/%basemodel_%seed gives you an organized, reproducible output tree.
  • fps, crf (lower = higher quality, 19 is a good default), preset - your encode dials.
  • The feature chips (embed_workflow, save_generation_data, remove_prompts, save_workflow_as_json, add_loras_to_prompt, enable_trim) - toggles that hide/show the trim widgets and control what gets embedded.

Output is the trimmed or looped images batch; since this is an output node with a resizable video preview, you mostly ignore it.

Installing it

The usual Eclipse route - either ComfyUI Manager (search "ComfyUI_Eclipse") or:

cd ComfyUI/custom_nodes
git clone https://github.com/r-vage/ComfyUI_Eclipse
pip install -r ComfyUI_Eclipse/requirements.txt

then restart ComfyUI.

Here's the gotcha the README won't warn you about: this node imports PyAV (av) at module load, but av is not in requirements.txt or pyproject.toml. On a fresh environment the whole pack can fail to register nodes with No module named 'av' in the server log. The fix is one line:

pip install av

(On the Windows portable build, that's python_embeded\python.exe -m pip install av.)

Common issues

  • Eclipse nodes don't appear after install - check the server log for an import error; av is the usual culprit on clean installs.
  • Old shared workflows won't load - r-vage's earlier packs (RvTools, RvTools_v2) are dead, and v4.0 removed all legacy node names. You'll see "unknown node type" for things like Float to Integer // RvTools. The pack ships a Workflow Migration Tool node and a CLI script (python tools/migrate_workflow.py <workflow.json>) to auto-upgrade them with backups. It's the single most common way people hit this pack, and the migration tool is the fix.
  • Civitai doesn't parse your workflow - the Comfy parser sometimes chokes on a complex raw graph. Disable embed_workflow and the A1111 parameters tag stays as the unambiguous generation-data source.
  • Audio fails but video survives - by design. A bad audio track logs a warning and the MP4 still saves with video, so don't be alarmed if you see a SaveVideoData warning in the log.

One trap worth naming: if you feed it just frames with no PIPE, save_generation_data quietly does nothing and generation placeholders fall back to readable names like seed. Want provenance? Wire up a Generation Data pipe.

Category🌒 Eclipse/ Video

Inputs (21)

NameTypeDefaultDescription
imagesIMAGERequired batch of video frames.
featuresSTRINGembed_workflow,save_gen_data,trimFeature state used by the combo-chip interface.
embed_workflowBOOLEANtrueEmbed raw ComfyUI prompt and workflow metadata.
save_generation_dataBOOLEANtrueEmbed A1111-compatible parameters when PIPE is connected.
remove_promptsBOOLEANfalseBlank both prompts in generation metadata.
save_workflow_as_jsonBOOLEANfalseWrite the workflow beside the MP4 as JSON.
add_loras_to_promptBOOLEANfalseAppend used LoRA names and weights to positive prompt metadata.
enable_trimBOOLEANtrueEnable trim and loop controls.
fpsFLOAT24.001–240Output video frame rate.
filename_prefixSTRINGvideo/ComfyUI_EclipseRelative output prefix. Supported placeholders: %today, %date, %time, %Y, %y, %m/%M, %d/%D, %H, %S, %basemodel, %model, %seed, %sampler_name, %scheduler, %steps, %cfg, %denoise, %clip_skip.
formatCOMBOmp4Output container format.
codecCOMBOh264Output video codec.
crfINT190–51Quality factor; lower values give higher quality.
presetCOMBOveryfastH.264 compression-speed preset.
trim_modeCOMBOvideo_to_audioAlign video/audio or find a seamless loop point.
loop_search_pctINT501–99Percentage of head/tail frames searched for a loop match.
loop_blend_framesINT80–60Tail frames blended toward the loop start.
loop_metricCOMBOnccSimilarity metric used for loop-point detection.
loop_trim_startBOOLEANfalseSearch both the beginning and end for the closest loop pair.
audiooptAUDIOOptional audio track.
pipe_optoptPIPEOptional Generation Data PIPE for metadata and placeholders.

Outputs (1)

NameTypeDescription
imagesIMAGEFrames after trim or loop processing.