Generates a short-form video from a text prompt (T2V) or a text prompt + starting image (I2V). Submits, polls, and returns the final video URL. Default model is 'grok-imagine-t2v' (fast, 4 cr/s at 480p and 7 at 720p, with built-in KIE -> fal.ai fallback). Use list_video_models for the full lineup with credit cost per second. I2V models (e.g. 'grok-imagine-i2v', 'seedance-pro-i2v') require a public `imageUrl`. Video generation takes 1-8 minutes, so this tool almost always returns state "running" with a taskId: poll aetherwave_get_job with kind "video".
## Model selection guide for videos (when the user does not specify a model)
Default: `grok-imagine-t2v` (4 cr/s at 480p, 7 at 720p, fast, has KIE -> fal.ai fallback for redundancy. Best general-purpose).
Pick a different model when the prompt has these signals:
- "highest quality" / "premium" / broadcast / commercial -> `veo3-quality` (Google VEO 3.1 Quality, fixed 350 cr for 8s, 3-5 min)
- "fast premium" / quick high-quality -> `veo3-fast` (VEO 3.1 Fast, 84 cr fixed for 8s) or `veo3-lite` (42 cr)
- Cinematic camera moves / dolly / pan -> `seedance-pro-t2v` (3-10 cr/s) or `kling-3.0-pro-t2v` (26 cr/s)
- Realistic human motion / faces -> `hailuo-2.3-pro` (I2V, supply imageUrl)
- Talking head / lip sync -> `kling-avatar-pro` (23 cr/s) or `infinitalk` (5-17 cr/s)
- Anime / stylized / fantasy -> `wan-2-7-t2v`
- NSFW / adult -> `wan-22-nsfw-i2v` (I2V only; auto-tags adult)
- Animate this exact image -> any I2V variant (`grok-imagine-i2v`, `seedance-pro-i2v`, `hailuo-2.3-pro`)
- First + last frame interpolation -> `seedance-pro-i2v` with both `imageUrl` + `endImageUrl`
- Cheapest test -> `hailuo-2.0-standard` @ 512p (3 cr/s, ~18 cr for 6s) or `grok-imagine-t2v` @ 480p (4 cr/s, ~24 cr for 6s)
- Clip 12-15s -> `grok-imagine-t2v` (accepts up to 15s)
- True 4K -> `kling-3.0-4k-t2v` (94 cr/s, expensive but native 4K)
**Audio in generated video:** `grok-imagine-t2v`, `seedance-pro-t2v`, and the VEO 3.x family include audio at base cost (no surcharge). Kling 2.6 and Kling 3.0 are the outliers - they price audio as a +50-100% surcharge (Kling 2.6 doubles the cost, Kling 3.0 Pro adds ~46%). Default to Grok / Seedance / VEO when sound matters and you don't want to think about audio pricing.
**Cost framing:** resolution and duration drive cost more than model choice. A 6-second 480p Grok generation costs ~24 cr; the same prompt at 1080p Seedance 2 is ~858 cr (35x more). Pick the lowest acceptable resolution + duration first.
**For I2V models:** `imageUrl` is required. For first+last-frame models, pass `endImageUrl` too.
## Consistent characters
If the user names a person they already have ("my Amy character"), pass `character: "Amy"`: the tool attaches that character's reference pack and appends its `identityBlock` verbatim (or do it by hand: call `aetherwave_list_characters`, append `identityBlock`, pass `referenceImages`). Do NOT use `imageUrl` for this - a starting frame switches the engine to first-frame mode and drops the reference images, which is the opposite of what a consistent character needs.
## Writing dialogue
`duration` is authoritative: the engine honours the seconds you ask for to within ~0.1s and then **fits the line to that length by changing pace**, rather than finishing early. So write the line to the clip length - do NOT estimate the clip length from the line. Measured on a 22-clip production: ~2 words per second of clip. A words-per-minute figure from a voice description describes the character, not the engine, and budgeting by it overran by 35%.
Pass `generateAudio: true` for any clip with dialogue, and spell hard words the way they should be *spoken* ("super intelligence" rather than "superintelligence") - the engine reads the text literally and mangles unfamiliar compounds.
⚠️ A take can come back saying the WRONG WORDS and still report success. Re-rendering the identical prompt produced one clean take and one that dropped a whole sentence. For anything that will be assembled unattended, verify the rendered speech against the script before using the clip.
Ask the user only when:
- Single generation would cost more than 100 credits and they haven't confirmed
- They asked for "the best" with no other signal; surface 2-3 options with cost ranges
Returns within ~45 s. If the result has state "running" the job is still rendering: poll aetherwave_get_job with the returned taskId and kind every ~10 s. Pass wait:true ONLY if your MCP client permits tool calls longer than 60 s (most do not). Pass async:true to get the taskId back immediately without waiting.