Image and Video Generation
Use VibeVideo directly from Claude Code to generate images and videos with natural language.
Overview
The VibeVideo Claude Code Skill lets you generate AI images and videos directly from Claude Code using natural language prompts. No installation required — only an API key.
Prerequisites
- A VibeVideo API key — create one at Dashboard → Settings → API Keys
- Claude Code installed (claude.ai/code)
Setup
- Set your API key as an environment variable:
export VIBEVIDEO_API_KEY="your-api-key-here"- Save the skill file to your project's
.claude/skills/directory:
mkdir -p .claude/skills/vibevideo-generate- Create
.claude/skills/vibevideo-generate/SKILL.md— copy the content from the SKILL.md source file
Usage
Once configured, just ask Claude Code naturally:
- "Generate an image of a cat sitting on a rainbow"
- "Create a 5-second video of ocean waves at sunset"
- "What image models are available?"
How It Works
The skill calls the VibeVideo REST API via curl:
- Create task —
POST /api/ai/generatewith your prompt, model, and options - Poll status —
POST /api/ai/queryevery 5 seconds until complete - Return result — media URLs from
taskUrls
Authentication uses the Authorization: Bearer <API_KEY> header. Credits are deducted per generation — same as the web dashboard.
Generate Image
curl -s -X POST ${VIBEVIDEO_BASE_URL:-https://vibevideo.app}/api/ai/generate \
-H "Authorization: Bearer $VIBEVIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mediaType": "image",
"scene": "text-to-image",
"model": "nano-banana-2",
"prompt": "A cat sitting on a rainbow",
"options": {
"aspect_ratio": "1:1",
"quality": "2K"
}
}'For image-to-image, set "scene": "image-to-image" and add "image_url" in options.
Generate Video
curl -s -X POST ${VIBEVIDEO_BASE_URL:-https://vibevideo.app}/api/ai/generate \
-H "Authorization: Bearer $VIBEVIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mediaType": "video",
"scene": "text-to-video",
"model": "seedance-2-0",
"prompt": "A dog playing in a park",
"options": {
"resolution": "720p",
"duration": "5s",
"aspect_ratio": "16:9"
}
}'For image-to-video, set "scene": "image-to-video" and add "image_url" in options.
For frames-to-video, add "start_image_url" and "end_image_url" in options.
Query Task Status
Tasks are asynchronous. Poll until status is success, failed, or canceled:
curl -s -X POST ${VIBEVIDEO_BASE_URL:-https://vibevideo.app}/api/ai/query \
-H "Authorization: Bearer $VIBEVIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "taskId": "YOUR_TASK_ID" }'Calculate Cost
Check credit cost before generating:
curl -s -X POST ${VIBEVIDEO_BASE_URL:-https://vibevideo.app}/api/ai/cost \
-H "Authorization: Bearer $VIBEVIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2-0",
"mediaType": "video",
"scene": "text-to-video",
"options": { "resolution": "720p", "duration": "5s" }
}'Cancel Task
curl -s -X DELETE ${VIBEVIDEO_BASE_URL:-https://vibevideo.app}/api/ai/tasks/YOUR_TASK_ID \
-H "Authorization: Bearer $VIBEVIDEO_API_KEY"Image Models
| ID | Label | Vendor | Scenes | Qualities |
|---|---|---|---|---|
| nano-banana-2 | Nano Banana 2 | text-to-image, image-to-image | 1K, 2K, 4K | |
| gpt-image-1-5 | GPT Image 1.5 | OpenAI | text-to-image, image-to-image | Medium, High |
| grok-imagine | Grok Imagine | Grok | text-to-image, image-to-image | — |
| seedream-5-0 | Seedream 5.0 | ByteDance | text-to-image, image-to-image | Basic, High |
| qwen-image | Qwen Image | Qwen | text-to-image, image-to-image | — |
| wan-2-7-image | Wan 2.7 Image | Qwen/Alibaba | text-to-image, image-to-image | 1K, 2K |
| wan-2-7-image-pro | Wan 2.7 Image Pro | Qwen/Alibaba | text-to-image, image-to-image | 1K, 2K, 4K |
Default for text-to-image: nano-banana-2
Video Models
| ID | Label | Vendor | Scenes | Resolutions | Durations |
|---|---|---|---|---|---|
| seedance-2-0 | Seedance 2.0 | ByteDance | text-to-video, image-to-video, frames-to-video, reference-to-video | 720p, 1080p | 5s, 10s, 15s |
| seedance-2-0-fast | Seedance 2.0 Fast | ByteDance | text-to-video, image-to-video, frames-to-video, reference-to-video | 720p, 1080p | 5s, 10s, 15s |
| seedance-1-5-pro | Seedance 1.5 Pro | ByteDance | text-to-video, image-to-video | 480p, 720p, 1080p | 4s, 8s, 12s |
| grok-imagine | Grok Imagine | Grok | text-to-video, image-to-video | 480p, 720p | 6s, 10s, 15s |
| kling-2-6 | Kling 2.6 | Kling | text-to-video, image-to-video | — | 5s, 10s |
| runway | Runway | Runway | text-to-video, image-to-video | 720p, 1080p | 5s, 10s |
| veo-3-1 | Veo 3.1 | text-to-video, image-to-video, frames-to-video, reference-to-video | 720p, 1080p, 4k | — | |
| veo-3-1-fast | Veo 3.1 Fast | text-to-video, image-to-video, frames-to-video, reference-to-video | 720p, 1080p, 4k | — | |
| seedence-1-0-pro | Seedence 1.0 Pro | ByteDance | text-to-video, image-to-video | 480p, 720p, 1080p | 5s, 10s |
| seedence-1-0-pro-fast | Seedence 1.0 Pro Fast | ByteDance | image-to-video | 720p, 1080p | 5s, 10s |
| seedence-1-0-lite | Seedence 1.0 Lite | ByteDance | text-to-video, image-to-video | 480p, 720p, 1080p | 5s, 10s |
Default for text-to-video: seedance-2-0
Error Handling
| Code | Message | Solution |
|---|---|---|
| -1 | "no auth" | Set VIBEVIDEO_API_KEY environment variable |
| -1002 | "insufficient credits" | Purchase credits at VibeVideo dashboard |
| -1 | "invalid..." | Check model ID, scene, or mediaType against the tables above |
API Response Envelope
All endpoints return:
{ "code": 0, "message": "ok", "data": { ... } }code: 0 means success. Non-zero code means error (check message).