Skip to content

Routing and fallback

Routed per shot; one vendor fails, the next takes it

Shots inside one episode are never the same kind of job. So routing happens per shot, not per project: each shot filters for the vendors that can actually do it, ranks them by value, and moves down the list on failure. It drops to the built-in preview only when the list is exhausted. This page walks the whole chain.

Diagram of model routing and the fallback chainOne shotHas a reference imageOnly 2 secondsMust match an end frameFilter by what the shotneeds, then rank by valueDIRECT VENDOR CONNECTIONSGrok ImaginexAITongyi WanxiangAlibaba CloudVeo 3.1GoogleSeedance 2.0ByteDance · Volcano EngineHailuoMiniMaxBuilt-in preview · not billedOnly if all of them failFootage for this shot
Routing is per shot, not per project. A failure moves to the next vendor, because rate limits and content refusals are usually one vendor's bad day. Vendors without a published rate count as uncalibrated and sort last. One more thing worth saying: no vendor credentials are configured on the public environment yet, so every frame you get there comes from the built-in preview — on that host, this chain is running its own exception path. The two clips below were rendered against live credentials, off that environment.

Why per shot

Shots in one episode ask for very different things

The two-second close-up that opens it. The over-the-shoulder in the middle that has to match the next shot's first frame. The two-hander at the end where both faces must match their own reference images. Those ask completely different things of a model, and no single vendor is best at all three. Betting the whole film on one vendor means the shots it is worst at have to make do. So every render picks again, and it picks on what that shot actually needs.

One prompt, two models

Same sentence to both. Not the same film back.

This section does not pick a winner. One prompt, one aspect ratio, two vendors, and what each handed back sits here exactly as it arrived. You can see the difference for yourself — and that difference is the whole reason routing happens per shot.

Both vendors got this one line

A convenience store sign on a rainy night, reflected in the standing water, camera pushing in slowly. 9:16.

xAIGrok Imagine5.0 s9:16Native audio

The catalog has it at 1 to 15 seconds, so five sits comfortably inside its range. Its per-second cost is calibrated against the published rate ($0.080/s), which means value-based ranking has a real number to divide by instead of a neutral placeholder.

GoogleVeo 3.14.0 s9:16Native audio

It accepts only 4, 6 or 8 seconds, so this clip is four — not a preference, that is where its range starts. It is also one of the few in the catalog that can be handed an end frame, which puts it first when a shot has to match the one after it. Its per-second cost has no published source yet, so it counts as uncalibrated and sorts last under cost-first ordering.

  • Both clips are AI-generated footage. They are raw output from the shot-render stage, upstream of the assembly stage that burns the badge in — so this sentence is the disclosure.
  • The lengths differ because the vendors' own duration ranges differ, not because we chose them. Making the mode's total running time add up is the line's problem, not yours.
  • Both carry a native audio track. They start muted; unmute in the player if you want to hear them.

We are not handing out a trophy

Five vendors in the catalog. Every shot filters for what it actually needs, then ranks the survivors by value. Which vendor suits which kind of shot gets settled by data off the line. Us picking a favourite on our own marketing page would be exactly the move we refuse to believe when a vendor does it.

How the four signals add up

Capability filter

First find who can do the job, then argue about value

The filter is about capability, not preference. If a vendor's shortest clip is four seconds, a two-second shot should not go to it. You would just get a clip of the wrong length and have to redo it.

Reference image

Whether this shot has to be anchored to a character or set that is already locked. A vendor without image-to-video is out at this step.

How the reference is fed

Some vendors only accept a publicly reachable address, others take it inline. When we only hold a local file, an address-only vendor degrades to plain text-to-video and consistency is lost, so it sorts lower.

End frame

Shots that must join onto the next one need a specified end frame. Not many vendors do this; the ones that do sort higher.

Multiple subjects

Two people in frame, each having to match their own reference, needs several reference images anchored separately.

Duration range

Vendors differ in the lengths they will produce. An ad spot is built out of one-to-three-second shots, and that alone rules out half the field.

Aspect

Vertical 9:16 is the default for drama, but not every vendor supports every aspect.

  • End frame and multiple subjects are preferences, not requirements: a vendor without them sorts lower rather than being removed. Otherwise a shot needing an end frame would have nobody at all in an environment with only one vendor connected.
  • If filtering on duration and aspect leaves nothing at all, we relax to “anything usable” and let it truncate. Still better than dropping straight to fallback.

Three orderings

The cheapest is not necessarily the best value

How the surviving candidates get ordered is configurable. The default is value.

ValueDefault

Composite score divided by cost per second. A cheap model that fails one time in three is, once you count retries and your waiting, more expensive. A vendor whose cost is not yet calibrated falls back to being judged on quality alone, rather than being treated as free.

Quality

The composite score from our own production data, price ignored. For work where the finished film matters more than the bill.

Cost

Cheapest per second first. Anything without a published rate counts as uncalibrated and sorts last. Something whose price you do not know should not win by default, and we will not invent a number for it.

After a failure

Move on or try again, depending on why it failed

Vendors bury the reason in free text; not one of them returns a structured code. We fold them into a single table, and the test is one question: could trying again possibly help?

Worth retrying: wait and go again

  • Rate limited
  • Request timed out
  • Network dropped
  • Output download failed
  • Vendor-side error
  • Response was not the expected shape

Not worth retrying: move on now

  • Refused by content moderation
  • No credentials configured
  • Authentication rejected
  • Invalid parameters
  • Vendor cannot do this job
  • Vendor account out of credit
  • Backoff is linear, not exponential: three seconds after the first failure, six after the second, and the third moves on. At most three attempts per vendor.
  • A moderation refusal returns the same answer however many times you ask, which is why it sits in the move-on column — it is the class that most needs to leave immediately. Chinese refusal wording used to match nothing at all, so every refusal burned all three attempts before falling back; both languages now live in the same table.
  • An unrecognised failure counts as retryable. Better one wasted attempt than writing off a shot that would have worked.
  • When a shot did switch vendors, the interface says which one it came from.

Fallback

Even with everything down, a film still ships

The fallback is an exception path, not the normal one. It is reached only after every candidate has been tried and failed. But it has to exist, or “one click and it renders” is an empty promise on any day a vendor misbehaves.

Footage

Only once the candidate list is exhausted does it drop to the built-in preview. You always come away with usable footage, and you can see which shots came from the fallback.

Voice

There has to be an audio track even with every external vendor down, a silent one if necessary. Otherwise the assembly step cannot line the picture up with the sound, and the whole film is wasted.

Reference images

Images have no built-in fallback, because a character sheet cannot be faked. So total failure means that one item is skipped. The line itself does not stop, and the later stages carry on.

The fallback is never billed

Anything served by a built-in implementation is not billed. But every attempt still writes a usage record, including the failed ones, at zero units. Both things have to hold at once: invisible on your bill, present in the denominator of the success rate.

Draft grade never enters this chain at all

Drafts always run on the built-in preview: no external model, no money, no queue. Every round of storyboard fixes runs there, and only the final render actually sends work out. That saves far more than squeezing unit prices, because what it saves is money that should never have been spent.

You never touch a single switch on this chain

Which vendor, what to do on failure, when to fall back. That is the line's internal business. Your part is pressing run and watching the console.