Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Dub a video into another language and generate subtitles using the default Together + Cartesia stack. Trigger when the user wants to translate / dub / voice-over a video file, or generate subtitles for it. Handles `.mp4` / `.mkv` / `.webm`. Installs as the `violin` CLI (and `violin-api` for the FastAPI server) via `uv tool install`. For alternative models (OpenAI / ElevenLabs) or custom configs, point the user to the repo: https://github.com/shang-zhu/violin.
.claude/skills/shang-zhu-video-translator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | -27% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -31% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 76% | 0% |
Always uses the default config (Together for translation, cartesia/sonic-3 for TTS). If the user asks for OpenAI, ElevenLabs, or custom configs, stop and point them to the Violin repo — those flows aren't supported through the global CLI.
Run these silently first. Abort if any fails:
bashcommand -v violin # 1. CLI on PATH test -f "<input>" # 2. Input exists printenv TOGETHER_API_KEY # 3. Key available
If violin is missing: tell the user to uv tool install violin, then violin --install-skill to refresh this skill file. Do not auto-install.
If TOGETHER_API_KEY is missing:
.env (auto-loaded)export TOGETHER_API_KEY=... in ~/.zshrc / ~/.bashrc, then source itviolin). Multi-job / HTTP / web UI → API server (violin-api); print the command, don't auto-start it.--style): default standard. Kids content → kids, formal/lecture → academic, casual → casual, dramatic → storyteller, news → news. Run violin --style list if unsure.--no-voiceover only when the user explicitly says "replace audio entirely".bashviolin <input> <output> --language <Lang> [flags]
| Flag | Default | When to set | |------|---------|-------------| | --language / -l | required | Target language (e.g. Chinese, Spanish, Japanese). | | --voice / -v | auto (native voice picked by preferences.voice_gender) | Only when the user names a specific voice from the catalog (e.g. "warm female narrator"). Otherwise omit and let the default kick in. | | --source-language | auto-detect | Only if Whisper mis-detects the source language. | | --style / -s | standard | See Decisions above. | | --no-subtitles | off | User says "no SRT" / "video only". | | --no-voiceover | off | User says "replace original audio entirely". | | --config / -c | config/default.yaml | Don't use through this skill — repo-only flow. | | --timings-out | off | Only when the user wants a per-step timing JSON for debugging / benchmarking. |
33 target languages total. 16 ship with handpicked native-speaker voices: Chinese, Spanish, English, Hindi, Arabic, Portuguese, Russian, Japanese, Turkish, German, Korean, French, Italian, Polish, Dutch, Swedish. The other 17 fall back to the English voice catalog (multilingual under Cartesia Sonic 3) — quality is decent but the voice isn't a native speaker. Mention this caveat only if the user is translating to a fallback language and asks about voice quality.
_original.m4a sidecar.pipeline/pricing.py)..srt, warning them of the cost first.--config config/other_api.yaml (or their own override).README.md or violin --help.Other measured skills in the registry, with their headline benchmark lift.