Nodes/Image MetaHub Save Node/MetaHub Save Video
ComfyUI Node

MetaHub Save Video

Give your VHS output the metadata it never had

By LuqP2·Created 9 months ago·Updated a day ago· 15
MetaHub Save Video
  • filenames
  • filenames
seed
steps
cfg
sampler_name
scheduler
model_name
positive
negative
denoise
vae_name
frame_rate0.00
frame_count0
motion_model_name
user_tags
notes
project_name
generation_time_override

Images have had reproducible metadata baked into PNG chunks for years. Video never got the memo. When Video Helper Suite (VHS) spits out an MP4, the file is essentially anonymous - no seed, no prompt, no model, no idea what AnimateDiff motion module made it. If you generate video regularly and ever need to reproduce or organize it later, that's a real problem. MetaHub Save Video is the fix: it takes the VHS_FILENAMES output from VHS's Video Combine node and injects the same dual metadata the image nodes write - an A1111/Civitai-style description plus a full JSON comment with generation params, workflow, and analytics.

The mechanism is the interesting part, because it explains both why this node is cheap and where it can break. It doesn't re-encode anything. It finds ffmpeg on your system and runs it with -c copy, which copies the video streams untouched and only rewrites the container's metadata fields: description for the human-readable A1111 format, comment for the JSON, and a title with the seed. No re-encoding means it's fast and lossless, and existing metadata is preserved via -map_metadata 0.

How to wire it

filenames (VHS_FILENAMES) is the only required input - connect it after VHS Video Combine. It's designed as a pass-through: the node also outputs filenames, so you can chain it into other video save/annotate nodes without breaking the flow.

Everything else is optional and defaults to auto-detect or null:

  • frame_rate and frame_count - 0 means auto-detect from the file via ffprobe. Leave them alone unless auto-detection misbehaves.
  • motion_model_name - the AnimateDiff or other motion model used; the extractor tries to find it in the graph, but for nonstandard setups you can just type it.
  • The usual generation overrides - seed, steps, cfg, sampler_name, scheduler, model_name, positive, negative, denoise, vae_name - for when auto-detection misses something in an unusual graph.
  • user_tags, notes, project_name and generation_time_override (feed it the MetaHub Timer's elapsed_time) for the Image MetaHub Pro organization and analytics side.

The gotcha the README won't tell you

The video node shells out to ffmpeg (and ffprobe for auto-detection), and it searches your PATH plus a handful of common Windows install locations. The README's install section doesn't mention this at all - the dependency is in the source, not the docs. So if you're on a bare setup that never installed ffmpeg, the node will run, save nothing useful, and the metadata injection will quietly fail. If you've ever processed video anywhere on this machine you almost certainly have ffmpeg already; if not, that's the first thing to check when your video comes out metadata-less.

Installing

Same pack, one install covers all five nodes. ComfyUI Manager, search ImageMetaHub Save, restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/LuqP2/ImageMetaHub-ComfyUI-Save.git

No Python dependencies beyond ComfyUI's own stack and no models to download. The rest of the pack's troubleshooting applies too - "model hash is 0000000000" and undetected LoRAs are the same story here as on the image nodes, and standard LoraLoader nodes are what the extractor understands.

Categoryvideo/save

Inputs (18)

NameTypeDefaultDescription
filenamesVHS_FILENAMES
seedoptINTOverride seed
stepsoptINTOverride steps
cfgoptFLOATOverride CFG scale
sampler_nameoptSTRINGOverride sampler name
scheduleroptSTRINGOverride scheduler
model_nameoptSTRINGOverride model filename
positiveoptSTRINGOverride positive prompt
negativeoptSTRINGOverride negative prompt
denoiseoptFLOATOverride denoise strength
vae_nameoptSTRINGOverride VAE filename
frame_rateoptFLOAT0.000–120Video frame rate (FPS). 0 = auto-detect from file
frame_countoptINT0Number of frames. 0 = auto-detect from file
motion_model_nameoptSTRINGMotion model name (AnimateDiff, etc.)
user_tagsoptSTRINGUser tags (comma-separated)
notesoptSTRINGNotes
project_nameoptSTRINGProject name
generation_time_overrideoptFLOATTimestamp from MetaHub Timer Node

Outputs (1)

NameTypeDescription
filenamesVHS_FILENAMES