Generate Images and Video Inside OpenCode with the WaveSpeed Skill
OpenCode loads skills from .claude/skills — which is exactly where wavespeed skill install writes. One command and the agent can search the model catalog, read input schemas, and run any image, video, audio, or 3D model.
OpenCode resolves agent skills from several directories, and .claude/skills is on that list — project-local and global. That makes WaveSpeed setup a genuine one-liner, because the wavespeed CLI already installs its skill exactly there:
npm install -g @wavespeed/cli
wavespeed login # opens the key page at wavespeed.ai, validates the paste
wavespeed skill install # writes .claude/skills/wavespeed/SKILL.md — OpenCode picks it up
No plugin, no MCP server, no OpenCode-specific packaging. The skill is the same file that serves Claude Code, Cursor, and Codex.
What the agent does with it
Every model on wavespeed.ai is one wavespeed run <model-id> command. The skill teaches the find → inspect → run pattern:
# 1. FIND a model in the live catalog
wavespeed models "seedream"
wavespeed models --type image-to-video --popular
# 2. INSPECT its real input schema (fetched live, per model)
wavespeed run bytedance/seedream-v5.0-pro -h
# 3. RUN it, reading the result as JSON
wavespeed run bytedance/seedream-v5.0-pro \
-p "a cyberpunk skyline at golden hour" \
-i aspect_ratio="16:9" -i resolution="2k" --json
That ordering matters: agents that guess parameter names burn runs on validation errors, so the skill makes the schema part of the loop.
Local files go through the @path marker — uploaded and substituted with a hosted URL in one step:
# Edit a local image
wavespeed run bytedance/seedream-v5.0-pro/edit \
-p "replace the background with a sunlit kitchen" \
-i images='["@./input.jpg"]' --json
# Animate a local still
wavespeed run bytedance/seedance-2.5/image-to-video \
-p "subtle parallax, gentle wind" -i image=@./hero.jpg --json
Cost control
wavespeed price bytedance/seedream-v5.0-pro -i resolution=2k # quote, no charge
wavespeed balance
Many models bill from an input — audio duration, frame count. Quote without those and the formula collapses to the model’s base price, the floor of its range; the command names the inputs it was blind to (unpriced_inputs in --json). The amount actually charged for a run is authoritative.
Sharp edges
- Bare paths are not uploaded.
-i image=./photo.jpgsends the literal string. Use@./photo.jpg. - Don’t invent model IDs — confirm via
wavespeed modelsorwavespeed schema <id>first. - Always
--jsonon runs so the agent readsoutputs[0]programmatically. - Project defaults and aliases live in
wavespeed.json(wavespeed initwrites one).
Where things live
- CLI (MIT): WaveSpeedAI/wavespeed-cli ·
@wavespeed/cli - Model catalog: wavespeed.ai/models
- Other agents: DeepSeek Harness · Gemini CLI · Claude Code plugins · MCP server

