v2.0.0 — Complete rewrite (AniList search + minimal mpv)
SNI v2.0 — Ground-up rewrite
SNI v2.0 eliminates ALL the bugs from v1.x by redesigning the architecture from scratch.
Architecture changes
- Search via AniList API (graphql.anilist.co) — public, no auth, no captcha, 100% reliable. Gives proper English titles, episode counts, scores, cover images.
- AllAnime used ONLY for stream extraction (not search). Simplified to a single
allanime.pyfile with clean fallback chain: direct → proxy.cors.sh → CF Worker (optional). - Minimal mpv invocation: just URL + headers. NO demuxer flags (the source of multiple fatal errors in v1.x). mpv auto-detects format.
Bugs eliminated
- NEED_CAPTCHA — AniList search has no captcha. AllAnime has automatic proxy.cors.sh fallback.
- mpv exit code 2 (octet-stream) — removed
--demuxer-lavf-formatflag. mpv auto-detects. - mpv fatal error (analyzeduration out of range) — removed the flag entirely.
- mp4upload 403 (wrong Referer) —
_scrape_embeduses embed URL as Referer. - Dead provider errors — only AllAnime, no dead hianime/animepahe.
- Raw tracebacks — all errors wrapped in clean messages.
CLI commands
sni "one piece" # Search and play (sub)
sni play "one piece" # Same as above
sni-d "one piece" # Search and play (dub)
sni search "one piece" # Search only
sni tui # Terminal UI mode
sni config # Show/set config
sni --version # Show version
sni --debug play "X" # Debug mode (verbose mpv output)Install
pip install --upgrade sni-cli
sni "one piece"Verified
ruff check sni/→ All checks passedpytest -q→ 6 passed (0.90s)- Live end-to-end: AniList search → AllAnime search → 1168 episodes → stream URL extracted → mpv command verified (no breaking flags)
python -m build→ sdist + wheel both passtwine check
Full changelog: v1.3.1...v2.0.0