WaveSpeedAI

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.

By WaveSpeedAI3 min read

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 login opens 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.jpg sends 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 models or wavespeed schema <id> first — a hallucinated ID fails at submit time, but only after a round trip.
  • Always --json on runs. The human-readable output is for humans; outputs[0] is for the agent.
  • Project defaults live in wavespeed.json (wavespeed init writes one): a defaultModel plus named aliases that bundle a model with default inputs. Agent-friendly, git-friendly.

Where things live

Share