Install
openclaw skills install @wavespeed/wavespeed-wan-26Generate 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-guided generation, prompt expansion, multi-shot mode, and configurable seeds. Use when the user wants to create videos from text prompts or animate images.
openclaw skills install @wavespeed/wavespeed-wan-26Generate 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.
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.
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]')
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]')
Model ID: alibaba/wan-2.6/text-to-video
Generate videos from text prompts.
| 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 |
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]')
Model ID: alibaba/wan-2.6/image-to-video
Animate a source image into a video using a text prompt.
| 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 |
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 | 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 | Use Case |
|---|---|
720p | Standard quality, faster generation |
1080p | Full HD, higher quality |
| Resolution | 5 seconds | 10 seconds | 15 seconds |
|---|---|---|---|
| 720p | $0.50 | $1.00 | $1.50 |
| 1080p | $0.75 | $1.50 | $2.25 |
negative_prompt to avoid artifacts: "blurry, low quality, distorted, static"enable_prompt_expansion for automatic prompt enhancementmulti shot type, describe distinct scenes for more dynamic videos# 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.
wavespeed login handles auth; if wavespeed status says signed out, ask the user to run it.@: bare paths are passed through untouched and the model will reject them. Only @-prefixed values upload.wavespeed run <model> -h when unsure.