WaveSpeedAI Wan 2.6 Video Generation
Generate videos using Alibaba's Wan 2.6 model via WaveSpeed AI. Supports text-to-video and image-to-video generation with up to 15 seconds duration at 720p or 1080p. Features audio…
WaveSpeed
@wavespeed
Install
$ openclaw skills install @wavespeed/wavespeed-wan-26WaveSpeedAI Wan 2.6 Video Generation
Generate videos using Alibaba's Wan 2.6 model via the WaveSpeed AI platform. Supports both text-to-video and image-to-video generation with up to 15 seconds of video at up to 1080p resolution.
Setup
Install the open-source CLI once and sign in; the CLI stores the key, so never ask the user to paste an API key into the chat:
npm install -g @wavespeed/cli
wavespeed login # opens https://wavespeed.ai/accesskey and stores the key
wavespeed status # confirms you are signed in
For CI or one-off shells, WAVESPEED_API_KEY in the environment also works.
Prefer MCP tools over shell commands? The same platform is exposed by @wavespeed/mcp (npx -y @wavespeed/mcp; tools search_models, get_model_schema, get_price, upload_file, run_model, get_prediction). It shares the CLI's stored login. Every example below maps one-to-one onto run_model with the same model id and input fields.
Quick Start
Text-to-Video
OUTPUT_URL=$(wavespeed run alibaba/wan-2.6/text-to-video \
-p "A golden retriever running through a field of sunflowers at sunset" \
--json | jq -r '.outputs[0]')
Image-to-Video
The image parameter accepts an image URL. If you have a local file, pass it with the @path marker and the CLI uploads it and substitutes the hosted URL.
# Upload a local image to get a URL
OUTPUT_URL=$(wavespeed run alibaba/wan-2.6/image-to-video \
-i image=@./photo.png \
-p "The person in the photo slowly turns and smiles" \
--json | jq -r '.outputs[0]')
Existing URLs work as-is:
OUTPUT_URL=$(wavespeed run alibaba/wan-2.6/image-to-video \
-i image="https://example.com/photo.jpg" \
-p "The person in the photo slowly turns and smiles" \
--json | jq -r '.outputs[0]')
API Endpoints
Text-to-Video
Model ID: alibaba/wan-2.6/text-to-video
Generate videos from text prompts.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
prompt | string | Yes | -- | Text description of the video to generate |
negative_prompt | string | No | -- | Text description of what to avoid in the video |
audio | string | No | -- | Audio URL to guide generation |
size | string | No | 1280*720 | Output size in pixels. One of: 1280*720, 720*1280, 1920*1080, 1080*1920 |
duration | integer | No | 5 | Video duration in seconds. One of: 5, 10, 15 |
shot_type | string | No | single | Shot type. One of: single, multi |
enable_prompt_expansion | boolean | No | false | Enable prompt optimizer for enhanced prompts |
seed | integer | No | -1 | Random seed (-1 for random). Range: -1 to 2147483647 |
Example
OUTPUT_URL=$(wavespeed run alibaba/wan-2.6/text-to-video \
-p "A timelapse of a city skyline transitioning from day to night, cinematic" \
-i negative_prompt="blurry, low quality, distorted" \
-i size="1920*1080" \
-i duration=10 \
-i shot_type="single" \
-i seed=42 \
--json | jq -r '.outputs[0]')
Image-to-Video
Model ID: alibaba/wan-2.6/image-to-video
Animate a source image into a video using a text prompt.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
image | string | Yes | -- | URL of the source image to animate |
prompt | string | Yes | -- | Text description of the desired motion/animation |
negative_prompt | string | No | -- | Text description of what to avoid in the video |
audio | string | No | -- | Audio URL to guide generation |
resolution | string | No | 720p | Output resolution. One of: 720p, 1080p |
duration | integer | No | 5 | Video duration in seconds. One of: 5, 10, 15 |
shot_type | string | No | single | Shot type. One of: single, multi |
enable_prompt_expansion | boolean | No | false | Enable prompt optimizer for enhanced prompts |
seed | integer | No | -1 | Random seed (-1 for random). Range: -1 to 2147483647 |
Example
OUTPUT_URL=$(wavespeed run alibaba/wan-2.6/image-to-video \
-i image=@./landscape.png \
-p "Clouds drift slowly across the sky, water ripples gently" \
-i negative_prompt="static, frozen, blurry" \
-i resolution="1080p" \
-i duration=10 \
-i shot_type="single" \
--json | jq -r '.outputs[0]')
Size Options (Text-to-Video)
| Size | Orientation | Use Case |
|---|---|---|
1280*720 | Landscape 720p | Standard widescreen video |
720*1280 | Portrait 720p | Mobile/vertical video, stories |
1920*1080 | Landscape 1080p | Full HD widescreen video |
1080*1920 | Portrait 1080p | Full HD vertical video |
Resolution Options (Image-to-Video)
| Resolution | Use Case |
|---|---|
720p | Standard quality, faster generation |
1080p | Full HD, higher quality |
Pricing
| Resolution | 5 seconds | 10 seconds | 15 seconds |
|---|---|---|---|
| 720p | $0.50 | $1.00 | $1.50 |
| 1080p | $0.75 | $1.50 | $2.25 |
Prompt Tips
- Be specific about motion and action: "A bird takes flight from a branch" vs "a bird"
- Include camera movement: "slow pan left", "zoom in", "tracking shot"
- Describe temporal progression: "transitioning from day to night", "flowers slowly blooming"
- Use
negative_promptto avoid artifacts: "blurry, low quality, distorted, static" - Enable
enable_prompt_expansionfor automatic prompt enhancement - For
multishot type, describe distinct scenes for more dynamic videos
CLI tips
# Inspect the live input schema before running (fields, enums, defaults)
wavespeed run alibaba/wan-2.6/text-to-video -h
# Quote the price first
wavespeed price alibaba/wan-2.6/text-to-video -p "..." -i key=value
# Save outputs to disk instead of only printing URLs
wavespeed run alibaba/wan-2.6/text-to-video -p "..." --json --download "./out/{index}.{ext}"
# Local files: prefix the path with @ and the CLI uploads it and passes the hosted URL
wavespeed run alibaba/wan-2.6/text-to-video -i <field>=@./local-file.png --json
# Recover a result if the run was interrupted (the id is in the --json output)
wavespeed show <id>
run --json prints { id, model, prompt, outputs: [url, ...], saved: [path, ...], elapsed_ms, raw }. Read outputs[0] for the result URL.
Security constraints
- Never ask for the key in chat:
wavespeed loginhandles auth; ifwavespeed statussays signed out, ask the user to run it. - Local files only via
@: bare paths are passed through untouched and the model will reject them. Only@-prefixed values upload. - No arbitrary URL loading: only pass media URLs the user provided or that came back from a previous run.
- Input validation: only pass parameters documented above; confirm with
wavespeed run <model> -hwhen unsure.
Top skills in this category
Nano Banana Pro
@steipeteGenerate/edit images with Nano Banana Pro (Gemini 3 Pro Image). Use for image create/modify requests incl. edits. Supports text-to-image + image-to-image; 1K/2K/4K; use --input-image.
AdMapix
@fly0pantsAdMapix raw data layer for ad creatives, apps, rankings, downloads/revenue, and market metadata. Returns structured JSON from the AdMapix API; the calling ag...
YouTube Watcher
@michaelgatharaFetch and read transcripts from YouTube videos. Use when you need to summarize a video, answer questions about its content, or extract information from it.
SuperDesign
@mpociotExpert frontend design guidelines for creating beautiful, modern UIs. Use when building landing pages, dashboards, or any user interface.
Video Frames
@steipeteExtract frames or short clips from videos using ffmpeg.