Skip to content

Releases: debpalash/Opal

v0.8.8

Choose a tag to compare

@github-actions github-actions released this 30 Sep 01:27
70b11ea

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

Choose a tag to compare

@github-actions github-actions released this 27 Sep 13:48
a0c7de4

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.zst alongside 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

Choose a tag to compare

@github-actions github-actions released this 24 Sep 20:42
2f46b08

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

Choose a tag to compare

@github-actions github-actions released this 14 Sep 07:32

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

Choose a tag to compare

@github-actions github-actions released this 10 Sep 19:17

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

Choose a tag to compare

@github-actions github-actions released this 05 Sep 16:46

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 .run packages 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

Choose a tag to compare

@github-actions github-actions released this 05 Sep 04:56

Highlights

  • Closing Opal is immediate and final, even during active playback. Native
    window close, Ctrl+W, and Ctrl+Q now 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

Choose a tag to compare

@github-actions github-actions released this 28 Aug 05:14

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

Choose a tag to compare

@github-actions github-actions released this 11 Aug 20:35

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-editing PATH.
  • 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 only opal.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

Choose a tag to compare

@github-actions github-actions released this 06 Aug 08:03

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 -1 to
    libtorrent, which reaches the bandwidth manager as a negative quota; and the
    rate field mixed KB/s with bytes/s, so a 4096 typed 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 F for real fullscreen. It used to expand the player inside
    the window only; nothing had ever called SDL_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