# asbplayer turns subtitled video into a spaced repetition pipeline

> asbplayer is a browser-based media player and Chrome extension that puts text-selectable subtitles over streaming video, adds playback modes for gaps between subtitles, and reads word status back from Anki and WaniKani to style each word as you watch. It is a study tool with a plugin surface, not a general video player.

**asbplayer/asbplayer** — Browser-based media player and Chrome extension for subtitle sentence mining

- Repository: https://github.com/asbplayer/asbplayer
- Website: https://docs.asbplayer.dev
- Stars: 1,508 · Forks: 234
- Language: TypeScript
- License: AGPL-3.0
- Published: 2026-10-16 · Updated: 2026-10-16 · Language: en
- Canonical page: https://hysenlabs.com/projects/asbplayer-asbplayer

## The unit of work is a sentence, not a video

asbplayer is described as a browser-based media player and Chrome extension built for language learners who learn through subtitled media. The goal stated in the README is creating high-quality multimedia flashcards out of subtitled video, which sets the design priority: whatever the player does has to make it easy to isolate one line, capture it with its audio and video, and move on.

The subtitle layer comes first in that logic. Subtitles are text-selectable and can be loaded onto most video sources, including streaming ones, either from auto-detected subtitles on services like Netflix and YouTube or from your own subtitle files. For everything else the README describes a generic fallback detection algorithm and claims it finds subtitles on 85% of all other streaming services. That is a claim by the project about its own coverage, with no measurement attached.

The navigable subtitle list is the second piece. Instead of scrubbing a timeline bar, you move through the list of lines, which helps with extracting individual lines.

Playback modes then close the loop. Condensed playback skips sections with no subtitles, fast-forward playback runs through them at speed, auto-pause stops at the start and end of every line, and repeat replays a line indefinitely or for a set number of times. Customizable keyboard shortcuts exist because all of this is meant to be done without the mouse.

## Word styling comes from Anki and WaniKani

The annotation system is the part that distinguishes this from a subtitle overlay. asbplayer reads word status from Anki, WaniKani, or from tracking it locally, and uses that status to decide how each word is rendered inside the subtitle.

The available annotation types are: word styling based on status, covering states such as uncollected, unknown or learning, with colour, underline and outline; reading annotation shown above each word or driven by status; accent annotation such as pitch accent; frequency annotation with a rank-based frequency below each word or by status; glossary annotation carrying a short definition or explanation; and statistics and comprehension figures for the words you already know in the current media.

That list depends on external dictionaries. Yomitan is named in the README as the tool providing them, and Anki and WaniKani provide the status that decides styling. With local tracking, asbplayer can style words without external status sync.

The word browser closes the loop: a place to manage words tracked locally and to view words synced from external sources. Several further features are on the roadmap rather than shipped, including adaptive playback driven by playback modes plus annotation data, auto mining of uncollected or unknown words, richer Anki card generation, and statistics across all media. Treat that list as intent, not as current behaviour.

## A pnpm workspace with a verification script that chains everything

The repository is a pnpm monorepo with three named workspaces visible in the scripts: `@project/common`, `@project/client` and `@project/extension`, matching the `common/`, `client/` and `extension/` directories at the root. There is also a `plugins/` directory, a `loc/` directory for localisation, and a Nix setup through `flake.nix` and `flake.lock`.

The package manager is not a suggestion. The root package.json declares it in `devEngines`:

```json
"devEngines": {
    "packageManager": {
        "name": "pnpm",
        "version": "11.27.0",
        "onFail": "error"
    }
}
```

`onFail: error` means a mismatched pnpm version fails rather than warns, which is what keeps the lockfile consistent across contributors.

The `verify` script is the single command that runs the whole gate, and its shape shows what the project considers its test surface:

```bash
scripts/loc/loc-keys-match && scripts/loc/loc-codes-in-extension-config && scripts/page-file-references-are-correct && pnpm --filter @project/common run typecheck && pnpm --filter @project/common run test && pnpm --filter @project/client run test && pnpm --filter @project/extension run test && pnpm eslint common extension/src client/src && pnpm run test:scripts && pnpm run pretty:check
```

Note the first three steps. Localisation key matching and a check that locale codes match the extension config are enforced before any test runs, which tells you translation breakage is treated as a build failure rather than a cosmetic issue.

## The README has no install steps, so start from the releases and the docs site

