Generate videos from text descriptions via OATDA. Video generation is asynchronous — submit a request, receive a task ID, then poll for completion.
All commands need the OATDA API key. Resolve it inline for each exec call:
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}"
If the key is empty or null, tell the user to get one at https://oatda.com and configure it.
Security: Never print the full API key. Only verify existence or show first 8 chars.
| User says | Provider | Model |
|---|---|---|
| ----------- | ---------- | ------- |
| seedance, bytedance (default) | bytedance | seedance-1-5-pro-251215 |
| minimax, hailuo | minimax | T2V-01 |
| veo, google veo | veo-3.0-generate-preview | |
| wan, alibaba | alibaba | wan2.5-t2v-preview |
| sora | openai | sora-2 |
| grok video | xai | grok-imagine-video |
| cogvideo, glm video | zai | cogvideox-3 |
Default: bytedance / seedance-1-5-pro-251215 if no model specified.
> ⚠️ Models update frequently. If a model ID fails, query oatda-list-models with ?type=video for the latest available models.
Different models support different parameters. Query before generating:
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X GET "https://oatda.com/api/v1/llm/models?type=video" \
-H "Authorization: Bearer $OATDA_API_KEY" | jq '.video_models[] | {id, supported_params}'
File-type parameters (like first_frame_image, last_frame_image) require public URLs.
CRITICAL: The endpoint URL must include ?async=true.
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/llm/generate-video?async=true" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OATDA_API_KEY" \
-d '{
"provider": "<PROVIDER>",
"model": "<MODEL>",
"prompt": "<VIDEO_DESCRIPTION>"
}'
duration: Video duration in secondsresolution: "720P" or "1080P"aspectRatio: "16:9", "9:16", "1:1"quality: Quality setting (model-dependent)style: Style setting (model-dependent)width / height: Explicit pixel dimensionsmodel_params: Model-specific key-value pairs{"ratio": "16:9", "duration": "5", "generate_audio": true, "camera_fixed": false}{"first_frame_image": "https://...", "last_frame_image": "https://..."}{"first_frame_image": "https://...", "resolution": "720P"}{"resolution": "720p"}{
"taskId": "minimax-T2V01-abc123def456",
"status": "pending",
"provider": "minimax",
"model": "T2V-01",
"message": "Video generation task created",
"pollUrl": "/api/v1/llm/video-status/minimax-T2V01-abc123def456"
}
Note the taskId — this is needed to check status later.
Tell the user:
> Video generation started! Task ID:
> Video generation typically takes 30 seconds to 5 minutes.
> Use oatda-video-status to check when your video is ready.
| HTTP Status | Meaning | Action |
|---|---|---|
| ------------- | --------- | -------- |
| 401 | Invalid API key | Tell user to check their key |
| 400 | Bad request / prompt too long | Keep prompt under 4000 chars |
| 429 | Rate limited | Wait and retry |
| 400 + content_policy | Content policy violation | Ask user to adjust description |
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/llm/generate-video?async=true" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OATDA_API_KEY" \
-d '{
"provider": "bytedance",
"model": "seedance-1-5-pro-251215",
"prompt": "Ocean waves crashing on a beach at sunset, golden hour lighting, cinematic",
"model_params": {"ratio": "16:9", "duration": "5", "generate_audio": true, "camera_fixed": false}
}'
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/llm/generate-video?async=true" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OATDA_API_KEY" \
-d '{
"provider": "bytedance",
"model": "seedance-1-5-pro-251215",
"prompt": "Smooth transition from day to night",
"model_params": {
"ratio": "16:9",
"first_frame_image": "https://example.com/daytime.jpg",
"last_frame_image": "https://example.com/nighttime.jpg"
}
}'
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/llm/generate-video?async=true" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OATDA_API_KEY" \
-d '{
"provider": "minimax",
"model": "T2V-01",
"prompt": "The character starts walking forward slowly",
"model_params": {"first_frame_image": "https://example.com/character.png", "resolution": "720P"}
}'
export OATDA_API_KEY="${OATDA_API_KEY:-$(cat ~/.oatda/credentials.json 2>/dev/null | jq -r '.profiles[.defaultProfile].apiKey' 2>/dev/null)}" && \
curl -s -X POST "https://oatda.com/api/v1/llm/generate-video?async=true" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OATDA_API_KEY" \
-d '{
"provider": "google",
"model": "veo-3.0-generate-preview",
"prompt": "A drone shot flying over a misty mountain range at sunrise",
"duration": 5,
"aspectRatio": "16:9"
}'
?async=true in the URLoatda-video-status to check progressfirst_frame_image and optionally last_frame_image as public URLsoatda-video-status to check task completionoatda-list-models for available video models共 1 个版本