Nodes/Majoor Assets Manager/〽️ Majoor Save Video 🎬
ComfyUI Node

〽️ Majoor Save Video 🎬

One node for MP4, GIF, or WebP β€” with metadata that survives

By MajoorWaldiΒ·Created 9 months agoΒ·Updated 4 days agoΒ· 127
〽️ Majoor Save Video 🎬
  • images
  • video
  • geninfo_override
  • audio
    β—„filename_prefixMajoorVideoβ–Ί
    β—„formatmp4 (h264)β–Ί
    β—„frame_rate24β–Ί
    β—„loop_count0β–Ί
    β—„generation_time_ms-1β–Ί
    β—„crf19β–Ί
    β—„save_first_frametrueβ–Ί

    The short version

    Majoor Save Video is the video sibling of Majoor Save Image. Feed it a batch of IMAGE frames or a VIDEO input and it writes an MP4 (h264), GIF, or WebP to your output folder - embedding generation timing plus the full prompt and workflow metadata so the Majoor Assets Manager library can find and reconstruct the clip later. If you've ever done the "SaveVideo, then re-encode, then realize the workflow didn't survive" dance, this node is the shortcut.

    How it works

    MP4 goes through PyAV (av) - the same library ComfyUI's native SaveVideo uses. The node encodes frames as h264, tags the stream BT.709 so colors stay correct in players, and writes prompt, workflow, generation_time_ms, and CreationTime straight into the MP4 container via movflags=use_metadata_tags. That's the key difference from most exporters: the metadata lives inside the file, not in a sidecar, so it survives copies, renames, and uploads.

    GIF and WebP are a different story. Those formats have no reliable metadata slot, so the node encodes them with Pillow and - if you leave save_first_frame on, which is the default - drops a PNG sidecar of the first frame carrying the full metadata. The Assets Manager pairs the sidecar with the animation automatically. Browse the folder by hand and you'll see the .png sitting next to the .gif; that's not a stray file, it's the metadata store.

    Inputs that matter

    • images (IMAGE) - batch of frames to encode. The alternative to video.
    • video (wildcard) - a VIDEO input from a loader or CreateVideo. When connected, its native frame rate and audio are used automatically. This socket is also happy to accept an AUDIO input routed into it, native SaveVideo style.
    • format - mp4 (h264), gif, or webp. Default is mp4.
    • frame_rate (default 24) - FPS for IMAGE batches; ignored when the VIDEO input carries its own rate.
    • loop_count (default 0) - loop count for GIF/WebP, 0 = loop forever. Does nothing for MP4.
    • audio (AUDIO) - mux an audio track into the MP4.
    • crf (default 19, 0–63) - x264 Constant Rate Factor; lower = higher quality, bigger file. 19 is a sane middle ground.
    • generation_time_ms (-1 = auto-detect) and geninfo_override - same story as the image node; the latter takes a payload from Majoor Gen Info Override.
    • save_first_frame (default true) - the metadata PNG sidecar for GIF/WebP.

    One rule that'll trip you once: at least one of images or video must be connected. If neither is, the node silently writes nothing rather than erroring - easy to miss when you're rearranging wires.

    Install

    Same pack as the other two nodes. ComfyUI Manager β†’ search "Majoor Assets Manager" β†’ install β†’ restart, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager
    cd ComfyUI-Majoor-AssetsManager
    pip install -r requirements.txt
    

    PyAV is in requirements.txt, so the manual install pulls it automatically. If your MP4 encode ever dies with an av import error, that's the dependency to check first.

    Gotchas

    • MP4 h264 encoding is slow for long frame batches - that's x264 doing its job, not a bug. For quick drafts, drop to GIF or a lower frame count.
    • For GIF/WebP, don't go hunting for metadata in the file itself. It isn't there. The PNG sidecar is your metadata store, and the Assets Manager handles the pairing for you.
    • On ComfyUI Desktop (the Electron build), the Floating Viewer may not pop out to another monitor until you allow window.open("about:blank") popups in the host - the README has a dedicated workaround. Browser-based ComfyUI doesn't need it.

    It's the most genuinely useful of the three nodes if you do any video at all. Native SaveVideo gets you the MP4 but not the metadata that survives; Majoor Save Video gets you both, plus GIF/WebP in the same node.

    CategoryMajoor

    Inputs (11)

    NameTypeDefaultDescription
    filename_prefixSTRINGMajoorVideoβ€”
    formatCOMBOmp4 (h264)3 options: mp4 (h264), gif, webp
    imagesoptIMAGEBatch of frames to encode as video.
    videoopt*A VIDEO input, or AUDIO routed into this socket (native SaveVideo style).
    frame_rateoptFLOAT241–120FPS – ignored when a VIDEO input already carries its own frame rate.
    loop_countoptINT00–100β€”
    generation_time_msoptINT-1Generation time in ms. -1 = auto-detect.
    geninfo_overrideoptMAJOOR_GENINFOExplicit geninfo override from Majoor Gen Info Override.
    audiooptAUDIOAudio to mux into the video.
    crfoptINT190–63Constant Rate Factor (lower = higher quality).
    save_first_frameoptBOOLEANtrueSave a PNG sidecar of the first frame with full metadata.

    Outputs (0)

    No outputs