Download Opal → Watch the demos Website ↗
A free, open-source media player and browser. No telemetry. No subscription.
macOS · Linux · Windows alpha / Features · Developers · Support
One command detects your platform and verifies the download. Linux installs to
~/.local without sudo.
curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | shmacOS — Apple silicon, Homebrew, Intel builds
Open the .dmg and drag Opal to Applications, or install the self-contained app:
brew install debpalash/tap/opalFor an unnotarized DMG showing “damaged,” use the installer or run:
sudo xattr -cr /Applications/Opal.appIntel Macs require a source build with HOMEBREW_PREFIX=/usr/local.
Linux — AppImage, Debian, RPM, Arch
Standard builds require glibc 2.38+. Ubuntu 20.04/22.04, Debian 12, and Mint 21
should use _compat_amd64.deb (glibc 2.31+); the installer selects it automatically.
Compatibility builds use software decoding and X11/XWayland.
Compatibility details.
AppImage also needs system OpenSSL 3 (libssl.so.3, libcrypto.so.3):
chmod +x Opal-*.AppImage
./Opal-*.AppImageDebian / Ubuntu: use _compat_amd64.deb on older hosts. Standard packages
need libmpv2 and libtorrent-rasterbar2.0 (Ubuntu 24.04+ / Debian 13+).
sudo apt install ./opal_<version>_amd64.debFedora:
sudo dnf install ./opal-*.x86_64.rpmopenSUSE:
sudo zypper install ./opal-*.x86_64.rpmArch / Omarchy: the v0.8.8 AUR binary links libtorrent 2.0. Use AppImage if your system ships 2.1. AUR package.
yay -S opal-media-player-bin
# or: paru -S opal-media-player-binWithout a helper:
git clone https://aur.archlinux.org/opal-media-player-bin.git
cd opal-media-player-bin && makepkg -siRelease packages also install with sudo pacman -U ./opal-*-x86_64.pkg.tar.zst.
Windows — x64 alpha
Install the .msi or extract the portable .zip from Releases.
Expect bugs and SmartScreen prompts. Report an issue.
First launch and updates
Browse Movies & TV without a key, or choose Home to open a file. Install search sources in Settings → General → Install source plugins. A TMDB v4 token adds richer metadata. AI and voice models are opt-in. Reopen onboarding in Settings → About.
Update: rerun the installer with sh -s -- update. Set OPAL_VERSION=vX.Y.Z
to pin a release. Update AUR packages with yay -Syu or paru -Syu.
System-wide Linux install requires root or sudo:
curl -fsSL https://raw.githubusercontent.com/debpalash/Opal/main/scripts/install.sh | OPAL_SYSTEM=1 shBrowse movies and TV, switch sources, and find your next watch.
Stream a torrent while it downloads
Play a magnet directly. Downloads follow playback; available peers are required.
Sintel, © Blender Foundation, CC BY 3.0.
Ask your local AI what to watch
Get playable recommendations from an optional on-device model. No API key needed.
Explore search and playback
Search enabled sources for files, streams, reading results, and title details.
Adjust quality, audio, subtitles, and translation while watching.
Big Buck Bunny, © Blender Foundation, CC BY 3.0.
Recordings predate the toolbar shown in the screenshots. Reduced-motion settings show still previews.
- Watch: movies, TV, anime, YouTube, and ~40,000 live TV / IPTV channels.
- Connect: browse your Jellyfin and Plex servers.
- Read: manga through managed Suwayomi and Mihon / Tachiyomi extensions.
- Play together: casting, watch parties, subtitles, translation, and SponsorBlock.
- Keep your place: local history, session restore, and incognito.
- Add what you need: source plugins, RSS, themes, and optional AI, voice, and OCR.
Sources start disabled; install the ones you want. Source coverage · Roadmap.
Playback tips and temporary torrents
Search works from any page; compact windows also offer it under More. Hover toolbar icons for labels, or scroll the toolbar in narrow windows. Click a result or Play to watch; + queues a torrent and Details opens title info. × on Now Playing stops playback. Find controls in More → Playback options.
Source installation errors include recovery steps in redacted Logs.
For temporary torrents, enable Settings → Network → Stream torrents in memory. Choose 128, 256 (default), or 512 MiB per new torrent. Seeking may redownload pieces; closing releases the buffer. Existing transfers keep their storage mode. Decoder memory is extra, and the OS may swap RAM to disk.
Opal Connect for Chrome, Edge, and Firefox sends videos to Opal, adds reading sources, and controls playback from a side panel.
Install the extension → · Download builds
From your phone: enable Settings → Web UI, set Network to LAN,
then scan the QR code. It includes a setup code on first use and opens
http://<your-pc-ip>:41595. Home-screen installation requires HTTPS.
Phone setup guide.
Keyboard shortcuts
| Action | Key | Action | Key |
|---|---|---|---|
| Search | S | Browser | B |
| Library | D | History | H |
| Fullscreen | F | Playlist | P |
| Grid | G | Fit / crop | Z |
| Open file | ⌘O | Settings | ⌘, |
| Back | Esc | All shortcuts | ⇧I |
Zig 0.16.x · dvui · mpv. One native binary, shared application state, and a UI that repaints on change. Architecture · Contributing · CI.
Build from source
Use Zig 0.16.x; 0.17 requires a migration. On macOS:
brew install mpv sqlite sdl2 libtorrent-rasterbar
# Install Zig 0.16.x separately if your package manager offers a newer version.
git clone https://github.com/debpalash/Opal.git
cd Opal
zig build runLinux / Wayland: run ./scripts/install-deps.sh, then make run for system SDL2.
Minimums: libmpv 0.34 (0.38+ recommended), libtorrent-rasterbar 2.0, and
SDL 2.0.22. Ubuntu 20.04 needs newer mpv and libtorrent than its stock packages.
macOS 14: if Homebrew cannot provide FFmpeg/mpv, install
sqlite sdl2 libtorrent-rasterbar libass libplacebo meson ninja pkgconf, then run
./scripts/install-macos-ffmpeg.sh and ./scripts/install-macos-mpv.sh.
These target macOS 13+. HOMEBREW_PREFIX defaults to /opt/homebrew.
Optional: ONNX Runtime with zig build -Docr=true for OCR;
FFmpeg and whisper-cpp for voice.
Development and tests
| Command | Purpose |
|---|---|
./dev.sh |
Hot reload; -r for ReleaseFast |
just hot |
Native incremental rebuilds |
just release / just app |
Release binary / macOS bundle |
zig build test |
Zig unit tests |
just test-all |
Full feature suite |
Both test suites must have 0 failures before committing. Optional-component skips are allowed. Include the tally in your PR. Contribution guide.
Source map and local data
src/
├── main.zig # app entry and frame loop
├── core/ # state, config, storage, I/O
├── player/ # mpv, playlists, subtitles
├── services/ # search, AI, torrents, remote API
└── ui/ # native dvui interface
web/ # companion web UI
extension/ # Opal Connect
Config, tokens (0600), history, and AI memory live in ~/.config/opal/.
Caches use ~/.cache/opal/; downloads default to ~/Downloads/opal.
Plugins live in ~/.config/opal/plugins/<name>/, with manifest.json and
JSON-emitting search/resolve executables. Lua is sandboxed; native binaries
are not. Install trusted plugins.
Ko-fi · PayPal · Star the repo · Report a bug · Discussions.
GPL-3.0. License · Dependency notices. Opal connects to sources you configure; it does not host or distribute media. Only access content you have the right to use. BitTorrent shares your IP with peers. Content policy · Privacy · Rights-holder contact. Provided as is, without warranty.


