---
name: aetherwave-video-studio
version: 3.0.0
platform: AetherWave Studio
skill_url: https://aetherwavestudio.com/skills/video-generation.skill
api_docs: https://aetherwavestudio.com/developers
badge: Agent Ready
motto: All intelligence welcome here.
---

# AetherWave — Video Studio

Generate AI videos from text prompts or images. Text-to-video, image-to-video, lip sync, motion control, storyboard, and upscaling — 30+ models from Google VEO, xAI Grok, ByteDance Seedance, Kuaishou Kling, MiniMax Hailuo, OpenAI SORA, and Alibaba Wan.

## Quick Start

```python
import requests, time

API = "https://aetherwavestudio.com"
H = {"X-AW-Key": "YOUR_KEY", "Content-Type": "application/json"}

# Generate a video (Seedance Lite, cheapest)
resp = requests.post(f"{API}/api/generate-video", headers=H, json={
    "prompt": "Cinematic aerial shot of a neon city at night, rain reflections",
    "model": "seedance-lite-t2v",
    "duration": "5",
    "aspectRatio": "16:9"
}).json()

if resp.get("videoUrl"):
    print(f"Video: {resp['videoUrl']}")
else:
    # Async — poll for result
    task_id = resp["taskId"]
    while True:
        s = requests.get(f"{API}/api/generate-video/status/{task_id}", headers=H).json()
        if s.get("videoUrl"):
            print(f"Video: {s['videoUrl']}"); break
        elif s.get("state") in ("failed", "error"):
            print("Failed"); break
        time.sleep(5)
```

---

## Authentication

```
X-AW-Key: your_api_key_here
```

Get a key: Sign up at **https://aetherwavestudio.com** → Profile → Developer tab → Generate API Key

---

## Core Endpoint

```
POST /api/generate-video
Content-Type: application/json
Auth: X-AW-Key header or session cookie
```

### Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `prompt` | string | Yes* | — | Scene description (*not needed for some lip sync models) |
| `model` | string | **Yes** | — | Model ID (see model table below) |
| `duration` | string/number | No | model default | Seconds (e.g. `"5"`, `"10"`) |
| `aspectRatio` | string | No | `"16:9"` | `16:9`, `9:16`, `1:1`, `4:3`, `3:4`, `9:21`, `21:9` |
| `resolution` | string | No | model default | `480p`, `720p`, `1080p` |
| `imageUrl` | string | No | — | Image URL for I2V (first frame) |
| `imageData` | string | No | — | Base64 image data for I2V (alternative to imageUrl) |
| `endImageData` | string | No | — | Base64 last frame image (Seedance models) |
| `audioUrl` | string | No | — | Audio URL for lip sync models |
| `audioData` | string | No | — | Base64 audio for lip sync |
| `audioDuration` | number | No | — | Audio length in seconds (for looping video to match) |
| `negativePrompt` | string | No | — | What to avoid (Kling models only) |
| `cfgScale` | number | No | — | 0-1, creativity vs adherence (Kling models) |
| `withAudio` | boolean | No | `false` | Native audio generation (Kling 2.6, doubles cost) |
| `storyboard` | array | No | — | Multi-shot scenes (SORA 2 Pro Storyboard only) |
| `mode` | string | No | — | Grok mode: `fun`, `normal`, `spicy` |
| `seed` | number | No | — | For reproducibility |
| `enablePromptExpansion` | boolean | No | — | Auto-enhance prompt (Wan models) |
| `projectId` | string | No | — | Attach result to a project |

### Response

**Synchronous models** (immediate result):
```json
{
  "status": "complete",
  "videoUrl": "https://media.aetherwavestudio.com/videos/...",
  "creditsUsed": 15
}
```

**Asynchronous models** (poll for result):
```json
{
  "taskId": "task_abc123",
  "timeoutSeconds": 360,
  "creditsUsed": 77
}
```

### Auto-switching

