MioSub turns a video link into translated, burned-in subtitles
一站式全自动字幕生成软件,下载、转录、翻译、压制全流程覆盖,无需人工介入 / One-stop automated subtitle generator. Handles downloading, transcription, translation, and hardcoding—zero human intervention required.
At a glance
- What is it?
- MioSub, formerly Gemini-Subtitle-Pro, is an AGPL-3.0 Electron application that downloads a video, transcribes it, translates it, aligns the timing and renders the subtitles into the picture, with a built in CTC aligner, speaker diarization and an SRT and ASS editor. It is a desktop tool built around Gemini models with an optional local Whisper path.
- Who is it for?
- MioSub suits a subtitle creator or localisation team that produces translated video for multiple languages and wants the whole chain in one desktop application instead of a transcription service, a translation tool and a separate burn-in step.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 6 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 25, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The whole subtitle chain in one desktop window
The pitch is a single pipeline rather than a collection of tools. The project description calls it a one-stop fully automated subtitle generator that covers downloading, transcription, translation and burn-in with no human intervention, and the README makes the same point in a more relatable way, contrasting a workflow where you jump back and forth between transcription, translation, proofreading and timeline adjustment with a version where you paste a link, get a coffee, and come back to a finished file. The feature table spells out what is in that pipeline. Alignment is built in through a CTC aligner with millisecond precision, so there is no separate external tool to configure. Term extraction is automatic, and so is speaker labelling. The interface is Chinese and English with Japanese, and the project claims support for translation between more than a hundred languages. It also handles more than video, with podcasts, radio and audiobooks processed directly. The user is a person who publishes translated video and wants the tedious parts removed, not a developer building a speech pipeline.
The stack is a normal modern Electron app
The technology choices are visible in the badges and in the repository layout, and they are conventional. The interface is React 19, the shell is Electron 39, the language is TypeScript 5.8 and the styling is Tailwind CSS 4, with Vite as the bundler and electron-builder for packaging. The tree matches that stack, with src/ for the renderer, an electron/ directory for the main process, two Vite configuration files, vite.config.ts and vite.config.electron.ts, tailwind.config.js and postcss.config.js, a docs/ site built with fumadocs and Next, an openspec/ directory, a deploy/ directory, and.husky/ for git hooks alongside eslint.config.mjs and a.prettierrc. The package metadata shows the app is private, with the name miosub, the description Smart, Playful, and Powerful AI Subtitle Generator and the version 3.1.9, and the entry point of the built main process at dist-electron/main.cjs. Nothing here is exotic, which is a good sign for anyone who wants to read the code or patch the build.
The model access is the configuration decision that matters
The quick start has three steps. You download the installer for your platform from the releases page, you open the settings and fill in your Gemini API key along with a Gemini endpoint, and then you paste a video link or import a local file. The endpoint field takes a domain only, for example a URL of the form https://example.com, and the README also points to a full guide for running local Whisper. The key requirement is stated as a tip rather than buried: the API key needs to support the Gemini 2.5 and 3 Flash and Gemini 3 Pro models. The project also recommends a third party Gemini relay service, describing it as inexpensive and stable with broad model support, which is a reasonable convenience for users in regions where the direct endpoint is awkward, and it is a reminder that transcription and translation in this application run on someone else's server unless you point it at a local model. The environment template shows the full set of keys the application expects:
GEMINI_API_KEY=your_gemini_api_key_here
OPENAI_API_KEY=your_openai_api_key_here
VITE_AMPLITUDE_API_KEY=your_amplitude_api_key_here
VITE_MIXPANEL_TOKEN=your_mixpanel_token_here
VITE_SENTRY_DSN=your_sentry_dsn_hereThe first two are the model credentials, and the VITE_ prefixed ones are product analytics and error reporting keys, which is worth noticing before you ship a build of your own.
Alignment, diarization and terminology are the accuracy story
The v3.0 highlights section is the part of the README that explains what changed and why. The headline feature is timeline alignment that works out of the box, with a built in CTC aligner giving millisecond precision and removing the need to configure a separate external tool. The second is a rebuilt editor and settings panel. The third is that the application is no longer limited to video, so pure audio files can be processed directly. The fourth is cleaner Chinese and Japanese rendering, with the NotoSans font bundled so that missing glyphs and tofu boxes stop appearing. Underneath, the accuracy claims are the automatic term extraction, the millisecond alignment and the automatic speaker labelling, and the demo table gives a sense of the range, with a 30 minute Japanese radio programme with speaker labels, a Japanese rail vlog heavy on specialist terminology, and a fast paced film commentary video with lots of character, group, producer and song names. Forced alignment is what makes the difference between a transcript and usable subtitles, and the credits also list whisper.cpp, which is the same idea implemented in C++ for local use.
The editor and the export formats
The application is not a batch script with no review step, and the screenshots section describes a working editor: live subtitle preview, automatic scrolling, speaker labels, floating playback, and search and replace. The import and export row of the feature table covers the formats that matter in practice, with SRT and ASS import, bilingual subtitle export, and one click burn-in of the finished file. ASS is the format that subtitle groups use for styling and positioning, so supporting it on import is a real convenience, and the topic tags mention substation alpha alongside srt subtitles, forced alignment, ffmpeg and diarization, which matches the credits where FFmpeg appears alongside yt-dlp for downloading and the various speech engines. The underlying Whisper model can be swapped for a local build, which is the escape hatch for people who do not want media leaving the machine.
Running the app from source
The local development section is short and assumes Node.js 18 or newer. The three commands are:
yarn install
yarn electron:dev
yarn electron:buildAfter packaging, the installers are found in the release directory. The package scripts show what sits behind those commands, and the detail that matters for a contributor is the preinstall and postinstall pair. The preinstall hook rewrites git URLs so that ssh://[email protected]/ is transparently replaced with an https://github.com/ URL, which is there so a clone works behind firewalls and in CI without key configuration. The postinstall hook runs node scripts/download-binaries.mjs, which fetches the external binaries the application depends on, and there are separate download:binaries and download:binaries:force variants of that step. The main process and renderer are built separately, with build:main using the dedicated vite.config.electron.ts configuration, and electron:build chains typecheck, the main process build, the renderer build and electron-builder. There are also i18n scripts for extracting and checking Chinese strings, which is how the translated interface is kept consistent.
Licence, renaming and release pace
The project is licensed under AGPL-3.0, and the package metadata records the same as AGPL-3.0-only with the licence file referenced from the package. That licence is the one to think about carefully, because the AGPL requires source availability for modified versions that are networked or distributed, and for a desktop application that means any build you hand to someone else is a build you are obliged to share the corresponding source of. It is a deliberate choice for a tool that is largely a wrapper around other people's work, Gemini and Whisper, and it is the opposite of what you would want in a component you intend to embed in a closed product. The project was renamed, since the README still carries the Gemini-Subtitle-Pro links and the release assets live under that name, and the header says formerly Gemini-Subtitle-Pro. The releases show quick patch cadence, with v3.1.7 on 2026-06-05, v3.1.8 and v3.1.9 both on 2026-07-18, with the most recent push to the repository coming after those releases. The repository is not archived, the documentation lives at miosub.app/docs with an English version in docs/README_en.md, and there is a hosted demo at demo.miosub.app for trying the workflow without installing anything.
Editorial conclusion
MioSub suits a subtitle creator or localisation team that produces translated video for multiple languages and wants the whole chain in one desktop application instead of a transcription service, a translation tool and a separate burn-in step. It is a poor fit for a team that needs to run this on a server at scale, since the repository marks the package private and the product is delivered as desktop installers, and a poor fit if you need results without a cloud model, since the default path depends on a Gemini API key. Verify first that your API key supports the Gemini 2.5 and 3 Flash and Gemini 3 Pro models the README requires, decide between a hosted endpoint and local Whisper before you start, and note that the AGPL-3.0 licence obliges you to publish source if you distribute a modified build.
Frequently asked questions
How do I start using MioSub?
Download the installer for your platform from the releases page, open the settings and enter your Gemini API key plus a Gemini endpoint if you need one, then paste a video link or import a local file. You also need at least 4GB of free memory and a network connection.
Which platforms does MioSub support?
Windows 10 and 11 at 64-bit, macOS 12 and later on both Intel and Apple Silicon, and Linux on x64 or arm64 using the AppImage build.
Can MioSub transcribe without sending data to a cloud model?
Yes, the project documents a local Whisper path in its guide, and the credits include Whisper and whisper.cpp. The default path uses the Gemini models, and the README states the API key must support Gemini 2.5 and 3 Flash and Gemini 3 Pro.
What subtitle formats does MioSub read and write?
It imports SRT and ASS, exports bilingual subtitles, and can burn the result into the video in one click. The editor shows a live preview with speaker labels, scrolling and search and replace.
How do I build MioSub from source?
With Node.js 18 or newer, run yarn install, then yarn electron:dev to launch the app or yarn electron:build to package it, with the installers left in the release directory. The install step also downloads external binaries through scripts/download-binaries.mjs.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/corvo007-miosub)Was this useful?