FlyAIgh
Home/Blog/Guide

How Often Do AI Video Generations Actually Fail? Provider Errors and Moderation Refusals Across 498 Real Runs

Published August 23, 20268 min read

Retry estimates for AI video circulate widely and none of them are measured. These are: six video models, 498 production runs, provider failures and moderation refusals counted separately, every rate with a confidence interval and the classification regex published.

A generated battlefield scene, one of hundreds of production runs behind this data

Data window: 2026-05-06 to 2026-08-22 · Last updated: 2026-08-23

The short answer

Across 498 video generations on a multi-model platform between 6 May and 22 August 2026, provider-side failures were rare on four of six models, sitting between 0% and 1.4%. Two supplier routes were far worse: one at 36.2%, and an image-model route outside this table at 17.0% (9 of 53). Content-moderation refusals ran from 0% to 26.0% depending on the model, and 31 of the 47 refusals named a real human face in a reference image. Every rate below carries a 95% confidence interval, and the rules used to classify each failure are published in full.

Two kinds of failure

Three different events send someone back to regenerate a shot. Only two of them leave a trace a log can count:

  1. The generation broke. A timeout, a provider error, a queue failure. Nothing came back.
  2. Content moderation refused it. The model worked and its content policy declined the request.
  3. It completed and was not what the person wanted. Technically a success. The record is identical to a keeper.

This article measures the first two. The third is out of scope and not measurable from logs: nothing distinguishes a discarded generation from a kept one. Published estimates of how many attempts a usable shot takes exist, but they are either illustrative assumptions or single-production case studies, not controlled measurements, so no share is inferred for the third category here.

The two have different causes: breakage comes from the supplier route, while a refusal comes from content policy meeting whatever was submitted to it.

The data

Six video models cleared 30 valid runs in the window. Image models are excluded entirely; mixing them in would answer a question about video with data about something else. An earlier post covers the image models on a wider but less carefully bounded cut of the same log.

ModelValid runsExcludedBrokeRefused
Seedance 2.014801 · 0.7% (0.1–3.7)22 · 14.9% (10.0–21.5)
Grok Imagine141451 · 36.2% (28.7–44.4)0 · 0.0% (0.0–2.7)
Veo 3.1 Lite7401 · 1.4% (0.2–7.3)0 · 0.0% (0.0–4.9)
Seedance 2.0 Mini50320 · 0.0% (0.0–7.1)7 · 14.0% (7.0–26.2)
Seedance 2.0 Fast5000 · 0.0% (0.0–7.1)13 · 26.0% (15.9–39.6)
Kling V3 Omni3500 · 0.0% (0.0–9.9)0 · 0.0% (0.0–9.9)

ByteDance publishes no "Pro" tier; resellers use the label for the standard Seedance 2.0 endpoint, which is what the row above measures.

Parentheses are 95% Wilson confidence intervals. Two readings follow from them that the point estimates alone would not support.

Kling V3 Omni recorded nothing in either column, but on 35 runs the upper bound is 9.9%. Its true rate is somewhere below roughly one in ten.

Seedance 2.0 Fast is not established as worse than Seedance 2.0. Fast refused 26.0% (CI 15.9–39.6%) and Seedance 2.0 refused 14.9% (CI 10.0–21.5%). Those intervals overlap, so the gap is not distinguishable from sampling noise at this sample size.

How every failure was classified

Source: the platform's generation log, filtered to video-type rows created between 2026-05-06 and 2026-08-22 inclusive. Each row was assigned exactly one class, matched in this order:

ok       : status = 'completed'

refused  : error_message ~* '(may contain real person|inappropriate
           content|celebrity|involving minors|copyright restrict|
           watermark|AUDIO_FILTERED|content security audit)'

ourside  : error_message ~* '(Insufficient corporate funds|balance is
           insufficient|validation failed|only supports|Invalid
           parameters|Parameter validation|input.prompt: size|Error
           validating image|style reference must be|iw )'

broke    : every other failed row

The ourside class is removed from the denominator because those failures measure our integration rather than the model: account-level problems upstream, and requests our own code malformed. Excluded counts appear per model in the table above so the correction stays visible in the totals. Seedance 2.0 Mini shows why this matters, with 32 of 82 raw failures excluded; uncorrected it reads as a 39% failure rate, corrected it is 0% on 50 valid runs.

Output-side audio filters (AUDIO_FILTERED, content security audit) sit under refused because a user experiences them the same way as any other policy block. They account for 15 of the 47 refusals.

One boundary decision changes a headline number: generic upstream messages such as Operation failed. Please retry. and An error occurred. carry no attribution. They are counted as broke, not excluded. Grok Imagine reads 36.2% under that rule and 16.1% if those messages are set aside instead. The higher figure is reported because attributing an unexplained failure to the supplier rather than to ourselves is the conservative choice when the supplier is the one being measured.

What triggers a refusal

