{
  "markdown": "![Sonilo](https://sonilo.com/homepage/logos/logo_white.png)\n\n# Sonilo Skills\n\nAgent skills for [Sonilo](https://sonilo.com/?utm_source=github&utm_medium=oss&utm_campaign=skills-repo)'s licensed music, sound-effects, dubbing, and audio-ducking API. These skills follow the [Agent Skills specification](https://agentskills.io/specification) and can be used with any compatible AI coding assistant.\n\nSonilo's flagship capability is **video-to-music**: hand it a finished video and it composes an original soundtrack matched to the cut — the music follows the pacing, motion, and emotion because the model saw them. Every track is licensed and safe for commercial use.\n\n## Installation\n\nThese skills follow the community [Agent Skills specification](https://agentskills.io/specification), so any compatible tool can install them via `npx skills add`. This repo is also set up as a **Claude Code plugin marketplace**, so Claude Code users can install the same skills with `/plugin` instead — pick whichever fits your workflow.\n\n### Option 1: `npx skills` (any compatible assistant)\n\n```bash\nnpx skills add sonilo-ai/skills\n```\n\nOr install a single skill:\n\n```bash\nnpx skills add sonilo-ai/skills --skill video-to-music\n```\n\n### Option 2: Claude Code plugin\n\n```\n/plugin marketplace add sonilo-ai/skills\n/plugin install skills@sonilo-skills\n```\n\nThis installs the same twelve skills (`video-to-music`, `text-to-music`, `video-to-sfx`, `text-to-sfx`, `video-to-sound`, `video-analysis`, `audio-ducking`, `auto-dubbing`, `task-recovery`, `account`, `audio-playback`, `setup-api-key`) as a single Claude Code plugin, discovered directly from their existing top-level directories — no separate copy to keep in sync. It's a skills-only plugin (no MCP server, no bundled tools); see [Configuration](#configuration) below for how to connect the Sonilo MCP server itself.\n\n## Available Skills\n\n| Skill | Description |\n|-------|-------------|\n| [video-to-music](./video-to-music) | Score a video with original music matched to its pacing and emotion (`video_to_music`, `video_to_video_music`) |\n| [text-to-music](./text-to-music) | Generate music from a text prompt alone, no video (`text_to_music`) |\n| [video-to-sfx](./video-to-sfx) | Generate sound effects matched to a video, with optional timed segments (`video_to_sfx`, `video_to_video_sfx`) |\n| [text-to-sfx](./text-to-sfx) | Generate one sound effect from a text description alone (`text_to_sfx`) |\n| [video-to-sound](./video-to-sound) | Generate music **and** SFX for a video in one balanced, single-charge call (`video_to_sound`, `video_to_video_sound`) |\n| [video-analysis](./video-analysis) | Analyze a video and get a creative brief — section plan plus ready-to-use generation prompts — instead of a track (`analyze_video`) |\n| [audio-ducking](./audio-ducking) | Duck a music bed under a voice track (or a video's voice track) automatically (`audio_ducking`) |\n| [auto-dubbing](./auto-dubbing) | Dub a video into other languages with re-voiced speech (`dubbing`) |\n| [task-recovery](./task-recovery) | Recover the result of a timed-out generation using its task id (`get_sfx_task`, or `get_generation_task` on the hosted server) |\n| [account](./account) | Check available services, limits, free-trial allowance, and usage history (`get_account_services`, `get_usage`) |\n| [audio-playback](./audio-playback) | Play a local audio file through the system's speakers (`play_audio`) |\n| [setup-api-key](./setup-api-key) | Guide through obtaining a Sonilo API key and connecting the Sonilo MCP server |\n\n### Renamed in v2\n\nEach skill is now named for the tool it documents. If you installed an earlier\nversion, reinstall under the new name — the old ones no longer exist:\n\n| Was | Now |\n|---|---|\n| `music` | `text-to-music` (text prompt only) and `video-to-music` (scoring a video) |\n| `sound-effects` | `text-to-sfx` (text prompt only) and `video-to-sfx` (matched to a video) |\n| `dubbing` | `auto-dubbing` |\n\n### Prompting guidance\n\nSonilo needs no prompt — the video is the context. When you want control, a\nstructured audio brief adds your intent (genre, the moment that must hit,\nthe sounds that must not appear) on top of what the model reads from the\ncut. That guidance is folded into the skills themselves (ported from\n[sonilo-prompt-assist](https://github.com/sonilo-ai/sonilo-prompt-assist),\nnow deprecated in favor of this repo):\n\n- [references/preflight.md](./references/preflight.md) — pre-flight before any paid call: inspect the video, duration caps, credits, verification\n- [references/music-prompting.md](./references/music-prompting.md) — style-prompt craft for `video_to_music`\n- [references/sfx-prompting.md](./references/sfx-prompting.md) — action map → segments craft for `video_to_sfx`\n- [references/api-claims.md](./references/api-claims.md) — verified API behavior the guidance relies on\n\n## Configuration\n\nEach skill's Quick Start shows every way to call that capability — pick whichever fits how you're working:\n\n- **MCP, local, signed in** — sign in once with either CLI and the [sonilo-mcp](https://github.com/sonilo-ai/sonilo-mcp) server (0.16.0+) reads the same credential, so the host config holds no secret:\n\n  ```bash\n  npm install -g sonilo-cli && sonilo login   # or: pip install sonilo-cli\n  claude mcp add sonilo -- uvx sonilo-mcp     # Claude Code\n  codex mcp add sonilo -- uvx sonilo-mcp      # Codex\n  ```\n\n  Approving in the browser mints a 90-day key named `cli: <hostname>` in `~/.config/sonilo/credentials.json`; `sonilo whoami` shows what is active and `sonilo logout` revokes it.\n\n- **MCP, local, with a key** — for CI, containers, or if you prefer holding one:\n\n  ```bash\n  claude mcp add sonilo --env SONILO_API_KEY=sk-... -- uvx sonilo-mcp\n  ```\n\n  `SONILO_API_KEY` takes precedence over a sign-in wherever both exist. Get a key from the [Sonilo dashboard](https://platform.sonilo.com/dashboard/api-keys), or use the `setup-api-key` skill for guided setup. See the [sonilo-mcp README](https://github.com/sonilo-ai/sonilo-mcp) for Claude Desktop / Codex setup and the full environment variable reference (`SONILO_API_URL`, `SONILO_MCP_BASE_PATH`, `SONILO_MCP_ALLOW_ANY_PATH`, `TIME_OUT_SECONDS`).\n\n- **MCP, remote (Claude Code only, no API key)** — the [sonilo-claude-plugin](https://github.com/sonilo-ai/sonilo-claude-plugin) connects to a hosted, OAuth-authenticated MCP server (`https://api.sonilo.com/mcp`) instead of running anything locally:\n\n  ```\n  /plugin marketplace add sonilo-ai/sonilo-claude-plugin\n  /plugin install sonilo@sonilo\n  ```\n\n  You sign in with your Sonilo Platform account on first use — no key to copy or configure. It carries the same tool set as the local server — every tool these skills document (music and SFX from text/video, video-to-video, video-to-sound, dubbing, ducking, account/usage).\n\n- **Python / JavaScript SDK, or the `sonilo` CLI** — see [Client Libraries](#client-libraries) below if you're integrating outside an MCP host entirely.\n\n## Client Libraries\n\nSonilo also ships official client libraries, independent of MCP:\n\n| Library | Install | Repo |\n|---|---|---|\n| Python SDK | `pip install sonilo` | [sonilo-ai/sonilo-python](https://github.com/sonilo-ai/sonilo-python) |\n| JS/TS SDK | `npm install sonilo` | [sonilo-ai/sonilo-js](https://github.com/sonilo-ai/sonilo-js) |\n| CLI | `pip install sonilo-cli` or `npm install -g sonilo-cli` | same repos, `sonilo-cli` package |\n| Video helpers (local ffmpeg mixing) | `pip install sonilo-video-kit` or `npm install sonilo-video-kit` | same repos, `sonilo-video-kit` package |\n\nBoth SDKs read `SONILO_API_KEY` from the environment by default; both CLIs additionally fall back to a `sonilo login` credential when it is not set. Each skill's Quick Start includes Python, JavaScript, and (where a command exists) CLI examples alongside the MCP tool call and raw cURL — use whichever matches your integration; they all hit the same underlying API.\n\nEvery generation tool has a 1:1 SDK resource and CLI command (`audio_ducking`, the last holdout, gained both in Python SDK 0.13 / JS SDK 0.14, with the CLI command in PyPI `sonilo-cli` 0.12 / npm `sonilo-cli` 0.13). The one deliberate exception is `play_audio`, which just plays a local file — MCP-only by nature. Where a skill's SDK/CLI coverage differs from its MCP tool in any other way, the skill says so explicitly rather than implying full parity.\n\n## Billing\n\nTools marked with a cost warning make an API call that may incur charges. Self-serve accounts start with a few free runs per service (no card required) — call `get_account_services` to check `trial[service].remaining` before a paid call. `dubbing` has **zero** free runs and bills per language from the first call. See the [account](./account) skill.\n\n## Evaluations\n\n[`evals/`](./evals) holds five trigger evals — does the right skill fire for the\nright query — covering the routing decisions the v2 split put at risk, including\nthe combined music+SFX request that must reach `video-to-sound` rather than\nbilling twice for the two separate skills.\n\n```bash\nclaude plugin eval skills@sonilo-skills\n```\n\n`claude plugin eval` is still early-access gated as of Claude Code 2.1.232, so\nthese cases are schema-valid but not yet runnable by every CLI install. They are\nrouting-only and cannot call Sonilo generation tools. See\n[evals/README.md](./evals/README.md) for the current status. Functional evals —\ndoes the call produce correct audio — are still open; contributions welcome.\n\n## License\n\nMIT\n",
  "bytes": 9492,
  "sha": "41692661f5b765dd479c77ef7f85a927c9174209649d020654ef0062be9533de",
  "repo_slug": "sonilo-ai/skills",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/skl_sonilo_ai_skills_video_to_music_31038162/readme"
}