{"id": "h3-keyframes", "revision": 0, "last_node_id": 20, "last_link_id": 23, "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": [23]}], "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"}, {"id": 20, "type": "H3LoraStack", "pos": [-256.77029360967185, 0], "size": [300.0, 250.0], "flags": {}, "order": 0, "mode": 0, "title": "LoRA stack (empty = stock)", "inputs": [{"name": "model", "type": "MODEL", "link": 23}], "outputs": [{"name": "model", "type": "MODEL", "links": [7, 9], "slot_index": 0}], "properties": {"Node name for S&R": "H3LoraStack"}, "widgets_values": ["None", 1.0, "None", 1.0, "None", 1.0, "None", 1.0]}], "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, 20, 0, 10, 0, "MODEL"], [8, 9, 0, 10, 1, "CONDITIONING"], [9, 20, 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"], [23, 1, 0, 20, 0, "MODEL"]], "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}