Skip to content

MiniMax H3 Video Continuer V1.0.10 — Handbook

Files that matter (source of truth):

file role goes to
SoulCraft Video Continuer (MiniMax H3).json the ComfyUI workflow (126 nodes, six subgraphs, 36 groups), V1.0.0 RunPod (/workspace/runpod-slim)
video-continuer-minimax-h3-script.sh the thin package script (70 lines): 8 packs, 6 files — declared and handed to ComfyUI Base, which does the work RunPod, beside the JSON
suite.py + pytest.ini the suite: 35 test functions across 7 tiers, on the base’s basetest plugin RunPod, beside the JSON
video-continuer-minimax-h3-handbook.md this document your machine / next Cowork session

video-continuer-minimax-h3-runpod.zip is the four files above, built by base/comfyui-base/_build/package.py. comfyui-base/ is step one on a fresh pod; this package is step two. V1.0.0 (2026-09-04) is the first installer this workflow has had — until now it was a JSON with no script, no suite and no record.

1. What it does

A clip continues. <Video 1>’s last frames start the next shot (Seamless Continuation, which needs Single Pass ON, with Blend Overlap Frames smoothing the join), or <Picture 1> is the FIRST FRAME and <Picture 2> the LAST FRAME; up to six pictures, three audio and two video references bind into the prompt through the H3 Prompt IDE (<Picture n> / <Video n> / <Audio n>). MiniMax H3’s FL2VA engine renders video and audio in one pass; three optional previews show the first pass; the Final Upscale Pass (H3 2× latent upscaler, sparse attention for that pass only, its own LoRA slot) is a switch; RIFE frame interpolation finishes. “MUST SELECT: ONLY ONE!” chooses between OG Video Has Audio and HAS NO AUDIO (custom audio via <Audio 1> is a Gen Option). Comfy-Kitchen attention, chunked feed-forward and low-VRAM attention are the [Optimization] switches. The two LoRA loaders ship empty on purpose: the FL2V turbo LoRA is a note in the graph, not a download.

2. Deploy on RunPod (B200, else B300; CUDA 13)

The GPU. An NVIDIA B200 (180 GB, sm_100) first, else a B300 (NVIDIA B300 SXM6 AC, 288 GB, sm_103; not the 34 GB “MIG 1g.34gb” slice). The text encoder is nvfp4, a format Blackwell runs natively, and the ≈ 41 GB of weights stay resident with room to spare. The script declares GPU_PREFER="B200 B300": on any other GPU the install and podctl install say so as a warning and go on. In RunPod’s filters pick CUDA 13.0 (driver 580+). A network volume pins its datacenter, so create it where the GPU is: B200s were offered in EU-RO-1, US-CA-2, US-NC-2, US-NE-1 and US-TX-6, B300s with network volumes in EUR-IS-1 (2026-10-16; stock moves). From the Mac, podctl create --name <n> --image <img> --data-gb 300 asks for exactly that order (base 3.8.0). Neither chip has NVENC; the four saves here are video/h264-mp4 (libx264, on the CPU), so nothing in this graph needs it. Owed on a real B200/B300: a render, its time and its output (none has been measured on either yet).

VRAM. 23 GB minimum (estimated, ComfyUI swapping models between stages), 42 GB comfortable (everything resident).

Terminal window
cd /workspace/runpod-slim
python3 -m zipfile -e "comfyui-base-runpod.zip" . # step one, once per pod
bash "comfyui-base/comfyui-base-script.sh"
python3 -m zipfile -e "video-continuer-minimax-h3-runpod.zip" .
bash "video-continuer-minimax-h3-script.sh" # 8 packs → 6 files → workflow paths → checks → suite → launch line

