vercel/ai · error · NoVideoGeneratedError
No video generated.
Error message
No video generated.
What it means
After all generation attempts finish, experimental_generateVideo collects the produced videos; if the array is empty, it throws NoVideoGeneratedError (which carries the provider `responses`). This means the provider call(s) succeeded at the transport level but returned no usable video data — often a content-policy refusal, unsupported prompt, or an empty/unexpected provider response body.
Source
Thrown at packages/ai/src/generate-video/generate-video.ts:455
}
}
warnings.push(...result.warnings);
responses.push({
timestamp: result.response.timestamp,
modelId: result.response.modelId,
headers: result.response.headers,
providerMetadata: result.providerMetadata,
});
if (result.providerMetadata != null) {
mergeProviderMetadata(providerMetadata, result.providerMetadata);
}
}
if (videos.length === 0) {
throw new NoVideoGeneratedError({ responses });
}
if (warnings.length > 0) {
logWarnings({
warnings,
provider: model.provider,
model: model.modelId,
});
}
return {
video: videos[0],
videos,
warnings,
responses,
providerMetadata,
};
}View on GitHub (pinned to 69428b1f8b)
Solutions
- Inspect error.responses (and result warnings) to see what the provider actually returned.
- Adjust the prompt to comply with the provider's content policy and retry.
- Verify the model id is valid and enabled for your account/region.
- Handle AI_NoVideoGeneratedError explicitly in catch blocks and offer the user a retry path.
- If using a custom model, make doGenerate/doStatus return a non-empty videos array.
Example fix
// before
const { video } = await experimental_generateVideo({ model, prompt }); // throws when empty
// after
try {
const { video } = await experimental_generateVideo({ model, prompt });
} catch (error) {
if (NoVideoGeneratedError.isInstance(error)) {
console.warn('No video returned:', error.responses);
// retry with adjusted prompt or notify user
} else {
throw error;
}
} Defensive patterns
Strategy: try-catch
Validate before calling
// No reliable pre-call check; validate the prompt against provider policy and model availability
if (!isModelEnabledForAccount(modelId)) {
throw new Error(`model ${modelId} not enabled for this account`);
} Type guard
null
Try / catch
try {
const result = await experimental_generateVideo({ model, prompt });
} catch (error) {
if (NoVideoGeneratedError.isInstance(error)) {
console.warn('Provider returned no video:', error.responses);
// retry with adjusted prompt or notify the user
} else throw error;
} Prevention
- Pre-screen prompts against the provider's content policy.
- Log error.responses to diagnose empty provider outputs.
- Verify model id entitlement/region support before calling.
- Build an explicit retry-with-feedback path for empty results.
When it happens
Trigger: Provider returns a 200 response whose body contains no video (filtered/moderated prompt, empty output list); all polled status checks report completion with no artifacts; a custom doGenerate implementation resolves with an empty videos array.
Common situations: Prompts rejected by the provider's safety filters; model id that does not actually produce output (preview/deprecated models); a custom mock model that returns no videos; quota/entitlement issues where the provider silently returns empty results.
Related errors
- Prodia multipart response missing output video
- No output generated.
- Video model ${model.modelId} does not implement doGenerate o
- Video generation timed out after ${timeoutMs}ms.
- statusResult.error
AI-assisted analysis of vercel/ai@69428b1f8b (2026-08-30).
Data as JSON: /api/errors/feb25d05051cfc83.
Report an issue: GitHub.