Files
SubMiner/changes/anime-browser.md
T
sudacode 1c50ff74cb fix(anime): never forward Range to the bridge so 206 replies cannot skip the strip
ffmpeg opens every HLS segment with 'Range: bytes=0-'. The bridge
answers some of those 206 (depending on its cache state), and the proxy
only rewrites full 200 bodies, so the PNG disguise passed through
untouched and whether an episode played was a coin flip: first attempts
died with "no audio or video data played", the same URL played fine
once the bridge had the segments cached.

Reproduced end to end against a private bridge + mpv driven with the
app's exact commands; with Range dropped every segment is stripped and
playback runs.
2026-08-01 00:40:34 -07:00

3.5 KiB

type: added area: anime

  • Added an anime browser window that searches Aniyomi extension sources, shows cover art and episode lists, and plays an episode in mpv so the overlay and mining tools attach as usual.
  • Added subminer anime and the --anime flag to open the browser, plus a "Browse Anime" tray entry.
  • Anime extensions are read from <userData>/anime-extensions; drop Aniyomi .apk files there to add sources.
  • Added a source settings tab so extensions that need configuration (server address, credentials, quality) can be set up from the browser; values persist per source.
  • Added an Extensions tab for adding repository URLs and installing, updating, or removing extensions in place; extensions that fail to load are listed with the reason.
  • Browse, Extensions, and Source settings are tabs, so each one gets the full window instead of sharing it with the search results.
  • Repository URLs only need to be an https URL to a .json index; the file name is not restricted to index.min.json.
  • The source picker offers "All sources", which searches every installed source at once. Results stream in as each source answers — a fast source is on screen while a slow one is still resolving, with per-source progress in the status bar. Results are tagged with the source they came from, and a source that fails is named in the status bar instead of blanking the grid.
  • The Extensions tab opens with an Installed section listing every extension on disk with Remove — including ones added by hand or whose repository has since been removed — and Update where a configured repository still carries it.
  • Added anime.repos, anime.extensionsDir, and anime.preferredQuality config keys. SubMiner ships no extension repositories and performs no discovery.
  • Anime playback targets Japanese audio: dub-labelled entries are skipped when the source offers an alternative, alang prefers Japanese, and the source's own audio and subtitle tracks are loaded into mpv (Japanese selected) instead of being discarded, so all of them can be switched from mpv's track menu.
  • The primary subtitle slot stays reserved for Japanese: a source that only has, say, English subtitles gets them added with a normalized language tag (Englishen) but not selected, so the regular secondarySub auto-load can route them to the secondary slot instead.
  • HLS streams pass through a local strip proxy that removes fake image headers some hosts glue onto their video segments, so streams ffmpeg would otherwise probe as "a PNG" and abandon now play in mpv.
  • The strip proxy retries a failed segment fetch once after a short pause and logs upstream error statuses; a host that errors on the very first fetches right after an episode resolves no longer kills the whole playback.
  • The strip proxy no longer forwards Range headers to the bridge: ffmpeg opens every HLS segment with Range: bytes=0-, the bridge answers some of those with 206, and a partial response bypassed the disguise strip, so whether an episode played depended on the bridge's cache state.
  • "Playing" is only reported once mpv actually configures a video output; when a stream fails to decode, the browser shows mpv's error instead of claiming playback started while no window ever appeared.
  • The Linux x64 bridge bundle is verified and pinned, so the anime browser starts on Linux instead of refusing with "No pinned checksum for linux-x64-bundle.zip".
  • The bridge bundle is fetched from the pinned release tag rather than whatever release is newest, so an upstream publish no longer breaks every install with a checksum mismatch.