{"id": "d2e5a9f1-4b7c-4f3e-9a1d-gmanski-flowsimple", "revision": 0, "last_node_id": 21, "last_link_id": 21, "nodes": [{"id": 1, "type": "MarkdownNote", "pos": [-1600, -420], "size": [560, 900], "flags": {}, "order": 0, "mode": 0, "inputs": [], "outputs": [], "properties": {"Node name for S&R": "MarkdownNote"}, "widgets_values": ["## Gmanski Flow (Simple)\n\n**One flexible video template, three modes.** MiniMax H3's flow mode reads whichever image inputs you connect and switches automatically:\n\n| You connect | Mode | Result |\n|---|---|---|\n| Nothing | Text-to-video | H3 invents everything from the prompt alone |\n| Only **First frame** | Image-to-video | Animates that still image |\n| **First frame** + **Last frame** | First+last-frame-to-video | Generates the motion between two keyframes you choose |\n\nBoth **First frame** and **Last frame** below start unconnected (text-to-video). To switch modes, drag a wire from one of their **IMAGE** outputs into the matching socket on the **H3 node**.\n\nThis is a different tool from Kids Music Video H3 / Music Video H3, which use a *reference photo* to lock a registered Character's identity across a whole song. Gmanski Flow has no character system — it's a standalone one-shot video generator. Want character consistency? See **Gmanski Flow (Advanced)**, which adds that.\n\n### Run it\n1. Optionally connect First frame / Last frame (see table above).\n2. Edit the **prompt** on the H3 node — describe visual style, subject, action, camera, and audio (H3 generates real sound) in one block.\n3. Set **Duration (seconds)**.\n4. Queue. Find the result under `output/video/Gmanski/gmanski_flow_00001.mp4`.\n\n### Cost — read this before queueing\n- **Download**: ~43 GB (`minimax-h3-flow` pack). Shares its 21.5 GB base (text encoder + VAEs) with the other H3 templates if you already installed one of them.\n- **VRAM**: 48 GB+ recommended.\n- **Time**: runs at 20 steps by default (no extra download needed). **For 2x speed** (8 steps): run `gmanski-packs install minimax-h3-flow` in the Jupyter terminal, then right-click the **Turbo LoRA** node -> Mode -> Always, and change the Scheduler node's `steps` from 20 to 8.\n\n### Safety\nThis produces a local file only. Review it yourself before sharing it anywhere.\n\n### Models\n`gmanski-packs install minimax-h3-flow`.\n"], "title": "Read me: Gmanski Flow (Simple)", "color": "#432", "bgcolor": "#653"}, {"id": 2, "type": "LoadImage", "pos": [-1000, -420], "size": [320, 314], "flags": {}, "order": 1, "mode": 0, "inputs": [], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": []}, {"name": "MASK", "type": "MASK", "links": []}], "properties": {"Node name for S&R": "LoadImage"}, "widgets_values": ["example.png", "image"], "title": "First frame (optional — connect to enable Image-to-Video)"}, {"id": 3, "type": "LoadImage", "pos": [-1000, -60], "size": [320, 314], "flags": {}, "order": 2, "mode": 0, "inputs": [], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": []}, {"name": "MASK", "type": "MASK", "links": []}], "properties": {"Node name for S&R": "LoadImage"}, "widgets_values": ["example.png", "image"], "title": "Last frame (optional — connect too, for First+Last-Frame-to-Video)"}, {"id": 4, "type": "PrimitiveFloat", "pos": [-1000, 300], "size": [320, 60], "flags": {}, "order": 3, "mode": 0, "inputs": [{"name": "value", "type": "FLOAT", "link": null, "widget": {"name": "value"}}], "outputs": [{"name": "FLOAT", "type": "FLOAT", "links": [1]}], "properties": {"Node name for S&R": "PrimitiveFloat"}, "widgets_values": [5.0], "title": "Duration (seconds)"}, {"id": 5, "type": "ComfyMathExpression", "pos": [-1000, 400], "size": [320, 90], "flags": {}, "order": 4, "mode": 0, "inputs": [{"name": "values.a", "type": "FLOAT,INT,BOOLEAN", "link": 1}], "outputs": [{"name": "FLOAT", "type": "FLOAT", "links": []}, {"name": "INT", "type": "INT", "links": [7]}, {"name": "BOOL", "type": "BOOLEAN", "links": []}], "properties": {"Node name for S&R": "ComfyMathExpression"}, "widgets_values": ["max(5, round(a * 24)) + (5 - (max(5, round(a * 24)) % 17)) % 17"], "title": "Frame count (17n+5)"}, {"id": 6, "type": "UNETLoader", "pos": [500, 900], "size": [440, 90], "flags": {}, "order": 5, "mode": 0, "inputs": [{"name": "unet_name", "type": "COMBO", "link": null, "widget": {"name": "unet_name"}}, {"name": "weight_dtype", "type": "COMBO", "link": null, "widget": {"name": "weight_dtype"}}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [2]}], "properties": {"Node name for S&R": "UNETLoader", "models": [{"name": "minimax_h3_fl2va_pruned_int8_convrot.safetensors", "url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/diffusion_models/minimax_h3_fl2va_pruned_int8_convrot.safetensors", "directory": "diffusion_models"}]}, "widgets_values": ["minimax_h3_fl2va_pruned_int8_convrot.safetensors", "default"], "title": "MiniMax H3 flow checkpoint"}, {"id": 7, "type": "LoraLoaderModelOnly", "pos": [500, 1020], "size": [440, 90], "flags": {}, "order": 6, "mode": 4, "inputs": [{"name": "model", "type": "MODEL", "link": 2}, {"name": "lora_name", "type": "COMBO", "link": null, "widget": {"name": "lora_name"}}, {"name": "strength_model", "type": "FLOAT", "link": null, "widget": {"name": "strength_model"}}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [3]}], "properties": {"Node name for S&R": "LoraLoaderModelOnly", "models": [{"name": "minimax_h3_fl2v_turbo_8step_v1.0_comfyui_bf16.safetensors", "url": "https://huggingface.co/lightx2v/Minimax-h3-Turbo/resolve/main/minimax_h3_fl2v_turbo_8step_v1.0_comfyui_bf16.safetensors", "directory": "loras"}]}, "widgets_values": ["minimax_h3_fl2v_turbo_8step_v1.0_comfyui_bf16.safetensors", 1.0], "title": "Turbo LoRA — bypassed by default, see readme"}, {"id": 8, "type": "MiniMaxH3SigmaShift", "pos": [500, 1140], "size": [300, 110], "flags": {}, "order": 7, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 3}, {"name": "shift_video", "type": "FLOAT", "link": null, "widget": {"name": "shift_video"}}, {"name": "shift_audio", "type": "FLOAT", "link": null, "widget": {"name": "shift_audio"}}], "outputs": [{"name": "MODEL", "type": "MODEL", "links": [4, 8]}], "properties": {"Node name for S&R": "MiniMaxH3SigmaShift"}, "widgets_values": [12, 3], "title": "Sigma shift"}, {"id": 9, "type": "CLIPLoader", "pos": [500, 1280], "size": [440, 110], "flags": {}, "order": 8, "mode": 0, "inputs": [{"name": "clip_name", "type": "COMBO", "link": null, "widget": {"name": "clip_name"}}, {"name": "type", "type": "COMBO", "link": null, "widget": {"name": "type"}}, {"name": "device", "type": "COMBO", "link": null, "widget": {"name": "device"}}], "outputs": [{"name": "CLIP", "type": "CLIP", "links": [5]}], "properties": {"Node name for S&R": "CLIPLoader", "models": [{"name": "qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors", "url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/text_encoders/qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors", "directory": "text_encoders"}]}, "widgets_values": ["qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors", "minimax", "default"], "title": "MiniMax H3 text encoder"}, {"id": 10, "type": "VAELoader", "pos": [500, 1420], "size": [440, 60], "flags": {}, "order": 9, "mode": 0, "inputs": [{"name": "vae_name", "type": "COMBO", "link": null, "widget": {"name": "vae_name"}}], "outputs": [{"name": "VAE", "type": "VAE", "links": [6, 16]}], "properties": {"Node name for S&R": "VAELoader", "models": [{"name": "minimax_h3_video_vae_fp16.safetensors", "url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_video_vae_fp16.safetensors", "directory": "vae"}]}, "widgets_values": ["minimax_h3_video_vae_fp16.safetensors"], "title": "MiniMax H3 video VAE"}, {"id": 11, "type": "VAELoader", "pos": [500, 1510], "size": [440, 60], "flags": {}, "order": 10, "mode": 0, "inputs": [{"name": "vae_name", "type": "COMBO", "link": null, "widget": {"name": "vae_name"}}], "outputs": [{"name": "VAE", "type": "VAE", "links": [18]}], "properties": {"Node name for S&R": "VAELoader", "models": [{"name": "minimax_h3_audio_vae_fp32.safetensors", "url": "https://huggingface.co/Comfy-Org/MiniMax-H3/resolve/main/vae/minimax_h3_audio_vae_fp32.safetensors", "directory": "vae"}]}, "widgets_values": ["minimax_h3_audio_vae_fp32.safetensors"], "title": "MiniMax H3 audio VAE"}, {"id": 12, "type": "KSamplerSelect", "pos": [500, 1600], "size": [300, 60], "flags": {}, "order": 11, "mode": 0, "inputs": [{"name": "sampler_name", "type": "COMBO", "link": null, "widget": {"name": "sampler_name"}}], "outputs": [{"name": "SAMPLER", "type": "SAMPLER", "links": [12]}], "properties": {"Node name for S&R": "KSamplerSelect"}, "widgets_values": ["res_multistep"], "title": "Sampler (shared)"}, {"id": 13, "type": "BasicScheduler", "pos": [500, 1680], "size": [300, 130], "flags": {}, "order": 12, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 4}, {"name": "scheduler", "type": "COMBO", "link": null, "widget": {"name": "scheduler"}}, {"name": "steps", "type": "INT", "link": null, "widget": {"name": "steps"}}, {"name": "denoise", "type": "FLOAT", "link": null, "widget": {"name": "denoise"}}], "outputs": [{"name": "SIGMAS", "type": "SIGMAS", "links": [13]}], "properties": {"Node name for S&R": "BasicScheduler"}, "widgets_values": ["simple", 20, 1.0], "title": "Scheduler (20 steps — 8 if turbo LoRA enabled)"}, {"id": 14, "type": "MiniMaxH3ImageToVideo", "pos": [0, -420], "size": [520, 320], "flags": {}, "order": 13, "mode": 0, "inputs": [{"name": "clip", "type": "CLIP", "link": 5}, {"name": "vae", "type": "VAE", "link": 6}, {"name": "first_frame", "type": "IMAGE", "link": null}, {"name": "last_frame", "type": "IMAGE", "link": null}, {"name": "prompt", "type": "STRING", "link": null, "widget": {"name": "prompt"}}, {"name": "width", "type": "INT", "link": null, "widget": {"name": "width"}}, {"name": "height", "type": "INT", "link": null, "widget": {"name": "height"}}, {"name": "length", "type": "INT", "link": 7, "widget": {"name": "length"}}], "outputs": [{"name": "positive", "type": "CONDITIONING", "links": [9]}, {"name": "LATENT", "type": "LATENT", "links": [14]}], "properties": {"Node name for S&R": "MiniMaxH3ImageToVideo"}, "widgets_values": ["cinematic photorealistic style. A woman in a red coat walks along a rainy city street at night holding a clear umbrella, neon signs reflecting in the wet pavement. Steady rain, distant traffic hum, soft footsteps. Plain, unbranded clothing and signage: no logos, emblems, brand names, readable text or watermarks. Camera: static medium shot, slow push in.", 960, 544, 124], "title": "H3 node — prompt, size, and (optionally wired) keyframes"}, {"id": 15, "type": "RandomNoise", "pos": [600, -420], "size": [290, 82], "flags": {}, "order": 14, "mode": 0, "inputs": [{"name": "noise_seed", "type": "INT", "link": null, "widget": {"name": "noise_seed"}}], "outputs": [{"name": "NOISE", "type": "NOISE", "links": [10]}], "properties": {"Node name for S&R": "RandomNoise"}, "widgets_values": [12345, "randomize"], "title": "Seed"}, {"id": 16, "type": "BasicGuider", "pos": [600, -300], "size": [290, 46], "flags": {}, "order": 15, "mode": 0, "inputs": [{"name": "model", "type": "MODEL", "link": 8}, {"name": "conditioning", "type": "CONDITIONING", "link": 9}], "outputs": [{"name": "GUIDER", "type": "GUIDER", "links": [11]}], "properties": {"Node name for S&R": "BasicGuider"}, "widgets_values": [], "title": "Guider"}, {"id": 17, "type": "SamplerCustomAdvanced", "pos": [960, -420], "size": [300, 200], "flags": {}, "order": 16, "mode": 0, "inputs": [{"name": "noise", "type": "NOISE", "link": 10}, {"name": "guider", "type": "GUIDER", "link": 11}, {"name": "sampler", "type": "SAMPLER", "link": 12}, {"name": "sigmas", "type": "SIGMAS", "link": 13}, {"name": "latent_image", "type": "LATENT", "link": 14}], "outputs": [{"name": "LATENT", "type": "LATENT", "links": [15, 17]}], "properties": {"Node name for S&R": "SamplerCustomAdvanced"}, "widgets_values": [], "title": "Sample"}, {"id": 18, "type": "VAEDecode", "pos": [1320, -420], "size": [300, 46], "flags": {}, "order": 17, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 15}, {"name": "vae", "type": "VAE", "link": 16}], "outputs": [{"name": "IMAGE", "type": "IMAGE", "links": [19]}], "properties": {"Node name for S&R": "VAEDecode"}, "widgets_values": [], "title": "Decode picture"}, {"id": 19, "type": "VAEDecodeAudio", "pos": [1320, -340], "size": [300, 46], "flags": {}, "order": 18, "mode": 0, "inputs": [{"name": "samples", "type": "LATENT", "link": 17}, {"name": "vae", "type": "VAE", "link": 18}], "outputs": [{"name": "AUDIO", "type": "AUDIO", "links": [20]}], "properties": {"Node name for S&R": "VAEDecodeAudio"}, "widgets_values": [], "title": "Decode sound (H3's own native audio)"}, {"id": 20, "type": "CreateVideo", "pos": [1680, -420], "size": [280, 126], "flags": {}, "order": 19, "mode": 0, "inputs": [{"name": "images", "type": "IMAGE", "link": 19}, {"name": "audio", "type": "AUDIO", "link": 20}, {"name": "fps", "type": "FLOAT", "link": null, "widget": {"name": "fps"}}, {"name": "bit_depth", "type": "COMBO", "link": null, "widget": {"name": "bit_depth"}}], "outputs": [{"name": "VIDEO", "type": "VIDEO", "links": [21]}], "properties": {"Node name for S&R": "CreateVideo"}, "widgets_values": [24, 8, "sRGB"], "title": "Join into a video"}, {"id": 21, "type": "SaveVideo", "pos": [1680, -260], "size": [280, 200], "flags": {}, "order": 20, "mode": 0, "inputs": [{"name": "video", "type": "VIDEO", "link": 21}, {"name": "filename_prefix", "type": "STRING", "link": null, "widget": {"name": "filename_prefix"}}, {"name": "format", "type": "COMFY_DYNAMICCOMBO_V3", "link": null, "widget": {"name": "format"}}, {"name": "codec", "type": "COMFY_DYNAMICCOMBO_V3", "link": null, "widget": {"name": "codec"}}], "outputs": [], "properties": {"Node name for S&R": "SaveVideo"}, "widgets_values": ["video/Gmanski/gmanski_flow", "auto", "auto", "auto"], "title": "Save"}], "links": [[1, 4, 0, 5, 0, "FLOAT"], [2, 6, 0, 7, 0, "MODEL"], [3, 7, 0, 8, 0, "MODEL"], [4, 8, 0, 13, 0, "MODEL"], [5, 9, 0, 14, 0, "CLIP"], [6, 10, 0, 14, 1, "VAE"], [7, 5, 1, 14, 7, "INT"], [8, 8, 0, 16, 0, "MODEL"], [9, 14, 0, 16, 1, "CONDITIONING"], [10, 15, 0, 17, 0, "NOISE"], [11, 16, 0, 17, 1, "GUIDER"], [12, 12, 0, 17, 2, "SAMPLER"], [13, 13, 0, 17, 3, "SIGMAS"], [14, 14, 1, 17, 4, "LATENT"], [15, 17, 0, 18, 0, "LATENT"], [16, 10, 0, 18, 1, "VAE"], [17, 17, 0, 19, 0, "LATENT"], [18, 11, 0, 19, 1, "VAE"], [19, 18, 0, 20, 0, "IMAGE"], [20, 19, 0, 20, 1, "AUDIO"], [21, 20, 0, 21, 0, "VIDEO"]], "groups": [], "config": {}, "extra": {"ds": {"scale": 0.62, "offset": [1480, 420]}, "gmanski_template": "flow-simple", "generator": "scripts/build_gmanski_flow_simple_workflow.py", "source": "https://gmanski.com/workflows/flow-simple"}, "version": 0.4}