A cross-platform media client for Plex, Jellyfin, and Emby, maintained as a fork of Plezy.
PlezyNG is a downstream fork for feature requests that Plezy upstream has declined, left open, or not yet shipped. The table below maps those upstream gaps to the corresponding downstream implementation.
See Files, books and listening for standard/cloud sources, readers and offline behavior, and Public-library setup for the staged OverDrive integration.
The capability and qualification ledger tracks implementation evidence, release status, platform limits and remaining gates. Code being present does not imply device qualification or a published download.
The debrid, Stremio and remote-streaming guide describes the implemented providers, shared playback and queue flows, architecture, native P2P status, and remaining validation limits.
The Discord client and PiP feasibility plan preserves an optional future design, its research, architecture, and validation gates. It is deferred; no client implementation or delivery commitment is implied.
PlezyNG has developed genuine Profile 7 FEL reconstruction alongside native and compatibility playback. The isolated Linux engine has rendered the FEL mark in a real P7 sample through standalone mpv and embedded libmpv; full app playback and independent reference-pixel accuracy still need qualification. Linux users can opt in under Settings → Playback, with a separate compatibility fallback and video experiment logging switch. A separate engine build is required.
An experimental Android AAR now passes a synthetic FEL-on versus explicit
EL-dropped pixel comparison through mpv's real gpu-next Surface output on an
API 36 x86_64 emulator.
The repository also includes a pinned Apple dual-layer experiment host for macOS/iOS/tvOS, an offline FEL-to-HDR/SDR companion pipeline, and platform testing instructions. These are experimental paths, not a claim of universal or certified Dolby Vision support. P7→P8.1 compatibility discards EL and is labelled separately. Cross-platform playback and native Dolby Vision output are qualified separately; native Dolby Vision signaling depends on the platform and connected display path. See the buildout, setup and Luna handoff and Linux engine evidence.
PlezyNG builds on upstream Plezy with a broad set of features for Plex, Jellyfin, and Emby, wherever each server's APIs allow. The table below highlights what's been delivered, links related upstream work for context, and notes platform or server limitations.
| Area | Related upstream work | PlezyNG status |
|---|---|---|
| Downloads | Converted download quality; per-rule quality; auto-download Continue Watching items and remove them when they leave the shelf (#1145, #1413, #1847, #1978, #2181, #2206) | Implemented for Plex, Jellyfin, and Emby |
| Downloads | Local Plex connections (#1447/#2248); download size and storage usage (#2376); manual sync and random episode selection (#1197, #1199) | Implemented in PlezyNG |
| Downloads | Playlist downloads and watched-item cleanup (#1721, #2600, #1413, #2181); orphan cleanup | Playlist downloads and watched-item cleanup are implemented. The Downloads screen can review and remove orphaned tagged files in the default app-managed folders; custom/SAF roots, legacy files, shared artwork, and iOS Documents are left untouched. |
| Profiles and privacy | PIN-gate download deletion, settings, and Explore; hide Explore per profile (#1924, #2514) | Local profile PIN gates Settings, download deletion, and entry to Explore; Explore can also be hidden per profile. Plex Home PINs remain server-owned. |
| Audio and subtitles | Remember choices per show; choose tracks before playback; always-on subtitles and preferred-language fetching; per-item sync offsets (#84, #1758, #1956, #2116, #2182, #2346, #2382, #2792) | Per-show memory, optional pre-play selection, device-local preferred-language selection and opt-in provider downloads, and scoped sync offsets are implemented across Plex, Jellyfin, and Emby; explicit server-selected tracks, account Off, and local picks remain authoritative |
| Files and books | Standalone file sources, metadata, subtitles, ebooks and audiobooks | SMB2/3, optional encrypted NFSv3 RPC-with-TLS, FTP-family, SFTP, DLNA, Komga, WebDAV, S3, OPDS, cloud drives and Audiobookshelf; local Kodi/Jellyfin NFO/posters, confidence-gated Trakt metadata/cast/artwork/trailers, and OpenSubtitles search (including SMB; file-hash matching when an exact local or cached copy is available); EPUB/PDF/CBZ, multipart audiobook playback and progress sync through app-owned state files. Cloud sync never uploads or edits playback media. Availability varies by platform; see the setup guide for limits and security. |
| Universal media tools | Direct media URLs, radio playlists, local files, capture, sharing, extensions, Wi-Fi transfer, conversion, recording and picture controls | Open media handles session-only HTTP(S)/MPV streams, M3U/PLS/HLS playlists, temporary file and desktop folder queues, and supported ISO/disc inputs; the active source player offers queue browsing, upcoming-file shuffle, repeat, and item selection in one adaptive sheet. Eligible desktop queues can be saved as sibling-relative M3U files in current playback order. MPV exposes direct-input File Info and edition/disc-title choices when available. Safe stream favorites are profile-local. Desktop tools add screen/camera recording and live preview, temporary private-LAN HLS sharing, declarative HTTPS search extensions, plezyctl (Python 3.10+), FFmpeg conversion and MPV live-stream recording. See the Open media guide and VLC feature comparison for privacy and platform limits. |
| Cloud and add-on streaming | — | Real-Debrid/AllDebrid QR or PIN connection, Premiumize/TorBox API-key validation, on-demand cloud-file browsing through Files and books, cached cloud-video Search and Home posters, Stremio QR account linking with a selectable add-on import preview, and manual HTTPS add-on setup. Supported add-on catalogs appear in Explore; stream options open from existing title details. Matched server items use the shared video player and queue, with resume updates reconciled through the local watch queue. Credentials are encrypted and profile-scoped. Native peer-to-peer playback and canonical cloud/server library-card merging are implemented; live provider and packaged-device qualification remain open. Active server-session progress reporting remains incomplete. See the connected streaming guide. |
| Subtitle controls | Live styling preview (#2347); in-player size and position controls (#95, #689, #2174); load a local subtitle file (#1431) | Supported paths now include local import (including bounded ZIP), OpenSubtitles text previews, styling, exact and cue-based sync, secondary delay, drift preview and undo, cue copy/navigation/replay, and corrected text export; Android, Tizen and webOS add only their documented native or overlay formats. Automatic audio sync, piecewise repair, subtitle translation and ASR remain open. |
| Playback | Swipe-to-seek (#2601), frame stepping (#1584), subtitle-delay hotkeys (#2824), remembered version across episodes (#2563), video playlist repeat (#1757/#1985) | Implemented in PlezyNG |
| Playback | Plex cinema pre-rolls (#970/#2483); random local pre-rolls (#2271); theme music (#791/#2170/#2596) | Configured cinema intros work on Plex, Jellyfin, and Emby; local pre-rolls, detail-page theme songs, and home spotlight music are implemented |
| Playback | Background video/audio-only mode (#367), mpv equalizer (#2292), local/remote quality presets (#2064), opt-in TheIntroDB fallback (#389, #1110, #1886) | Optional audio-only background playback is implemented on handheld Android and iOS; Android uses the OS media playback service. A ten-band device-local equalizer plus MPV stereo widening, room ambience, and pitch shift are available where the build and track support them; opt-in intro fallback is implemented. |
| Browsing | Director links (#2762), library item counts (#1516), Watchlist filters (#2725), MDBList Explore lists (#2740), Seerr search results (#2811) | Implemented in PlezyNG |
| Browsing | Search by actor or director (#1517, #2368); random movie or library shuffle (#1561, #2741, #2757); show end time on detail pages (#2671) | People search, random movie selection, and shuffled playback of movie and TV libraries are implemented across connected servers; detail-page finish time is shown on media details |
| Home screen | Configurable rows, merged library and collection rows, organizer controls, and Plex account layout sync (#1652/#2203) | Implemented; Plex account sync applies to Plex profiles. Custom rows can combine selected libraries across connected servers |
| Home screen | Separate Next Up; hide empty libraries or backdrop art; Continue Watching row sizing (#2498, #2690, #2701, #2723, #2784) | Continue Watching and Next Up now have separate Home rows and independent visibility/order; empty-library filtering, backdrop visibility, and row sizing are implemented. The legacy hero banner visibility setting and TV clock already exist. |
| Servers and links | Preferred server (#591, #1529, #2720); plezy://watch links (#2681); return from external players with synced progress (#2738) |
Preferred server is stored per profile and moves first in aggregate queries across Plex, Jellyfin, and Emby; watch links and external-player return sync are implemented |
| Live TV | Timeshift timeline (#2300) | Plex implementation is in the fork; Jellyfin/Emby DVR-window support remains under investigation because their public playback APIs do not expose the tuner's seekable capture window |
| Integrations | Google Cast (#126); new-episode notifications (#1146); content screensaver (#401) | Google Cast handoff is implemented on Android and iOS through the default media receiver, subject to receiver codec/container support and server reachability. Profile-scoped episode alerts poll connected Plex, Jellyfin, and Emby libraries while the app is foregrounded on Android/iOS; the screensaver rotates artwork from selected connected libraries after an idle timeout. |
| Automation | Home Assistant control and Android automation intents (#823, #1996) | Android ACTION_VIEW links can open cross-server plezy://watch media, select an existing profile with plezy://profile?id=…, and control the active video session with `plezy://control?command=play |
| Settings and diagnostics | Save logs to a file (#2496); cloud settings backup (#1795) | Log export is implemented; cloud settings backup uploads and restores only the portable settings JSON through an HTTPS WebDAV file endpoint. Server credentials, playback history and media files stay on their existing paths. |
This table is a snapshot of downstream work and its current limits. The linked upstream requests provide context for the gap PlezyNG addresses; equivalent upstream implementations can replace the corresponding downstream code when their behavior and server coverage match.
Website · Upstream Plezy · PlezyNG issues · Download · Contributing · License
Published PlezyNG downloads appear on the GitHub Releases page. The 2.24.1 build is currently a draft, so there is no public “latest” download yet. Mobile and TV packages are listed when a release is published.
| Platform | Download |
|---|---|
| Desktop and mobile | Download links are added after the corresponding release is published. |
| webOS TV | Experimental ARMv7 IPK; one LG C6 running webOS 26 has been tested. LG's native Flutter floor is webOS 26 Re:New , and older firmware or other models are not qualified. No webOS package is published yet; see the compatibility matrix and port status |
| Samsung Tizen TV | Experimental ARM TPK builds for Tizen 6–9, with a prebuilt tester handoff/re-signing path. TV qualification and the 2026/Tizen 10 target remain pending. See the research, build guide and rollout plan. |
Install with a package manager
The snapetech-plezyng Cask is being prepared. It will be installable after a signed and notarized macOS release is published and the generated Cask is added to this repository.
# After the Cask is published in this tap
brew tap snapetech-org/PlezyNG https://github.com/snapetech-org/PlezyNG
brew install --cask snapetech-plezyngInstall Flatpak with your distribution's package manager, download the bundle for your architecture above, then run:
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user flathub org.freedesktop.Platform//25.08
flatpak install --user ./plezy-linux-x64.flatpak
flatpak run org.snapetech.plezyngOn arm64, install plezy-linux-arm64.flatpak.
Sandbox, playback, and folder access
- Not on Flathub — the remote supplies the Freedesktop runtime only.
- Video playback needs a Wayland session; a pure X11 session shows the interface but cannot create the video plane.
- No host or home filesystem access; app data lives in
~/.var/app/com.edde746.plezy/. Add host folders through the desktop file chooser portal, and keep download folders writable. - Network, display, audio, and device access are enabled.
--device=all(Flatpak 1.14 compatibility) exposes more than GPUs and controllers; session-bus access stays filtered.
The following distribution packages are for upstream Plezy, not this PlezyNG fork. Use the PlezyNG release bundles above for the features documented here.
sudo pacman -S plezyInstallation instructions · Community repository by @aldobarr.
Community package maintained by @mio-19 and @MiniHarinn.
sudo moss pad plezyPlezyNG's Google Play closed test is being prepared. Once the test release is published, invited testers can opt in at the PlezyNG Google Play test page. The link is inactive until then, and only accounts added to the test can join. Google Play requires at least 12 testers to stay opted in continuously for 14 days before production access.
- Libraries, collections, and playlists — video and audio
- Discover hub — Continue Watching, Next Up, trending, and recommendations
- Configurable Home rows: merge Recently Added / Recently Released across whichever libraries you pick, or a collections row scoped to specific libraries or collections
- Hide Home backdrop artwork and choose compact, standard, or large Continue Watching cards
- Cross-server search across connected Plex, Jellyfin, and Emby libraries, including actors and directors
- Filtering, sorting, and alphabetical jump navigation
- Folder browsing and folder playback — home-video libraries open in folder view
- Resolution, HDR/Dolby Vision, and audio-format badges on cards and detail pages
- Favorites and unwatched library filters1
- Extras — trailers, deleted scenes, behind-the-scenes
- Explore tab — watchlist, trending, popular, and recommendation rows from Plex Discover2, Trakt, MyAnimeList, AniList, Simkl, and Seerr3
- Search any connected catalog source
- Catalog titles matched back to your own libraries by external ID
- Seerr — request movies and shows with per-season, 4K, and advanced destination options, and see request status inline
- Watchlist sync — add and remove titles on Plex, Trakt, MyAnimeList, AniList, and Simkl from anywhere in the app
- Wide codec support (HEVC, AV1, VP9, and more)
- HDR and Dolby Vision4
- Direct play, or transcode presets from 240p/320 kbps to 1080p/20 Mbps
- Multi-version switching with per-version file details
- Full ASS/SSA subtitles with customizable styling
- Optional TheIntroDB intro timings when Plex, Jellyfin, or Emby has no intro marker; disabled by default
- Online subtitle search & download2
- Audio and subtitle track selection with server-provided defaults
- MPV alternate video-track selection when a source exposes multiple video streams
- Progress sync and resume
- Auto-play next episode with skip intro / skip credits
- Optional audio-only continuation when the app backgrounds on Android and iOS
- Chapter navigation with thumbnail scrub previews
- Playback speed from 0.25x to 8x, audio sync offset, sleep timer (fixed durations or end of video)
- Video zoom 50-200% with pinch, presets, and hotkeys
- Audio passthrough5, output channel limit (5.1 or stereo, with center-channel boost), and loudness normalization
- Ten-band device-local equalizer plus MPV stereo widening, room ambience and pitch shift; active filters decode audio and turn passthrough off
- Named device-local playback bookmarks for server media and Open media audio/video, plus temporary MPV A/B segment looping in existing playback controls
- File Info sheet — every version, file, and stream the server reports
- Ambient lighting and GLSL shader presets6
- Picture-in-Picture7
- Refresh-rate matching8
- Motion & clarity — motion presets, temporal blending, motion-compensated frame generation, OLED and sports profiles, generated-rate and search controls, desktop player-bar toggle with hold-to-open presets, mobile Video settings access, live A/B comparison, and scoped preferences6. See the Motion & clarity guide.
- External player launch (VLC, MX Player, etc.) with progress sync back9
- Open media — session-only HTTP(S) streams, HLS and M3U/PLS playlists (including safe same-folder local entries), profile-local safe favorites, temporary local file and desktop folder queues, desktop same-folder M3U export, direct MPV File Info, and edition/disc-title choices when exposed by the input
- Advanced RTSP/RTMP/RTMPS/UDP/RTP inputs, opt-in unencrypted FTP streams, optical-disc/ISO playback, and Wi-Fi file transfer on supported builds
- MPV picture adjustments and optional 360° flat view; desktop MPV live-stream recording
- Desktop screen/camera recording with optional audio or live preview in the MPV player, plus temporary HLS sharing over a private IPv4 network
- Data-only HTTPS search extensions and the
tools/plezyctlCLI, with results handed to the existing Open media form - Desktop local conversion/remux to MP4/MKV, M4A, MP3, FLAC, WAV, Ogg Opus, or WebM when the user-installed FFmpeg has the required encoders and output containers
- Direct HTTP(S) playback uses a session-owned loopback gateway; recognized credential/signature parameters cannot be saved. Platform boundaries and transfer limits are in the Open media guide.
- Music libraries — artist, album, and track browsing with square artwork
- Album and artist screens with play, shuffle, and Instant Mix
- Gapless playback with a full play queue — reorder, remove, play next, add to queue
- Now Playing with synced lyrics10, persistent mini-player, and sleep timer
- Accessible visualizer that follows Plex analysis or optional live audio stats on compatible MPV builds
- Background playback with lock-screen, media-key, and notification controls11
- Offline playback of downloaded albums and tracks
- Streaming quality presets — Original, 320, 192, or 128 kbps
- Live TV channel browsing, tuning, and favorites
- EPG guide with What's On and per-show schedules
- DVR recording rules, scheduled recordings, and a rememberable recording target library2
- Multi-server Live TV support where available
- Download movies, shows, and music for offline playback12
- Background queue with pause / resume
- Sync rules for automatic downloads, with per-show "Include Specials"
- Per-rule download quality, plus automatic Continue Watching downloads with cleanup when an item leaves the shelf
- Converted video downloads for Plex, Jellyfin, and Emby; progressive server transcodes may restart after an interrupted transfer
- Optional download-quality prompt per item, quality per sync rule, and Continue Watching download rules with shelf cleanup
- Offline browsing with watch state sync-back on reconnect
- Local profile PIN gates for Settings and download deletion; per-profile Explore visibility
- Random movie picker, end-time estimate on detail pages, hide-empty-library preference, and diagnostic log export
- Rooms on Open Watch Party — share a six-character code; friends join from Plezy or another Open Watch Party app
- Everyone plays their own copy from their own server — Plex, Jellyfin, or Emby — matched by catalogue IDs, with a picker when several copies fit
- Synchronized play / pause / seek, host or shared control, room lock, and host handoff
- Public relays by default, or point Plezy at your own self-hosted relay
- Discord Rich Presence13
- Trakt, MyAnimeList, AniList, and Simkl — ratings, watched sync, and real-time scrobbling14
- Scores from connected trackers on detail pages — Trakt, Simkl, MyAnimeList, and AniList, plus Rotten Tomatoes, Metacritic, Letterboxd, IMDb, and TMDB through MDBList
- Plezy Remote — control desktop and TV from mobile
- Official storefront and rental handoffs, gated Watchmode availability rows, an iOS-only Apple MusicKit pilot behind a build flag, Google Books public catalog search, OpenSubsonic music servers, and podcast RSS/Atom subscriptions
- Watch Next row and tvOS Top Shelf15
- Android automation links for media launch, active-video controls, and profile selection
plezy://links to open a profile, play a title, or tune a channel from Home Assistant, launchers, or an NFC tag; any movie, show, or episode menu shows its link16
- Desktop, mobile, and TV — full D-pad, keyboard, and gamepad support
- Multiple servers at once — Plex, Jellyfin, and Emby side by side
- Profiles with per-profile downloads, watch state, and settings; Plex Home switching with PIN
- Jellyfin and Emby local-server discovery and multiple URLs per server; Quick Connect sign-in17
- TV layout options — corner spotlight backdrop, full-card artwork, and Force TV mode on desktop
- Customizable keyboard shortcuts13
- Metadata and artwork editing
- Settings import/export
- Localized across 37 locale choices
PlezyNG accepts both plezy:// and plezxyng:// schemes; links shown by the app continue using plezy:// for compatibility. Use either scheme with the hosts and parameters below. Links start Plezy from outside the app. Any link may add profile=<profile>: a profile id, a Plex Home user UUID, or a display name (ignoring case; it must match one profile). Plezy switches to that profile first, and a protected profile still asks for its PIN. A link replaces whatever is playing.
| Link | Does |
|---|---|
plezy://open |
Opens Plezy |
plezy://play?server=<server>&id=<item> |
Plays one item on one server, any backend |
plezy://play?type=movie|show&tmdb=<n> |
Plays a title from whichever server has it. Use tmdb, tvdb, imdb=tt<n>, or plex=<hash> (the Plex GUID without plex://movie/) |
plezy://live?channel=<channel> |
Tunes a Live TV channel by key, number, or call sign. Optional server=<server> and start=beginning|live |
For a show, mode=next (the default) plays the next episode to watch, and mode=shuffle plays the show shuffled. The menu of any movie, show, or episode has Show link, and each profile's menu in Switch Profile has Show profile link. Both show the link as text and a QR code.
# Android / Android TV, over adb (Home Assistant: remote.turn_on with activity: plezy://...)
adb shell am start -a android.intent.action.VIEW -d "plezy://play?type=show\&tvdb=81189\&profile=Kids"
# macOS
open "plezy://play?type=movie&tmdb=603"On iOS, use the Open URLs action in Shortcuts.
- Flutter SDK 3.47.0
- A Plex account, or a Jellyfin or Emby server with user credentials
git clone https://github.com/snapetech-org/PlezyNG.git
cd PlezyNG
flutter pub get
scripts/codegen.sh
flutter runCode generation
After modifying model classes or other generated sources:
scripts/codegen.shAfter modifying translations:
dart run slangPackaging a Flatpak bundle
Packages an already fully resolved Linux release bundle — pinned libmpv and bundled libraries included, not a Flathub source-build manifest. Run it on Linux, on the same architecture as the bundle, after following the bundle preparation steps in the Linux release workflow: flutter build linux alone does not produce all the required bundled libraries.
Install the packaging tools (Debian/Ubuntu shown) plus the native-architecture SDK and runtime:
sudo apt-get update
sudo apt-get install -y flatpak flatpak-builder imagemagick
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user flathub org.freedesktop.Platform//25.08 org.freedesktop.Sdk//25.08
BUNDLE_DIR=build/linux/x64/release/bundle
python3 linux/packaging/build-flatpak.py --bundle "$BUNDLE_DIR" --arch x64 --output "$PWD"That writes plezy-linux-x64.flatpak, installable with the Flatpak commands above; on arm64, use the prepared arm64 bundle directory and --arch arm64. Package from the checkout matching the bundle, since the version comes from pubspec.yaml.
Cross-architecture packaging needs native Flatpak tools, a registered binfmt interpreter, and the target SDK/runtime installed with flatpak install --user --arch=x86_64 (or aarch64) — never run Flatpak's namespace tools under emulation. Pass --arch x64 or --arch arm64 to the checker and the matching Flatpak architecture to flatpak run --arch=....
Check the installed package against the runtime (not just the SDK), then launch it on a Wayland desktop and exercise streaming, audio, downloads/offline playback, and file chooser portals:
python3 linux/packaging/check-flatpak.pyThe check fails on a non-executable entry point or an unresolved bundled ELF dependency. A container without a GPU can use flatpak run --env=GALLIUM_DRIVER=softpipe org.snapetech.plezyng for software-rendered verification; this is not a hardware-decoding or HDR test.
Local checks
scripts/ci_checks.shTo install the same pre-commit checks locally:
scripts/setup_hooks.shEnd-to-end tests (Android emulator plus a Dockerized Jellyfin fixture):
python3 scripts/maestro/run_maestro.py basicSee CONTRIBUTING.md for development workflow, formatting, tests, and translation guidelines.
Plezy is licensed under GPL-3.0.
- Built with Flutter
- Supports Plex Media Server, Jellyfin, and Emby
- Playback powered by mpv via our mpv-build pipeline (started as a fork of MPVKit; on Android through its mpv-android library, whose Kotlin/JNI glue descends from libmpv-android), Android ExoPlayer, and libass-android
Footnotes
-
Jellyfin and Emby only. ↩
-
Requires connecting the service under Settings > Services. ↩
-
In-app HDR toggle on Windows, macOS, iOS, tvOS, and Linux — Linux needs a colour-managed Wayland compositor. Dolby Vision on Android, macOS, and Apple TV. ↩
-
Desktop, Android TV, and Apple TV. ↩
-
Requires mpv's GPU renderer — unavailable on iOS, tvOS, and macOS, and Android defaults to ExoPlayer. ↩ ↩2
-
Android, iOS, and macOS — not on Android TV or Apple TV. ↩
-
Windows, Android, and tvOS. ↩
-
Progress sync on Android. ↩
-
Where your server provides lyrics. ↩
-
tvOS pauses music when the app is backgrounded. ↩
-
Not available on tvOS. ↩
-
Real-time scrobbling on Trakt and Simkl; MyAnimeList and AniList update on completion. ↩
-
Android TV / Fire TV and tvOS. ↩
-
Android, iOS, macOS, and tvOS. ↩
-
Jellyfin only. ↩
