Repository navigation
docs: minimax-h3 skill + RECIPES_24GB/ACCELERATION - base-model (no LoRA, int8) quality path and measured speed levers #863
Description
What's missing
The minimax-h3 skill and the H3 docs describe the turbo path only. They should carry the following findings (all measured on lem, 3090, 1344x768, 4 refs, 124 frames).
Quality
| Rung | Canvas | Weights | LoRA | Steps | Attn | Extra | Min (3090) | Face score /5 | Staging family |
|---|---|---|---|---|---|---|---|---|---|
| L0 | 960x544 | int4 | ref2v 4-step v0.1 | 5 | sage_hub | 3.5 | 2 | turbo-4 | |
| L1 | 1344x768 | int4 | ref2v 4-step v0.1 | 5 | sage_hub | 5.4 | 2.5 | turbo-4 | |
| L7 | 1344x768 | int8 | ref2v 4-step v0.1 | 5 | sage_hub | 7.2 | 3 | turbo-4 | |
| L3 | 1344x768 | int8 | ref2v 8-step v1.0 768p | 9 | sage_hub | 11.2 | 3 | turbo-8 | |
| L4 | 1344x768 | int8 | ref2v 8-step v1.0 768p | 9 | native | 14.5 | 3 | turbo-8 | |
| B4 | 960x544 | int4 | none | 12 | sage_hub | 6.6 | 3 | base-int4 | |
| B1 | 960x544 | int4 | none | 30 | sage_hub | 15.1 | 3 | base-int4 | |
| B5 | 1344x768 | int4 | none | 12 | sage_hub | 11.8 | 3.5 | base-int4 | |
| B6 | 1344x768 | int4 | none | 8 | sage_hub | 8.5 | 1.5 (duplicated a character) | base-int4 | |
| B3 | 1344x768 | int8 | none | 12 | sage_hub | 12.9 | 3.5 | base-int8 | |
| L5 | 1344x768 | int8 | none | 30 | sage_hub | 29.5 | 4 | base-int8 | |
| L6 | 1344x768 | int8 | none | 30 | native | 44.2 | 4 | base-int8 | |
| P1 | 1344x768 | int8 | none | 30 | sage_hub | first_block 0.05 | 23.1 | 4 | base-int8 |
| C1 / C2 (Pat close-up) | 1344x768 | int8 | none | 12 / 30 | sage_hub | 13.9 / 22.8 | 4 / 4 | base-int8 |
Base model = lora_model_name: null, shift video 12 / audio 3. Turbo = shift per the LoRA. All Ref2VA with 4 references (2 portraits, 2 voice clips), 124 frames. Scores are face realism at native-resolution crops, judged by Claude from frames (5 = cinema-grade photographic).
- Faces: turbo LoRAs + int4 are the cause of smeary faces, not resolution. Base model at int8 fixes it (
lora_model_name: null, steps 12-30, shift video 12 / audio 3). Add toreferences/checkpoints-and-loras.mdas a tested combination: "base, no LoRA: int8, 12-30 steps, shift 12/3". - Composition: attention never moves it; quantization doesn't on turbo LoRAs (L1=L7) but does on the base model (int4 vs int8); LoRA family re-stages; base step count doesn't.
- Steps: base floor is 12. 8 steps duplicated a character (B6).
- Prompting the base model: it invents an extra person unless every subject is placed explicitly ("Howie at frame left, Pat at the right end of the desk"). A head-count sentence ("exactly two people") alone failed three times (E3, E5, E6). Name the set dressing (chair, desk items) in every shot, or close-ups each draw their own (ep 6: Pat's chair changed between deflect and button).
- Realism People LoRA: its safetensors header says
base_model: minimax-h3-fl2va,training: text_to_video, rank 32. It is inert on Ref2VA. It worked on FL2VA/I2VA (R3: 4/5, but loses the voice/identity references). The filenameh3-realism-people-t2v-i2v-r2v.safetensorssaysr2v- the skill should say plainly it is not forreference-to-video(see adapter-check issue). - LTX-2.5 refine-in-place on an H3 shot is not a face fix: cleaner edges, waxy skin, identity drift (R1 2.5/5, R2 2/5).
Speed (cinema path, tools/phases.py breakdown from the job event log)
| Rung | Change | Load | Encode | Denoise | s/pass | Decode | Total | vs |
|---|---|---|---|---|---|---|---|---|
| B3 | 12 steps baseline | 0.72 | 0.97 | 10.24 | 55.8 | 0.91 | 12.89 | |
| P2 | + first_block 0.05 | 0.74 | 0.85 | 10.31 | 56.3 | 0.82 | 12.79 | 0% |
| P4 | + text_kv | 0.73 | 0.86 | 10.24 | 55.9 | 0.81 | 12.69 | ~0% |
| P3 | + compile repeated_blocks | 0.72 | 0.85 | 14.02 | 288.6 first, 55.2 rest | 0.93 | 16.58 | +29% |
| L5 | 30 steps baseline | 0.72 | 0.86 | 26.97 | 55.8 | 0.88 | 29.49 | |
| P1 | + first_block 0.05 | 0.75 | 0.84 | 20.61 | 42.2 avg | 0.81 | 23.06 | -22% |
| P5 | + taylorseer interval 3 order 1 | OOM at 2 min |
- Denoise is 80-91% of the job; ~56 s/pass with int8 weights streamed by block-level group offload - compute-bound, not PCIe-bound.
sage_hub: -23% at turbo-8, -33% at base-30, visually lossless. Should be the default in the skill's advice (and see the template issue).first_block0.05: -22% at 30 base steps with identical staging and faces (PSNR 27.5 dB vs L5); skips nothing at 12 steps.torch.compile: +289 s first pass, ~1% per pass after. Net loss for a single job; would need ~16 shots at one shape in one warm worker to break even.text_kv: no measurable effect on Ref2VA.taylorseer: OOM at this canvas with 4 refs (21.7 GB reserved before its state).
Stale doc to fix
docs/RECIPES_24GB.md MiniMax-H3 table says "cache: first_block (threshold: 0.1) on the 20-step ref2va workflows only". No template under workflows/templates/minimax/ sets a cache today (grep -l '"cache"' workflows/templates/minimax/*.json is empty), and no ref2va template defaults to 20 steps. Replace with the measured rule: first_block 0.05 pays at 30 base steps, never on turbo schedules or at 12 steps.
Open questions
- first_block threshold 0.08-0.10 at 30 steps: more speed at what face cost?
- first_block at 20 steps vs plain 30: which is better per minute?
- Does P1 hold on a close-up and a second seed? (only measured on the wide two-shot)
- MagCache for H3 needs a calibration run (no preset). Worth one?
Source: H3 quality matrix on lem (2x RTX 3090 24 GB, 125 GB host RAM), workspace h3-quality, Known Issues ep 6 shots, seed 42. Full data and per-run assessments: ~/testing/opus/known-issues/quality/matrix.json, report quality/REPORT.md; every run in h3-quality carries a note with its config, minutes and score. Related: #861 (follow-up experiments).
Activity
dkackman commentedon Oct 14, 2026
triage: batch with #863, #864 — both are docs-only write-ups of the same H3 quality matrix (base model int8, no LoRA; first_block 0.05 at 30 steps; subject-placement/set-dressing prompt rules): #863 updates the minimax-h3 skill + RECIPES_24GB/ACCELERATION, #864 the series-episodes skill, which should point at #863's material rather than restate it. One docs pass keeps them consistent and bumps the plugin once. No engine or validation surface. Not duplicates of #861/#862/#865 (lead ideas/experiments). Note: numbers are CUDA (3090, sage_hub) measurements — say so in the docs; MPS has no sage. backend:shared (docs).
— claude-opus-5-5 (anthropic), implementer triage
docs: #863 #864 - H3 base-model quality path, measured speed levers, …
dkackman commentedon Oct 14, 2026
Docs-only, merged to
develop(3d0fba1, from 21a6f60); no server change, the driver refreshes the plugin copy. Batched with #864.plugins/dw/skills/minimax-h3/references/quality-and-speed.md: the quality ladder (L/B/P/C rungs), faces/composition/steps findings, base-model prompting rules (explicit placement, set dressing), what does not help (Realism People LoRA inert on Ref2VA, LTX refine), the speed table and levers (sage_hub, first_block 0.05 at 30 steps only, compile, text_kv, taylorseer OOM), open questions. States these are CUDA/3090 numbers and MPS has no sage.SKILL.md: one hard rule pointing at it (kept under the 12 KiB cap).references/checkpoints-and-loras.md: 'Base, no LoRA: int8, 12-30 steps, shift 12/3' as a tested combination; Realism People inert onreference-to-videodespiter2vin the filename.docs/RECIPES_24GB.md: the stale '0.1 on 20-step workflows' row replaced with the measured rule.docs/ACCELERATION.md: H3 measurements added under FirstBlockCache.tests/test_plugin_skills.py: 83 pass; the 5TestKandinsky6Skillfailures are present on the base commit too.Nothing to verify over MCP; a read of the served skill text is enough. Numbers are transcribed from the issue, not re-measured.
— claude-sonnet-5-5 (anthropic), implementer
dkackman commentedon Oct 14, 2026
Verified on the mini-ai server (mps on mini-ai.lan), develop @ 3d0fba1. Every changed doc is served by the plugin or the guides, so I read each one through the consumer surface:
dw:minimax-h3skill loaded from the refreshed plugin tree: Hard rules now has "Smeary faces: int8 base model,references/quality-and-speed.md".references/quality-and-speed.md: the full quality ladder (L0–L7, B1–B6, P1, C1/C2) matches the issue's rows, plus the faces/composition/steps findings, the base-model prompting rules (explicit placement, since a head count alone fails; name the set dressing), Realism People inert onreference-to-videodespiter2vin its name, LTX refine not being a face fix, the speed table (B3/P2/P4/P3/L5/P1/P5) and levers (sage_hub, first_block 0.05 at 30 base steps only, compile, text_kv, taylorseer OOM), and the open questions. It also says plainly that these are CUDA/3090 numbers and that MPS has no sage.references/checkpoints-and-loras.md: has "Base, no LoRA:lora_model_name: null, int8, 12-30 steps (floor 12), shift…" as a tested combination, and says Realism People is inert onreference-to-video.get_guide("recipes", section="MiniMax-H3"): the stale "0.1 on the 20-step ref2va workflows" row is gone. In its place:first_block0.05 only on a ~30-step base-model run (-22%), skips nothing at 12 steps or on a turbo schedule, no template sets it, measured on a 3090 with sage_hub.get_guide("acceleration", section="FirstBlockCache"): the H3 measurements are added (0.05 = -22% at 30 base steps, nothing on 12-step/turbo; compile +289 s first pass, ~1%/pass; text_kv nothing; taylorseer OOM).get_workflow("templates/minimax/reference-to-video")has nocachein its pipeline configuration. That matches the new "no template sets it today" wording.I checked the numbers against the issue's tables, not re-measured them. No regression case: this is docs text with nothing for a case to assert durably.
— claude-opus-5-5 (anthropic), tester