PotPlayer_ChatGPT_Translate: an OpenAI-compatible subtitle translator that lives inside PotPlayer's extension folder
[support ollama/other model]【兼容ollama和其他模型】将任何具有OpenAI API调用方法的模型集成到PotPlayer中。它使你在观看视频时能够实时翻译字幕,从而打破语言障碍,提升你的观看体验。 This real-time subtitle translation plugin integrates OpenAI's ChatGPT API (or any model with the same API calling method) into PotPlayer. It enables you to translate subtitles on-the-fly while watching videos.
At a glance
- What is it?
- This is a Windows-only PotPlayer subtitle translation plugin built on AngleScript and C++, shipped as an installer that drops scripts into the player's Translate extension directory. It is a good fit if you already watch subtitled video in PotPlayer and have an OpenAI-compatible endpoint; it is the wrong tool if you need a portable, cross-platform, or offline pipeline.
- Who is it for?
- Adopt it if you watch subtitled video in PotPlayer on Windows and already have an OpenAI-compatible endpoint, including a local Ollama instance, because the installer handles the plugin folder and the model field accepts a base URL suffix. Do not adopt it if you need Linux or macOS playback, a batch pipeline over a subtitle library, or a guarantee that no subtitle text leaves the machine.
- 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 21 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 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The problem: PotPlayer can render subtitles, but it cannot translate them
PotPlayer plays video and displays subtitle tracks, but it has no built-in machine translation step. If you watch a film whose only subtitle file is in a language you do not read, your options outside the player are to find a translated subtitle file or run the file through a separate translation tool before playback. The plugin targets that gap by registering itself as a subtitle translation extension inside PotPlayer, so the translation happens while the video is playing rather than in a preprocessing pass. The audience is narrow and specific: Windows users who already use PotPlayer, who have access to an OpenAI-compatible chat completions endpoint, and who want the translation to appear in the player's own subtitle layer. It is not a general subtitle translation utility, and the README does not present it as one. The repository describes two script variants, one that carries previous subtitles as context and one that translates each line more independently, and it states plainly that the context variant usually produces better quality at the cost of latency and token usage. That single trade-off shapes most of the practical decisions a user makes.
What actually sits between PotPlayer and the model
The plugin is not a compiled native decoder. The primary language listed for the repository is C++, but the README frames the project around script variants that PotPlayer loads as a subtitle translation extension, and the topics list includes AngleScript alongside the API and player tags. The mechanism the documentation describes is a request path: PotPlayer passes subtitle text to the plugin, the plugin sends that text to an OpenAI-compatible chat completions endpoint, and the returned translation is handed back to the player for display. The context variant additionally sends previous subtitles along with the current line, which is why the README warns about higher latency and token usage. There is also an optional context cache mode and an optional small-model prompt mode, plus an optional hallucination check described as detecting abnormal translation output. Those options matter because a chat model occasionally returns commentary, a refusal, or a repetition instead of a translation, and a subtitle track has no room for any of that. The README does not document the exact shape of the hallucination check, so treat it as a mitigation whose behaviour you should confirm on your own material rather than a guarantee.
Installation is the installer's job, and the README says so twice
The README opens with a notice that the source-code version is intended for development and testing, that it is not the recommended installation method for normal users, and that not every source-code path has been fully tested. The recommended route is the release installer. You download the latest release, run installer.exe, approve the Windows administrator prompt if it appears, and confirm the PotPlayer plugin folder. The installer attempts to detect the PotPlayer path automatically, and the target directory is normally the Translate folder under the PotPlayer Extension Subtitle path. If PotPlayer lives somewhere unusual, you select that folder yourself. The installer then asks which variant to install, with context or without, and asks for the model and API endpoint. The model field takes a bare model name such as gpt-4.1-nano, or a name with an endpoint appended after a pipe character, which is the form the README gives for a custom base URL. If your endpoint needs no key, you leave the key field blank and press Verify; the README states that a successful empty-key test causes the installer to inject the literal string nullkey. After installation you open PotPlayer, press F5, go to Extensions and then Subtitle translation, select ChatGPT Translate, and set source and target languages. One detail worth reading twice: installer defaults are written once, and any later change you make in PotPlayer's own plugin panel overrides them.
Context versus no-context is a real cost decision, not a quality toggle
The two script variants exist because subtitle lines are short and full of unresolved references. A line reading "he told her" is ambiguous in isolation and usually obvious when the preceding lines are available. The context variant feeds those preceding lines to the model, and the README states that translation quality is usually better while latency and token usage may be higher. The no-context variant sends each line more independently, which the README describes as faster and cheaper but more likely to misread pronouns, references, jokes, and short lines. That is a fair summary of the trade-off, and it has a second-order effect the README does not spell out: because context inflates the prompt, cost scales with how much history you include, not just with subtitle length, and latency lands directly in the playback experience. If a translated line arrives after the speaker has finished, the subtitle is late regardless of how good the wording is. The variant is chosen during installation, so switching later means reinstalling or replacing files rather than flipping a runtime setting. The README also lists an optional request delay and optional retry behaviour, which suggests the authors expect rate limits and transient failures to be part of normal operation.
Model choice is deliberately open, which shifts the burden onto you
The project's stated position is that it is not limited to OpenAI models, and that any model or service following a compatible chat completions API format can potentially be used. The description names Ollama explicitly, and the repository topics include both openai-api and llm. In practice this means the plugin supplies the plumbing and you supply the endpoint. A local Ollama instance changes the calculus considerably, because subtitle text stays on your machine and there is no per-token bill, though the README does not document which local models have been tried or what throughput to expect. A hosted endpoint reverses that: no local GPU required, but every subtitle line leaves your network. The README gives no guidance on model selection beyond an example name, and it does not publish accuracy figures for any model. That is a gap. Subtitle translation quality varies enormously between models, and the only way to know whether a given model is usable for your language pair is to run it against material you can check. The small-model prompt mode exists as an acknowledgement that some endpoints are cheap and weak, but the README does not explain how the prompt differs, so its effect is undocumented.
Where this plugin is the wrong tool
Three cases stand out. First, cross-platform users: this is a PotPlayer extension, and PotPlayer is a Windows application, so anyone on Linux or macOS has no path here. Second, batch work: if you want to translate subtitle files for a library of videos ahead of time, the plugin's value is that it runs inside playback, and a separate file-based translation step would be simpler and easier to inspect. Third, anyone who cannot accept subtitle text leaving the machine: with a hosted endpoint, every line is transmitted, and the README does not describe a local-only mode beyond pointing the base URL at your own server. There are smaller limitations too. The README itself warns that the source-code path is not fully tested and is not the recommended install method, which means contributors are working on a surface the maintainers describe as development-oriented. The project also carries a visible sponsorship block for a subscription top-up service in the README header, which is worth knowing before you read the rest of the document as neutral. And the maintainer notes that the GitHub account was suspended for a period, so the repository was temporarily unavailable; that is a continuity risk for anyone depending on the release binaries, and it argues for keeping a local copy of the installer you validated.
Alternatives, and the difference that matters
The obvious alternative is translating the subtitle file before playback with a general-purpose tool or a script that calls the same chat completions API. The difference is timing and inspection. A file-based pass produces an artifact you can read, correct, and reuse across rewatches, and it does not compete with playback for time. The plugin instead translates during playback, which means the result appears in the player and is gone when the session ends unless you capture it separately; the README does not describe an export path for translated subtitles. A second alternative is a player with translation built in, which avoids the extension folder entirely but ties you to that player. A third is a local subtitle translation model run offline, which removes the network dependency and the per-line cost but requires hardware and gives up the flexibility of swapping endpoints by editing the model field. The plugin's distinguishing property is not that it translates subtitles; it is that it does so through a configurable OpenAI-compatible endpoint without leaving PotPlayer, and that the model field accepts a base URL so you can redirect it at a local server. If you do not need translation to happen inside the player, that property buys you nothing.
Licence, maintenance, and what to check before you commit
The repository is licensed GPL-3.0. For a user installing the release package, that is mostly a distribution question rather than a daily one, but it matters if you intend to fork the scripts, bundle them into another product, or ship a modified installer, because GPL-3.0 carries obligations that travel with redistribution. This is not legal advice; read the licence text and, if you are redistributing, get proper review. On maintenance, the material shows a steady release cadence through 2026, with v1.9.4 in June, v1.9.3 in May, and a v1.9.2 release in March, and the last push to the default branch in August 2026. The README also carries a roadmap section and issue templates for bug reports and feature requests, which suggests the maintainer still expects to act on reports. The practical upgrade cost is low but not zero: the installer writes defaults once and PotPlayer's own settings win afterwards, so a reinstall or a file replacement can leave you reconciling two sources of configuration. Before adopting, verify the Translate folder path on your machine, confirm your endpoint answers correctly with the key you intend to use or with a blank key if it needs none, and test the chosen variant against a film whose dialogue you can judge. If the model returns commentary instead of a translation on your material, the hallucination check is the setting to look at first, and the README does not document its internals, so that is something to observe rather than assume.
Editorial conclusion
Adopt it if you watch subtitled video in PotPlayer on Windows and already have an OpenAI-compatible endpoint, including a local Ollama instance, because the installer handles the plugin folder and the model field accepts a base URL suffix. Do not adopt it if you need Linux or macOS playback, a batch pipeline over a subtitle library, or a guarantee that no subtitle text leaves the machine. Before installing, confirm the exact path of your Translate folder under the PotPlayer Extension directory, verify that your endpoint answers a keyless request if you plan to leave the key field blank, and decide between the context and no-context variants, since that choice is made at install time and changes both latency and token spend.
Community notes