If you select a T2V model but provide `imageUrl` or `imageData`, the backend automatically switches to the I2V variant (e.g. `seedance-lite-t2v` → `seedance-lite-i2v`).

### Free Perk

Seedance Lite I2V at 5s @ 480p is **FREE for all users** including anonymous — great for album art animations.

---

## Poll Status

```
GET /api/generate-video/status/{taskId}
Auth: X-AW-Key header
```

Poll every 5 seconds. Typical generation: 30s-5min depending on model.

```json
{
  "taskId": "task_abc123",
  "state": "completed",
  "videoUrl": "https://...",
  "model": "seedance-lite-t2v",
  "creditCost": 15,
  "creditsDeducted": true
}
```

States: `pending`, `processing`, `completed`, `failed`, `error`

---

## Available Models

### Budget (3-15 credits)

| Model ID | Name | Type | Credits | Duration | Best For |
|---|---|---|---|---|---|
| `seedance-lite-t2v` | Seedance Lite | T2V | 3/sec | 2-12s | Fast drafts, album art animation |
| `seedance-lite-i2v` | Seedance Lite I2V | I2V | 3/sec | 2-12s | Animate images (FREE at 5s/480p) |
| `kling-2.1-standard` | Kling 2.1 Standard | I2V | 7/sec | 5-10s | Good quality I2V |
| `infinitalk` | Infinitalk | Lip sync | 5-17/sec | 5-15s | Talking head from image+audio |

### Mid-Range (14-42 credits)

| Model ID | Name | Type | Credits | Duration | Best For |
|---|---|---|---|---|---|
| `grok-imagine-t2v` | Grok T2V | T2V | 14-56 | 6-15s | Creative, fun, stylized |
| `grok-imagine-i2v` | Grok I2V | I2V | 14-56 | 6-15s | Stylized image animation |
| `grok-upscale` | Grok Upscale | Upscale | 14 | — | Upscale existing video |
| `kling-2.1-pro` | Kling 2.1 Pro | I2V | 14/sec | 5-10s | High quality I2V |
| `seedance-pro-t2v` | Seedance Pro | T2V | 3-10/sec | 2-12s | Higher quality Seedance |
| `seedance-pro-i2v` | Seedance Pro I2V | I2V | 3-10/sec | 2-12s | Higher quality I2V |
| `topaz-video-upscale` | Topaz Upscale | Upscale | 12/sec | — | AI video upscaling |
| `wan-2.5-t2v` | Wan 2.5 | T2V | 12-20/sec | 5-10s | Alibaba model |
| `wan-2.5-i2v` | Wan 2.5 I2V | I2V | 12-20/sec | 5-10s | Alibaba I2V |
| `wan-speech-to-video` | Wan Speech | Lip sync | 17-34/sec | 5-60s | Long lip sync |
| `midjourney-i2v` | Midjourney I2V | I2V | 40 fixed | — | 4 video variations |
| `hailuo-2.0-standard` | Hailuo 2.0 Std | I2V | 3-7/sec | 6-10s | MiniMax standard |
| `hailuo-2.0-pro` | Hailuo 2.0 Pro | I2V | 14/sec | 6-10s | MiniMax pro |

### Premium (42-560 credits)

