Violin
A skill and CLI for translating and dubbing video: transcription, translation, voice synthesis and subtitles
Medium risk
We rate an entry medium when the tool runs code, makes network calls or reads project files. Check what exactly it does before installing.
Why this level
- Sends audio and text to external services with keys
- Runs video processing and writes files to disk
Install
In your terminal, with SkillFoxx CLI
npx skillfoxx add skills/violinDetects the agents on your machine, checks the risk and pins the version.
Other ways to install
Run in a terminal in the project folder
npx skills add shang-zhu/violin --skill video-translator -a claude-code -yThe skills tool installs the current version from the repository. Add the -g flag to use the skill in every project.
Without third-party tools, from commit 7a86852
tmp=$(mktemp -d)
git clone --filter=blob:none --no-checkout https://github.com/shang-zhu/violin.git "$tmp"
git -C "$tmp" sparse-checkout set --no-cone /.claude/skills/video-translator/
git -C "$tmp" checkout 7a86852ced84624b1849abee6d7444c0904a73ea
mkdir -p .claude/skills
cp -R "$tmp/.claude/skills/video-translator" .claude/skills/video-translatorCommands for macOS and Linux, on Windows run them in Git Bash.
Run in a terminal in the project folder
npx skills add shang-zhu/violin --skill video-translator -a cursor -yThe skills tool installs the current version from the repository. Add the -g flag to use the skill in every project.
Without third-party tools, from commit 7a86852
tmp=$(mktemp -d)
git clone --filter=blob:none --no-checkout https://github.com/shang-zhu/violin.git "$tmp"
git -C "$tmp" sparse-checkout set --no-cone /.claude/skills/video-translator/
git -C "$tmp" checkout 7a86852ced84624b1849abee6d7444c0904a73ea
mkdir -p .agents/skills
cp -R "$tmp/.claude/skills/video-translator" .agents/skills/video-translatorCommands for macOS and Linux, on Windows run them in Git Bash.
Run in a terminal in the project folder
npx skills add shang-zhu/violin --skill video-translator -a github-copilot -yThe skills tool installs the current version from the repository. Add the -g flag to use the skill in every project.
Without third-party tools, from commit 7a86852
tmp=$(mktemp -d)
git clone --filter=blob:none --no-checkout https://github.com/shang-zhu/violin.git "$tmp"
git -C "$tmp" sparse-checkout set --no-cone /.claude/skills/video-translator/
git -C "$tmp" checkout 7a86852ced84624b1849abee6d7444c0904a73ea
mkdir -p .github/skills
cp -R "$tmp/.claude/skills/video-translator" .github/skills/video-translatorCommands for macOS and Linux, on Windows run them in Git Bash.
Run in a terminal in the project folder
npx skills add shang-zhu/violin --skill video-translator -a codex -yThe skills tool installs the current version from the repository. Add the -g flag to use the skill in every project.
Without third-party tools, from commit 7a86852
tmp=$(mktemp -d)
git clone --filter=blob:none --no-checkout https://github.com/shang-zhu/violin.git "$tmp"
git -C "$tmp" sparse-checkout set --no-cone /.claude/skills/video-translator/
git -C "$tmp" checkout 7a86852ced84624b1849abee6d7444c0904a73ea
mkdir -p .agents/skills
cp -R "$tmp/.claude/skills/video-translator" .agents/skills/video-translatorCommands for macOS and Linux, on Windows run them in Git Bash.
Run in a terminal in the project folder
npx skills add shang-zhu/violin --skill video-translator -a gemini-cli -yThe skills tool installs the current version from the repository. Add the -g flag to use the skill in every project.
Without third-party tools, from commit 7a86852
tmp=$(mktemp -d)
git clone --filter=blob:none --no-checkout https://github.com/shang-zhu/violin.git "$tmp"
git -C "$tmp" sparse-checkout set --no-cone /.claude/skills/video-translator/
git -C "$tmp" checkout 7a86852ced84624b1849abee6d7444c0904a73ea
mkdir -p .agents/skills
cp -R "$tmp/.claude/skills/video-translator" .agents/skills/video-translatorCommands for macOS and Linux, on Windows run them in Git Bash.
Run in a terminal in the project folder
tmp=$(mktemp -d)
git clone --filter=blob:none --no-checkout https://github.com/shang-zhu/violin.git "$tmp"
git -C "$tmp" sparse-checkout set --no-cone /.claude/skills/video-translator/
git -C "$tmp" checkout 7a86852ced84624b1849abee6d7444c0904a73ea
mkdir -p .devin/skills
cp -R "$tmp/.claude/skills/video-translator" .devin/skills/video-translatorCommands for macOS and Linux, on Windows run them in Git Bash.
Formerly Windsurf.
Run in a terminal in the project folder
npx skills add shang-zhu/violin --skill video-translator -a cline -yThe skills tool installs the current version from the repository. Add the -g flag to use the skill in every project.
Without third-party tools, from commit 7a86852
tmp=$(mktemp -d)
git clone --filter=blob:none --no-checkout https://github.com/shang-zhu/violin.git "$tmp"
git -C "$tmp" sparse-checkout set --no-cone /.claude/skills/video-translator/
git -C "$tmp" checkout 7a86852ced84624b1849abee6d7444c0904a73ea
mkdir -p .cline/skills
cp -R "$tmp/.claude/skills/video-translator" .cline/skills/video-translatorCommands for macOS and Linux, on Windows run them in Git Bash.
Run in a terminal in the project folder
npx skills add shang-zhu/violin --skill video-translator -a roo -yThe skills tool installs the current version from the repository. Add the -g flag to use the skill in every project.
Without third-party tools, from commit 7a86852
tmp=$(mktemp -d)
git clone --filter=blob:none --no-checkout https://github.com/shang-zhu/violin.git "$tmp"
git -C "$tmp" sparse-checkout set --no-cone /.claude/skills/video-translator/
git -C "$tmp" checkout 7a86852ced84624b1849abee6d7444c0904a73ea
mkdir -p .roo/skills
cp -R "$tmp/.claude/skills/video-translator" .roo/skills/video-translatorCommands for macOS and Linux, on Windows run them in Git Bash.
A fork of Roo Code, same .roo folders.
Run in a terminal in the project folder
npx skills add shang-zhu/violin --skill video-translator -a opencode -yThe skills tool installs the current version from the repository. Add the -g flag to use the skill in every project.
Without third-party tools, from commit 7a86852
tmp=$(mktemp -d)
git clone --filter=blob:none --no-checkout https://github.com/shang-zhu/violin.git "$tmp"
git -C "$tmp" sparse-checkout set --no-cone /.claude/skills/video-translator/
git -C "$tmp" checkout 7a86852ced84624b1849abee6d7444c0904a73ea
mkdir -p .agents/skills
cp -R "$tmp/.claude/skills/video-translator" .agents/skills/video-translatorCommands for macOS and Linux, on Windows run them in Git Bash.
Run in a terminal in the project folder
tmp=$(mktemp -d)
git clone --filter=blob:none --no-checkout https://github.com/shang-zhu/violin.git "$tmp"
git -C "$tmp" sparse-checkout set --no-cone /.claude/skills/video-translator/
git -C "$tmp" checkout 7a86852ced84624b1849abee6d7444c0904a73ea
mkdir -p .agents/skills
cp -R "$tmp/.claude/skills/video-translator" .agents/skills/video-translatorCommands for macOS and Linux, on Windows run them in Git Bash.
Run in a terminal in the project folder
tmp=$(mktemp -d)
git clone --filter=blob:none --no-checkout https://github.com/shang-zhu/violin.git "$tmp"
git -C "$tmp" sparse-checkout set --no-cone /.claude/skills/video-translator/
git -C "$tmp" checkout 7a86852ced84624b1849abee6d7444c0904a73ea
mkdir -p .agents/skills
cp -R "$tmp/.claude/skills/video-translator" .agents/skills/video-translatorCommands for macOS and Linux, on Windows run them in Git Bash.
Install the CLI: uv tool install violin (or pip install violin), then run violin --install-skill once to copy the skill into ~/.claude/skills. The user sets the service keys themselves.
Other ways from the author
uv tool install violinYou can also use pip install violin. ffmpeg is required.
This is third-party code. Review the repository files before installing.
What it does
Violin translates a video into another language and produces subtitles. It transcribes the speech, translates it, synthesizes a voice-over in the target language and remuxes the track back into the video with aligned timing, optionally with SRT subtitles. It handles mp4, mkv and webm files, supports dozens of languages and can pick a voice from a description. It installs as the violin CLI (and a violin-api server), with a Claude Code skill on top that drives the CLI. Translation and synthesis models plug in through a YAML config: Together, OpenAI, ElevenLabs and others.
Who it is for. For content creators and localizers who need to translate and dub video.
Good fit when
- You need to translate and dub a video into another language
- You need timing-aligned subtitles for a video
- You want to localize a clip through an agent that drives the CLI
Not a fit when
- You have no keys for the translation and speech synthesis services
- You only need text translation without video work
Example request
Translate and dub this video into English and generate subtitlesLimitations
It needs keys for external services, by default Together for translation and Cartesia for synthesis, and some models are paid. Installation and running require Python and ffmpeg. The skill via the global CLI uses the default config; for OpenAI, ElevenLabs or custom settings you run the project directly. Access to some services from Russia without VPN is not guaranteed.
How to disable. Remove the video-translator skill from ~/.claude/skills and uninstall the CLI with uv tool uninstall violin.
Security check
- Sends audio and text to external services with keys
- Runs video processing and writes files to disk
README in short
The README presents Violin as an open-source video translation tool available as a CLI, a FastAPI web app and a Claude Code skill. It transcribes speech, translates, synthesizes a voice-over and remuxes the track back with alignment, optionally with subtitles. It supports dozens of languages, voice picking by description and a swappable model stack via YAML. Installation is via uv or pip, and the skill is copied with violin --install-skill. MIT licensed.
SKILL.md
--- name: video-translator description: 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. allowed-tools: Bash, Read --- # Violin — operating skill Always uses the default config (Together for translation, `cartesia/sonic-3` for TTS).
FAQ
Which models are supported?
The stack is swappable via YAML: Together, OpenAI, ElevenLabs and others for translation and synthesis. The skill via the global CLI uses the default stack.
Are keys required?
Yes, translation and speech synthesis need keys for external services.
Related
Skills and CLI from HeyGen: the agent writes HTML compositions and renders them into MP4 videos, captions, motion graphics and decks
Blender MCP
MCP for Blender
An MCP server and Blender addon: the agent creates and edits objects, materials and scenes, pulls assets and runs Python in Blender
Official Remotion skills for making videos in React: compositions, animation, captions, maps and rendering
Agentic video studio for Claude Code, Cursor and Codex: script, voiceover, images, stock footage, music, subtitles and render