The main issue is when you select an episode, the screen glitches out, attempting to select the episode list and display its contents, but the code breaks, and it results in a return to the list for said anime you are seeking to watch, you can perform all the other functions in VIU, EXCEPT watch or select an episode.
Bug 1 — search.py line 200: quality selection is dead code
quality = [ep_stream.link for ep_stream in server.links
if ep_stream.quality == config.stream.quality] # built but never used
if not quality:
# user picks from menu → assigned to stream_link ...
stream_link = next(...)
stream_link = server.links[0].link # ← always overwrites everything above
The final unconditional assignment overrides both the quality filter and the user's menu selection. stream_link is always links[0]. Your config's quality = "1080" does nothing.
Bug 2 — ipc/mpv.py line 326: input() in IPC failure path — the one that breaks Konsole
except MPVIPCError as e:
if input("Failed to play with IPC. Continue without it? (Y/n): ").lower() != "n":
return player.play(params)
IPC connects after a hardcoded 1-second sleep. If MPV takes longer to start (slow stream URL, cold start, network delay), IPC times out and this raw input() fires — after fzf has already terminated. The terminal is in an unknown state. That prompt either corrupts the display, hangs waiting for input that never comes cleanly, or the episode never launches.
Bug 3 — class-level mutable dicts (minor)
message_handlers, event_handlers, etc. are class-level dicts mutated via update() on instances — meaning they're shared across all MpvIPCPlayer instances. Not a launch blocker, but gets dirtier over time in a session.
--- Annotation
- AlAnime (api.allanime.day) — Cloudflare-blocked. Returns 403 HTML challenge page. httpx can't solve JS challenges or spoof a real browser's TLS fingerprint. debug_provider catches the JSONDecodeError silently, returns None, you get "no results."
- AnimePahe — DNS resolution failure. Domain is dead from your machine.
- AnimeUnity — fully functional, returns complete episode lists.
The main issue is when you select an episode, the screen glitches out, attempting to select the episode list and display its contents, but the code breaks, and it results in a return to the list for said anime you are seeking to watch, you can perform all the other functions in VIU, EXCEPT watch or select an episode.
Bug 1 — search.py line 200: quality selection is dead code
quality = [ep_stream.link for ep_stream in server.links
if ep_stream.quality == config.stream.quality] # built but never used
if not quality:
# user picks from menu → assigned to stream_link ...
stream_link = next(...)
stream_link = server.links[0].link # ← always overwrites everything above
The final unconditional assignment overrides both the quality filter and the user's menu selection. stream_link is always links[0]. Your config's quality = "1080" does nothing.
Bug 2 — ipc/mpv.py line 326: input() in IPC failure path — the one that breaks Konsole
except MPVIPCError as e:
if input("Failed to play with IPC. Continue without it? (Y/n): ").lower() != "n":
return player.play(params)
IPC connects after a hardcoded 1-second sleep. If MPV takes longer to start (slow stream URL, cold start, network delay), IPC times out and this raw input() fires — after fzf has already terminated. The terminal is in an unknown state. That prompt either corrupts the display, hangs waiting for input that never comes cleanly, or the episode never launches.
Bug 3 — class-level mutable dicts (minor)
message_handlers, event_handlers, etc. are class-level dicts mutated via update() on instances — meaning they're shared across all MpvIPCPlayer instances. Not a launch blocker, but gets dirtier over time in a session.
--- Annotation