From df69916f9bde5bde842c660c4937d7083d6df055 Mon Sep 17 00:00:00 2001 From: chengzeyi Date: Sat, 5 Sep 2026 16:52:44 +0000 Subject: [PATCH] feat(skills): add wavespeed skill AI media generation (image, video, audio, 3D) on the WaveSpeed platform via the wavespeed CLI: catalog search, per-model schema, price quotes, @path local-file upload. Registered in the openhands-extensions marketplace; skills/index.js regenerated with build:skills. --- marketplaces/openhands-extensions.json | 13 ++++ skills/index.js | 16 +++++ skills/wavespeed/.claude-plugin | 1 + skills/wavespeed/.codex-plugin | 1 + skills/wavespeed/.plugin/plugin.json | 20 ++++++ skills/wavespeed/README.md | 22 +++++++ skills/wavespeed/SKILL.md | 89 ++++++++++++++++++++++++++ 7 files changed, 162 insertions(+) create mode 120000 skills/wavespeed/.claude-plugin create mode 120000 skills/wavespeed/.codex-plugin create mode 100644 skills/wavespeed/.plugin/plugin.json create mode 100644 skills/wavespeed/README.md create mode 100644 skills/wavespeed/SKILL.md diff --git a/marketplaces/openhands-extensions.json b/marketplaces/openhands-extensions.json index afa26ff8..18ed707d 100644 --- a/marketplaces/openhands-extensions.json +++ b/marketplaces/openhands-extensions.json @@ -834,6 +834,19 @@ "pull-request", "automation" ] + }, + { + "name": "wavespeed", + "source": "./skills/wavespeed", + "description": "Generate and edit AI media (image, video, audio, 3D) on the WaveSpeed platform through the open-source wavespeed CLI: live catalog search, per-model schema, price quotes, local-file upload.", + "category": "integrations", + "keywords": [ + "wavespeed", + "image-generation", + "video-generation", + "audio", + "3d" + ] } ] } diff --git a/skills/index.js b/skills/index.js index 2b32b1fe..e6116ce7 100644 --- a/skills/index.js +++ b/skills/index.js @@ -628,6 +628,22 @@ export const SKILLS_CATALOG = [ ], "content": "# Vercel Deployment Guide\n\n## Deployment Protection and Agent Access\n\nVercel deployments may have **Deployment Protection** enabled, which requires authentication to access preview deployments. This can block automated testing and agent access to preview URLs.\n\n### Identifying Protected Deployments\n\nIf you encounter a login page or authentication requirement when accessing a Vercel preview URL, the deployment has protection enabled. Signs include:\n- Redirect to `vercel.com/login` or SSO login page\n- 401/403 errors when accessing the deployment\n- Preview URLs that require Vercel team membership\n\n### Enabling Agent Access with Protection Bypass\n\nTo allow agents and automated systems to access protected deployments, users need to set up **Protection Bypass for Automation**:\n\n1. **Navigate to Project Settings**\n - Go to the Vercel Dashboard\n - Select the project\n - Click on **Settings** → **Deployment Protection**\n\n2. **Generate a Protection Bypass Secret**\n - Under \"Protection Bypass for Automation\", click **Generate Secret**\n - Copy the generated secret securely\n\n3. **Using the Bypass Secret**\n \n The secret can be used in two ways:\n \n **As a Header:**\n ```bash\n curl -H \"x-vercel-protection-bypass: \" https://your-preview-url.vercel.app\n ```\n\n PowerShell equivalent:\n ```powershell\n Invoke-WebRequest -Headers @{ \"x-vercel-protection-bypass\" = \"\" } -Uri https://your-preview-url.vercel.app\n ```\n \n **As a Query Parameter:**\n ```\n https://your-preview-url.vercel.app?x-vercel-protection-bypass=\n ```\n\n4. **For Browser-Based Testing**\n - Append `?x-vercel-protection-bypass=` to the preview URL\n - The secret will be stored in a cookie for subsequent requests\n\n### Alternative: Disable Protection for Previews\n\nIf protection bypass is not suitable, users can disable protection for preview deployments:\n\n1. Go to **Settings** → **Deployment Protection**\n2. Set \"Vercel Authentication\" to **Only Production Deployments** or **Disabled**\n\n\nIf you cannot access a Vercel preview deployment due to authentication requirements, inform the user that they need to either:\n1. Set up a Protection Bypass secret and provide it to you, OR\n2. Disable Deployment Protection for preview deployments in their Vercel project settings\n\nDo NOT repeatedly attempt to access protected URLs without the bypass secret.\n\n\n## Environment Variables\n\nSet environment variables in Vercel Dashboard under **Settings** → **Environment Variables**, or use the Vercel CLI:\n\n```bash\nvercel env add MY_SECRET\n```\n\nAccess in your application:\n```typescript\nconst secret = process.env.MY_SECRET;\n```\n\n## Vercel CLI Commands\n\nCommon Vercel CLI commands:\n\n```bash\n# Login to Vercel\nvercel login\n\n# Deploy to preview\nvercel\n\n# Deploy to production\nvercel --prod\n\n# List deployments\nvercel ls\n\n# View deployment logs\nvercel logs \n\n# Pull environment variables locally\nvercel env pull\n```", "category": "integrations" + }, + { + "name": "wavespeed", + "description": "Generate or edit AI media (image, video, audio, 3D) by calling the wavespeed CLI on the user's machine. Use whenever the user asks to create, edit, animate, upscale, or transform a visual asset, generate audio/TTS/music, or produce marketing creatives. Every model on the WaveSpeed platform is one `wavespeed run ` call.", + "triggers": [ + "wavespeed", + "generate image", + "generate video", + "text to image", + "image to video", + "text to video", + "upscale", + "text to speech" + ], + "content": "# WaveSpeed\n\nYou have access to the `wavespeed` CLI. Every generation flows through one verb. There are no `image` / `video` shortcuts; the model id is always explicit.\n\n## The three-step pattern\n\n```bash\n# 1. FIND a model — search the live catalog\nwavespeed models \"seedream\"\nwavespeed models --type image-to-video --popular\n\n# 2. INSPECT its inputs — dynamic schema, per model\nwavespeed run bytedance/seedream-v5.0-pro -h\n\n# 3. RUN it — always pass --json so you can read the result\nwavespeed run bytedance/seedream-v5.0-pro \\\n -p \"a cyberpunk skyline at golden hour\" \\\n -i aspect_ratio=\"16:9\" -i resolution=\"2k\" --json\n```\n\n`run --json` returns `{ id, model, prompt, outputs: [url, ...], saved: [path, ...], elapsed_ms, raw }`. Keep `id` — it is the handle for `wavespeed show ` if anything is interrupted. Use the URL when the user wants a link. Add `--download` if they need bytes on disk.\n\n## Recommended defaults\n\n| Use case | Model |\n|---|---|\n| Text → image | `bytedance/seedream-v5.0-pro` |\n| Image edit (instruction-driven) | `bytedance/seedream-v5.0-pro/edit` — requires `images: [url, ...]` |\n| Text → video | `wavespeed-ai/minimax-h3/text-to-video` |\n| Image → video | `wavespeed-ai/minimax-h3/image-to-video` — requires `image: url` |\n| Video edit (instruction-driven) | `wavespeed-ai/minimax-h3/video-edit` — requires `video: url` |\n| Video extend | `wavespeed-ai/minimax-h3/video-extend` — requires `video: url` |\n\nThese are good starting points. MiniMax H3 is the open-weights default: cheap, fast, and native stereo audio — the best place to start. When you need the highest quality, switch to `bytedance/seedance-2.5/*` (text-to-video, image-to-video, video-edit, video-extend). Browse alternatives with `wavespeed models `.\n\n## Common recipes\n\n```bash\n# Edit an existing image — @path uploads the file and passes its URL (one step)\nwavespeed run bytedance/seedream-v5.0-pro/edit \\\n -p \"replace the background with a sunlit kitchen\" \\\n -i images='[\"@./input.jpg\"]' --json\n\n# Image-to-video — same @ marker for single-URL fields\nwavespeed run wavespeed-ai/minimax-h3/image-to-video \\\n -p \"subtle parallax, gentle wind\" \\\n -i image=@./hero.jpg -i duration=5 --json\n\n# Or upload separately when you need the URL itself\nURL=$(wavespeed upload ./hero.jpg --json | jq -r .url)\n\n# Save outputs locally with a template\nwavespeed run ... -p \"...\" --download \"./out/{index}.{ext}\"\n```\n\n## Project config and aliases\n\nIf `wavespeed.json` exists (created by `wavespeed init`):\n\n- **`defaultModel`** — lets `wavespeed run -p \"…\"` (no model arg) work.\n- **Aliases** — named shortcuts that bundle model + default inputs. Run `wavespeed aliases` to see what's defined. `wavespeed run -h` shows the resolved schema. CLI `-i k=v` overrides alias defaults.\n\nThe CLI never modifies the user's prompt or inputs. The single exception is explicit: an `@path` value uploads that file and substitutes its hosted URL. Bare paths are never uploaded.\n\n## Auth\n\n`wavespeed status` shows whether the user is signed in. If not, ask them to run `wavespeed login` (opens https://wavespeed.ai/accesskey). **Never** ask the user to paste an API key into the chat — the CLI handles it.\n\n## Pitfalls\n\n- Local files: use `@./file.jpg` in `-i` values. Bare paths are NOT uploaded and the model will reject them.\n- Don't invent model IDs. Always confirm via `wavespeed models` or `wavespeed schema ` before running.\n- Use `--json` on every `run` so you can read `outputs[0]` programmatically.\n- `wavespeed delete` requires `--yes` when run non-interactively (that includes you).\n- Spend questions: `wavespeed usage` (totals, per-model) and `wavespeed billings` (per-charge records).", + "category": "integrations" } ]; export const DEFAULT_ENABLED_SKILL_NAMES = ["add-skill","agent-canvas-environment","agent-memory","agent-sdk-builder","code-review","docker","github","openhands-api","openhands-automation","openhands-sdk","skill-creator"]; diff --git a/skills/wavespeed/.claude-plugin b/skills/wavespeed/.claude-plugin new file mode 120000 index 00000000..665797f0 --- /dev/null +++ b/skills/wavespeed/.claude-plugin @@ -0,0 +1 @@ +.plugin \ No newline at end of file diff --git a/skills/wavespeed/.codex-plugin b/skills/wavespeed/.codex-plugin new file mode 120000 index 00000000..665797f0 --- /dev/null +++ b/skills/wavespeed/.codex-plugin @@ -0,0 +1 @@ +.plugin \ No newline at end of file diff --git a/skills/wavespeed/.plugin/plugin.json b/skills/wavespeed/.plugin/plugin.json new file mode 100644 index 00000000..760c8642 --- /dev/null +++ b/skills/wavespeed/.plugin/plugin.json @@ -0,0 +1,20 @@ +{ + "name": "wavespeed", + "version": "1.0.0", + "description": "Generate and edit AI media (image, video, audio, 3D) on the WaveSpeed platform through the open-source wavespeed CLI: live catalog search, per-model schema, price quotes, local-file upload.", + "author": { + "name": "WaveSpeedAI", + "email": "support@wavespeed.ai" + }, + "homepage": "https://github.com/WaveSpeedAI/agent-skills", + "repository": "https://github.com/WaveSpeedAI/agent-skills", + "license": "MIT", + "keywords": [ + "wavespeed", + "image-generation", + "video-generation", + "audio-generation", + "3d-generation", + "media" + ] +} diff --git a/skills/wavespeed/README.md b/skills/wavespeed/README.md new file mode 100644 index 00000000..07e4a360 --- /dev/null +++ b/skills/wavespeed/README.md @@ -0,0 +1,22 @@ +# WaveSpeed + +Generate and edit AI media — image, video, audio, 3D — on the [WaveSpeed](https://wavespeed.ai) platform from OpenHands, through the open-source [`wavespeed` CLI](https://github.com/WaveSpeedAI/wavespeed-cli). + +The skill teaches the agent the find → inspect → run pattern: search the live model catalog, read the selected model's input schema, quote the price, run it with `--json`, and upload local files with the `@path` marker. The agent never asks the user to paste an API key into the chat; `wavespeed login` (or `WAVESPEED_API_KEY` in the sandbox environment) handles auth. + +## Setup + +```bash +npm install -g @wavespeed/cli +wavespeed login # or export WAVESPEED_API_KEY=... +``` + +## Example prompts + +- "Generate a 16:9 hero image of a cyberpunk skyline at golden hour." +- "Animate ./hero.jpg into a 5-second clip with subtle parallax." +- "Replace the background of ./product.png with a sunlit kitchen, and tell me the cost first." + +## More + +Per-model skills (Seedream, Seedance, Veo 3.1, Wan, Nano Banana, MiniMax Speech, upscalers, face swap, watermark removal) and the `@wavespeed/mcp` server declaration live in [WaveSpeedAI/agent-skills](https://github.com/WaveSpeedAI/agent-skills). diff --git a/skills/wavespeed/SKILL.md b/skills/wavespeed/SKILL.md new file mode 100644 index 00000000..774319da --- /dev/null +++ b/skills/wavespeed/SKILL.md @@ -0,0 +1,89 @@ +--- +name: wavespeed +description: Generate or edit AI media (image, video, audio, 3D) by calling the wavespeed CLI on the user's machine. Use whenever the user asks to create, edit, animate, upscale, or transform a visual asset, generate audio/TTS/music, or produce marketing creatives. Every model on the WaveSpeed platform is one `wavespeed run ` call. +triggers: +- wavespeed +- generate image +- generate video +- text to image +- image to video +- text to video +- upscale +- text to speech +--- + +# WaveSpeed + +You have access to the `wavespeed` CLI. Every generation flows through one verb. There are no `image` / `video` shortcuts; the model id is always explicit. + +## The three-step pattern + +```bash +# 1. FIND a model — search the live catalog +wavespeed models "seedream" +wavespeed models --type image-to-video --popular + +# 2. INSPECT its inputs — dynamic schema, per model +wavespeed run bytedance/seedream-v5.0-pro -h + +# 3. RUN it — always pass --json so you can read the result +wavespeed run bytedance/seedream-v5.0-pro \ + -p "a cyberpunk skyline at golden hour" \ + -i aspect_ratio="16:9" -i resolution="2k" --json +``` + +`run --json` returns `{ id, model, prompt, outputs: [url, ...], saved: [path, ...], elapsed_ms, raw }`. Keep `id` — it is the handle for `wavespeed show ` if anything is interrupted. Use the URL when the user wants a link. Add `--download` if they need bytes on disk. + +## Recommended defaults + +| Use case | Model | +|---|---| +| Text → image | `bytedance/seedream-v5.0-pro` | +| Image edit (instruction-driven) | `bytedance/seedream-v5.0-pro/edit` — requires `images: [url, ...]` | +| Text → video | `wavespeed-ai/minimax-h3/text-to-video` | +| Image → video | `wavespeed-ai/minimax-h3/image-to-video` — requires `image: url` | +| Video edit (instruction-driven) | `wavespeed-ai/minimax-h3/video-edit` — requires `video: url` | +| Video extend | `wavespeed-ai/minimax-h3/video-extend` — requires `video: url` | + +These are good starting points. MiniMax H3 is the open-weights default: cheap, fast, and native stereo audio — the best place to start. When you need the highest quality, switch to `bytedance/seedance-2.5/*` (text-to-video, image-to-video, video-edit, video-extend). Browse alternatives with `wavespeed models `. + +## Common recipes + +```bash +# Edit an existing image — @path uploads the file and passes its URL (one step) +wavespeed run bytedance/seedream-v5.0-pro/edit \ + -p "replace the background with a sunlit kitchen" \ + -i images='["@./input.jpg"]' --json + +# Image-to-video — same @ marker for single-URL fields +wavespeed run wavespeed-ai/minimax-h3/image-to-video \ + -p "subtle parallax, gentle wind" \ + -i image=@./hero.jpg -i duration=5 --json + +# Or upload separately when you need the URL itself +URL=$(wavespeed upload ./hero.jpg --json | jq -r .url) + +# Save outputs locally with a template +wavespeed run ... -p "..." --download "./out/{index}.{ext}" +``` + +## Project config and aliases + +If `wavespeed.json` exists (created by `wavespeed init`): + +- **`defaultModel`** — lets `wavespeed run -p "…"` (no model arg) work. +- **Aliases** — named shortcuts that bundle model + default inputs. Run `wavespeed aliases` to see what's defined. `wavespeed run -h` shows the resolved schema. CLI `-i k=v` overrides alias defaults. + +The CLI never modifies the user's prompt or inputs. The single exception is explicit: an `@path` value uploads that file and substitutes its hosted URL. Bare paths are never uploaded. + +## Auth + +`wavespeed status` shows whether the user is signed in. If not, ask them to run `wavespeed login` (opens https://wavespeed.ai/accesskey). **Never** ask the user to paste an API key into the chat — the CLI handles it. + +## Pitfalls + +- Local files: use `@./file.jpg` in `-i` values. Bare paths are NOT uploaded and the model will reject them. +- Don't invent model IDs. Always confirm via `wavespeed models` or `wavespeed schema ` before running. +- Use `--json` on every `run` so you can read `outputs[0]` programmatically. +- `wavespeed delete` requires `--yes` when run non-interactively (that includes you). +- Spend questions: `wavespeed usage` (totals, per-model) and `wavespeed billings` (per-charge records).