Skip to content

v2.0.0 — Complete rewrite (AniList search + minimal mpv)

Choose a tag to compare

@sundeepyt2 sundeepyt2 released this 03 Jul 09:52

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.py file 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

  1. NEED_CAPTCHA — AniList search has no captcha. AllAnime has automatic proxy.cors.sh fallback.
  2. mpv exit code 2 (octet-stream) — removed --demuxer-lavf-format flag. mpv auto-detects.
  3. mpv fatal error (analyzeduration out of range) — removed the flag entirely.
  4. mp4upload 403 (wrong Referer) — _scrape_embed uses embed URL as Referer.
  5. Dead provider errors — only AllAnime, no dead hianime/animepahe.
  6. 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 passed
  • pytest -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 pass twine check

Full changelog: v1.3.1...v2.0.0