Learn a language with YouTube. Watch videos with subtitles in two languages, tap a sentence to hear it again, and tap a word to see what it means. Free for Android phones.
Android 8.0 or newer · No account · No ads
Want the newest features first? Try the preview version (may be less stable).
- Tap the green Download for Android button above on your phone.
- When the download finishes, open the file
DualSub-Replay.apk. - If your phone asks, allow your browser or file manager to install unknown apps, then tap Install.
Android may show a warning because the app comes from GitHub instead of Google Play. This is normal for apps installed this way. Official versions update the installed app in place.
About the preview version: it installs as a separate app called DualSub Replay Preview, so you can keep both. Your saved words do not move between them automatically; use Saved words → Export and Import to copy them.
▶ Watch the full video (50 seconds)
Free · Android 8.0 or newer · See How to install if you need help.
DualSub Replay is a free, open-source dual subtitles app for YouTube on Android. It shows bilingual captions (the original and a translation into any of 59 languages), replays a sentence with one tap, explains words and Japanese grammar, and saves words for spaced-repetition practice. Website · Tiếng Việt
- See every meaning. The original caption and its translation stay together while you watch.
- Repeat without scrubbing. Tap a subtitle line and the video jumps back to that exact moment.
- Learn the words you hear. Tap a word for its meaning, part of speech, pronunciation and, for Japanese, the grammar around it.
- Remember them. Save words with their original sentence and review them with spaced repetition.
- Stay private. Translation happens on your phone. There is no account, no tracking, and no ads.
If DualSub Replay helps your learning, consider starring the repository. It helps other language learners discover the project.
- Browse and search the real mobile YouTube site inside the app, or share a YouTube link (watch, Shorts, live, embed, or
youtu.be) to DualSub Replay. - Captions load automatically, manual or auto-generated, in any language the video offers.
- Translations go into any of the 59 languages Google ML Kit supports. Download language models ahead of time in Settings → Translation → Languages on this device to translate offline.
- Short caption fragments are merged into readable sentences, and the current one is highlighted. On eligible auto-generated captions, the spoken word is highlighted too.
- Tap a subtitle line to jump back to its start and hear it again.
- Swipe the subtitle panel away to see the whole YouTube page (likes, comments, recommendations) and bring it back anytime.
- Rotate to landscape for an edge-to-edge split view: the video on the left and subtitles on the right. Drag the divider to resize it; the app remembers your choice.
- Tap a word in either subtitle line; tap another word in the same line to select the whole phrase. A small bar shows the translation right away, with Copy, Translate and Pronounce.
- Translate opens a card with the meaning, each word's part of speech, and Save to vocabulary.
- For Japanese, the card also explains the grammar of the selection and the particle right after it (for example に or 〜てくれました).
- Pronounce uses the voices installed on your phone, preferring offline voices.
- Open Saved words to search, edit, or practice your cards. Each card keeps its original sentence and can replay it in the video.
- Reviews use spaced repetition: Again (10 minutes), Hard (1 day), Good (3 days), or Easy (7 days), with intervals growing on later reviews.
- Export a full backup or Anki text, and import it on another phone. See Practice transfer.
- Progress in the menu shows today's watch time against a daily goal, your streak, totals for the week, month, year and all time, and the time spent in each language.
- Time counts only while a captioned video plays, and it is stored only on your device.
The interface is available in English, Tiếng Việt, Español, Português (Brasil), 日本語, 한국어, 简体中文 and Bahasa Indonesia. It follows your phone's language; the globe button at the bottom of the menu picks another.
- Open DualSub Replay, choose your native language and the language you are learning, and skim the short guide.
- Search YouTube and pick a video with captions.
- Read the original and translated subtitles below the video, or beside it in landscape.
- Tap a subtitle line to replay it, or tap a word to learn it.
- Press Back to keep browsing YouTube as usual.
How do I watch YouTube with two subtitles at once on Android? Install DualSub Replay, open a captioned video, and pick your language. The original caption and its translation appear together under the video, or beside it in landscape.
Which languages can I learn? The original can be any caption language a video offers, including auto-generated captions. Translations go into the 59 languages supported by Google ML Kit, such as English, Spanish, Japanese, Korean, Chinese, French, German, and Vietnamese. Settings → Translation → Languages on this device lists them, shows which are downloaded, and lets you download or remove each one so translation works offline.
Is there a Language Reactor-style tool for Android? Browser extensions such as Language Reactor run in desktop Chrome, not in the Android YouTube app. DualSub Replay is a separate, unaffiliated Android app with a similar two-language view, plus tap-to-replay, word lookup, and saved-word practice.
Can I sign in to YouTube? Experimentally. The Google sign-in flow stays inside the app and returns to your video afterwards, but Google does not officially support signing in from embedded WebViews and may reject it with a "browser or app may not be secure" message. The app never spoofs its user agent or copies cookies.
Is it on Google Play or F-Droid? Not yet. Install the official APK from GitHub releases. A fully open-source build for F-Droid, which translates with Mozilla's Bergamot engine instead of ML Kit, is being prepared; see F-Droid distribution.
No account or API key is required, and the app has no analytics or advertising SDKs. YouTube receives the same page, player and caption requests as a normal visit. By default the GitHub build sends subtitle text to Google Translate (online) for better translations. Turn off Settings → Translation → Google Translate (online) to translate on the device instead: ML Kit downloads only the language models you use, then translates on the device. The F-Droid build always translates on the device. Settings, saved words, and progress stay in local app storage. See PRIVACY.md for details.
- YouTube's official Data API does not let ordinary viewers download captions from arbitrary public videos, so DualSub Replay reads them through YouTube's undocumented internal interfaces. They can change without notice, and their use may be restricted by YouTube's terms. That code is isolated in
YouTubeCaptionProviderso it can be replaced. - Videos play in YouTube's own mobile webpage player; the app does not download video. Spoken-word highlighting depends on YouTube's page and may be unavailable or less precise on some videos and phones, in which case it falls back to sentence timing.
Requirements: Android Studio compatible with Android Gradle Plugin 9.3, JDK 17, Android SDK 36, and an API 36 AOSP x86_64 system image for managed-device tests. The Gradle 9.5 wrapper is committed, so a separate Gradle installation is not required.
bash ./gradlew testDebugUnitTest lintDebug assembleDebug assembleDebugAndroidTest
bash ./gradlew pixel2Api36DebugAndroidTestOn Windows, use .\gradlew.bat instead. The managed-device suite runs on a Pixel 2 profile with offline WebView fixtures, so it never calls the live YouTube site; on headless hosts also pass -Pandroid.testoptions.manageddevices.emulator.gpu=swiftshader_indirect.
The debug APK is written to app/build/outputs/apk/debug/app-debug.apk. Add -Pdistribution=fdroid to build the F-Droid variant; it needs the git submodules, NDK r28c and CMake 3.22.1 (F-Droid distribution). Release builds need the four ANDROID_RELEASE_* signing variables and -PrequireReleaseSigning=true; never commit signing material.
SingleYouTubePageowns the app's only WebView and keeps normal YouTube navigation and playback intact. A small JavaScript polling bridge reads the page video's time and seeks that same video for replay.YouTubeUrlParsernormalizes shared links;YouTubeCaptionProviderdiscovers and downloads timed captions;SubtitleMergerturns short cues into replayable sentences.OnDeviceTranslatortranslates with Google ML Kit (Bergamot in the F-Droid build).AppViewModeltracks the active video, caption loading, translation, and the current line;DualSubAppplaces the subtitle panel below the video in portrait or beside it in landscape.
See the technical context for the invariants that tests enforce.
Pull requests run formatting, complexity, unit, lint, build, and managed-device checks, and publish a numbered test APK to the rolling preview release. Merges by the owner publish an official release automatically. See Continuous integration and releases for versioning, release labels, and recovery.
The landing page in site/ (English and Vietnamese) deploys to GitHub Pages when site/ or docs/images/ changes on main. The demo video, README GIF, poster and social card are rendered from code in tools/promo-video.
Contributions are welcome. Read CONTRIBUTING.md, the Code of Conduct, and the compact roadmap before opening a pull request. Humans and coding agents share the project context, technical context, and lightweight spec workflow; AGENTS.md gives operational instructions.
Source contributed to this repository is released under the MIT license. See third-party notices and build/source information. This project is independently implemented and is not affiliated with 1Letters, YouTube, or Google.


