{ "id": "h3-keyframes", "revision": 0, "last_node_id": 20, "last_link_id": 22, "nodes": [ { "id": 1, "type": "H3ModelLoaderAny", "pos": [ 73.22970639032815, 0 ], "size": [ 340, 82 ], "flags": {}, "order": 0, "mode": 0, "inputs": [ { "localized_name": "model_name", "name": "model_name", "type": "COMBO", "widget": { "name": "model_name" }, "link": null } ], "outputs": [ { "localized_name": "MODEL", "name": "MODEL", "type": "MODEL", "slot_index": 0, "links": [ 7, 9 ] } ], "title": "H3 model (fl2va)", "properties": { "Node name for S&R": "H3ModelLoaderAny" }, "widgets_values": [ "MiniMax-H3-fl2va-Q5_1.gguf" ] }, { "id": 2, "type": "H3ClipLoaderAny", "pos": [ 73.22970639032815, 116 ], "size": [ 340, 106 ], "flags": {}, "order": 1, "mode": 0, "inputs": [ { "localized_name": "clip_name", "name": "clip_name", "type": "COMBO", "widget": { "name": "clip_name" }, "link": null }, { "localized_name": "type", "name": "type", "type": "COMBO", "widget": { "name": "type" }, "link": null } ], "outputs": [ { "localized_name": "CLIP", "name": "CLIP", "type": "CLIP", "slot_index": 0, "links": [ 1 ] } ], "title": "Text encoder", "properties": { "Node name for S&R": "H3ClipLoaderAny" }, "widgets_values": [ "MiniMax-H3-encoder-Q4_K_M.gguf", "minimax" ] }, { "id": 3, "type": "VAELoader", "pos": [ 73.22970639032815, 256 ], "size": [ 340, 82 ], "flags": {}, "order": 2, "mode": 0, "inputs": [ { "localized_name": "vae_name", "name": "vae_name", "type": "COMBO", "widget": { "name": "vae_name" }, "link": null } ], "outputs": [ { "localized_name": "VAE", "name": "VAE", "type": "VAE", "slot_index": 0, "links": [ 2, 16 ] } ], "title": "Video VAE", "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "VAELoader" }, "widgets_values": [ "minimax_h3_video_vae_fp16.safetensors" ] }, { "id": 4, "type": "VAELoader", "pos": [ 73.22970639032815, 372 ], "size": [ 340, 82 ], "flags": {}, "order": 3, "mode": 0, "inputs": [ { "localized_name": "vae_name", "name": "vae_name", "type": "COMBO", "widget": { "name": "vae_name" }, "link": null } ], "outputs": [ { "localized_name": "VAE", "name": "VAE", "type": "VAE", "slot_index": 0, "links": [ 18 ] } ], "title": "Audio VAE", "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "VAELoader" }, "widgets_values": [ "minimax_h3_audio_vae_fp32.safetensors" ] }, { "id": 8, "type": "H3Keyframes", "pos": [ 840, 0 ], "size": [ 420, 430 ], "flags": {}, "order": 11, "mode": 0, "inputs": [ { "localized_name": "clip", "name": "clip", "type": "CLIP", "link": 1 }, { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 2 }, { "localized_name": "image_1", "name": "image_1", "shape": 7, "type": "IMAGE", "link": 3 }, { "localized_name": "image_2", "name": "image_2", "shape": 7, "type": "IMAGE", "link": 4 }, { "localized_name": "image_3", "name": "image_3", "shape": 7, "type": "IMAGE", "link": 5 }, { "localized_name": "image_4", "name": "image_4", "shape": 7, "type": "IMAGE", "link": null }, { "localized_name": "image_5", "name": "image_5", "shape": 7, "type": "IMAGE", "link": null }, { "localized_name": "image_6", "name": "image_6", "shape": 7, "type": "IMAGE", "link": null }, { "localized_name": "prompt", "name": "prompt", "type": "STRING", "widget": { "name": "prompt" }, "link": null }, { "localized_name": "width", "name": "width", "type": "INT", "widget": { "name": "width" }, "link": null }, { "localized_name": "height", "name": "height", "type": "INT", "widget": { "name": "height" }, "link": null }, { "localized_name": "length", "name": "length", "type": "INT", "widget": { "name": "length" }, "link": null }, { "localized_name": "positions", "name": "positions", "type": "STRING", "widget": { "name": "positions" }, "link": null } ], "outputs": [ { "localized_name": "positive", "name": "positive", "type": "CONDITIONING", "slot_index": 0, "links": [ 6 ] }, { "localized_name": "latent", "name": "latent", "type": "LATENT", "slot_index": 0, "links": [ 14 ] }, { "localized_name": "info", "name": "info", "type": "STRING", "slot_index": 0, "links": [] } ], "properties": { "Node name for S&R": "H3Keyframes" }, "widgets_values": [ "Handheld amateur phone video, late summer evening: a quiet suburban backyard at dusk. A weathered steel A-frame swing set with two rubber seats on chains stands on patchy mown grass, its paint faded and rust showing at the joints. Tall unmown weeds run along a wire fence at the property line, dark trees behind it, a pale blue sky streaked with pink and orange sunset cloud above. Warm fading daylight, long soft shadows, no people in frame. Quiet outdoor room tone, crickets, a dog barking far off.", 544, 960, 243, "0%, 50%, 100%" ], "title": "KEYFRAMES - anchors at any position" }, { "id": 10, "type": "BasicGuider", "pos": [ 1310.6563039723655, 421.3816925734024 ], "size": [ 300, 78 ], "flags": {}, "order": 13, "mode": 0, "inputs": [ { "localized_name": "model", "name": "model", "type": "MODEL", "link": 7 }, { "localized_name": "conditioning", "name": "conditioning", "type": "CONDITIONING", "link": 8 } ], "outputs": [ { "localized_name": "GUIDER", "name": "GUIDER", "type": "GUIDER", "slot_index": 0, "links": [ 11 ] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "BasicGuider" }, "widgets_values": [], "title": "Guider" }, { "id": 11, "type": "KSamplerSelect", "pos": [ 1310.6563039723655, 141.3816925734024 ], "size": [ 300, 82 ], "flags": {}, "order": 7, "mode": 0, "inputs": [ { "localized_name": "sampler_name", "name": "sampler_name", "type": "COMBO", "widget": { "name": "sampler_name" }, "link": null } ], "outputs": [ { "localized_name": "SAMPLER", "name": "SAMPLER", "type": "SAMPLER", "slot_index": 0, "links": [ 12 ] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "KSamplerSelect" }, "widgets_values": [ "res_multistep" ], "title": "Sampler algorithm" }, { "id": 12, "type": "BasicScheduler", "pos": [ 1310.6563039723655, 257.3816925734024 ], "size": [ 300, 130 ], "flags": {}, "order": 10, "mode": 0, "inputs": [ { "localized_name": "model", "name": "model", "type": "MODEL", "link": 9 }, { "localized_name": "scheduler", "name": "scheduler", "type": "COMBO", "widget": { "name": "scheduler" }, "link": null }, { "localized_name": "steps", "name": "steps", "type": "INT", "widget": { "name": "steps" }, "link": null }, { "localized_name": "denoise", "name": "denoise", "type": "FLOAT", "widget": { "name": "denoise" }, "link": null } ], "outputs": [ { "localized_name": "SIGMAS", "name": "SIGMAS", "type": "SIGMAS", "slot_index": 0, "links": [ 13 ] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "BasicScheduler" }, "widgets_values": [ "simple", 20, 1 ], "title": "Scheduler + steps" }, { "id": 13, "type": "RandomNoise", "pos": [ 1310.6563039723655, 1.3816925734024175 ], "size": [ 300, 106 ], "flags": {}, "order": 8, "mode": 0, "inputs": [ { "localized_name": "noise_seed", "name": "noise_seed", "type": "INT", "widget": { "name": "noise_seed" }, "link": null } ], "outputs": [ { "localized_name": "NOISE", "name": "NOISE", "type": "NOISE", "slot_index": 0, "links": [ 10 ] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "RandomNoise" }, "widgets_values": [ 90210, "randomize" ], "title": "Seed" }, { "id": 14, "type": "SamplerCustomAdvanced", "pos": [ 1310.6563039723655, 533.3816925734025 ], "size": [ 340, 190 ], "flags": {}, "order": 14, "mode": 0, "inputs": [ { "localized_name": "noise", "name": "noise", "type": "NOISE", "link": 10 }, { "localized_name": "guider", "name": "guider", "type": "GUIDER", "link": 11 }, { "localized_name": "sampler", "name": "sampler", "type": "SAMPLER", "link": 12 }, { "localized_name": "sigmas", "name": "sigmas", "type": "SIGMAS", "link": 13 }, { "localized_name": "latent_image", "name": "latent_image", "type": "LATENT", "link": 14 } ], "outputs": [ { "localized_name": "output", "name": "output", "type": "LATENT", "slot_index": 0, "links": [ 15, 17 ] }, { "localized_name": "denoised_output", "name": "denoised_output", "type": "LATENT", "slot_index": 0, "links": [] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "SamplerCustomAdvanced" }, "widgets_values": [], "title": "Run sampler" }, { "id": 15, "type": "VAEDecode", "pos": [ 1697.1675302245237, 1.381692573402418 ], "size": [ 280, 78 ], "flags": {}, "order": 15, "mode": 0, "inputs": [ { "localized_name": "samples", "name": "samples", "type": "LATENT", "link": 15 }, { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 16 } ], "outputs": [ { "localized_name": "IMAGE", "name": "IMAGE", "type": "IMAGE", "slot_index": 0, "links": [ 19 ] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "VAEDecode" }, "widgets_values": [], "title": "Decode video" }, { "id": 16, "type": "VAEDecodeAudio", "pos": [ 1697.1675302245237, 113.38169257340242 ], "size": [ 280, 78 ], "flags": {}, "order": 16, "mode": 0, "inputs": [ { "localized_name": "samples", "name": "samples", "type": "LATENT", "link": 17 }, { "localized_name": "vae", "name": "vae", "type": "VAE", "link": 18 } ], "outputs": [ { "localized_name": "AUDIO", "name": "AUDIO", "type": "AUDIO", "slot_index": 0, "links": [ 20 ] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "VAEDecodeAudio" }, "widgets_values": [], "title": "Decode audio" }, { "id": 17, "type": "CreateVideo", "pos": [ 1697.1675302245237, 225.3816925734024 ], "size": [ 300, 106 ], "flags": {}, "order": 17, "mode": 0, "inputs": [ { "localized_name": "images", "name": "images", "type": "IMAGE", "link": 19 }, { "localized_name": "audio", "name": "audio", "shape": 7, "type": "AUDIO", "link": 20 }, { "localized_name": "fps", "name": "fps", "type": "FLOAT", "widget": { "name": "fps" }, "link": null }, { "localized_name": "bit_depth", "name": "bit_depth", "shape": 7, "type": "INT", "widget": { "name": "bit_depth" }, "link": null } ], "outputs": [ { "localized_name": "VIDEO", "name": "VIDEO", "type": "VIDEO", "slot_index": 0, "links": [ 21 ] } ], "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "CreateVideo" }, "widgets_values": [ 24, 8 ], "title": "Mux video + audio" }, { "id": 18, "type": "SaveVideo", "pos": [ 1697.1675302245237, 365.3816925734024 ], "size": [ 340, 106 ], "flags": {}, "order": 18, "mode": 0, "inputs": [ { "localized_name": "video", "name": "video", "type": "VIDEO", "link": 21 }, { "localized_name": "filename_prefix", "name": "filename_prefix", "type": "STRING", "widget": { "name": "filename_prefix" }, "link": null }, { "localized_name": "format", "name": "format", "type": "COMBO", "widget": { "name": "format" }, "link": null }, { "localized_name": "codec", "name": "codec", "type": "COMFY_DYNAMICCOMBO_V3", "widget": { "name": "codec" }, "link": null } ], "outputs": [ { "localized_name": "video", "name": "video", "type": "VIDEO", "links": null } ], "title": "SAVE", "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "SaveVideo" }, "widgets_values": [ "video/H3KF/KF", "auto", "auto" ] }, { "id": 7, "type": "LoadImage", "pos": [ 462.7633851468048, 750.7633851468049 ], "size": [ 323.8716796875, 340 ], "flags": {}, "order": 6, "mode": 0, "inputs": [ { "localized_name": "image", "name": "image", "type": "COMBO", "widget": { "name": "image" }, "link": null }, { "localized_name": "choose file to upload", "name": "upload", "type": "IMAGEUPLOAD", "widget": { "name": "upload" }, "link": null } ], "outputs": [ { "localized_name": "IMAGE", "name": "IMAGE", "type": "IMAGE", "slot_index": 0, "links": [ 5 ] }, { "localized_name": "MASK", "name": "MASK", "type": "MASK", "slot_index": 0, "links": [] } ], "title": "keyframe 3 (position 1 - the closing frame)", "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "LoadImage" }, "widgets_values": [ "example.png", "image" ] }, { "id": 5, "type": "LoadImage", "pos": [ 462.7633851468048, 0 ], "size": [ 330.2837890625, 341.38169257340235 ], "flags": {}, "order": 4, "mode": 0, "inputs": [ { "localized_name": "image", "name": "image", "type": "COMBO", "widget": { "name": "image" }, "link": null }, { "localized_name": "choose file to upload", "name": "upload", "type": "IMAGEUPLOAD", "widget": { "name": "upload" }, "link": null } ], "outputs": [ { "localized_name": "IMAGE", "name": "IMAGE", "type": "IMAGE", "slot_index": 0, "links": [ 3 ] }, { "localized_name": "MASK", "name": "MASK", "type": "MASK", "slot_index": 0, "links": [] } ], "title": "keyframe 1 (position 0 - the opening frame)", "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "LoadImage" }, "widgets_values": [ "example.png", "image" ] }, { "id": 6, "type": "LoadImage", "pos": [ 468.2901554404144, 374 ], "size": [ 315.1986183074266, 340 ], "flags": {}, "order": 5, "mode": 0, "inputs": [ { "localized_name": "image", "name": "image", "type": "COMBO", "widget": { "name": "image" }, "link": null }, { "localized_name": "choose file to upload", "name": "upload", "type": "IMAGEUPLOAD", "widget": { "name": "upload" }, "link": null } ], "outputs": [ { "localized_name": "IMAGE", "name": "IMAGE", "type": "IMAGE", "slot_index": 0, "links": [ 4 ] }, { "localized_name": "MASK", "name": "MASK", "type": "MASK", "slot_index": 0, "links": [] } ], "title": "keyframe 2 (position 0.5 - halfway)", "properties": { "cnr_id": "comfy-core", "ver": "0.30.0", "Node name for S&R": "LoadImage" }, "widgets_values": [ "example.png", "image" ] }, { "id": 9, "type": "H3ConditionStrength", "pos": [ 840, 464 ], "size": [ 419.8100172711572, 103.2366148531953 ], "flags": {}, "order": 12, "mode": 0, "inputs": [ { "localized_name": "conditioning", "name": "conditioning", "type": "CONDITIONING", "link": 6 }, { "localized_name": "visual_strength", "name": "visual_strength", "type": "FLOAT", "widget": { "name": "visual_strength" }, "link": null }, { "localized_name": "audio_strength", "name": "audio_strength", "type": "FLOAT", "widget": { "name": "audio_strength" }, "link": null } ], "outputs": [ { "localized_name": "CONDITIONING", "name": "CONDITIONING", "type": "CONDITIONING", "slot_index": 0, "links": [ 8 ] } ], "title": "Anchor strength (optional)", "properties": { "Node name for S&R": "H3ConditionStrength" }, "widgets_values": [ 0.999, 1 ] }, { "id": 19, "type": "MarkdownNote", "pos": [ 831.2089810017263, 623.1433506044893 ], "size": [ 444.31778929188295, 539.412780656304 ], "flags": {}, "order": 9, "mode": 0, "inputs": [], "outputs": [], "title": "Keyframes - read me", "properties": { "Node name for S&R": "MarkdownNote" }, "widgets_values": [ "## Keyframes at any position\n\nStock ComfyUI pins H3 keyframes to the **first and last frame only**. This\ngraph places as many as you like, anywhere.\n\n**How to use it**\n1. Connect one image per anchor to `image_1 .. image_6`.\n2. Give one position per image in `positions`, same order.\n * `0` = first frame, `0.5` = halfway, `1` = last frame\n * a value **above 1** is an absolute frame index (`121`)\n * `0, 0.5, 1` = start, middle, end\n3. Everything else is a normal H3 render.\n\n### It MOVES or it CUTS - and your images decide which\n\nGive it images with a plausible path between them (same place, different angle\nor framing) and H3 **interpolates**: a real move that arrives on time. Measured\non a 243-frame render with one anchor at frame 121, the closest frame to the\nanchor image was frame **122** - off by one - with no cut anywhere (peak\nframe-to-frame change 2.3x median).\n\nGive it images with **no** possible path (a kitchen and a diner) and H3 **cuts**,\nthen holds. That is not a bug and not a limit of this node: stock first/last\ndoes exactly the same with such a pair. It is the model doing the only sensible\nthing.\n\nBoth behaviours are useful. The second gives you a **timed shot change inside a\nsingle generation** - and because it is one generation, the audio runs unbroken\nstraight through the cut, with no voice re-derivation and no seam.\n\n### Notes\n* `positions` must have exactly one entry per connected image, or it errors.\n* Two anchors cannot land on the same frame.\n* Anchors are sorted for you; wiring order does not matter.\n* Frames follow H3's 17k+5 grid: 243 = ~10.1s, 362 = trained max ~15.1s.\n* **Anchor strength** (the optional node) exposes a core setting nothing else\n reaches. 1.0 feeds anchors in pristine; lower lets the model drift further\n from them. Leave it at 0.999 unless anchors feel too rigid.\n" ], "color": "#432", "bgcolor": "#653" } ], "links": [ [ 1, 2, 0, 8, 0, "CLIP" ], [ 2, 3, 0, 8, 1, "VAE" ], [ 3, 5, 0, 8, 2, "IMAGE" ], [ 4, 6, 0, 8, 3, "IMAGE" ], [ 5, 7, 0, 8, 4, "IMAGE" ], [ 6, 8, 0, 9, 0, "CONDITIONING" ], [ 7, 1, 0, 10, 0, "MODEL" ], [ 8, 9, 0, 10, 1, "CONDITIONING" ], [ 9, 1, 0, 12, 0, "MODEL" ], [ 10, 13, 0, 14, 0, "NOISE" ], [ 11, 10, 0, 14, 1, "GUIDER" ], [ 12, 11, 0, 14, 2, "SAMPLER" ], [ 13, 12, 0, 14, 3, "SIGMAS" ], [ 14, 8, 1, 14, 4, "LATENT" ], [ 15, 14, 0, 15, 0, "LATENT" ], [ 16, 3, 0, 15, 1, "VAE" ], [ 17, 14, 0, 16, 0, "LATENT" ], [ 18, 4, 0, 16, 1, "VAE" ], [ 19, 15, 0, 17, 0, "IMAGE" ], [ 20, 16, 0, 17, 1, "AUDIO" ], [ 21, 17, 0, 18, 0, "VIDEO" ] ], "groups": [ { "id": 1, "title": "Models", "bounding": [ 53.22970639032815, -66, 380, 528 ], "color": "#3f789e", "flags": {} }, { "id": 2, "title": "Keyframes", "bounding": [ 440, -66, 371.77892918825546, 1166.1450777202072 ], "color": "#3f789e", "flags": {} }, { "id": 3, "title": "Conditioning", "bounding": [ 820, -66, 460, 644 ], "color": "#3f789e", "flags": {} }, { "id": 4, "title": "Sampling", "bounding": [ 1290.6563039723655, -64.61830742659758, 380, 796 ], "color": "#3f789e", "flags": {} }, { "id": 5, "title": "Output", "bounding": [ 1677.1675302245237, -64.61830742659758, 371.7098445595859, 792.1623488773746 ], "color": "#3f789e", "flags": {} } ], "config": {}, "extra": { "ds": { "scale": 0.7237500000000002, "offset": [ 249.66328151986121, 472.4326079447307 ] } }, "version": 0.4 }