Generate Images and Video Inside DeepSeek Harness with the WaveSpeed Skill
A practical setup guide: install the WaveSpeed skill in DeepSeek Harness (dsh), and your agent can search the model catalog, read input schemas, and run any image, video, audio, or 3D model — with a price check before every run.
DeepSeek Harness (dsh) runs coding agents that are good at exactly one interface: the shell. The WaveSpeed CLI is built for that interface — every model on wavespeed.ai is one wavespeed run <model-id> command. The wavespeed-dsh-skill connects the two, so an agent in the middle of a task can produce a hero image, animate a still, or upscale a clip without you leaving the session.
This is a setup note, not a pitch: what to install, what the agent actually does with it, and where the sharp edges are.
Prerequisites
- Node.js ≥ 18
- The CLI:
npm install -g @wavespeed/cli - A WaveSpeed API key —
wavespeed loginopens the key page and validates the paste, so you never handle the key in a chat window
Install the skill
As a dsh plugin (the bundle registers the skill automatically):
dsh plugin add github:WaveSpeedAI/wavespeed-dsh-skill
Or copy it by hand into a project (checked into git, shared with your team):
mkdir -p .dsh/skills
git clone --depth 1 https://github.com/WaveSpeedAI/wavespeed-dsh-skill /tmp/wss \
&& cp -r /tmp/wss/skills/wavespeed .dsh/skills/ && rm -rf /tmp/wss
If you also work in Claude Code, Cursor, or Codex, the CLI installs the same skill for those agents directly: wavespeed skill install.
What the agent does with it
The skill teaches one pattern — find, inspect, run:
# 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 more than it looks. Agents that guess parameter names burn runs on validation errors; run <id> -h makes the schema part of the loop, so the agent reads before it writes.
Local files go through the @path marker — the CLI uploads the file and substitutes its 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
Two commands keep the agent honest about spend:
wavespeed price bytedance/seedream-v5.0-pro -i resolution=2k # quote, no charge
wavespeed balance # account credit
One honest caveat about price: many models bill from an input — audio duration, frame count, text length. Quote without those inputs and the formula collapses to the model’s base price, the floor of its range, not a typical run. The command names the inputs it was blind to (unpriced_inputs in --json); supply them for a real quote. The amount actually charged for a run is authoritative.
Sharp edges
- Bare paths are not uploaded.
-i image=./photo.jpgsends the literal string and the model rejects it. Use@./photo.jpg. - Don’t invent model IDs. The skill instructs the agent to confirm via
wavespeed modelsorwavespeed schema <id>first — a hallucinated ID fails at submit time, but only after a round trip. - Always
--jsonon runs. The human-readable output is for humans;outputs[0]is for the agent. - Project defaults live in
wavespeed.json(wavespeed initwrites one): adefaultModelplus named aliases that bundle a model with default inputs. Agent-friendly, git-friendly.
Where things live
- Skill: WaveSpeedAI/wavespeed-dsh-skill
- CLI (MIT, open source): WaveSpeedAI/wavespeed-cli ·
@wavespeed/clion npm - Model catalog: wavespeed.ai/models