Safe to re-run; a second run is a no-op. ≈ 41 GB downloaded on a pod that has nothing; on a pod that already runs MiniMax H3 Video Creator and the Video Replacer, only the FL2VA engine (21 GB) and Kijai’s int8 video VAE (3.2 GB) are new — the rest is the same four files at the same dests. --check is the dry run; test [tier] runs the suite; --latest is the same as a plain run (base 3.0.0 takes every pack to its remote’s HEAD on every run); BASE_YES=1 answers the one deletion prompt; BASE_RESTART=1 lets the base restart ComfyUI (by default it prints the launch line). Exit 0 = everything present and verified; 1 = something is missing, named. --use-sage-attention is removed from the launch args (an H3 graph renders noise with it; attention is chosen in-graph).

The model library (ComfyUI/models/…, the base’s <category>/<Family>[/<Purpose>]/<file>):

dest file used by
diffusion_models/MiniMax-H3 minimax_h3_fl2va_pruned_int8_convrot.safetensors (21 GB) the FL2VA engine (subgraph Load Models & Patches)
text_encoders/MiniMax-H3 qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors (16 GB) text encoder — the Video Replacer’s file
vae/MiniMax-H3 minimax_h3_video_vae_int8_convrot.safetensors (3.2 GB, Kijai/MiniMax-H3-experimental) video decode, both passes
vae/MiniMax-H3 minimax_h3_audio_vae_fp32.safetensors audio — shared with Video Creator and the Replacer
latent_upscale_models/MiniMax-H3 minimax_h3_latent_upscaler_3d_bf16.safetensors Final Upscale Pass (ships bypassed) — Video Creator’s file
vae_approx/ (flat) taeh3.safetensors (23 MB, madebyollin’s TAEH3, MIT) Model Previewer option (ships bypassed) and the base’s --preview-method auto — the file all three H3 packages install

Why the two bypassed options are rows. The master plan first said “not rows, reported by name — both are already installed by H3 Video Creator on a shared pod”. That holds only on a shared pod; on a pod with this package alone, the person who switches on Enable Upscale Pass or the previewer would meet a red loader. The rule the project runs on — every option in the shipped graph works when you use it, nothing is silently skipped — is what H3 Video Creator’s own bypassed tier engines already follow, so these two are rows (700 MB together), and the base’s sync writes their widget paths canonically along with the four active ones. The base reports them as BYPASSED at install; that is the truthful state, not a gap.

