Translating a series meant opening each episode and pressing Translate, one at a time. Now Translate Whole Playlist into (Subtitles menu, the header's Subtitles button, and a button in the playlist header) translates every episode in one go, so the next ones are ready before you get to them.
Starts with the episode playing, then the ones after it. Episodes run one after another; each one still uses the usual parallel request limit.
The progress shows "Episode 3 of 7: Translating…", with the bar counting the whole playlist. Cancel stops it.
Episodes that already have a saved translation are skipped without calling the LLM. Episodes without a text subtitle (or that aren't local files) are skipped and listed at the end.
Episodes in one folder share the glossary, as before: each episode reloads it, so terms from earlier episodes carry over.
The episode playing uses the subtitle you picked. Other episodes aren't open in mpv, so their embedded streams are read with FFmpeg and the source is chosen like for the open one: English first, then the audio language.
You can keep watching and switch episodes while it runs. A finished episode's subtitle turns on if it's the one playing; the others load when you open them. A single Translate is still cancelled when you switch videos.
An API or disk error stops the whole run, since it would repeat for every episode.
Proof: new subtitleextractortest (source picking on FFmpeg-made files), all 9 tests pass. In the real app (offscreen, Union style, isolated XDG dirs, fake local OpenAI server) on 4 King's Avatar episodes plus a file without subtitles: 4 translated, the file without subtitles reported; switching to the next episode mid-run kept going and turned on its translation; a second run made no LLM requests; Cancel mid-run wrote nothing more.
The new menu entry and playlist button, the progress while episode 2 runs, and the report at the end:
Reviewed with sol-loop: 2 rounds with gpt-6.1-sol. Sol verdict: approved
Created with Claude Opus 5.5 in Claude Code (T3 Code), reviewed by GPT-6.1 Sol.
Translating a series meant opening each episode and pressing Translate, one at a time. Now **Translate Whole Playlist into <language>** (Subtitles menu, the header's Subtitles button, and a button in the playlist header) translates every episode in one go, so the next ones are ready before you get to them.
- Starts with the episode playing, then the ones after it. Episodes run one after another; each one still uses the usual parallel request limit.
- The progress shows "Episode 3 of 7: Translating…", with the bar counting the whole playlist. Cancel stops it.
- Episodes that already have a saved translation are skipped without calling the LLM. Episodes without a text subtitle (or that aren't local files) are skipped and listed at the end.
- Episodes in one folder share the glossary, as before: each episode reloads it, so terms from earlier episodes carry over.
- The episode playing uses the subtitle you picked. Other episodes aren't open in mpv, so their embedded streams are read with FFmpeg and the source is chosen like for the open one: English first, then the audio language.
- You can keep watching and switch episodes while it runs. A finished episode's subtitle turns on if it's the one playing; the others load when you open them. A single Translate is still cancelled when you switch videos.
- An API or disk error stops the whole run, since it would repeat for every episode.
Proof: new `subtitleextractortest` (source picking on FFmpeg-made files), all 9 tests pass. In the real app (offscreen, Union style, isolated XDG dirs, fake local OpenAI server) on 4 King's Avatar episodes plus a file without subtitles: 4 translated, the file without subtitles reported; switching to the next episode mid-run kept going and turned on its translation; a second run made no LLM requests; Cancel mid-run wrote nothing more.
The new menu entry and playlist button, the progress while episode 2 runs, and the report at the end:
 


Closes #9
Reviewed with sol-loop: 2 rounds with gpt-6.1-sol. Sol verdict: approved
Created with Claude Opus 5.5 in Claude Code (T3 Code), reviewed by GPT-6.1 Sol.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Translating a series meant opening each episode and pressing Translate, one at a time. Now Translate Whole Playlist into (Subtitles menu, the header's Subtitles button, and a button in the playlist header) translates every episode in one go, so the next ones are ready before you get to them.
Proof: new
subtitleextractortest(source picking on FFmpeg-made files), all 9 tests pass. In the real app (offscreen, Union style, isolated XDG dirs, fake local OpenAI server) on 4 King's Avatar episodes plus a file without subtitles: 4 translated, the file without subtitles reported; switching to the next episode mid-run kept going and turned on its translation; a second run made no LLM requests; Cancel mid-run wrote nothing more.The new menu entry and playlist button, the progress while episode 2 runs, and the report at the end:
Closes #9
Reviewed with sol-loop: 2 rounds with gpt-6.1-sol. Sol verdict: approved
Created with Claude Opus 5.5 in Claude Code (T3 Code), reviewed by GPT-6.1 Sol.