The README in this repository does not contain installation commands. It points to the documentation site at docs.asbplayer.dev for usage and guides, and the distribution route is the releases page.

The release list is worth reading closely because the components version independently. The most recent entries are `ankiaddon-v1.0.0` on 2026-10-15, `v1.22.0` for the extension on 2026-10-14, and `v1.21.2` for the extension on 2026-09-28. The Anki add-on reached 1.0.0 while the extension is at 1.22, so the two halves of the workflow are on completely different version lines. Expect to check both when something behaves unexpectedly.

For contributors rather than users, the working requirements come from the repository files above: pnpm 11.27.0, TypeScript through a workspace catalog, eslint with separate plugins for imports, React and React hooks, and prettier. Contributor names are checked mechanically as well, with `check:contributors` running `node --experimental-strip-types scripts/check-contributors.ts`, which explains the long contributors list the project maintains.

## Where it stops working

The first limit is coverage. Subtitle loading depends on the service. Netflix and YouTube are named, and the fallback algorithm is claimed to handle 85% of other services, which leaves a real tail where nothing is detected and you are back to supplying your own subtitle file. On those services the extension degrades to a subtitle player for files you already have.

The second is the dependency on external tools. Word styling, readings, accents, frequencies and glossary entries are not stored in asbplayer. They come from Yomitan for the dictionary data and from Anki or WaniKani for status. A reviewer should treat the annotation layer as unproven without all three in place.

The third is licence, and for a browser extension it is not a formality. The root package declares `AGPL-3.0-or-later`. An extension runs with the user's data and interacts with streaming services, so anyone modifying it and distributing the modified version is in territory the AGPL was written to cover. That is a statement about the license text, not advice, but it is a decision to make before forking rather than after.

The alternative approach, for comparison, is running a dedicated media server with a subtitle tool and mining sentences by hand into Anki. That route keeps every source file on your own disk and gives you full control over the extraction, and it costs you the streaming service integration, the playback modes and the automatic word styling. The trade is convenience and integration against ownership and licence exposure.

The last push was on 2026-10-16 and the repository is not archived, with releases landing within days of each other across the extension and the add-on.

## Conclusion

Adopt asbplayer if you learn a language from subtitled streaming video and already keep vocabulary in Anki or WaniKani, since the value comes from the status sync rather than the player. Do not adopt it as a general media player, and do not modify and redistribute it without reading AGPL-3.0-or-later, which is the license the root package declares. Verify first that the service you watch supports subtitle detection, since the README names Netflix and YouTube and claims a fallback algorithm covering 85% of other services, and check the release list for the extension and the Anki addon, which version separately.

## FAQ

### What is asbplayer and who is it for?

It is a browser-based media player and Chrome extension for people learning a language through subtitled video. It creates multimedia flashcards from subtitled video, loads text-selectable subtitles onto streaming sources, and adds playback modes for sections without subtitles.

### Which streaming services does asbplayer get subtitles from?

The README names auto-detected subtitles on popular services like Netflix and YouTube, plus your own subtitle files. For other services it describes a generic fallback detection algorithm and claims it detects subtitles on 85% of them.

### What do I need for asbplayer's word annotations to work?

An external dictionary and vocabulary data: the README points to Yomitan for dictionary data, and word status is synced from Anki, WaniKani or tracked locally. Yomitan can provide dictionary data, while status can come from Anki, WaniKani or local tracking.

### How do I install asbplayer?

The README carries no install commands and points to docs.asbplayer.dev for guides, with binaries published on the GitHub releases page. The extension and the Anki add-on version separately, at v1.22.0 and ankiaddon-v1.0.0 respectively.

### What are asbplayer's playback modes?

Condensed playback skips unsubtitled sections, fast-forward playback runs through them, auto-pause stops at the start and end of every subtitle, and repeat replays a subtitle indefinitely or a set number of times. Most features are reachable through customizable keyboard shortcuts.

## Sources

- [asbplayer/asbplayer on GitHub](https://github.com/asbplayer/asbplayer)
- [License: AGPL-3.0](https://github.com/asbplayer/asbplayer/blob/main/LICENSE)
- [Project website](https://docs.asbplayer.dev)
- [README](https://github.com/asbplayer/asbplayer/blob/main/README.md)
- [Releases](https://github.com/asbplayer/asbplayer/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/asbplayer-asbplayer
