I tested MiniMax H3 against my own Wan pipeline. The model won. Then I read the license.

MiniMax H3 does in one pass what my Wan pipeline needed twenty stitched clips to fake. But the open weights aren't the hosted system, and the Community License excludes the EU, UK, US and Korea — turning "can we run it?" from an infrastructure question into a jurisdictional one.

Share
I tested MiniMax H3 against my own Wan pipeline. The model won. Then I read the license.

Most short videos run a minute or two. Mine are about ninety seconds. The interesting question was never how long a single generation can run — it's how many of them I need.

At five seconds a clip, ninety seconds is eighteen generations. At fifteen, it's six.

What I built on Wan, and why

A month ago I published the story of Presenter Studio — the pipeline that gives this newsletter a face. Its most important architecture decision was this: never ask one model to produce the full video. Split the script into sentences, render a clip per sentence, stitch locally.

That wasn't elegance. It was surrender. Wan 2.2 holds up for about five useful seconds, and the longer the sequence, the more the presenter drifts. I could push the frame count or chain extensions, but that's stitching with extra steps and the coherence goes with it. So I forced every clip to start and end on the same neutral pose, and the seams wouldn't show. Continuity engineering, not filmmaking.

One rule has been fixed since the first line of that pipeline, and it shapes everything that follows: nothing runs through a vendor API. Every generation happens on GPUs I rent by the hour, from weights I've downloaded, in an environment I control. Rented today, on-premise tomorrow — the whole point is that the swap is a procurement decision, not a rewrite. A model I can only reach through someone else's endpoint isn't a candidate, however good the demo looks. That isn't ideology. It's the same rule I apply at work, where the data belongs to banks and doesn't leave the perimeter.

What I tested

H3 (Hailuo 3.0) was announced 31 July; the weights went up on Hugging Face on 3 August. I pulled them and ran everything on rented GPUs — same rule as always, not a single API call.

I didn't point it at talking heads. I wanted the cases where Wan simply stops being useful, so I ran two of them:

Physics under constraint. Elements falling. Water and smoke behaving like water and smoke. Camera movement and body movement inside the same shot. These are the prompts where a generator either holds a scene together or quietly admits it doesn't understand it — and where Wan gives me a plausible first second followed by four seconds of physics-flavoured mush.

0:00
/0:15

Falling glass and a bullet-time orbit — the camera circling a body while the shards hang, and the spoken line generated in the same pass.

Long sequences. One continuous fifteen-second take rather than three five-second clips pretending to be one. Not to see whether the model can fill the time, but whether the shot still makes sense at the end of it.

0:00
/0:15

Run-up, dive and entry into the water in one unbroken take — no cut to hide the hard part.

The results were very good. Not perfect — and both halves of that matter.

The improvement over Wan 2.2 isn't subtle, and I don't need a leaderboard to see it. Same kind of prompt, same rented hardware, and the shots that used to dissolve now hold: water keeps its weight, a body and the camera tracking it stay in the same physical world for the length of the clip, and a scene can still be legible at second fifteen. The failure mode moved from this falls apart to this needs another seed. That's a different category of problem — one you can budget for rather than design around.

It also follows a multi-beat instruction — stop, turn, speak, resume — without the prompt gymnastics Wan needs. The most useful independent evaluation I've found, Trilogy AI's 4 August test, got a complete repair-and-activate sequence for a mechanical bird and two speakers correctly separated in a moving night market.

0:00
/0:15

Torpedo strike: shockwave, debris and the explosion audio, all produced in one pass.

Why fifteen seconds changes the work

Eighteen clips is seventeen joins — seventeen places where the light shifts, the collar moves, the face is subtly not the same face. Six clips is five joins. A third of the assembly, a third of the chances to get caught. That's the difference between editing a video and repairing one.

It also changes what I can write. When the unit is five seconds, the script gets chopped into five-second thoughts, each one ending somewhere the model can hand off cleanly. When the unit is fifteen, a paragraph is a shot.

And some subjects simply want to run long. An eruption, a wave, a crowd, a machine at work — none of them have beats to cut on. Five seconds of that is a loop. Fifteen is footage: it can build, peak and settle, and I can lay narration over it without cutting away from the thing I'm showing.

0:00
/0:15

Pompeii: fifteen seconds that would have been three clips — the descent, the street, and the collapse in one take.

