LC Save Video Metadata 🏷️
Stamp your video's prompt, seed, and models on the file before you share it
- pipe
- av_pipe
- metadata
- parameters
In this ecosystem, metadata isn't a nice-to-have - the image is the project file, and the workflow data lives in the PNG. Video is the awkward child of that convention: mp4s can't hold a ComfyUI graph the way PNGs can, so if you don't deliberately write it somewhere, your video's generation details evaporate the moment you close the session. LC Save Video Metadata is that "somewhere": it collects your prompts, seed, steps, sampler, models, and (optionally) a Civitai AIR reference into one LC_SAVE_META object that you hand to LC Save Video - or to LC123's Save Image - and it also prints the assembled A1111-style parameters string as a text output you can copy or log.
It's deliberately built on the same metadata dict type as the image pack's Save Metadata (that's the shared LC_SAVE_META type), so one metadata node feeds both LC Save Image and LC Save Video. The metadata essay in the KB spells out why this pattern matters: Civitai's uploader auto-detects the A1111-style parameters block in a PNG, and the whole sharing culture runs on "workflow included" - which for video means the sidecar JSON plus a first-frame PNG that Save Video writes using this node's output.
How it works
Feed it a pipe and it pulls the values out of it: the optional pipe socket accepts an image-side LC_PIPE, and av_pipe accepts an LC_AV_PIPE - widgets on the node override both. Every field works on a "0 or empty = fall back to the pipe" rule, so you can wire a pipe in and only override the pieces you want to change. seed_value of -1 means "use the pipe's seed if it has one," and notably it's a plain INT - deliberately no control-after-generate dropdown.
The civitai_air field is worth a warning of its own: paste an exact Civitai AIR URN or model URL. The tooltip's instruction is blunt - "do not invent version/file ids" - because the node stores the string as-is; it does no lookup. Garbage in, garbage in your metadata.
target (auto/image/video) controls whether video extras get included; auto includes fps/duration extras when they exist, so the same node output can serve a still save and a video save.
The outputs that matter
metadata(typeLC_SAVE_META) - wire this into LC Save Video'smetadatainput or LC123 Save Image.parameters(STRING) - the assembled A1111 line ("positive…, Negative prompt…, Steps:, Sampler:, CFG scale:, Seed:, Size:, Model:…") for display, logging, or manual pasting.
Fields you'll actually touch: positive/negative, seed_value, models (comma-separated model names in one field - the tooltip is explicit it's not a second widget), civitai_air, and extra_params if you want to append custom text to the parameters line.
How to install it
Ships in lonecatone23/ComfyUI_LC_AV_nodes (LC Audio_Video, MIT, by lonecatone23 - companion to ComfyUI_LC123_nodes; install as its own repo):
- ComfyUI Manager: search "LC Audio_Video" or
ComfyUI_LC_AV_nodes. - Manual:
cd ComfyUI/custom_nodes && git clone https://github.com/lonecatone23/ComfyUI_LC_AV_nodes, restart ComfyUI ([LC AV] total 16 nodes).
No downloads or extra packages.
Where it bites
The recurring mistake is expecting this node to save anything - it only builds the metadata object; the actual file write (sidecar JSON, container comment, Civitai still PNG) happens in LC Save Video when it receives this. And remember the Civitai route for video: Civitai reads PNG text chunks, not mp4 comments, so pair this with Save Video's civitai_still and upload the generated first-frame PNG. Without that still, all your careful AIR/model metadata has nowhere Civitai will actually see it.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| pipeopt | LC_PIPE | LC123 LC_PIPE. Prompts/seed/steps/size only. | |
| av_pipeopt | LC_AV_PIPE | LC_AV_PIPE. Widgets override both pipes. | |
| targetopt | COMBO | auto | auto = include video extras when fps/duration exist. Same metadata dict works on LC Save Image and LC Save Video. |
| positiveopt | STRING | Override pipe positive prompt. | |
| negativeopt | STRING | Override pipe negative prompt. | |
| seed_valueopt | INT | -1-1–18446744073709550000 | Seed. -1 = use pipe seed if present. Plain INT — no control-after-generate. |
| stepsopt | INT | 00–10000 | 0 = use pipe steps. |
| sampleropt | STRING | Empty = use pipe sampler_name. | |
| scheduleropt | STRING | Empty = use pipe scheduler. | |
| cfgopt | FLOAT | 0.000–100 | 0 = use pipe cfg_1. |
| widthopt | INT | 00–65536 | 0 = use pipe width. |
| heightopt | INT | 00–65536 | 0 = use pipe height. |
| denoiseopt | FLOAT | 0.000–1 | 0 = use pipe denoise. |
| modelsopt | STRING | Model names. One field, comma-separated. Not a second widget. | |
| civitai_airopt | STRING | Exact Civitai AIR URN paste or model URL. Optional. Do not invent version/file ids. | |
| extra_paramsopt | STRING | Appended to the parameters line. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| metadata | LC_SAVE_META | — |
| parameters | STRING | — |