--- name: openrouter-text2video description: Generate videos via OpenRouter using ByteDance Seedance 2.0. --- # openrouter-text2video Text → video via OpenRouter. Default model: `bytedance/seedance-2.0`. Uses the async video-generation endpoint: submit job → poll → download. ## Usage Resolve `TOOL_DIR` = the directory containing this `SKILL.md`. Commands below use `TOOL_DIR` as a symbolic placeholder; replace it with the resolved, quoted path before running Bash. ```bash export OPENROUTER_API_KEY=sk-or-v1-... python3 TOOL_DIR/scripts/generate_video.py \ --prompt "A slow dolly push through a retro-futuristic arcade, neon signs reflecting in a puddle" \ --duration 5 \ --aspect-ratio 16:9 \ --resolution 720p \ --download PROJECT_DIR/assets/hero.mp4 ``` ## Flags | Flag | Default | Description | |---|---|---| | `--prompt` | required | Text prompt | | `--download` | required | Output MP4 path | | `--model` | `bytedance/seedance-2.0` | Any OpenRouter video model | | `--duration` | `5` | Seconds | | `--aspect-ratio` | `16:9` | `16:9`, `9:16`, `1:1`, `4:3`, `3:4`, `21:9`, `9:21` | | `--resolution` | `720p` | Model-dependent (e.g. `480p`, `720p`, `1080p`) | | `--generate-audio` | off | Generate audio with video (if model supports) | | `--poll-interval` | `5` | Seconds between polls | | `--max-wait` | `600` | Max total wait time | ## Flow 1. `POST /api/v1/videos` → returns `{id, polling_url, status: "pending"}` 2. `GET /api/v1/videos/{id}` every 5s until `status == "completed"` 3. `GET /api/v1/videos/{id}/content` → raw MP4 bytes ## Pricing Seedance 2.0: ~$7/M tokens with `(height × width × duration × 24) / 1024` token formula. A 5-second 720p 16:9 clip ≈ 145k tokens ≈ $1. ## Notes - Supports text-to-video, image-to-video (first/last frame control via `frame_images`), and reference-to-video. - This script only wires text-to-video. Extend the body to add `frame_images` or `input_references` for advanced modes.