@berryxia: Guys, this is awesome! Install it right away! Kevin Lin, postdoc at Oxford, former Meta and Microsoft researcher, just released Violin, an open-source video translation Skill. Video is already the absolute dominant content form on the internet. Yet most high-quality lectures, speeches, and podcasts are locked by a single language…
Summary
Violin is an open-source video translation tool that integrates speech recognition, large language model translation, and text-to-speech. It supports over 30 languages and offers three usage modes: CLI, web app, and Claude Code.
View Cached Full Text
Cached at: 05/15/26, 04:56 AM
Brothers, this is great! Get it installed right away! Kevin Lin, postdoctoral fellow at Oxford, former researcher at Meta and Microsoft, just released Violin, an open-source video translation skill.
Video is already the absolute mainstream form of content on the internet. Yet most high-quality lectures, talks, and podcasts are locked behind a single language, completely inaccessible to a global audience. Violin seamlessly strings together ASR, LLM translation, and TTS into a pipeline.
“Input a video, and it automatically performs speech recognition, multi-language translation, and natural voice synthesis.”
The two most useful features: you can personalize the translation style, turning an academic report into a version even a child can understand; and you can chat directly with the video, with answers based on the video content for any question. It supports Web app, CLI, and Agent Skill, all MIT open-source.
From now on, high-quality content no longer belongs to just one language — it truly goes global. Demo, blog, and GitHub are all in the original post. If you’re working in content, education, cross-language communication, or developing multimodal agents, this Skill is worth trying immediately.
What do you think AI should solve next: content creation, or content globalization?
Project URL: https://github.com/shang-zhu/violin…
shang-zhu/violin
Source: https://github.com/shang-zhu/violin
🎻 Violin
Open-source Video Translation Skill.
🌐 Live demo (https://www.violin-ai.com) · 📝 Blog post (https://www.together.ai/blog/violin-open-source-translation-skill) · 📜 MIT License (https://github.com/shang-zhu/violin/blob/main/LICENSE)
Upload a video. Violin transcribes the speech, translates it, synthesizes a native-sounding voice-over in the target language, and remuxes it back into the video — fully aligned, with optional SRT subtitles. Available as a CLI, a FastAPI web app, and a Claude Code skill.
✨ Features
- 33 target languages with handpicked native-speaker voices for the 16 most-used ones (Cartesia Sonic 3 + ElevenLabs)
- In-video Q&A — ask questions about any moment in the dubbed video; answers use nearby subtitles plus sampled frames
- Natural-language voice picker — describe the voice you want, an LLM picks from the catalog
- 6 style profiles (experimental) — standard / kids / academic / casual / storyteller / news
- Pluggable stack — Together / OpenAI / ElevenLabs interchangeable for every stage, one YAML
🚀 Quick start
Try it without installing anything
The live demo runs at https://www.violin-ai.com — drop a short clip in, get a dubbed video out in a few minutes.
Run locally
Requires Python 3.10+ and ffmpeg on PATH.
curl -LsSf https://astral.sh/uv/install.sh | sh # install uv if you don't have it
uv tool install violin # recommended — faster, isolated
# or: pip install violin # if you'd rather install into your current Python env
export TOGETHER_API_KEY=... # get one at https://api.together.ai (add to ~/.zshrc to persist)
Three ways to use it:
1. CLI — translate one file:
violin lecture.mp4 lecture_zh.mp4 --language Chinese
2. Web app — full REST API + browser UI:
violin-api
# → http://127.0.0.1:8000 (browser UI)
# → http://127.0.0.1:8000/docs (interactive API docs)
3. Claude Code skill — invoke from any Claude Code session:
violin --install-skill # one-time: copies the skill into ~/.claude/skills/
claude
> please use the violin skill to translate path/to/video.mp4 into Chinese
Run from source (for hacking on the pipeline)
git clone https://github.com/shang-zhu/violin.git
cd violin
uv sync
cp .env.example .env # then fill in TOGETHER_API_KEY
uv run main.py lecture.mp4 lecture_zh.mp4 --language Chinese
To use the violin / violin-api commands globally while edits to your local source reflect immediately, install editable:
uv tool uninstall violin # if you've installed the PyPI version
uv tool install --editable .
After this, violin / violin-api run from your local checkout — edit any file and the next invocation picks it up; no rebuild needed. To switch back to PyPI: uv tool uninstall violin && uv tool install violin.
🎬 How Violin works
Video
│
├─ ffmpeg ─────────────────────► Extract audio (16 kHz WAV)
│
├─ Whisper Large v3 ────────────► Word-level timestamps → sentence segments
│
├─ LLM (DeepSeek V4 Pro by default) ──► Translate each segment, respecting style profile
│
├─ TTS (Cartesia Sonic 3 by default) ─► Synthesize dubbed audio per segment
│
└─ ffmpeg ─────────────────────► Speed-align video to dubbed audio, concat with freeze-frame fallback,
single-pass AAC encode the audio track, write output mp4 + optional SRT
⚙️ Configuration
Override any default by writing your own YAML and passing it with --config my.yaml — only the keys you want to change need to appear; values deep-merge with the built-in defaults (https://github.com/shang-zhu/violin/blob/main/config/default.yaml).
Switch providers
# config/default.yaml — pick the stack you want
models:
transcription:
provider: together # together | openai
model: openai/whisper-large-v3 # together → openai/whisper-large-v3 | openai → whisper-1
translation:
provider: together # together | openai
model: deepseek-ai/DeepSeek-V4-Pro # together → deepseek-ai/DeepSeek-V4-Pro | openai → gpt-5.5
tts:
provider: together # together | elevenlabs | openai
model: cartesia/sonic-3 # together → cartesia/sonic-3 | elevenlabs → eleven_v3 | openai → tts-1-hd
Production overrides
A starter config/prod.yaml is included for public deployments. It adds upload limits, serializes jobs, and caps ffmpeg concurrency. The included Dockerfile + docker-compose.yml + Caddyfile are how the live demo is hosted — docker compose up -d --build after filling .env is enough to put a copy of Violin behind auto-HTTPS on any Docker host.
Environment variables
| Variable | When required | Description |
|---|---|---|
TOGETHER_API_KEY | Recommended — covers every stage with the default config | Together AI API key |
OPENAI_API_KEY | Any stage uses provider: openai | Covers whisper-1, GPT models, and tts-1 |
ELEVENLABS_API_KEY | TTS uses provider: elevenlabs | ElevenLabs API key |
CORS_ORIGINS | Optional | Comma-separated allowed origins (default: *) |
You only need keys for the providers you actually pick. Pure-OpenAI deployments (all stages on
openai) work too —OPENAI_API_KEYalone is enough. Same idea for ElevenLabs.
🎭 Style profiles
Six built-in profiles tune both the translation LLM prompt and the TTS delivery. Use --style <name> on the CLI or pass style in API requests.
| Style | Tone | TTS speed | Emotion |
|---|---|---|---|
standard | Faithful translation, natural voice | 1.0× | — |
kids | Rewritten for a 7-year-old, plain language | 1.0× | excited |
academic | Formal register, preserves jargon and honorifics | 0.95× | calm |
casual | Spoken slang, contractions, friendly | 1.1× | content |
storyteller | Vivid, dramatic narration | 0.9× | enthusiastic |
news | Concise, declarative, broadcast-style | 1.0× | neutral |
Add your own by editing prompts/styles.yaml. See all available styles: violin --style list.
💻 CLI usage
Examples use the PyPI-installed
violincommand. If you’re running from a git checkout, substituteuv run main.pyforviolin(anduv run run_api.pyforviolin-api).
# Basic
violin lecture.mp4 lecture_es.mp4 --language Spanish
# Pick a style
violin talk.mp4 talk_zh.mp4 --language Chinese --style kids
# Pick a specific voice
violin lecture.mp4 lecture_fr.mp4 --language French --voice "french narrator man"
# Skip SRT
violin lecture.mp4 lecture_ja.mp4 --language Japanese --no-subtitles
# Full replacement (no original audio underneath)
violin lecture.mp4 lecture_ko.mp4 --language Korean --no-voiceover
# Custom config (e.g. switch to OpenAI/ElevenLabs)
violin lecture.mp4 lecture_it.mp4 --language Italian --config config/other_api.yaml
CLI flags
| Flag | Default | Description |
|---|---|---|
--language / -l | (required) | Target language name (e.g. Spanish, Japanese) |
--voice / -v | auto | TTS voice. Defaults to the primary native voice for the target language |
--source-language | auto-detect | Source language hint for translation |
--no-subtitles | off | Skip SRT generation |
--voiceover / --no-voiceover | voiceover on | Keep original audio underneath the dub, or full replacement |
--style / -s | standard | Style profile name. Use --style list to see all |
--config / -c | config/default.yaml | Path to a YAML override file |
--timings-out | off | Write per-step wall-clock timings + cost as JSON |
🛰️ Web app & REST API
violin-api # default dev mode
violin-api --host 0.0.0.0 --port 8080 # bind everywhere
violin-api --config config/prod.yaml # production overrides (requires a git checkout for config/prod.yaml)
Core flow: POST /jobs to start, GET /jobs/{id} to poll, GET /jobs/{id}/video and /srt to download, POST /jobs/{id}/chat for in-video Q&A. Full list with request/response schemas at /docs.
Example
# Submit
JOB=$(curl -s -X POST http://localhost:8000/jobs \
-F "[email protected]" \
-F "language=Spanish" \
-F "style=academic" | jq -r .id)
# Poll
curl -s http://localhost:8000/jobs/$JOB | jq '{status, progress}'
# Download
curl -OJ http://localhost:8000/jobs/$JOB/video
curl -OJ http://localhost:8000/jobs/$JOB/srt
Job data lives under jobs/{id}/. Set api.job_ttl_hours to auto-delete jobs older than N hours (default 0 = disabled; config/prod.yaml uses 24h for the public demo).
🌍 Supported languages
Violin supports 33 target languages. The 16 below ship with handpicked native-speaker voices for each provider; the rest fall back to the English voice catalog (which is multilingual under both Cartesia Sonic 3 and ElevenLabs eleven_v3). Ordered by native-speaker population.
| Language | Cartesia native voice (M / F) | ElevenLabs native voice (M / F) |
|---|---|---|
| Chinese | chinese commercial man / chinese female conversational | Lin / Lingyue |
| Spanish | spanish narrator man / spanish narrator lady | Carlos / Valeria |
| English | tutorial man / helpful woman | Adam / Sarah |
| Hindi | hindi narrator man / hindi narrator woman | Yatin / Madhusmita |
| Arabic | middle eastern woman | Faris / Haneen |
| Portuguese | friendly brazilian man / pleasant brazilian lady | Medeiros / Luna |
| Russian | russian narrator man 1 / russian narrator woman | Ivo / Xenia |
| Japanese | japanese male conversational / japanese woman conversational | Shohei / Maiko |
| Turkish | turkish narrator man / turkish calm man | Sinan / Aura |
| German | german reporter man / german conversational woman | Daniel / Sina |
| Korean | korean narrator man / korean calm woman | Joon-ho / Soo |
| French | french narrator man / french narrator lady | Lior / Virginie |
| Italian | italian narrator man / italian narrator woman | Raffaele / Chiara |
| Polish | polish confident man / polish narrator woman | Gregor / Jola |
| Dutch | dutch confident man / dutch man | Ronald / Jolanda |
| Swedish | swedish narrator man / swedish calm lady | Andreas / Louise |
The 17 fallback languages (using the English voice catalog), also ordered by native speakers: Vietnamese, Tamil, Indonesian, Malay, Ukrainian, Romanian, Thai, Greek, Hungarian, Catalan, Czech, Bulgarian, Danish, Slovak, Croatian, Finnish, Norwegian.
🤝 Contributing
PRs welcome. Got questions or hit a bug? Email [email protected] or open an issue.
⚠️ Disclaimer
This is a personal open-source project, not a Together AI product. Users are responsible for ensuring they have the right to download and translate any content they process. Designed for Creative Commons, public domain, your own recordings, and other content you have permission to use.
📜 License
MIT (https://github.com/shang-zhu/violin/blob/main/LICENSE) — use it freely, including commercially.
🙏 Acknowledgements
Built on top of Together AI (https://together.ai), Whisper (https://github.com/openai/whisper), Cartesia Sonic 3 (https://cartesia.ai), ElevenLabs (https://elevenlabs.io), FastAPI (https://fastapi.tiangolo.com/), and ffmpeg (https://ffmpeg.org).
Similar Articles
@rwayne: Video translation has been cracked by a single Oxford postdoc. Kevin Lin, a postdoc at Oxford University, open-sourced Violin, a video translation tool that integrates speech recognition, LLM translation, and speech synthesis into an automated pipeline. It supports multilingual translation, personalized translation styles, and all-in-one video dialogue; it can turn academic reports into children's...
Kevin Lin, a postdoctoral fellow at Oxford University, open-sourced Violin, a video translation tool that integrates speech recognition, LLM translation, and speech synthesis into an automated pipeline. It supports multilingual translation and personalized styles, and provides three usage modes: Web, CLI, and Agent.
@KevinQHLin: IntroducingViolin — an Open-source Video Translation Skill. Video is the dominant medium on the internet, yet most high…
Violin is an open-source video translation skill that combines speech recognition, LLM translation, and speech synthesis into a seamless pipeline, supporting multilingual ASR, personalized translation, and interactive chat with video content.
@XAMTO_AI: If you don't bookmark this open-source tool now, you'll regret it later — automatic video dubbing and translation, supports 33 languages at once, and can even answer questions about video content. Found a gem on GitHub called Violin, fully open-source, what it does is a bit unbelievable: you drop a video in, it automatically recognizes speech, …
Violin is an open-source automatic video dubbing and translation tool that supports 33 languages, integrates models like Whisper and DeepSeek, and provides one-click speech recognition, translation, dubbing synthesis, and in-video Q&A functionality.
@aigclink: An open-source end-to-end video translation + video Q&A Skill: violin. The highlight is not just literal translation, but the idea of content re-creation. It integrates ASR, LLM translation, and TTS into a seamless pipeline video Skill. The three modules are automatically chained: input a video and get a dubbed translated video. Translation style is adjustable, for example...
Violin is an open-source end-to-end video translation and video Q&A tool, integrating ASR, LLM translation, and TTS. It supports style adjustment and content re-creation, and can answer questions about video content.
@yhslgg: Bro, sharing another open-source video translation tool—pyVideoTrans, with 17,700 stars on GitHub, a must-have for video repurposing and localization! In a nutshell: drop a video in, and it automatically runs through the entire pipeline of speech recognition → subtitle translation → AI dubbing → video synthesis, outputting a complete video in another language. Core...
pyVideoTrans is an open-source video translation tool that supports automatic speech recognition, subtitle translation, AI dubbing, and video synthesis. It integrates multiple ASR, translation, and TTS engines, making it suitable for cross-language video production and localization.