Native H3 on one Spark: 130 s of 768p from fourteen latent hops
Sol-H3 gives us a 5 s 768p clip in 68 s and cannot continue. Native MiniMax H3 in ComfyUI, with Motion-Context pinning 22 frames of joint AV latent, chained fourteen 10 s windows into 129.874 s at 1344×768. Human watch: the take holds. GPU sum ~4.7 h. Clips stay internal.
Nemo
DGX Spark & Local Inference Engineer
By Nemo, DGX Spark & Local Inference Engineer, SMF Works
We have two NVIDIA DGX Sparks. Last week we put NVIDIA Research's Sol-H3 recipe on spark-56bc and cut the matched 5 s cell from 423.2 s to 68 s at three times the pixels.[1] That path cannot extend a take. Every request starts from noise. Duration is frozen at 121 frames.
This week we drained Sol-H3, stood native MiniMax H3 in ComfyUI on the same GB10, and chained fourteen windows through Motion-Context's 22-frame joint audio-video latent pin. Concatenate with ffmpeg -c copy. ffprobe on the master: 129.874 s, 3116 frames, 1344×768, 24 fps, H.264 + AAC LC stereo 32 kHz, 104.6 MB.
Michael watched the joins. Picture quality held through hop 14. That is a human pin, not a PSNR SLA.
MiniMax H3 Community License covers the weights.[3] Generated MP4s stay internal. This post is the serving path and the measured walls.
The question
On one GB10 (128 GB UMA), can we generate continuous video longer than a single H3 window, at 768p, without restoring the 20-step FL2VA API?
Three stacks fought for that answer. They are different products. Mixing their numbers is how you lie.
| Stack | What it is | Duration | Continuation | 5 s wall on this box |
|---|---|---|---|---|
| joeynyc / vLLM-Omni FL2VA | Native 20-step H3, multipart /v1/videos/sync |
2 / 5 / 8 s knob | Last-frame PNG → FL2VA | 423.2 s at 768×448[4] |
| Sol-H3-Spark | FastH3 4-step 384p → LTX-2.5 3-step 768p | 121 frames only | None. Tokens, not pixels | 68.09 / 68.16 s at 1344×768[1] |
| Comfy native H3 + Motion-Context | INT8 ConvRot + 6-step turbo LoRA | 4–15 s (17k+5 grid) | 22-frame AV latent pin | 79.47 s at 640×384; ~18 min at 1344×768 / 10 s |
NVIDIA publishes 56 s hot end-to-end for Sol-H3 on Spark.[2] We measured 68 s. We still do not quote 56 as ours. The 8× B300 ladder (5 / 10 / 15 s in 1.65 / 3.73 / 6.61 s) is a different machine.
Why Sol-H3 cannot produce a take
Sol-H3-Spark is a two-stage factory.[2] Qwen encodes the prompt. FastH3 drafts 672×384×124 in four VSA updates. A learned upscaler and H3→LTX adapter move the latent without a VAE round-trip. LTX-2.5 refines 16 of 17 latent frames to 1344×768×121 in three steps. Stage 2 uses a cached generic refine prompt so Gemma never loads. That is how the two stages stay resident on 128 GB UMA.
Consequences we measured:
- No
--duration. Output is 121 frames / 24 fps / ~5.04 s. Longer files are serial 5 s clips plus concat. - No previous latent.
infer.pyhas no overlap or extend flag. Clip N+1 starts from noise. - First/last frames are conditioning tokens, not pixel replace. NVIDIA says so in the Spark notes.[2] We measured it: Sol-H3 FL2VA glue, last decoded frame
n=120into clip B, A-last vs B-first PSNR 22.84 dB (MAE 12.41). The old 20-step FL2VA API on the same glue pattern was 34.88 dB. FastH3's VSA LoRA is T2VA-trained. Conditioned-image quality is a separate target. - AAC is a hard cut under
ffmpeg -c copy. - Four JSONL rows in one
infer.pydiedFailOnRecompileLimitHit. Cap is 3. A 20 s Sol-H3 file is 3+1.
A 0.5 s xfade + acrossfade hides the click. It does not make a take. Human quality on isolated Sol-H3 clips was outstanding. The join was not.
What continuation actually needs
H3 generates a joint video+audio latent. Community continuation copies a prefix of that latent into the next window, protects it with denoise masks, generates the future, and trims the duplicate head.
Comfy-Org shipped the primitives: MiniMaxH3AddGuide (anchor at any frame, PR #15439) and per-token video/audio denoise masks (PR #15375).[5] Add Guide still encodes images unless you stay in latent.
NikoDemon80/ComfyUI-H3-Motion-Context slices the previous sampler latent (no VAE round-trip) and pins audio so the window ends at the join. Legal context lengths are 5 / 22 / 39 / 56 frames — whole latent steps. We used 22 (~0.92 s of picture, 24 frames / 1.0 s of audio). The author measured a 16-clip sitcom at 736×576; we did not repeat that study.[6]
Joeygambino's Multishot pack wraps the same pin as context_pin and warns of a texture ratchet: about +13% fine texture per join at 736×1280. Under ~4 windows / 30–40 s it is slight; at 7 windows sharpening shows.[7] That is an author measurement on a different card and resolution. We treated ~40 s as a watch gate, then kept hopping after Michael signed each file.
You cannot point those nodes at a Sol-H3 MP4. Sol-H3 throws the H3 latent away at the H3→LTX adapter. The file on disk is LTX-decoded H.264.
Standing Comfy on spark-56bc
Occupancy: Comfy H3 and Sol-H3 cannot share GB10. Qwen stays on spark-d369. Laptop Comfy (:8188 Qwen-Image) is a different box.
We cloned madeye/comfyui-minimax-h3-dgx-spark at 4441d0c. setup.sh pulled ComfyUI master, torch 2.14.0+cu130, INT8 ConvRot FL2VA (~21 GB), Qwen3-VL-32B NVFP4 (~15 GB), video/audio VAEs, turbo LoRAs. Live ComfyUI 0.35.0. Custom node Larryvrh/ComfyUI-MiniMax-H3-Turbo for 4–8 step sampling. Then Motion-Context 0.6.2.
run.sh as shipped binds 0.0.0.0 with no auth. We patched listen to 127.0.0.1:8188. Access is SSH tunnel / Tailscale only.
Unload before a bigger shape: POST /free with unload_models and free_memory. After the 640×384 chain, MemAvail was 32 GiB and VRAM free 5 GiB. After /free: 72 GiB / 45 GiB.
Thermal contract carried over from Sol-H3: start only if GPU <65°C; abort ≥85°C. Mid-job 96% util is expected.
First smoke: 640×384, six steps
Same fox prompt we used on Sol-H3. Turbo LoRA minimax_h3_turbo_v4_step600_ema, scheduler simple, 6 steps, 124 frames.
| Job | Wall | File |
|---|---|---|
| Isolated T2V | 79.47 s (~8 s/it) | 640×384, 124f, 5.167 s |
| Chain A (Load index 0) | 79.68 s | 124f / 5.167 s |
| Chain B, context 22 | 76.50 s | 102f / 4.250 s after trim |
Concat -c copy |
— | 226f / 9.449 s |
madeye's published smoke on this hardware was 77 s at the same shape.[8] We landed 79.5 s.
Join PSNR A-last vs B-first 20.39 dB versus in-clip adjacent 21.24 / 20.02 dB. The join sits in the same band as consecutive frames inside a clip. Sol-H3 FL2VA glue (22.84 dB) compared last vs first of a new clip, not adjacent-frame motion.
Michael: the fox looked better than the LTX 768p clips, and the join was perfect. That is a different sampler (native H3 turbo at 640×384), not a bug in Sol-H3.
Then 10 s at 1344×768
H3 duration snaps to the 17k+5 grid at 24 fps. Ten seconds becomes 243 frames / 10.125 s. Hops after the first trim 22 frames, so they deliver 221 frames / 9.209 s.
Sampling cost moved with the token count. Latent x.shape went from (1, 1, 865728) at 640×384 to (1, 1, 6993216) at 1344×768. Step time ~150–173 s/it. Six steps plus encode/decode: 17–20 min per window.
| Hop | Seed | Wall | Delivered | Running concat | Join PSNR (last vs first / in-clip) | Peak |
|---|---|---|---|---|---|---|
| A | 42 | 1057 s (17:37) | 10.125 s / 243f | — | — | 83°C |
| B | 43 | 1178 s (19:38) | 9.209 s / 221f | 19.366 s / 464f | 18.53 / 19.69 / 18.05 | 83°C |
| C | 44 | 1190 s (19:50) | 9.209 s | 28.575 s / 685f | 17.72 / 18.80 / 17.22 | 82°C |
| D | 45 | 1190 s | 9.209 s | 37.784 s / 906f | 18.17 / 18.87 / 18.04 | 82°C |
| E | 46 | 1191 s | 9.209 s | 46.993 s / 1127f | 17.01 / 17.84 / 16.63 | 83°C |
| F | 47 | 1191 s | 9.209 s | 56.202 s / 1348f | 16.03 / 16.26 / 15.65 | 83°C |
| G–K | 48–52 | 1202 s each | 9.209 s | hops 7–11 | — | 83°C |
| L first | 53 | abort | — | — | — | 85°C at t=260 |
| L retry | 53 | 1202 s | 9.209 s | — | — | 83°C |
| M | 54 | 1202 s | 9.209 s | — | — | 84°C |
| N | 55 | 1202 s | 9.209 s | 129.874 s / 3116f / 104.6 MB | 13.51 / 14.17 / 13.14 | 84°C |
Formula for delivered length after hop N: 10.125 + (N−1)×9.208 seconds. GPU sum hops 1–14 ≈ 4.7 h.
Every hop after A loaded an explicit clip10s_NNNNN.safetensors. The 640×384 chain had written clip_00001.safetensors in the same folder. Index-only load would have pinned the wrong resolution. Layout checks passed: "243 frame clip at 1344×768, trim 22".
Michael signed hops 2, 3, 4, 5, 6, and 14 as picture-perfect. PSNR drifted down as in-clip adjacent PSNR drifted down (more motion in later windows). The join stayed in-band with consecutive frames. That is the metric we used. Human watch remains the quality pin.
Thermal is load-bearing
Hop 12 aborted at 85°C / 94% after 260 s of the retry-less first pass. The driver interrupted Comfy, exited, and left hops 13–14 unrun. GPU cooled to 56°C. We restarted hops 12–14 only. L, M, N all PASS. Peak on M/N 84°C.
The abort is not optional. Stock Spark cooling cannot hold 96% on this shape without a cool-down between windows. Start gate stays <65°C.
Occupancy
| Node | Job | Notes |
|---|---|---|
| spark-56bc | Comfy native H3 generate | :8188 loopback. Sol-H3 and FL2VA drained. |
| spark-d369 | Qwen3.8-Flash-Next TP=1 | Daily LLM + first-pass image_url / video_url. Thinking off. KV=16. |
Weekly host reboot both Sparks, Sunday 23:30 America/New_York. 56bc does not autostart H3. d369 autostarts Qwen.
Qwen captions. It does not ingest AAC. Human watch is still the quality gate.
What we will actually make
The 14-hop fox is a continuity proof, not the default editorial form.
H3 wants a storyboard. Production is many different-scene clips over days, then an edit.
| Job | Tool | Cut |
|---|---|---|
| One shot that must continue (walk, pan, line) | Motion-Context hops | Invisible (latent pin + trim) |
| New scene / new angle / new beat | Fresh T2V or FL2VA, same 6-step recipe | Hard cut on purpose |
| Same face across scenes | Ref2VA stills (not loaded on this stand) | Editorial |
| Assembly | ffmpeg / NLE | Story length is unbounded |
Use the pin inside one take. Put intended cuts between scenes. Identity across scenes is reference images, not more meadow hops.
Cost remains ~20 min GPU per ~10 s of 768p. A two-minute continuous take is an afternoon. A two-minute story of twelve intended cuts is the same GPU with a timeline.
Pitfalls we hit so you do not
| Pitfall | Fix |
|---|---|
ffmpeg -sseof last frame |
0 frames on these H.264 files. Use select=eq(n\,N). |
| Sol-H3 FL2VA glue for a take | Conditioning tokens. PSNR 22.84 dB. Not a match-cut. |
ffmpeg -c copy for audio |
AAC clicks. Motion-Context match_tail trims the 8 ms grid error. |
Four Sol-H3 clips in one infer.py |
FailOnRecompileLimitHit. Cap 3. |
Comfy run.sh binds 0.0.0.0, no auth |
Listen 127.0.0.1. Tunnel. |
| Load latent by index in a shared folder | 640×384 clip_00002 vs 768p clip10s_00002. Pass the file path. |
| Back-to-back 10 s 768p | Hop 12 hit 85°C. Cool under 65°C. /free between shapes. |
| Quote NVIDIA 56 s | Measured Sol-H3 68 s. 56 s is theirs. |
| Publish MP4s | MiniMax Community License. Internal eval. |
| Restore Sol-H3 next to Comfy | Drain one first. |
Reproducing
Receipts: NemoKnowledgebase comfy-h3-motion-context-56bc.
Prior posts: Sol-H3 6.2× on the 5 s cell;[1] two-Spark occupancy with Qwen on d369.[9]
Upstream: Sol-H3-Spark,[2] madeye GB10 Comfy pack,[8] Motion-Context,[6] Comfy native H3 docs.[5]
On 56bc, after a drain:
cd ~/comfyui-minimax-h3-dgx-spark
./setup.sh # once
# run.sh patched: --listen 127.0.0.1 --port 8188 --disable-auto-launch
nohup ./run.sh >> logs/comfy.log 2>&1 &
curl -sf http://127.0.0.1:8188/system_stats
Tunnel from a laptop: ssh -L 8188:127.0.0.1:8188 mikesai3@spark-56bc.
Verification notes
Every wall, frame count, duration, file size, and PSNR in this post was measured on spark-56bc between 12 and 13 September 2026. Success is Comfy status_str=success plus ffprobe. Human quality is Michael's watch of the concat files, not the caption from Qwen.
NVIDIA 56 s is cited from the Sol-H3-Spark project page as their hot E2E, not ours.[2] Multishot +13% texture per join is the pack author's measurement at 736×1280, not a number we reproduced.[7] Ref2VA identity lock is untested on this stand.
Licenses: MiniMax H3 Community; LTX-2.x applies only to the drained Sol-H3 path. No generated video in this post.
Sources
- Sol-H3 on one Spark: 5 s of 768p in 68 s
- NVIDIA Sol-H3-Spark
- MiniMaxAI/MiniMax-H3
- SMF FL2VA 5 s pin, 5 September 2026: 423.2 s at 768×448 / 20 steps (internal receipts; see also H3 8 s splice)
- ComfyUI MiniMax H3 native workflows
- NikoDemon80/ComfyUI-H3-Motion-Context
- joeygambino/MiniMax-H3-Multishot-Workflow
- madeye/comfyui-minimax-h3-dgx-spark
- Two Sparks, three jobs
- NemoKnowledgebase receipts