Skip to main content
Default model: When you omit llm=/--model/model=, every surface — SDK VideoAgent, capability video_generate, MCP praisonai.videos.generate, and CLI praisonai videos — falls back to openai/sora-2 (the canonical default from VideoAgent.DEFAULT_MODEL).

Generate Video

Providers

OpenAI Sora

Sora-2

Gemini

Omni Flash (default), Veo 3.1

RunwayML

Gen-4

Azure

Sora

OpenRouter

Veo, Kling, Hailuo, Seedance, Wan…

Supported models

Only models with a LiteLLM video-generation backend work in VideoAgent. Pick a model that is in LiteLLM’s chat/cost catalogue but has no video route (for example xai/grok-imagine-video-*) and VideoAgent raises a clear ValueError naming models that do work. Known-good defaults:
Chat/cost catalogue membership is not enough — the model must have a provider-specific video config in LiteLLM. If LiteLLM later adds a video backend for your provider, VideoAgent picks it up automatically; nothing is hardcoded to a denylist.

Error you’ll see on an unsupported model

Switch llm= to a supported model and re-run:

Desktop app

Prefer a native app? The Desktop Video tab generates an MP4 from a prompt with a built-in model picker (MiniMax, Sora 2, Veo 3.1) — no code required.

Desktop → Video

Generate video from the Desktop app

Troubleshooting

The model you passed to llm= is in LiteLLM’s model/cost catalogue but has no video-generation provider config. This is common for xAI Grok Imagine ids (xai/grok-imagine-video-*), which are chat-priced only.Fix: switch to one of the supported models from the error message:
If LiteLLM later adds a video backend for your preferred provider, VideoAgent picks it up automatically — nothing is hardcoded to a denylist.
The model’s video backend does exist, but your API key is missing or wrong. This error propagates unchanged — VideoAgent never masks it. Set the provider’s env var (e.g. OPENAI_API_KEY, GEMINI_API_KEY, RUNWAYML_API_SECRET) and re-run.
The working backend rejected a specific request parameter (size, duration, prompt format). This is a bad request to a real video backend — not a missing backend — so it propagates unchanged. Fix the request, not the model: for example, drop size= to use the provider default.