LLPlayer: a Windows video player built around dual subtitles and Whisper ASR
The media player for language learning, with dual subtitles, AI-generated subtitles, real-time translation, and more!
At a glance
- What is it?
- LLPlayer is a GPL-3.0 C#/WPF media player for language learners. It shows two subtitle tracks at once, generates subtitles from audio with Whisper, and translates them in real time, but it is Windows-only and the README labels the project Beta.
- Who is it for?
- Adopt LLPlayer if you study on Windows 10 1903+ or Windows 11, want two subtitle tracks on screen at once, and accept a Beta application whose settings format may break between 0.x releases. Do not adopt it if you need macOS, Linux or Android playback, or if you want a player that will never change its configuration schema.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 20 days ago.
- What is it written in?
- Mainly C#, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The problem LLPlayer solves for subtitle-based learners
Most video players treat subtitles as an accessibility feature: one track, one language, toggled on or off. LLPlayer treats them as the study surface. The README describes the core idea as a player "focused on subtitle-related features such as dual subtitles, AI-generated subtitles, real-time translation, word lookup". That framing matters, because the target user is not someone who wants a prettier general-purpose player. It is someone watching a video in a language they are learning while wanting a second track in their native language, a dictionary lookup on any word, and a sidebar of subtitle lines they can seek through.
The README's own workflow assumes this. Set the primary subtitle to the learning language and the secondary to the native language, using the two CC buttons on the bottom seek bar. Bitmap subtitles are supported in both slots, which is unusual, since PGS and VobSub tracks are normally a dead end for lookup tools. The repository also ships a Plugins directory and a WpfColorFontDialog directory alongside the main LLPlayer project, which suggests the author intends the UI to be extended rather than frozen. The README's build section points at LLPlayer.slnx and says to select the LLPlayer project and build it, so the source tree is meant to be opened, not just consumed as a binary.
How the ASR, OCR and translation pipeline is wired
The mechanism is a chain of optional stages that sit between the decoded audio or video frame and the subtitle overlay. On the audio side, LLPlayer runs Whisper through one of two engines: whisper.cpp, which needs a model downloaded ahead of time from the Subtitles > ASR settings section, or faster-whisper, which the README says downloads the selected model automatically the first time it is used. Models with an En suffix are English-only, and the Audio Language setting defaults to auto-detection but can be pinned manually. On the image side, bitmap subtitles can be converted to text in real time with Tesseract OCR or Microsoft OCR, which is what makes word lookup possible on tracks that carry no text.
Translation is a separate stage that consumes the subtitle text. The default engine is GoogleV1, and the README links a wiki page listing others including DeepL, Ollama, LM Studio and OpenAI. The source language is detected automatically; the target language is whatever you set under Subtitles > Translate. The interesting design choice is context-aware translation, which the README describes as using an LLM to recognise the context of subtitles, implying that lines are batched rather than translated one at a time. That is a real trade-off: context improves pronoun and idiom handling, but it means an LLM engine is doing more work per line than a stateless machine translation call would.
Online playback is a fourth path. With yt-dlp integration, the README states that any online video can be played back in real time with AI subtitle generation and word lookup applied to it. The application is built on FlyleafLib, which is vendored in the repository as its own directory, so the playback core is a dependency the author controls rather than pulls from a package feed.
Installing LLPlayer and running a first subtitled video
There is no package manager step. The README's Getting Started section says to download builds from the release page and then open LLPlayer.exe. The build-from-source route is documented separately and expects Visual Studio or JetBrains Rider.
If you want to compile it yourself, the README gives this clone command, which uses the SSH form of the repository URL:
$ git clone [email protected]:umlx5h/LLPlayer.gitAfter cloning, the README says to open the solution file and build the LLPlayer project:
$ ./LLPlayer.slnxFor most users the binary route is shorter. Download the build, launch it, and open settings with CTRL+. or the settings icon on the seek bar. Then go to Subtitles > ASR and download a whisper.cpp model. The README notes that larger models mean higher load and accuracy, and that En-suffixed models are English-only. If you prefer faster-whisper, download the engine instead of a model; the README states the model is fetched automatically on first use.
Next, set your native language as the target language under Subtitles > Translate, leaving the default GoogleV1 engine in place unless you have credentials for another one. Then drop a video onto the window or open it from the context menu. Two CC buttons appear on the bottom seek bar: the left sets the primary subtitle, the right the secondary. For a typical setup the primary is the language you are learning and the secondary is your native language. External subtitle files are added the same way as videos, by dragging or through the context menu. Press F1 for the built-in CheatSheet, which the README says documents all keyboard and mouse controls and points at the settings for remapping them.
Where LLPlayer will disappoint you
The hard boundary is the platform. Requirements list Windows 10 x64 version 1903 or later and Windows 11 x64, nothing else. The project is C#/WPF, and WPF has no cross-platform runtime, so this is not a packaging gap that a future release quietly closes. If you watch on a Mac, a Linux desktop or an Android tablet, LLPlayer is the wrong tool and the README offers no path around that.
The second limitation is the prerequisites. The README is explicit that the Microsoft Visual C++ Redistributable (2022 or later) is needed for Whisper ASR and Tesseract OCR, and that without it the app will launch but will crash when ASR or OCR is enabled. That is a failure mode that appears only when you enable the feature you installed the player for, which is a poor place to discover a missing dependency. The .NET Desktop Runtime 10 is also required, though the README says an installer dialog appears if it is absent.
The third is stability, and it comes from the author rather than from a bug report. The development status is listed as Beta, with the note that it has not been tested by enough users and may be unstable. More concretely, the README states that significant UI and settings changes may be made and that breaking changes will be made actively during version 0.X.X, with configuration files possibly not backward compatible across updates. That means an upgrade can cost you your settings, and the README does not document rollback or a migration path. If you build a carefully tuned dual-subtitle layout and shortcut set, budget time to rebuild it after a version bump.
Finally, the ASR path costs hardware. The README notes that having a CUDA driver makes subtitle generation faster for RTX GPU users, which implies CPU-only generation is the slower default. Real-time transcription of a long video on CPU is the scenario most likely to feel bad.
LLPlayer versus a general player plus separate tools
The realistic alternative is not another language-learning player. It is a general-purpose player such as VLC or mpv, plus a stack of separate tools: a subtitle downloader, an ASR script, a browser dictionary extension, and a translation window. That combination is more flexible and platform-independent, and mpv in particular is scriptable in ways LLPlayer is not.
The difference in approach is integration versus composition. With mpv you assemble the pipeline yourself and each piece can be swapped or run headless; nothing breaks when one component updates. LLPlayer instead puts the pipeline behind one settings window, so the two CC buttons, the Whisper engine choice, the OCR engine and the translation target all live in the same configuration and apply to the same playing video. The README also notes that LLPlayer can integrate with browser extensions such as Yomitan and 10ten, which softens the boundary: you can keep the lookup tools you already use and let the player handle subtitles and transcription.
A second alternative is watching with a single subtitle track and no ASR at all. That costs nothing and works everywhere. LLPlayer's value proposition only holds if you actually want the second track, the generated track, or the lookup sidebar; if you do not, the prerequisites and the Beta status are pure overhead.
Licence, maintenance and the cost of upgrading
LLPlayer is licensed GPL-3.0. For an end user that means the software is free to run and the source is available. For anyone embedding it or shipping a modified build, GPL-3.0 carries obligations about distributing corresponding source, and the repository's vendored FlyleafLib and FFmpeg directories mean those components come along with it. This is a description of the licence identifier, not legal advice; if you plan to redistribute a modified build, read the licence text in the repository.
The maintenance signal is the commit history rather than the release cadence. The last push to the default branch was on 2026-07-19, and the most recent tagged release is v0.3.0 from 2026-04-19, following v0.2.2 in 2025-05-24. So there is activity on main between releases, and the gap between v0.2.2 and v0.3.0 was roughly eleven months. The repository is not archived. That pattern suggests a small project where features land on main and are tagged occasionally, which fits the README's warning about breaking changes during 0.X.X.
The upgrade cost follows from that. Because configuration files may not be backward compatible, a version bump is not a drop-in replacement. The README does not document an export or import for settings, so the practical approach is to note your Whisper engine choice, model, target language and shortcut remaps before updating. Whisper models themselves are downloaded through the settings UI rather than bundled, so a fresh install re-downloads them.
Editorial conclusion
Adopt LLPlayer if you study on Windows 10 1903+ or Windows 11, want two subtitle tracks on screen at once, and accept a Beta application whose settings format may break between 0.x releases. Do not adopt it if you need macOS, Linux or Android playback, or if you want a player that will never change its configuration schema. Before installing, confirm the .NET Desktop Runtime 10 and the Microsoft Visual C++ Redistributable (2022 or later) are present, because the README states the app launches without the redistributable but crashes when ASR or OCR is enabled; then download a Whisper model from Subtitles > ASR rather than assuming one ships with the build.
Frequently asked questions
What is the best free video player with AI subtitles?
LLPlayer is free and open source under GPL-3.0 and generates subtitles with Whisper through either whisper.cpp or faster-whisper, so it fits that description. Whether it is the best for you depends on your platform, since the README lists only Windows 10 x64 (1903 or later) and Windows 11 x64 as supported systems.
Can you have two subtitles at once?
Yes. LLPlayer's headline feature is dual subtitles, with two CC buttons on the bottom seek bar, the left one for the primary subtitle and the right one for the secondary. The README states that both text subtitles and bitmap subtitles are supported in this arrangement.
How to use LLPlayer?
Download a build from the releases page, launch LLPlayer.exe, open settings with CTRL+., download a Whisper model under Subtitles > ASR, set your native language under Subtitles > Translate, then open a video and assign the two CC buttons. A built-in CheatSheet opens with F1 and documents every keyboard and mouse control.
What is a good LLPlayer alternative?
The README does not name any alternative player, and no such comparison is documented. What it does document is that LLPlayer itself can act as a front end for other tools, integrating with yt-dlp for online video and with browser extensions such as Yomitan and 10ten for lookup.
What is the best app for translating subtitles?
LLPlayer translates subtitles in real time and the README lists many engines, including Google, DeepL, Ollama, LM Studio and OpenAI, with GoogleV1 as the default. It also supports context-aware translation that uses an LLM to recognise subtitle context.
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/umlx5h-llplayer)