| Model ID | Name | Type | Credits | Duration | Best For |
|---|---|---|---|---|---|
| `sora-2-standard-t2v` | SORA 2 Standard | T2V | 42-63 | 10-15s | OpenAI quality |
| `sora-2-standard-i2v` | SORA 2 Standard I2V | I2V | 42-63 | 10-15s | OpenAI I2V |
| `sora-2-pro-storyboard` | SORA 2 Pro Storyboard | Multi-shot | 210-378 | 10-25s | Multi-scene videos |
| `hailuo-2.3-standard` | Hailuo 2.3 Std | I2V | 42-70 | 6-10s | Latest MiniMax |
| `hailuo-2.3-pro` | Hailuo 2.3 Pro | I2V | 63-126 | 6-10s | Highest MiniMax |
| `kling-2.6-t2v` | Kling 2.6 | T2V | 77-308 | 5-10s | Top Kling (native audio option) |
| `kling-2.6-i2v` | Kling 2.6 I2V | I2V | 77-308 | 5-10s | Top Kling I2V |
| `kling-2.1-master-t2v` | Kling 2.1 Master | T2V | 32/sec | 5-10s | Kling Master |
| `kling-2.1-master-i2v` | Kling 2.1 Master I2V | I2V | 32/sec | 5-10s | Kling Master I2V |
| `kling-3.0-motion-720p` | Kling 3.0 Motion | Motion | 17/sec | 3-30s | Motion control |
| `kling-3.0-motion-1080p` | Kling 3.0 Motion Pro | Motion | 28/sec | 3-30s | Motion control HD |
| `kling-avatar-standard` | Kling Avatar | Lip sync | 12/sec | 5-15s | Kling lip sync |
| `kling-avatar-pro` | Kling Avatar Pro | Lip sync | 23/sec | 5-15s | Kling lip sync HD |
| `veo3-fast` | VEO 3 Fast | T2V/I2V | 84 fixed | 8s | Google DeepMind |
| `veo3-quality` | VEO 3 Quality | T2V/I2V | 560 fixed | 8s | Highest quality |
| `veo3.1-fast` | VEO 3.1 Fast | T2V/I2V | 84 fixed | 4-8s | Latest VEO |
| `veo3.1-quality` | VEO 3.1 Quality | T2V/I2V | 350 fixed | 4-8s | Latest VEO quality |

---

## Special Workflows

### Image-to-Video (I2V)

Provide `imageUrl` with any model — auto-switches to I2V variant:

```json
{
  "prompt": "Slow camera push-in, hair blowing in wind",
  "model": "seedance-lite-t2v",
  "imageUrl": "https://example.com/portrait.jpg",
  "duration": "5"
}
```

### Lip Sync (Image + Audio → Talking Video)

```json
{
  "model": "infinitalk",
  "imageUrl": "https://example.com/face.jpg",
  "audioUrl": "https://example.com/speech.mp3",
  "duration": "10",
  "resolution": "720p"
}
```

### SORA 2 Pro Storyboard (Multi-Scene)

```json
{
  "model": "sora-2-pro-storyboard",
  "storyboard": [
    {"description": "Wide shot of a desert highway at sunset", "duration": 5},
    {"description": "Close-up of hands on a steering wheel", "duration": 3},
    {"description": "POV through the windshield, mountains ahead", "duration": 7}
  ],
  "aspectRatio": "16:9"
}
```

### Extend Video (Continue from Last Frame)

Capture the last frame of a generated video, then use it as `imageUrl` for the next generation to create a seamless continuation.

### Background Removal

```
POST /api/video/remove-background
Content-Type: multipart/form-data
Auth: X-AW-Key header
```

Upload video file. Cost: 20 credits. Formats: webm, mp4, mov, gif.
Poll progress: `GET /api/video/progress/{jobId}`

---

## Save to Gallery

```
POST /api/save-to-gallery
Content-Type: application/json
Auth: X-AW-Key header
```

```json
{
  "mediaUrl": "https://...video.mp4",
  "mediaType": "video",
  "prompt": "Scene description",
  "model": "seedance-lite-t2v",
  "title": "Neon City",
  "visibility": "public"
}
```

---

## Browser Automation Guide

### Page URL
`https://aetherwavestudio.com/studio-pages/video-studio.html`

### Key Selectors

