v0.2.0
Highlights
- Podcasts as a new media class — search, browse, stream, with cover art
and now-playing metadata. - Internet radio via RadioBrowser, also a new media class.
- More sources: Stremio addon pack, Knaben aggregator, NASA, Wikimedia
Commons, Internet Archive audio. - OMDb ratings (IMDb / Rotten Tomatoes / Metacritic) on the detail view.
- Keyless subtitle providers extended (Subdl, Stremio OpenSubtitles-v3).
- Broad performance pass: virtualized grids, poster failure latches, cheaper
per-frame polling. - Persisted Settings toggles now actually take effect.
Changes
Features
- audio — cover art + now-playing metadata for podcasts & radio (
11f85f4) - subtitles — Subdl provider with in-process ZIP extraction (wave-2) (
12160c1) - sources — NASA + Wikimedia Commons + Internet Archive audio (legal, default-on) (
099ee96) - subtitles — keyless Stremio OpenSubtitles-v3 provider in the search chain (
df56077) - sources — RadioBrowser internet radio — new Radio media class (
cefb302) - sources — OMDb ratings enrichment (IMDb / RT / Metacritic) on detail view (
57912f9) - sources — Stremio addon pack + Knaben aggregator; raise manifest cap (
09769c0) - art — podcast cover images + web Jellyfin poster cards (
4a39e93) - podcasts — new media class — search, browse, stream audio (desktop + web) (
0ab5b88) - anime — enrich anime tab with AniList metadata (SFW-gated) (
c436db1) - tv — TVmaze episode air-dates + next-episode countdown (
66a1b22) - sources — Internet Archive — legal public-domain video search (
cef9193) - sources — generic Torznab/Prowlarr/Jackett adapter (ships inert) (
b036d65) - web — Jellyfin, Anime, and RSS tabs on the web companion (
7fae32b) - dev — give the dev binary a real macOS app identity (Opal + logo + About) (
a39a050) - web — queue reorder (up/down) via /queue/move (
5b4bc48) - web — SSE status push (/events) replaces 1s polling (
746651c) - home — Coming-up rail uses poster cards (like Trending tonight) (
4b1bf9d) - safety — never auto-select/open executables or archives in torrents (
138a3ba) - web — browser-first setup + live torrent progress + history rerun (
159090f) - web — live torrent progress in Activity (/api/torrents) (
2cc7383) - hosting+perf — headless web hosting, browser streaming, CPU fixes (
a8648c8) - smart TV playback, cloud LLM, web companion, CPU + UX overhaul (
027a77e)
Fixes
- build — explicit piece_index_t casts for newer libtorrent (macOS CI) (
f2959a4) - build — source libtorrent TLS defines from pkg-config (fixes macOS CI) (
9d56a7f) - onboarding — redesign the welcome modal — logo, cards, wrapping copy (
61880ba) - startup — first-launch "Nothing loaded" race in Movies&TV / Trending (
2ed7efb) - settings — make persisted toggles actually take effect (audit fixes) (
0b0a701) - torrent — proportional piece-map downsample + guard dead torrent_destroy (P2) (
974f1e3) - torrent — erase removed torrents — stop unbounded dead-slot growth (P1-2) (
33c12db) - torrent — lock wrapper vector access (P0 data race), atomic session, proxy leak (
1d4457c) - threads — atomic-ize cross-thread control bools; snapshot jellyfin auth (
b57b377) - stability — comics download UAF, extractor player race, player panics (
c36e79f) - playback — letterbox video instead of stretch in fullscreen/full-height (
20d0b68) - build — give libtorrent_wrapper.so a SONAME (
790fed3) - web — history items are search strings — render + tap-to-rerun (
6192169) - docker — correct zig 0.16 tarball name; drop unused onnxruntime deps (
965c2ca)
Performance
- youtube — virtualize the results grid (
ad0247b) - posters — add missing thumbnail/poster failure-latches (stop per-frame respawn) (
d24a840) - comics — virtualize the discovery grid + add a cover failure-latch (
fdffd35) - footer — cache per-frame libtorrent + mpv chrome polls at ~2Hz (
1c8dc75) - isInList pointer-capture, poster_cache index, search status memoization (
5d970ad) - lang-learn — move the TTS health probe off the render thread (
4af5c9a) - web — bound the jellyfin poll loop + skip no-op DOM rebuilds (
32df888) - playback — throttle interactive chrome repaint 120Hz -> 30fps (
eb376d6)
Internal (5 commits — tests, refactors, CI, docs)
- chore(release): bump to 0.2.0 + reconcile version, add CHANGELOG (
fcb5ee7) - chore(tests): refresh results.json (140 passed, 0 failed) (
42e932d) - refactor(ui): extract control-bar picker popovers into ui/pickers.zig (
8a52180) - refactor(settings): move About into its own tab (out of Playback) (
8cc7fd3) - docs: mark headless H3 shipped (
df3befb)
Install: curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | sh
Verify a download against SHA256SUMS.txt below.
Full Changelog: v0.1.2...v0.2.0