Status: implemented for local MiniMax H3. EP001 Draft 1.7 runs three accepted H3 shot classes through a real operator CLI. Hosted MiniMax remains a secondary path (Nous/FAL blocked; direct API unused). The model is still not the editor.

V2 keeps the boring center that made V1 reliable. AI video may generate selected illustrative candidates. Humans still choose the assets. Python plus FFmpeg still make the episode.

V1 proved we could build Milo’s Hardware Reviews from real evidence, an approved script, synthetic narration, programmatic graphics, and ordinary video engineering.[1] V2 adds a controlled AI-shot lane without handing the timeline to a model.

What changed since the August 5 proposal: we did not wait on hosted H3 pricing. Local MiniMax H3 on the M3 Ultra (MLX FL2VA via mlx-serve PR122, loopback-only) became the primary generation path after explicit lab authorization. The first product canary, then bumper and lab atmosphere classes, then a full workflow redo, all completed with receipts and economics.

Primary backendLocal H3 on M3 Ultra
127.0.0.1:11234
Shot classes provenProduct · bumper · lab atmosphere
Mean wall / take~682 s @ 960×544 / 28 steps
Operator CLImhr h3 · mhr review
Current cutDraft 1.7 workflow redo (local)
Public YTDraft 1.6 until 1.7 promote

Architecture at a glance

MHR Video Production Pipeline V2: evidence and script feed a shot manifest; real, deterministic, and AI candidate sources pass through human selection into a local archive, Python and FFmpeg build, and review/QC package.

Evidence and script still feed the contract. AI is a replaceable shot source. Download the editable SVG.

The boundary (unchanged)

AI may generateMust remain real or deterministic
Short product beauty motionProduct behavior used as evidence
Abstract section bumpersMeasurements and telemetry
Lab atmosphere and visual textureRatings, prices, certifications, caveats
Controlled transitions / texture bedsApple Home and Home Assistant operation
Shot variations for human selectionJames’s voice and appearance
Silent clips only (default)Narration, captions, timeline, mix, master

If a visual supports a factual review claim, it must be a real capture or a deterministic graphic made from measured data. Generated video can illustrate tone and motion. It cannot prove anything.

shots.yaml is the editorial contract

Implemented. Generated shots require fallback, silent audio, mode, prompt file, provider, resolution, and max_candidates ≤ 4. A selected ACCEPTED asset requires a generation receipt with status=accepted.

shots:
  - id: 03-product-push-in
    kind: generated_video
    claim_role: illustrative
    duration_s: 4
    selected_asset: production/local-h3/…/ACCEPTED-1080p.mp4
    fallback_asset: assets/video-generation/…/fallback.mp4
    generation:
      provider: local-mlx-serve
      mode: first-last-frame
      prompt_file: production/prompts/03-product-push-in-first-last.md
      resolution: "960x544"
      max_candidates: 4
    generation_record: production/local-h3/…/receipt.json
    audio: silent
    approval: accepted_via_mhr_2026-08-06

What we actually ran

Shot classModeSelectedNotes
03-product-push-infirst-last-frametake-03Real product pins; silent 4 s beauty
04-section-bumpertext-to-videotake-02Abstract, no text/UI
05-lab-atmospherefirst-frametake-02Real lab still pin; no faces

Local economics (receipts): 6 measured gens, mean wall ~682 s, accept rate 0.86, estimated energy ~0.11 kWh at an assumed 100 W (replace with measured draw later). Hosted Nous/FAL H3 died on unsupported_pricing_meter and was abandoned as primary.

Operator loop (the real product)

Not a queue service. A thin CLI on the M4 episode tree, generation on M3 Ultra over SSH:

cd production
python3 mhr h3 preflight --start
python3 mhr h3 gen --shot-id … --take N --prompt-file … --execute
python3 mhr h3 normalize --shot-id … --take N
python3 mhr h3 accept --shot-id … --take N --reason '…'
python3 mhr review validate
python3 mhr review build
python3 mhr review qc --label draft-1.7
python3 mhr h3 economics

Runtime: LaunchAgent com.milo.minimax-h3, bind 127.0.0.1:11234 only, ctl minimax-h3-ctl. Stop frees ~69 GB when Kimi needs the box.

Receipts before abstractions

Every local take lands under production/local-h3/<shot>/take-NN/ with prompt, redacted request, receipt, raw + normalized + ACCEPTED hashes, and review notes. Secrets and base64 pins stay out of the long-lived tree after stage. We still have not built a multi-provider plugin registry — one working backend first.

The deterministic center stays

  1. Validate manifest / resolve selected assets or fallbacks.
  2. Normalize geometry, frame rate, pixel format (silent 1080p/24).
  3. Assemble visual timeline from VO anchors (script-v3).
  4. Build narration + music separately; loudnorm to −16 LUFS.
  5. Mux optional English captions.
  6. Emit review MP4, contact sheets, qc.json.

Generated audio is discarded. Native model audio never replaces James, Milo, captions, or the final mix.

Hosted H3 (secondary)

Direct api.minimax.io remains optional if a key appears. Nous Portal managed FAL is blocked until a pricing meter exists. Hosted privacy for private lab/likeness still requires explicit approval. Local loopback is the default production path for MHR lab use after James’s authorization.

Definition of done — scored

GateStatus
One command validates manifest, builds, QC packageMet (mhr review validate|build|qc)
Three useful shot classes with receiptsMet (product, bumper, lab)
Measured wall economicsMet (ledger; kWh still assumed watts)
Human accept before selected assetMet
Fallback always presentMet
Public promote of latest cutOpen (1.7 local; 1.6 public)

Next action (discussion): EP001 “Max-H3” densification — more accepted MiniMax seconds under the same evidence gates (target ~45–60 s of H3 presence, frozen script-v3 VO). Plan lives in-repo at production/plans/EP001-MAX-H3-PLAN.md. Not started until density tier and accept policy are locked.

What we are still not building

Not in V2Reason
AI director / model-controlled timelineEditorial decisions stay explicit
Provider plugin registryOne working backend ≠ framework
Queue service / VLM auto-judgePremature vs human A/B
Generated narrationVoice path already approved
Default 2K generation960×544 selection first

Sources

  1. How We Built MHR 001: Video Production Pipeline V1
  2. MiniMax Video Generation guide
  3. MiniMax Video Generation V2 create API
  4. MiniMax H3 on MLX: Local Video+Audio on M3 Ultra
  5. MHR 001 companion article
  6. MiniMax H3 model card
  7. MHR001 Draft 1.6 (public)