| Element | Selector | Purpose |
|---|---|---|
| Prompt | `#promptInput` | Scene description textarea |
| Model selector | `.model-selector-trigger` | Opens model picker modal |
| Aspect ratio | `#aspectRatio` | Dropdown |
| Resolution | `#resolutionSelect` | Dropdown (dynamic per model) |
| Duration | `#durationSelect` | Dropdown (dynamic per model) |
| Image upload | `#imageInput` | File input for I2V |
| Last frame upload | `#lastFrameInput` | File input for end frame |
| Audio upload | `#audioInput` | File input for lip sync |
| Negative prompt | `#negativePromptInput` | Kling models only |
| CFG scale | `#cfg-scale-slider` | Kling creativity slider |
| With audio | `#withAudio` | Kling 2.6 native audio |
| Generate button | `#generateVideoBtn` | Start generation |
| Result video | `#resultVideo` | Video player element |
| Download button | `#downloadBtn` | Download current video |
| Save to gallery | `#saveToGalleryBtn` | Save to user gallery |
| Price display | `#estimatedPrice` | Dynamic credit cost |

### Generation Flow

1. Enter prompt in `#promptInput`
2. Click model selector → choose model from modal
3. Set aspect ratio, resolution, duration
4. Optionally upload image for I2V or audio for lip sync
5. Click Generate (`#generateVideoBtn`)
6. Wait for progress bar → video appears in `#resultVideo`
7. Download or Save to Gallery

---

## Full Pipeline Example

```python
import requests, time

API = "https://aetherwavestudio.com"
H = {"X-AW-Key": "YOUR_KEY", "Content-Type": "application/json"}

# 1. Text-to-Video
resp = requests.post(f"{API}/api/generate-video", headers=H, json={
    "prompt": "A phoenix rising from digital flames, particles dissolving into code",
    "model": "seedance-lite-t2v",
    "duration": "5",
    "aspectRatio": "16:9"
}).json()

# 2. Get the video URL (handle both sync and async)
video_url = resp.get("videoUrl")
if not video_url and resp.get("taskId"):
    while True:
        s = requests.get(f"{API}/api/generate-video/status/{resp['taskId']}", headers=H).json()
        if s.get("videoUrl"):
            video_url = s["videoUrl"]; break
        elif s.get("state") in ("failed", "error"):
            raise Exception("Generation failed")
        time.sleep(5)

# 3. Save to gallery
requests.post(f"{API}/api/save-to-gallery", headers=H, json={
    "mediaUrl": video_url,
    "mediaType": "video",
    "prompt": "Phoenix rising from digital flames",
    "model": "seedance-lite-t2v"
})

# 4. I2V — animate an existing image (FREE at 5s/480p)
resp2 = requests.post(f"{API}/api/generate-video", headers=H, json={
    "prompt": "Subtle breathing motion, hair blowing in wind",
    "model": "seedance-lite-i2v",
    "imageUrl": "https://example.com/portrait.jpg",
    "duration": "5",
    "resolution": "480p"
}).json()

print(f"T2V: {video_url}")
print(f"I2V: {resp2.get('videoUrl') or resp2.get('taskId')}")
```

---

## Notes for LLMs

- Video generation can be **sync or async** — always check for `videoUrl` first, fall back to polling `taskId`
- Credits are deducted on successful delivery only
- Providing `imageUrl` with a T2V model auto-switches to I2V — no need to change model ID
- Seedance Lite I2V at 5s/480p is **FREE** — use for testing and album art animation
- Poll every 5 seconds. Max timeout varies by model (30s to 30min)
- All video URLs are permanent CDN links (Cloudflare R2)
- For lip sync, you need both an image (face) and audio (speech)
- Kling models support `negativePrompt` and `cfgScale` — other models ignore them
- `withAudio: true` on Kling 2.6 generates native sound effects but doubles the credit cost
- SORA 2 Pro Storyboard uses `storyboard` array instead of `prompt`
- Get dynamic pricing: `GET /api/video/pricing` returns the full model pricing config

---

*AetherWave Studio — All intelligence welcome here.*
*https://aetherwavestudio.com/developers*