Packs. Beyond the base’s four (rgthree — the twelve Fast Groups Bypasser panels, Any Switch, Power Lora Loader, Label; KJNodes — H3SparseAttention, MiniMaxChunkFeedForward, MiniMaxLowVRAMAttention, ResolutionSelector, SimpleCalculatorKJ, the image helpers, ModelPreviewOverrideKJ; VideoHelperSuite — the four VHS_VideoCombine outputs; cg-use-everywhere — the 23 Anything-Everywhere links the graph stores in extra.ue_links): ComfyUI-Easy-Use (easy seed), ComfyUI-Impact-Pack (ImpactSwitch), WhatDreamsCost-ComfyUI (LoadVideoUI, LoadAudioUI), ComfyUI-VFI (RIFEInterpolation), Comfyui_Minimax_h3_latent_Upscaler (MinimaxH3LatentUpscaler3D, recorded at the same commit as Video Creator; since base 3.0.0 a row’s sha is the last-tested record and two records for one pack are a note; the graph’s note points at LBH-123-AI’s original, which xmarre’s fork carries), and three the graph recorded without any pack id — only its note (#218) names them: comfyui-obvpm (LoadImageCrop (obvpm), the six picture loaders; the id since obvpm 0.2.0, and the one the graph saves since 1.0.6, because obvpm_migrate.js rewrites an old bare id only in the frontend; the note says “manually installed”, but it is an ordinary repository and is a row like the rest), H3-Optimizations (Zironic; H3SparseAttention, the sparse attention for the upscale pass; Registry h3-optimizations), ComfyUI-H3-Prompt-IDE (ethanfel; H3PromptIDE, H3PromptReferenceInputs; Registry h3-prompt-ide). Easy-Use and VFI are on Video Creator’s DROPPED_PACKS; the base warns about a dropped pack only when no installed package claims it, and this one does.

3. The suite

unit (the JSON), graph (the loaders and their promoted copies in subgraph instance 171 agree; every Bypasser panel’s matchTitle names real groups; the radio panels are radios; the outputs are reachable through the graph’s stored links, the Anything-Everywhere ones included; the LoRA slots are empty on purpose), contract (script, rows, workflow, handbook, the shared dests byte-for-byte with Video Creator and the Replacer), install (the thin installer on the base against a throwaway tree), comfyui (every node type resolves to core or an installed pack, read from source), server (a live ComfyUI registers every class), runpod (pod only). Run: bash "video-continuer-minimax-h3-script.sh" test.

4. Record

  • V1.0.0 (2026-09-04). First installer, on ComfyUI Base (plan 6 of the base series). The workflow’s six loader widgets (four in the Load Models & Patches definition + their promoted copies on instance 171, plus the two bypassed options) moved from bare filenames to the library paths; extra.package_version added. Verification: 29 passed, 2 skipped (the pod-only tier) on the repo testbed with a live server. Pod acceptance (the base’s sequence: base zip → this zip → stop/start → test runpod) is still the open step, and this graph has never rendered under the installer — the first render is the real test.

  • V1.0.1 (2026-09-07). The H3 2× upscaler row loses its MiniMax-H3 Family and node 243 names the bare file. Comfyui_Minimax_h3_latent_Upscaler’s scan_models() globs *.safetensors at the ROOT of latent_upscale_models/ and returns basenames, so a Family folder hid the file from the loader: under 1.0.0 the Final Upscale Pass could never have run. Base 2.0.37 makes the category freeform and rejects a Family there, which is how it surfaced — the same defect MiniMax H3 Video Creator V7.0.2 fixed. The hidden copy is SUPERSEDED; BASE_MIN 2.0.37. Nothing rendered here: the package’s first render is still the open step above.

  • V1.0.2 (2026-09-25). Wording for ComfyUI Base 3.0.0, which is always the newest: --latest is a plain run, every pack is installed at its remote’s HEAD and a row’s sha is the last-tested record, so the “pinned” and “two pins” lines now say so. LOADER_CATS gains MinimaxH3LatentUpscaler3D|latent_upscale_models: base 2.3.0’s loader map covers core loaders and the shared packs only, so the sync stage had stopped rewriting node 243’s path and the suite’s every-row-is-loaded check was red. No graph change.

  • V1.0.3 (2026-10-16). The gate is green again. comfyui-obvpm registers LoadImageCrop (obvpm) since its 0.2.0 and its obvpm_migrate.js rewrites the saved bare id before the graph is configured, so the server tier checks the six picture loaders under that id; the graph still saves LoadImageCrop (re-saving it under the new id is owed, by a builder or by Paul). The obvpm record moves to 777f554 (v0.2.16). The sibling-dest comparison skips where neither H3 sibling is beside it (an extracted zip, a pod). No graph change but the version stamp.

  • V1.0.4 (2026-10-16). B200 first, B300 second (Paul’s decision of 2026-10-16). The script declares GPU_PREFER="B200 B300", which base 3.8.0 reads: on another GPU the run’s banner and SUMMARY, and podctl install, warn and go on. §2 says which GPU, the CUDA 13 floor and where RunPod has each. A contract test holds the declaration and the handbook together. No graph change but the version stamp. Not run on a B200 or a B300 (owed: speed and output).

  • V1.0.5 (2026-10-16). The upscaler link works again. On 2026-09-17 LBH-123-AI moved minimax_h3_latent_upscaler_3d_bf16.safetensors into minimax_h3_latent_upscaler_3d_conv_v1/ and renamed it minimax_h3_latent_upscaler_3d_conv_v1_bf16.safetensors (commit 6749d7b), so the row’s resolve/main/ URL was 404 and a fresh pod could not install the package. The bytes (690 592 992) and the Hub’s sha256 (4f57821f…46a5e6) are unchanged. The row now names commit 3f941d5 and the new path, and keeps the file name node 243 loads. Today’s base (3.9.0) drops the resolve/<revision> part and fetches that path at main, where it is today; a base that honours the revision (3.11.0) fetches it at the commit, so a later move upstream cannot break it. A contract test holds the pin. No graph change but the version stamp.

  • V1.0.6 (2026-10-16). The six picture loaders are saved as LoadImageCrop (obvpm). comfyui-obvpm has registered that id since 0.2.0 (ids.py); its obvpm_migrate.js rewrites the old bare LoadImageCrop only when the frontend loads a graph, so the installer’s smoke check read the saved id, found no pack registering it, and failed on two fresh H100 pods (base 3.9.2 and a 3.10.0 branch). The graph now carries what that migration would write: the type and the Node name for S&R of the six loaders (nodes 123, 151-155), nothing else. The server tier checks the saved ids as they are, and a graph test holds the rule for every pre-0.2.0 obvpm id. V1.0.3’s owed item (re-saving under the new id) is done.

  • V1.0.7 (2026-10-16). Every Hub row is pinned to a commit. ComfyUI Base 3.12.0 honours the revision in a row and checks each Hub file against the sha256 the Hub states for that commit, once, at download, so a repo that moves or renames a file upstream can no longer 404 a row or change what installs (the H3 latent upscaler broke that way on 2026-09-17). The five rows that still named main now name the commit base.sh gen-models <dir> --pin printed on 2026-10-16 (the upscaler row was pinned in V1.0.5), each file’s size and Hub sha256 unchanged. Files already on a volume are kept as they are: no download and no re-hash. BASE_MIN is 3.12.0, because an older base drops the revision and fetches main. No graph change but the version stamp.

  • V1.0.8 (2026-10-16). BASE_MIN 3.17.1 (the base marks the App Mode tour seen on install, so the form opens clear). The suite’s test_contract_shared_dests_agree_with_the_sibling_h3_packages ran its sibling comparison behind an if, so a run from the extracted zip passed without it; it now SKIPS when every sibling H3 package is missing, and CI’s VERIFY_SUITE=zip runs it again from the repo (error log row 106). No graph change but the version stamp.

  • V1.0.9 (2026-10-17). The previewer’s taeh3.safetensors is madebyollin’s TAEH3 (MIT, 22,709,752 bytes, madebyollin/taehv pinned to commit 62f7591f), the file the Video Replacer already installs, in place of Kijai’s MiniMax-H3-TAE (9,791,388 bytes). Both sat at vae_approx/taeh3.safetensors, so a pod with two H3 packages kept whichever came first, and the workspace’s integration run 39045535460 failed the sibling comparison on exactly this row. The Video Swapper’s decision (2026-10-17): madebyollin’s file, which the TAEHV family’s author publishes and KJNodes’ ModelPreviewOverrideKJ and ComfyUI’s own H3 latent preview both read. Released together with Video Creator 8.1.6, which makes the same move. The file name is unchanged, so node 106’s widget is as it was; the original author’s note (node 218) still names Kijai’s repository and is left as written. A new contract test holds the row on its own, since the sibling comparison skips wherever the siblings are absent. No graph change but the version stamp.

  • V1.0.10 (2026-10-17). GPU_MIN_GB="23", estimated: the smallest card the default flow runs on, for the site’s catalog. It is the heaviest stage’s weights at the precision the loader picks, plus ComfyUI’s own memory_required activations and its 1.2 GiB inference reserve, with ComfyUI swapping models between stages; the script’s comment holds the arithmetic. Comfortable: 42 GB. A measured peak replaces the estimate at the next free GPU smoke. No graph change but the version stamp.