The audio arrives in the same pass — dialogue, ambience, effects. One clip came back with a spoken line, rain hitting concrete, glass breaking and an orchestral bed underneath it, all from a single prompt and a single generation. My old pipeline needed text-to-speech, lip-sync and compositing to approximate that, and it ate most of the evenings.

But if I had to point at one thing, it wouldn't be the duration or the audio. It's the reference system.

One request takes up to nine images, three videos and three audio clips — a place, a subject, a motion, a voice, handed to the model together instead of enforced afterwards. Two of the shots here started from a still I generated first, pinned as the reference at second zero and built outward: the environment settled before any motion is asked for. That inverts how my pipeline worked. Continuity used to be something I imposed from outside — the neutral pose, the matched framing, the stitching, all of it code I wrote because the model couldn't be told. Now it's conditioning. The orchestration I was proudest of is the part the model absorbed.

And when a shot comes back almost right, instruction-based editing changes it with a sentence instead of a re-rolled seed. Read that against the cost model further down: the expensive failure was never the bad clip, it's the good clip that's wrong in one place and has to be regenerated from scratch, with everything that already worked put back at risk. Editing turns that from another roll of the dice into a correction. For anyone running this at volume, that matters more than five extra seconds of runtime.

Now the honest part

Three asterisks, and I'd rather you hear them from me than from the comments.

1. What you download is one third of the product

H3 is not a model. It's three modules that ship as one service, and only the middle one is on Hugging Face:

H3-Context-IR
Turns your prompt and references into the structured input the model actually consumes.

Hosted
H3-Base
The 33B generator. Video and audio together, 4–15s, up to 768p.

Downloadable
H3-Regenerate-2K
Re-reads context and base output to regenerate detail at 2K. Not an upscaler.

Hosted

The first gap is smaller than it looks. MiniMax explains that Context-IR spans several models and services rather than a single checkpoint, offers an API that reproduces its behaviour, and publishes the guidance to build your own. That's an engineering job, not a locked door — and I've done it. My pipeline expands a written brief into the three sections H3 actually consumes: what happens on screen, the soundscape, and the score. The brief I type is never what reaches the weights.

The second gap is real. There's no documented substitute for 2K regeneration, and community attempts to rebuild it have not held up. Every clip in this piece came out at 768p, because that's the ceiling of the part you can download. A locally installed H3 means writing your own orchestration and living there — and for me that's not a shortcut I can take, because the hosted module is exactly the part I refuse to depend on. Which is the same conclusion I reached last month: the breakthrough was never the model, it was the pipeline around it.

So be precise about what the leaderboards are ranking. The arena results everyone is quoting were produced by the hosted system, with Context-IR in front and 2K regeneration behind. What I ran is the middle box. The two are related, but they are not the same product, and giving MiniMax credit for openness on the weights while judging quality from the closed parts is exactly the confusion this release invites.

2. The license has a map in it

The MiniMax H3 Community License defines an Applicable Territory of worldwide, excluding the EU, UK, United States and Republic of Korea — and the restriction reaches outputs, not just execution. Above $20M annual revenue you need written authorization. Commercial interfaces must display "MiniMax H3." And the no-distillation clause is broader than it first reads: on a plain reading, H3's outputs can't be used to improve any other AI model — which quietly rules out treating generated clips as synthetic training data for anything that isn't H3 itself. MiniMax's own explanation cites evolving regulation in the EU, UK and Korea, and its copyright litigation with Hollywood studios for the US.

Switzerland is not excluded. Read that again from a Geneva or Zurich office — then read the fine print, because "not excluded" protects less than it sounds. And note where it bites first: the GPUs I rent by the hour sit in whatever region the provider offers, which turns a billing choice into a licensing one. Renting in a US or EU region, shipping an H3-powered product to European users, or letting a colleague in London press enter can each put you back outside the grant. Server location, user location, employee location and output distribution are four separate compliance fields. Swiss incorporation resolves one of them.

Which is where the model I've spent this article beating deserves its due. Wan 2.1 and 2.2 ship under Apache 2.0: no territory, no revenue threshold, no attribution clause, no restriction on what you train next. Add a year of accumulated ecosystem — quantizations, step-distilled acceleration, LoRAs, control models, workflows tuned for cards a fraction of the size — and the comparison stops being about output quality. For a team in Frankfurt, London or New York, it isn't H3 versus Wan at equal availability. It's Wan available on Monday morning versus H3 available after a separate written authorization from a company in Shanghai. Apache 2.0 and a mature ecosystem are product features, not administrative footnotes.

