explainroo
explainroo는 AI 에이전트가 음성으로 설명 영상을 만들 수 있는 무료 오픈소스 도구이며, 로컬에서 API 키 없이 실행됩니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Offline Russian <-> Indonesian voice translation prototype. Everything runs locally on CPU.
Pipeline: Whisper (speech to text) -> Qwen3 4B instruct via Ollama (translation) -> Supertonic 3 (text to speech).
macOS:
brew install ffmpeg ollama
python3.12 -m venv .venv && .venv/bin/pip install -r requirements.txt
ollama serve & # or start the Ollama app
ollama pull qwen3:4b-instruct
Windows (the demo box):
winget install Gyan.FFmpeg Ollama.Ollama Python.Python.3.12
py -3.12 -m venv .venv ; .venv\Scripts\pip install -r requirements.txt
ollama pull qwen3:4b-instruct
First run downloads Whisper (~500 MB for small, ~1.5 GB for medium) and Supertonic (~400 MB).
.venv/bin/python cli.py --selftest # synthesises test sentences, runs both directions
.venv/bin/python cli.py recording.m4a --direction ru-id # any audio file; writes out/result.wav
.venv/bin/python -m app.server # http://localhost:8000
| Method | Path | Body | Returns |
|---|---|---|---|
| GET | /health | model info | |
| POST | /translate | multipart file (audio), direction = ru-id or id-ru | JSON: transcript, translation, audio_base64 (wav), timings |
| POST | /translate/wav | same | audio/wav body, text in X-Transcript / X-Translation headers |
| POST | /youtube | form url, direction, voice | NDJSON stream, one event per line: status, video (title), phrase (same fields as /translate), error, done |
| POST | /tts | form text, lang (ru/id) | audio/wav |
Example:
curl -F file=@out/selftest-input-ru-id.wav -F direction=ru-id http://localhost:8000/translate
In a second terminal, while the API is running:
cd frontend
npm install
npm run dev
Open http://localhost:3000, choose Indonesian → Russian or Russian → Indonesian,
select a dubbing voice, then press the mic once and keep talking. The browser
sends what you said to /translate as soon as you stop talking (0.5 s of quiet).
If you talk non-stop, it also sends at the next short breath once you have spoken
for 3 s (or at 12 s at the latest), so translations keep coming. Each dubbed
translation plays as soon as it is ready, one after another. Press the mic again
to stop; any unfinished phrase is still translated. Turn on "Using headphones" to
keep the mic listening while translations play. Click the language
pill at the bottom to switch direction mid-conversation.
To translate a YouTube video instead, choose the languages and voice, paste the link under
"or translate a YouTube video" and press Translate. The same two-column view opens, without the mic:
the server downloads the audio, and each translated phrase appears and plays as soon as it is
ready. Go Back stops the translation.
Set NEXT_PUBLIC_API_URL in frontend/.env.local if the API is not at
http://localhost:8000 (see frontend/.env.example).
To run the API on a Windows PC and the frontend on Vercel through a Cloudflare tunnel, follow DEPLOY.md.
| Variable | Default | Notes |
|---|---|---|
WHISPER_MODEL | small | use medium on the 16 GB Windows box |
WHISPER_COMPUTE | int8 | |
MT_MODEL | qwen3:4b-instruct | must be a non-thinking model |
OLLAMA_URL | http://127.0.0.1:11434 | |
TTS_VOICE_RU / TTS_VOICE_ID | M1 / F1 | presets M1-M5, F1-F5 |
TTS_SPEED | 1.0 | 0.7 to 2.0 |
YOUTUBE_MAX_MINUTES | 30 | longer videos are refused |
PORT | 8000 |
yt-dlp and, for best results, Deno or Node on PATH. If downloads
start failing, run pip install -U "yt-dlp[default]".qwen3:4b tag: it is a thinking model and ignores the no-think flag, so it rambles and is 10x slower.