Forty-seven video generations were refused across all video models in this window: 42 on the six models in the table, the other five on models below the 30-run threshold. Grouped by the message the provider returned:

  • 31 · a real person in a reference image. Returned as "The request failed because the input image may contain real person."
  • 11 · copyright or audio rights. Content security audits on generated or referenced audio.
  • 4 · audio filtered on models that generate sound natively.
  • 1 · explicit or suggestive material.

Two thirds of all refusals come from one cause. The filter reads the reference image, not the prompt, which is why rewording rarely helps and swapping a photograph of a real person for a generated character usually does.

The log does not record whether a run carried a reference image, so the table has no column for the workload behind each rate. One measurement stands in for it: none of the 145 Grok Imagine runs in this window carried an image parameter or a bound character, so its 0% refusal rate reflects a text-only workload and not a permissive filter. All 31 real-person refusals landed on the Seedance family, 20 on Seedance 2.0 and 11 on Seedance 2.0 Fast.

The two outliers are our routing

Grok Imagine's 36.2% measures the supplier route, not the model. Every generation on this platform reaches its model through such a route, and that route is what a provider-side failure measures: timeouts, upstream errors, capacity problems at the intermediary. A different platform routing the same model differently would produce a different number.

The same applies to the second high-failure route in this data, an image model outside the table. Both figures were what prompted a review of those routes. They belong in a section about infrastructure, and they should not be read as evidence about model quality.

Refusal rates carry further, with one caveat. A refusal carrying the model provider's own error string, as these 31 do, reflects that provider's policy and should recur on other routes to the same endpoint. Intermediaries can add stricter filters of their own: RunningHub, for example, enforces a platform-level real-person block regardless of model. Treat these rates as a floor.

What this does not tell you

  • It measures refusals and breakage, not quality. A generation that completed and looked wrong counts here as a success, and that category is likely the largest source of regeneration in practice.
  • Sample sizes are small and uneven. Six models cleared the threshold; 148 runs and 35 runs are not the same weight of evidence, which is why every cell carries its interval.
  • Refusal rates reflect what our users submitted. An audience working with different source material would produce different rates on the same models.
  • Refusal rates are confounded by workload. The table does not show how many runs per model carried a real-person reference image. If one model receives more photo uploads than another, it inherits more refusals regardless of policy strictness.
  • Supplier routes changed during the window. Provider-side failure rates are a measurement of a moment, and the two high figures above are precisely the ones that triggered changes.
  • Content filters move without notice. Model providers adjust thresholds continuously and rarely announce it, so refusal rates drift.

FAQ

Which AI video model refuses the most content?

Among the six models with enough samples to measure, the Seedance 2.0 family carries every refusal recorded: Seedance 2.0 Fast refused 13 of 50 runs (26.0%, 95% CI 15.9–39.6%), Seedance 2.0 22 of 148 (14.9%, CI 10.0–21.5%), and Seedance 2.0 Mini 7 of 50 (14.0%, CI 7.0–26.2%). Those three intervals all overlap, so the family refuses at a materially higher rate than the others but the ranking within it is not established. Grok Imagine, Veo 3.1 Lite and Kling V3 Omni recorded no refusals at all, with upper bounds of 2.7%, 4.9% and 9.9% respectively.

Is a 0% failure rate the same as never failing?

No, and the sample size decides how much weight it carries. Kling V3 Omni recorded zero failures and zero refusals, but across only 35 runs, which puts the 95% upper bound at 9.9%: the true rate could be anywhere from nothing to roughly one in ten. Seedance 2.0 Fast and Mini also recorded zero provider failures, on 50 runs each, giving an upper bound of 7.1%.

What actually triggers a content-moderation refusal on AI video?

Of 47 video refusals in this window, 31 name a real human face in a reference image, phrased upstream as "The request failed because the input image may contain real person." Eleven cite copyright or audio rights and four were audio-filter rejections on models that generate sound (together the 15 output-side audio filters described in the method section), and one flagged explicit material. Prompt wording is rarely the trigger. Replacing a photograph of a real person with a generated character removes most of this category.

Why exclude some failures from the rates?

Because they measure our integration. Two categories were removed before any rate was computed: our own upstream account problems, and requests malformed by our integration, such as sending a text-to-video call to a model that only accepts image-to-video. Seedance 2.0 Mini is the clearest case, with 32 of its 82 raw failures excluded on those grounds. Its uncorrected failure rate reads 39%; corrected, its provider-side failure rate is 0% on 50 valid runs.

Can these rates be applied to other platforms?

Refusal rates travel further than failure rates, though not as a fixed number. A refusal that carries the error string returned by the model provider, as these 31 do, reflects that provider policy and should recur on other routes reaching the same endpoint. Intermediaries can add stricter filters of their own: RunningHub, for example, enforces a platform-level real-person block regardless of model, so these rates are a floor. Provider-side failure rates do not travel at all. They measure the supplier route in use at the time, and the two high figures here reflect routing that has since been reviewed.

Every model in this article, on one account

Prices and capabilities for each model are on their own pages, and the price of a run is shown before you start it.