Repository navigation
Releases: debpalash/Opal
Release list
v0.8.8
Highlights
- Ubuntu 20.04 and other older Debian/Ubuntu systems can install Opal. A
separate package builds current media libraries against glibc 2.31 and keeps
them private. The installer selects it for older hosts; playback uses software
decoding and X11/XWayland. System libraries stay under distro control. - Browse gains more torrent, reading and audio sources. NekoBT, Shana,
Public Domain Torrents, Royal Road, NovelFire, Weeb Central, Comic Book Plus
and Audius join the catalog, along with NASA, BBC and NPR podcasts. Anime,
comics and novels have repaired discovery, reader and source handoffs. - macOS builds and bundles are more reliable. CI uses a supported runner,
dependency setup repairs stale OpenSSL links, and bundled playback libraries
reserve enough space for relocated paths. Torrent search also works with
Ubuntu 20.04's Python 3.8.
Changes
Features
- sources — expand torrent, reading and audio providers (#101) (
a079827) - tv — redesign season detail as responsive episode gallery (
c603cb1) - torrents — add bounded memory-only streaming (
42d49c0)
Fixes
- release — support older Linux hosts and repair macOS CI (#103) (
70b11ea) - installer — reject incompatible Linux release runtimes (#102) (
46bbbb2) - browse — enrich sources and repair discovery flows (#99) (
5913eeb) - ci — support libtorrent 2.1 and unlink legacy runner OpenSSL (
4f7193e) - downloads — make removals durable and restore transfers paused (
ce782f9) - windows — bootstrap browser without system Python (#95) (
15b6292)
Other
- Fix anime episode browsing and playback lifecycle (
5208bd3) - Fix Windows YouTube seeks with seekable extractor streams (
455ae66) - Publish Homebrew formula for v0.8.7 (#94) (
24d4676)
Install: curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | sh
Verify a download against SHA256SUMS.txt below.
Full Changelog: v0.8.7...v0.8.8
v0.8.7
Highlights
- YouTube starts faster and plays at the requested quality. Browse cards,
filters and player controls now match the rest of Opal; cancellation remains
responsive while a stream resolves, 1080p is preferred, and quality changes
switch immediately without exposing unavailable formats. - Every browse surface is smoother and more resilient. Movies, TV, anime,
Asian drama, audio, reading, live TV and connected libraries share bounded
paging, responsive cards, cover placeholders and reliable cached fetches.
Temporary provider failures keep existing content and offer recovery instead
of presenting an empty library. - The player stays responsive under demanding video and torrent workloads.
Frame buffers and render targets are reused, redundant redraws are coalesced,
torrent range seeks prioritize the requested pieces, and fallback streams are
tried without blocking the controls. - Home and season pages use the available window. Continue items preserve
privacy until hover, artwork is restored, compact sections fit more content,
and episode lists scroll independently inside an immersive season view. - Remote access and account management are dependable. Web UI registration,
password changes, scoped administration, card actions, keyboard navigation and
screen reader behavior now work through the complete native-to-web flow. - Arch and Omarchy gain a direct Pacman package. Releases now include a
checksum-covered.pkg.tar.zstalongside the AUR source and binary packages,
.deb,.rpm, AppImage, self-extracting Linux installer, macOS app and DMG,
Windows MSI and portable zip, and both browser extensions.
Changes
Fixes
- keep detail routes alive through fetch failures (
98e1c08)
Performance
- bound settings worker repaints (
4b2dc52) - size video renders to visible viewport (
83d56f1) - coalesce redundant playback redraws (
3522e64) - eliminate repeated web polling work (
9ecd411)
Other
- Update IPTV fetch regression check (
f540790) - Update novel fetch regression checks (
18e2280) - Update music fetch regression check (
ecb01ac) - Update podcast fetch regression checks (
61eab43) - Update radio fetch regression check (
0525e8a) - Bound smart collection listing to one query (
fdaa931) - Use reliable fetch for IPTV ingestion (
1dc47f6) - Use reliable fetch for novel sources (
eb88995) - Keep podcast timing dependency (
f8575d3) - Add live smart history collections (
082156b) - Probe remote playback health by default (
2fd103e) - Use reliable fetch for music servers (
83e08dd) - Route podcast requests through reliable fetch (
88fbcc2) - Route radio requests through reliable fetch (
8d3a7f8) - Add bounded stream fallback chain (
567250d) - Reuse player frame buffers (
c1bec5b) - Prioritize torrent pieces for range seeks (
cda82a5) - Fix native Web UI account actions (
0ab8723) - Fix macOS media open panel layout (
0c9d304) - Complete web keyboard and screen reader pass (
74b1495) - Add scoped web account management (
e28d7de) - Clarify web card playback destinations (
6289713) - Make TV season view immersive (
2ed72b2) - Update player contrast feature assertion (
59b5646) - Centralize player contrast colors (
9cf7ed5) - Align self-hosted library navigation (
97f2c1c) - Add authenticated OPDS cover gallery (
bcbd492) - Polish secondary browse galleries and loading states (
c02e3ed) - Unify Home continue shelf and restore covers (#66) (
b1d9b05) - Add custom source management lifecycle (
7da2347) - Polish home player and transient scrollbars (
6249a05) - Strengthen anime NSFW filtering (
6ad9ea8) - Improve anime and drama browse resilience (
7b49977) - Start YouTube at real 1080p and switch quality instantly (
a4986d5) - Keep player chrome interactive while loading (
252dc33) - Refine YouTube toolbar and player glyphs (
46a10c9) - Polish player controls and accelerate YouTube startup (
0446dde) - Fix YouTube playback and cancellation (
77c0c03) - Make YouTube browsing smooth and race-safe (
3298a26) - Add smooth paging to remaining browse views (
8f749ee) - Retry empty Movies and TV catalog loads (
c19170a) - Virtualize connected reading libraries (
83b6a51) - Fix browse menu and narrow layouts (
bdb437b) - Polish audio browse surfaces (
5ab7625) - Add Internet Archive novel browsing (
8ea57f9) - Harden media browse surfaces and torrent player responsiveness (#59) (
d1ff9c0) - Polish player controls and fix interaction bugs (#58) (
9871fff) - Fix Auto video framing and add crop presets (#57) (
bd8dde8) - Install bundled macOS app through Homebrew for v0.8.6 (
19ba4a2)
Internal (1 commit — tests, refactors, CI, docs)
- chore(release): prepare v0.8.7 (#93) (
a0c7de4)
Install: curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | sh
Verify a download against SHA256SUMS.txt below.
Full Changelog: v0.8.6...v0.8.7
v0.8.6
Highlights
- The Linux AppImage opens on Arch again. Packaging keeps the bundled
libtorrent runtime but uses the host's OpenSSL pair alongside host libcurl,
avoiding the older bundled OpenSSL symbol mismatch. Release verification
checks the extracted libraries and starts the packaged app. - First launch is optional and usable in short windows. A centered welcome
dialog offers keyless Movies & TV browsing or Home, with one optional starter
source install action; it stays reachable after a window resize. - Movies & TV is easier to browse. Poster cards remain readable instead of
collapsing into tiny columns, the icon toolbar stays aligned and scrolls on
narrow windows, and card actions and Details remain reachable while scrolling.
Source and More menus close after selecting a destination. - Universal results are denser without hiding actions. Long titles wrap,
torrent quality and seed counts appear once, trailers are grouped separately,
and the Play and Queue controls remain visible. Adding a torrent to the queue
no longer starts playback. - Deleting a playing torrent clears the player. Stopping the stream
cancels pending reads and clears its last frame before removing downloaded
files; the empty player offers a local file picker or universal search. - Windows playback controls fit scaled displays. The native titlebar
hitboxes follow DPI scaling, compact navigation stays accessible, and an
optional VLC handoff is available under Playback settings. - Source installation explains progress and failures. Its current stage,
final status, redacted logs, and recovery steps are visible in the catalog. - Cinemeta poster artwork loads from full image URLs. Movies & TV no
longer truncates long cover URLs, including those in Thor searches.
Changes
Features
- bring custom IPTV management to desktop (
8bbbdf6) - manage multiple custom IPTV sources (
8a930be) - complete Suwayomi server lifecycle (
8a91fb2) - complete debrid credential lifecycle (
86e0c6a) - expose explicit playback destinations (
9f05ae1) - retain ranked playback fallbacks (
b2e9f9a) - index and manage local libraries (
89bc9c6) - bring collections to desktop (
2541e65) - add reusable queue collections (
bb6999c) - persist movie preferences (
76a48ed) - unify direct media actions (
1119a59) - restore reading server sessions (
de78231) - persist and manage RSS sources (
d59fbaf) - harden accessible web reflow (
519607a) - enforce web performance budgets (
6c133c8) - persist Plex favorites (
3119ab9) - unify playable source details (
fd51fc9) - complete catalog item details (
31ea12a) - expand unified content details (
e3145b0) - unify self-hosted media details (
288fb92) - sync Plex ratings (
1741e07) - sync Plex watched state (
53c44e6) - add hierarchical Plex browsing (
49f7ad7) - sync Jellyfin user state from web (
37caa6c) - surface AniList authorization recovery (
949f721) - manage transfer history from web (
5abad7c) - add safe web download file actions (
e35f0c5) - bound web library rendering (
202c22d) - persist library view preferences (
0f14f1b) - synchronize web movie history removal (
366e91e) - sync verified movie history removal (
3046a39) - converge episode history sync (
e347620) - sync verified movie completion (
41ae0d8) - harden Trakt account recovery (
90d85ed) - add durable SIMKL watched sync (
cc40a37) - add durable AniList progress sync (
6fd39e2) - make Trakt history sync durable (
cab890e) - add executable plugin permission review (
21bfd21) - add web subtitle discovery controls (
f61a1e4) - add installed plugins to universal search (
32d2a74) - add Plex to universal search (
3537d29) - restore typed catalog search (
bfe62f8) - redesign TV episode browsing (
a2d38c8) - unify web and native media search (
374e920) - make web playback failures actionable (
d102538)
Fixes
- restore AppImage startup and polish browse UX (v0.8.6) (#55) (
9d5d0aa) - hold stall position on torrent EOF-reload, skip EOF-parked history saves (#53) (
73931eb) - keep self-hosted credentials out of URLs (
6560f04) - stabilize Plex web playback identity (
02b169b) - route Jellyfin cards by media type (
8ef5561) - bind AI subtitles to playback identity (
71078c7) - isolate resolver result consumers (
b214445) - bind episode picks to resolver generation (
7d2bd9b) - bound torrent detail resolution (
4f26359) - make cold queue playback deterministic (
874fff0) - make yt-dlp discovery race free (
9319f41) - supervise universal search fanout (
515a059) - bound playback helper probes (
70f1462) - make live stream resolution stale safe (
330537c) - close the activity flush wakeup race (
6eacb9a) - supervise playback enrichment workers (
e4549da) - bound plugin artwork transport (
70bdd96) - supervise shared artwork workers (
4737f83) - bound browser and comic image decoding (
1004abe) - bound all provider cover decoding (
a70f351) - preflight queue thumbnail decoding (
3ec8387) - bound and cancel torrent stream reads (
9955d04)
Performance
- instrument web responsiveness (
6b98a75) - paginate web library responses (
ad2575e) - cache TV detail library state (
a2f63c8) - sleep while python discovery is shared (
61ee5cb) - coalesce periodic resume persistence (
6d544a3) - persist resume state off the frame loop (
4bf2fb3) - issue new media before resume bookkeeping (
7f8fbe0) - keep preference writes off playback (
0253aaa) - enforce the global artwork fetch cap (
cc60366) - measure in-app playback from click (
cf9c465) - defer playback until prewarm inputs are ready (
8cbf247) - keep first playback action non-blocking (
9c95e56) - bound shared artwork decoding (
84b7d57)
Other
- Fix streamed-torrent teardown, small-screen playback and release packaging (
2f46b08) - Add Donate chip to top nav (shell wiring) (#52) (
2f68278) - Harden browse catalog, TV detail, and resolver sources (#51) (
10b0079) - Pin verified 0.8.5 packages (
a2f8970)
Internal (5 commits — tests, refactors, CI, docs)
- refactor: stabilize movie library identity (
d106cdf) - chore: ignore isolated build checks (
cb320b1) - docs: record TV detail quality gates (
2192a6f) - refactor: simplify TV library status control (
cd4e45f) - refactor: consolidate TV season controls (
fa5551d)
Install: curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | sh
Verify a download against SHA256SUMS.txt below.
Full Changelog: v0.8.5...v0.8.6
v0.8.5
Highlights
Releaser: Palash Debnath
- Files open like a media player should. Opal presents a finished first
frame instead of exposing the startup shell, overlaps safe initialization,
prepares libmpv early, and keeps local-file loading off unrelated database,
model and network work. Measured Windows ReleaseFast baselines are 171 ms
startup p95 and 121 ms local-video first-frame p95. - Now Playing is an immersive, responsive surface. Video occupies the full
client area while glass controls and navigation float above it, remain
legible over bright scenes, hide smoothly when idle, and avoid overlapping
close actions. Back, Settings, Close and track pickers respond on the first
click; outside clicks dismiss popovers without consuming the intended action. - Windows behavior is native again. The custom title bar exposes caption
hit testing, resize borders, maximize/restore behavior and Aero Snap while
preserving drag from safe background regions. File and magnet associations
now cover the common video, audio, playlist and torrent formats. - Playback choices survive the next file and restart. Aspect mode, speed,
hardware decoding, audio/subtitle language and track choices are restored
safely. Direct, playlist, queue and torrent playback have explicit ownership,
actionable pre-playback fallback, and honest hardware-decoder feedback. - The omnibox finally adapts to intent. Links and paths open, normal text
searches the visible source or universal catalog,?recalls local memory,
and>or a question invokes the assistant. Slow semantic recall runs in a
generation-safe worker instead of freezing the interface, and Browse uses a
compact grouped source menu. - Queues, torrents and self-hosted libraries recover cleanly. Queue order,
repeat/shuffle and cold-start actions are durable; torrent opens wait for the
engine without needing a second click and restart from privacy-safe swarm
identity plus bounded fast-resume data. Jellyfin, Plex and Audiobookshelf
regain authenticated resume, alternate-version recovery and non-blocking
progress reporting. - Credentials and helpers are safer. Windows secrets use current-user DPAPI
with legacy migration, credential-bearing playback URLs are scrubbed from
persistent identity, and yt-dlp/model downloads are explicit, HTTPS-only,
checksum-aware staged updates that cannot replace a working helper on a bad
download. - The release has measurable gates. Startup, playback, close and resource
probes are checked alongside Zig unit tests, web lifecycle tests and 442
whole-product feature checks using an isolated generated database fixture.
Changes
Features
- harden playback and content workflows (
2c3c8f3)
Fixes
- support libtorrent 2.0 checkpoints (
257e513)
Other
- Pin verified 0.8.1 packages (
48c5180)
Internal (1 commit — tests, refactors, CI, docs)
- chore(release): 0.8.5 (
4fcc68e)
Install: curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | sh
Verify a download against SHA256SUMS.txt below.
Full Changelog: v0.8.1...v0.8.5
v0.8.1
Highlights
- YouTube plays on Windows again, and picks the right stream. The bundled
yt-dlp path never reached mpv (a malformed option made mpv drop it), so
YouTube links failed unless a system yt-dlp happened to be on PATH. Fixed.
HDR uploads now play their SDR rendition — the correct picture on Opal's
8-bit render path, ~20% less bandwidth, and 4K60 at a steady 60 fps. - 4K HDR files play smoothly. Video is rendered on a per-player worker
thread and uploaded in place into a persistent texture, and HDR sources no
longer rebuild mpv's scaler every frame. A 4K Dolby Vision file that ran at
~4 fps now holds its native rate. - Works with Ubuntu 22.04's mpv 0.34. Playback no longer hangs on
"Opening stream" on libmpv older than 0.38; a rejected load is now reported
in the log and as a toast instead of silently. Minimum versions (libmpv,
SDL, glibc for the AppImage) are documented in the README. - Pair a phone with one scan. Settings › Web UI shows a QR code of the LAN
address (carrying the one-time setup code on first use) when the server is
bound to your LAN, plus a README walkthrough. opal <file-or-url>opens the file again on the desktop build.- Movies/TV catalog search is always visible, and "Find" is now "Search".
Changes
Other
- Cast mpv_client_api_version() to u32 for the loadfile shape check (
9527730) - Fix loadfile on mpv < 0.38 and add a phone-pairing QR to Settings (
6d8106e) - Make the feature suite green after the render-worker and transport changes (
f70a32f) - Make 4K HDR playback smooth on the software render path (
f08ad7b) - Fix YouTube loading on Windows and prefer SDR renditions (
76d9711) - Make Movies/TV catalog search always visible, rename Find to Search (
17c005c) - Local changes: http transport extraction, worker shutdown, player and service refactors (
8afd53b) - Pin verified 0.8.0 packages and record passing feature checks (
0f94a55)
Internal (1 commit — tests, refactors, CI, docs)
- chore(release): 0.8.1 (
80b344b)
Install: curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | sh
Verify a download against SHA256SUMS.txt below.
Full Changelog: v0.8.0...v0.8.1
v0.8.0
Highlights
- TV browsing fits small and short windows. Episode thumbnails, titles,
descriptions and controls adapt to available space, with a single page
scroller and a themed, scrollable season picker. Selecting a season dismisses
the menu; Retry can recover a failed season fetch. - Continue watching shows episodes, not raw filenames. Home offers one
landscape card per tracked show, episode artwork when available, and an exact
next-episode action. Keyless episode metadata works after restarting too. - Navigation is compact and search is unified. The source picker sits by
the logo, and one field handles questions, searches and pasted links. Narrow
windows retain navigation and wrap their controls. - Episode startup and tracking are more reliable. Playback enters its
loading state promptly, tries bounded fallback sources, selects the requested
torrent episode, and tracks actual viewing rather than counting seeks as
watched time. Large season libraries and specials retain their identities. - Restore your session with confirmation. Closing saves playback position
and episode identity; reopening asks before restoring playback. - Update checks and Linux packaging are hardened. Update work uses bounded,
cancellable processes and synchronized state; subprocesses inherit the
environment, and Linux.runpackages include required runtime resources.
Changes
Other
- Improve responsive TV browsing, episode continuity and update reliability (
13da8f2) - fix release workflow reruns (
8bfb6fd) - fix headless shutdown compilation (
82e9ccd)
Internal (2 commits — tests, refactors, CI, docs)
- chore(release): 0.8.0 (
a4f982e) - chore: pin Homebrew checksum for 0.7.0 (
e7bd106)
Install: curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | sh
Verify a download against SHA256SUMS.txt below.
Full Changelog: v0.7.0...v0.8.0
v0.7.0
Highlights
- Closing Opal is immediate and final, even during active playback. Native
window close,Ctrl+W, andCtrl+Qnow share one bounded teardown path;
playback stops before the surface disappears, raw SDL/Wayland close events
cannot leave a windowless stream behind, and stuck workers cannot keep the
process alive indefinitely. - Background work no longer races the UI during shutdown. Resolver, search,
poster, HTTP, and stream-proxy work receives cancellation before teardown,
UI refreshes carry the real window, and the worker supervisor drains owned
tasks before shared state is released. - Linux AppImages launch through an explicit runtime entry point. The
release pipeline now packages the expected AppRun launcher and validates the
resulting image, alongside the existing tarball, DEB, RPM, and.run
formats. - The keyless Movies & TV flow is documented end to end. A new guide shows
how Cinemeta browsing, search, posters, and TV season/episode navigation work
without a TMDB key, with clearer privacy and provider-boundary documentation.
Changes
Features
- add AppImage launch support and keyless guide (
eb1619b)
Other
- chore update test results (
414416c) - stop playback when closing the app (
d8a12cb) - fix keyboard and native window close responsiveness (
81cfeb2) - fix unresponsive app shutdown path (
6a09f51) - fix shutdown freezes and worker refresh races (
f0e6274)
Internal (2 commits — tests, refactors, CI, docs)
- chore(release): 0.7.0 (
b6ede5a) - chore(brew): pin the v0.6.6 artifact checksum (
3bfed7e)
Install: curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | sh
Verify a download against SHA256SUMS.txt below.
Full Changelog: v0.6.6...v0.7.0
v0.6.6
Highlights
- Movies and TV now work without a catalog API key. The built-in Cinemeta
feed supplies trending, popular, top-rated, genre-filtered and searched
cards, while TMDB remains an optional metadata upgrade rather than a setup
requirement. - TV cards open a real season and episode browser in keyless mode. Series
metadata, episode names, summaries, dates and thumbnails flow into the same
desktop and web drill-down used by TMDB-backed shows. - Poster loading is reliable again. Absolute Metahub artwork is accepted by
the guarded proxy, and WebP-only poster responses are requested through a
decoder-compatible JPEG endpoint instead of becoming permanent placeholders. - Browse behaves properly from phones to ultrawide desktops. Navigation no
longer disappears during resize, Movies & TV gains compact filters and live
search, cards adapt to available space, and the source menu follows the
active theme instead of opening a bright white popup. - The Web UI is safer under hostile and concurrent input. Text and HTML
attributes use separate encoders, session and API response boundaries are
hardened, and a real Chromium test proves provider markup cannot reach the
live DOM. - Background work has clearer ownership. Critical workers are supervised
through shutdown, remote writes release player state first, and Podcast and
Jellyfin readers publish immutable snapshots instead of racing live state. - Linux setup and display defaults are friendlier. The installer is
rootless by default, HiDPI scaling respects the whole panel, and font metrics
no longer clip titles on Linux. - Release and project pages are easier to trust and navigate. Download and
playback paths received additional validation, and the website now exposes
crawlable changelog, comparison and SEO pages.
Changes
Features
- site — add changelog and comparison pages, sharpen SEO and design (
3a06783) - harden remote playback and release paths (
c502de0) - site — add crawlable SEO pages and metadata checks (
8e5c420)
Fixes
- supervise all application worker lifetimes (
3dcac4e) - separate web text and attribute encoding (
6b31793) - isolate Jellyfin readers behind snapshots (
d6a7a5c) - hide unavailable browse connectors (
567d1dd) - finish lock-free remote response boundaries (
cc3ba74) - release player state before remote writes (
c9fa142) - make active-worker shutdown signal-safe (
9fb8763) - publish podcast and Jellyfin snapshots safely (
5cb96b9) - own critical background worker lifecycles (
407ddd9) - harden web sessions and concurrent API responses (
e57c422) - desktop — stabilize window identity and runtime cadence (
13de260) - security — single-source app identity, race-free media opens, Watching redesign (
b7eb374) - ci — harden cross-platform process and trust tests (
94df05e) - windows — hash plugin files with positional reads (
2aa42cc) - ui — default scale ignored the panel, so hi-DPI Linux rendered tiny (
469b179) - ui — make title metrics font-safe on Linux (
723b52c) - installer — make Linux installs rootless by default (
23a6378)
Performance
- harden render and background ingest paths (
bbfd83b)
Other
- fix poster decoding and themed source menu (
cc5a833) - fix keyless media browse and TV episodes (
cd6844b) - fix keyless catalog redirect handling (
6326c84) - fix responsive shell and add keyless catalog feeds (
8402622)
Internal (17 commits — tests, refactors, CI, docs)
- chore(release): 0.6.6 (
4940a9a) - ci: use dedicated Chrome headless shell (
0445ab8) - ci: install pinned Chrome artifact directly (
15d80f6) - ci: select available Chrome 151 build (
2114141) - ci: pin known-good Chrome DOM runtime (
1a15926) - ci: pin browser security test runtime (
e3270d9) - test: serve DOM fixture over loopback (
ebb9792) - test: isolate headless Chrome in CI (
9df81b6) - test: make CI gates reflect current boundaries (
d6e4015) - refactor: separate podcast service and presentation (
b36a260) - test: stress authenticated snapshots and SSE (
3bb847f) - test: exercise DOM hardening in Chromium (
cef775e) - test: align integration gates with hardened runtime (
98bd107) - test: avoid Windows positional I/O panic (
74055c7) - test: refresh feature-suite results (
f07c88f) - test(site): validate shared SEO architecture (
ee03076) - chore(brew): pin the v0.6.5 artifact checksum (
bea2ba7)
Install: curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | sh
Verify a download against SHA256SUMS.txt below.
Full Changelog: v0.6.5...v0.6.6
v0.6.5
Highlights
- Torrent search works from the desktop app again. Python's process pool
crashed when nova2 was launched through Zig's child runtime, so every
installed torrent source appeared to return zero results. Opal's bounded
search path now uses network threads, while the qBittorrent-compatible CLI
keeps its process pool. A dedicated CI job executes this exact Zig-to-Python
seam so it cannot silently regress. - Torrent files selected by hand start sooner and keep working. A chosen
episode now gets the same head-first priority as the automatic pick, old
buffer gates are released when switching files, and mpv no longer adds a
second three-second startup buffer on top of Opal's readiness gate. - Startup and shutdown are safer. Background services and process watchers
now have explicit lifetimes, responsive stop paths, and one owner for each
child-process handle instead of detached workers racing teardown. - Windows title-bar behaviour is native again. Double-click maximizes and
restores, maximize respects the current monitor's work area instead of
covering the taskbar, and normal PowerShell builds locate their MSYS2 shell
and toolchain without hand-editingPATH. - Windows releases can sign the whole payload. When Azure Artifact Signing
is enabled, the pipeline signs every executable and DLL, verifies that none
were missed, then signs the MSI itself—covering the modules Windows 11 Smart
App Control evaluates, not onlyopal.exe. - Opal Connect 0.4 has a real setup flow and a useful side panel. It finds
a local Opal, signs in or creates the first account without asking users to
find a token file, and adds live torrents, downloads, recent searches,
casting and watch-party controls, keyboard shortcuts, and the real Opal logo. - The new Opal website makes releases easier to install. The download flow
exposes every published format, detects the visitor's platform, retains
no-JavaScript links, and adds install help, screenshots, comparisons, search
metadata, and a proper project home at opal.palash.dev. - Browser transcoding no longer takes Opal down. ffmpeg's stdout now has one
close owner, eliminating the double-close that could panic the app or close
an unrelated client socket during "Play here".
Changes
Features
- windows — sign the whole release payload, not just opal.exe (
96ce9c4) - site — photographic bands, a real download flow, and a comparison matrix (
1485152) - site — opal.palash.dev — an Astro 7 + React landing page (
586c999) - extension — real logo, two-click setup, and the surfaces it was missing (
24a6dcf)
Fixes
- keep torrent search alive under Zig child runtime (
657a0ec) - harden startup shutdown and search workers (
cf7cfbf) - ci — the two Packaging tests that have been red on main (
33d61dc) - site — the star button links to the repo, not the stargazer list (
45ca5fa) - site — licence cells checked against each project's LICENSE file (
6526607) - torrents — a hand-picked file got no streaming window, and gates leaked (
5a10e9f) - windows — maximize covered the taskbar and double-click did nothing (
3ffb64a) - windows — zig build needed MSYS2 on PATH; now it finds it itself (
1985aea) - ci — read the smoke page into a file instead of piping it to grep (
88a299f) - transcode — stop double-closing the encoder's stdout (
800757a) - tests — the release-notes gate assumed history CI does not have (
0803a4d) - extension — the logo 404'd in the build; the icon now shows the connection (
8bb701b)
Other
- gitignore (
744f2cf)
Internal (8 commits — tests, refactors, CI, docs)
- chore(release): 0.6.5 (
1e21b4c) - test: follow joinable worker lifecycle (
b550e6a) - ci: fetch pinned DVUI from public upstream (
b2c9cf7) - ci: gate the torrent child-process seam (
08385f1) - docs(readme): link the site under the badges (
14d4461) - chore(git): ignore the Claude Code skills tooling (
30979ec) - docs(release): give every release highlights and a commit list (
a19192b) - chore(brew): point the formula at the v0.6.4 tarball (
0c6337a)
Install: curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | sh
Verify a download against SHA256SUMS.txt below.
Full Changelog: v0.6.4...v0.6.5
v0.6.4
Highlights
- Torrents play a second time. The metadata cache rebuilt the info dict on
write, which changed the info-hash, so every replay of an already-cached
torrent stalled at 0%. It now stores the original bencoded info dict
byte-for-byte. - An unlimited download rate means unlimited. The setting wrote
-1to
libtorrent, which reaches the bandwidth manager as a negative quota; and the
rate field mixed KB/s with bytes/s, so a4096typed in Settings became
4 KB/s. Both fixed, with the conversion behind a tested pure function. - "Play here" in the browser transcodes instead of refusing. MKV, AVI, TS
and H.265-in-MP4 releases now stream through ffmpeg as fragmented MP4.
Only what nothing can play (a disc image) is still turned away. - The Watching page got its Play and Remove buttons back. They had been
drawn past the bottom edge of their own card and clipped away — a card that
carries both a progress bar and an action row is now sized for both. - Remove watched items one at a time, from Watching and from the Home
"Jump back in" row. - Double-tap
Ffor real fullscreen. It used to expand the player inside
the window only; nothing had ever calledSDL_SetWindowFullscreen. - The releases calendar backfills yesterday by paging the EZTV API, and
buckets into three days instead of one. - Windows: the headless build compiles again.
Changes
Features
- web — "Play here" transcodes instead of refusing (
569f7db) - eztv — backfill yesterday by paging, and bucket into three days (
83db14b) - home — remove watched items one at a time (
d5f0095) - input — fullscreen needs a double-tap of F (
e9363db) - web — fold the Setup page; pct hid the difference between slow and dead (
d66bca3) - web — parity reaches 100%; lanIp never resolved outside a terminal (
e978709) - web — close five parity gaps; plugin secrets were sent in URLs and lost (
4fbfe3d) - web — desktop parity, in-browser playback, and access control (
3730729) - resolver — route results through a sink; warm the next episode (
ecef2f8) - sources — EZTV via its JSON API, sharing the Stremio IMDb lookup (
bbb03df) - library — remove items from Watching (
0b9806e) - browse — live search for Movies & TV (
5221ce5) - player — opt-in prefetch, audio passthrough and exclusive output (
56b8e80) - ui — command palette (Ctrl/Cmd+K), re-applied from the arch branch (
cfa7e36) - player — picture presets with HDR-aware Auto on the transport bar (
7c998fa) - scrape — carry POST through the anti-block path (
394e72b) - search — show size and swarm on result rows; pre-warm the scrape browser (
c78b51a) - ui — justify the window title — media name left, resource meters right (
4362d25) - sources — Prowlarr as its own source, therarbg failover (
071b389) - sources — live trackers, indexer failover, and a source upgrade path (
14bc6eb)
Fixes
- ui — the Watching page's Play and Remove controls had zero height (
3749b4a) - ui — fullscreen only expanded the player, never the window (
ab48305) - torrents — the metadata cache made a second play impossible (
38761d2) - windows — headless build did not compile; a label returned a dead stack slice (
57c56db) - torrents — proxy_url was a dead setting; first magnet after launch vanished (
302a1d3) - web — a magnet sent to /api/load went to mpv, so no torrent ever played (
b498c8b) - ui — settings labels named a path that does not exist on Windows (
2bf558f) - windows — config lived in two trees; route every path through configDir() (
8e0d82c) - ytdlp — "found" meant the file existed, not that it would run (
8ad220d) - windows — HOME is unset there, so 40 code paths silently did nothing (
25a6d3f) - dpi — the bypass proxy leaked one sidecar per restart, 57 of them (
96e3c07) - transcode,web — reap the encoder via pipe close; forms + console noise (
c8ec184) - web — repair broken page, add a JS syntax gate, silence favicon 401 (
30a8d36) - web — rank search results by seeds, not by which engine answered first (
f3b1a93) - ui,engines — two bugs found by driving the app as a user (
24a63e3) - torrents — the wall fallback and the stall watchdog were both off by default (
57047c7) - engines — eight engines hand-rolled their own fetch and bypassed everything (
3846724) - sources — retired sources stayed installed and live; verify Prowlarr for real (
728b62c) - engines — unbounded fetches hung the search; walls had no path at all (
5cc7ef0) - engines — retrieve_url never retried, so flaky hosts always read as dead (
f76f359) - engines — stray prints polluted the result stream; re-derive health table (
0ea138d) - engines — therarbg parser aborted on one bad magnet; drop orphan piratebay (
2273a05) - ci — smoke-windows was dying on a bare
powershell(88b4dbb) - sources — drop two retired Stremio addons, correct the TorrentFunk domain (
7a9e075) - ci — repair the smoke step, and prove the Windows AVX-512 hit was a misdecode (
89de9ae)
Internal (9 commits — tests, refactors, CI, docs)
- chore(release): 0.6.4 (
3731c8c) - test(build): fail the gate on AI attribution in a commit (
a5545df) - test(parity): the desktop⇄web number was hand-maintained, so it read high (
4245695) - test(web): verify torrent per-file streaming end to end (
d105d62) - refactor(resolver): extract resolveImdbId so EZTV can share it (
c9d7994) - ci: smoke-windows is blocking now that it passes (
e680f6f) - ci(windows): assert the CIM kill from a native pwsh step (
fedb3c9) - ci: keep the smoke trace on, and stop guessing where powershell lives (
0ce173f) - ci: trace the smoke step and simplify DLL staging (
8f7b187)
Install: curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | sh
Verify a download against SHA256SUMS.txt below.
Full Changelog: v0.6.3...v0.6.4