3. The last ten percent is where the time goes

This is where "very good, not perfect" gets specific. Twenty-seven generations over two nights: thirteen keepers, four outright failures, and one shot that ate six attempts by itself.

Staging is reliable. Physics is where you spend your time — but not evenly, and not where I expected. The cliff dive came in two takes: a camera arcing around a body in freefall and following it through the surface of the water, which is exactly the kind of shot Wan would not have given me at all.

0:00
/0:15

The cliff dive: two takes, camera following the body all the way through the water surface.

The expensive one was the Pompeii street above: people fleeing toward the camera through black rain while debris comes off the roofs. Six takes, and a seventh rendering as I write this. The scene itself is there — the crowd reads, the ash light is right, the collapsing masonry lands. What resists is the last ten percent.

Two examples, both small, both stubborn. I asked for volcanic stones falling out of the sky in clear downward trajectories; what I mostly get is stones arriving off the rooftops, bouncing into frame — plausible, cinematic, and not what I wrote. And I asked for torrential black rain at full intensity from the first frame to the last; I get it in stretches, thinning wherever the model finds something else to attend to. Holding one atmospheric condition constant across fifteen seconds turned out to be harder than getting the eruption itself.

Neither of those makes the shot unusable — they're the gap between a very good clip and the clip I actually described, and closing it would cost far more reruns than the first ninety percent did. My prompt now carries a capitalised CRITICAL clause for every detail the model has dropped at least once, and it is longer than this section.

There's a pattern under both, and the independent testers are finding it too — one of them got an anatomically impossible heart and an origami boat whose geometry came apart as it moved, in clips that otherwise looked confidently directed. That's the same failure I'm seeing. H3's advance is in orchestration, not in world modelling. It obeys the direction — the beats, the camera, the spoken line — while quietly substituting its own physics for the one you specified. My stones bounce because bouncing is what stones do near roofs; it's a more sophisticated answer than the one I asked for, and still the wrong one. For a film that reads as cinema, that's fine. For a product demo, a machine, a piece of medical or educational animation, it's the whole question.

So budget the seeds — and don't trust the arithmetic that says local is cheap. On paper the marginal GPU-seconds for a 768p clip cost a fraction of the hosted 2K price. In practice my rental bill was nothing like that, because you don't pay for the seconds that render. You pay for the work around them: building the image in the first place so the weights ship with the worker instead of being pulled every time, a cold worker still spending about sixteen minutes loading the model before the first frame exists, the failed seeds, and every minute the machine sits warm while you watch the last result and rewrite the prompt. A failed fifteen-second generation costs three times a failed five-second one. Keep the queue warm and fail in batches, not one expensive idea at a time.

And the honest caveat on all of it: this is four days of evidence, not a benchmark. Twenty-seven generations, one operator, one set of prompts, one quantization. Nobody has yet published a multi-seed failure-rate study, a controlled hosted-versus-local comparison, or a per-language lip-sync evaluation. Read this as a practitioner's first week, not a verdict.

Meanwhile, on the closed side

On the same day, ByteDance launched Seedance 2.5: thirty seconds in a single pass, with multi-round extensions that hold characters, environments and pacing across appends, so multi-minute videos come out of one workflow. My ninety seconds is three generations there — or one, extended.

And there are no weights. Jimeng and Doubao today, API later — which, by my own rule, puts it out of reach entirely, however good it is. Which is the honest scoreboard: the open model isn't the frontier. It's the one you're allowed to keep.

Bottom line

What changed this week isn't a number on a spec sheet. A ninety-second video went from eighteen fragile pieces to six solid ones — and most of the engineering I was proud of six weeks ago exists to solve a problem that just got three times smaller.

That should be the whole story. Instead, the release also turned "open weights" from a technical fact into a question of where the model, the operator, the customer and the output happen to be sitting. We spent two years asking whether open models could catch closed ones. They got close — and then the licence, not the benchmark, drew the line. The model that lost on capability is still the one most of Europe and America can actually deploy on Monday.

So: if the video you keep not making came down to compute and an afternoon, what would you make — and would your organisation be allowed to make it?


Specifications, license terms and community evidence verified as of 4 August 2026. This is a plain reading of the license, not legal advice — and MiniMax says the current territory scope means "not yet," not "not ever."