Skip to content

thatcube/Plozz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1,484 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Plozz logo

Plozz

A free forever, open source, native Apple TV app for Jellyfin, Plex, and local shares.

Join the Plozz public beta on TestFlight

License: GPL-3.0 Platform: tvOS Donate

Try the beta

Plozz is in public beta on TestFlight. Join the beta to install it on your Apple TV right now.

Reporting bugs & requesting features

Found a bug or have an idea? Open an issue and pick a template β€” 🐞 Bug report or ✨ Feature request. For the full contribution flow (the file-an-issue-then-fix habit, dev setup, and the dual-provider expectation), see CONTRIBUTING.md.

Unique Features

  • Multiple servers, one library. Merge all of your content into one library across plex, jellyfin and local share (SMB only) servers.

  • Sync watch history across all servers - Optionally sync your watch history across every server that's connected. Watch it on Plex, it will sync that same watch status to Jellyfin (if Jellyfin has the same title).

  • Mark as watched - Mark an entire season as watched or "up to here" to quickly update watch history.

  • Watched & unwatched indicators β€” Choose a watched checkmark or an unwatched corner badge (Infuse / classic-Plex style) on your posters, across Plex, Jellyfin and SMB shares.

  • Trakt, AniList, MyAnimeList, Simkl, and Last.fm - Full support for every tracker across your movies, tv, anime, and music.

  • Seerr integration - Connect a seerr account and request media from directly within the search or hero of the app.

  • Highly customizable interface - Change the theme of the entire app (light, dark, OLED). Change the density of media, optionally show hero content, change the navigation style.

  • Jellyfin, Plex, and local shares (SMB)

  • Circadian mode - Automatically warm and dim the display at set times to help you sleep (only at the app level)

  • Subtitle customization β€” Vastly customize the subtitles directly in the player. Change font, size, color, opacity, background, font weight, HDR brightness, shadow, position.

  • Dual subtitle support - Turn on 2 different subtitle tracks at the same

  • Auto-discovery β€” Automatically detect jellyfin servers, seerr servers

  • Remote-free sign-in β€” Jellyfin Quick Connect and Plex Link supported

  • Profiles β€” Native Apple TV profile support - all settings are per-profile and your profile selection is remembered based on the Apple TV profile that was last used

  • (Almost) All video formats supported - Powered by AetherEngine, an open source engine that fully supports HDR, Dolby Vision, AV1, virtually everything.View the full list.

Architecture

Plozz is a Swift Package with one library per concern, consumed by a thin tvOS app target generated with XcodeGen.

Module Responsibility
CoreModels Domain models, AppError, LoadState, caption settings, and the MediaProvider protocol (the provider abstraction).
CoreNetworking HTTPClient, Endpoint, URL normalization, and a secret-safe logger (PlozzLog).
CoreUI Shared focusable components, theme, image cache, content-state views.
ProviderJellyfin Jellyfin REST client, DTOs, device profile, and a MediaProvider implementation.
ProviderPlex Plex client, DTOs, PIN/auth, connection resolver/selector, and a MediaProvider implementation.
ProviderTrailers Synthetic MediaProvider for online (YouTube) trailers, with stream extraction via YouTubeKit.
MetadataKit Keyless-first artwork & metadata enrichment (AniList, Kitsu, TVmaze, Deezer, MusicBrainz/CAA, Wikidata/Wikipedia) routed by content type with a persistent on-disk cache. Bundled TheTVDB tier + optional maintainer-hosted TMDb tier.
RatingsService External ratings enrichment (OMDb optional key, keyless AniList) with on-disk cache.
TraktService Optional Trakt OAuth, scrobbling, and watched/sync helpers.
TopShelfKit Domain-to-snapshot mapping for the Top Shelf extension; writes to the shared App Group container.
FeatureDiscovery LAN (UDP) discovery, server validation, server-picker UI, last-server persistence.
FeatureAuth Quick Connect, Plex Link, password sign-in, the explicit session state machine, Keychain-backed account/session stores.
FeatureHome Home rows, item detail, series/season experience, online trailer fallback.
FeaturePlayback AVPlayer view model/view, engine routing, resume reporting, caption style rules, idle-sleep handling, diagnostics overlay.
FeatureSearch Search view & view model, deduplication, search policy.
FeatureSettings Settings (profiles, integrations, server, caption customization, preference detail).
FeatureProfiles Profile picker, editor, avatar/photo capture (household "Who's watching?").
FeatureMusic Music browsing, mini-player, queue/now-playing, background audio.
AppShell App state wiring, root navigation, profile selection, provider/registry composition.

Each module's README.md documents its responsibility, public surface, and invariants. Everything above the provider layer talks to the MediaProvider abstraction rather than a specific backend, so Jellyfin and Plex are each just a conformer β€” adding another backend means one new conformer, no feature rewrites.

Building & running

Requirements

  • macOS with Xcode 16+ (tvOS 17.0 deployment target)
  • XcodeGen: brew install xcodegen

Generate the project and run

xcodegen generate
open Plozz.xcodeproj
# Select the "Plozz" scheme and an Apple TV simulator, then Run.

Run the unit tests

swift test

The logic modules are platform-portable, so swift test runs on any Swift toolchain β€” no simulator. UI modules compile out behind #if canImport(...) guards and are covered by the tvOS simulator/app build instead. CI runs swift test on Linux and an xcodebuild tvOS build on macOS.

Performance debugging

If the app feels laggy or you see blank artwork / memory crashes on device, see docs/performance-debugging.md β€” an on-device playbook using the watchdog and Instruments (xctrace).

Releasing to TestFlight

Distribution is automated with fastlane (App Store Connect API key auth). Drop a gitignored .env.fastlane with ASC_KEY_ID / ASC_ISSUER_ID / ASC_KEY_PATH (see .env.fastlane.example), then:

fastlane beta --env fastlane    # build + upload to TestFlight
fastlane build --env fastlane   # archive a signed .ipa locally, no upload
fastlane release --env fastlane # build + upload to the App Store

Versioning (project.yml): bump the marketing version (CFBundleShortVersionString, e.g. 0.1 β†’ 0.2) by hand; the build number is auto-incremented from the latest TestFlight build at archive time β€” never edit it manually.

tvOS Brand Assets (app icon + Top Shelf images) live under App/Resources/Assets.xcassets/…brandassets and are required for any upload. The current art is a placeholder β€” replace it before a public App Store release.

Roadmap

  • Dedicated iOS music app (Mozz)
  • iOS and/or iPadOS Plozz app depending on demand

Donate

Plozz will always be free and open source, with no paywall, ads, or obligation. If it's useful to you, donations toward upkeep are welcome β€” and not donating is completely okay.

Donate via GitHub Sponsors β€” one-time or recurring.

Credits & attribution

Plozz is an unofficial client and is not affiliated with, endorsed, or certified by any of the services below.

  • AetherEngine β€” on-device playback engine (FFmpeg demux β†’ VideoToolbox decode) by Vincent Herbst, LGPL-3.0 with an App Store exception. superuser404notfound/AetherEngine. Its bundled FFmpeg is a decode-only, LGPL-3.0 build (see NOTICE.md).

  • The Movie Database (TMDB) β€” some artwork and metadata is provided by the TMDB API. This product uses the TMDB API but is not endorsed or certified by TMDB. TMDB's marks and logos are trademarks of TMDB.

    The Movie Database (TMDB)

  • TheTVDB β€” some metadata and artwork is provided by TheTVDB. Please consider adding missing information or subscribing at thetvdb.com. This product uses the TheTVDB API but is not endorsed or certified by TheTVDB.

    TheTVDB

  • OMDb API β€” optional IMDb ratings enrichment (requires your own OMDb key).

  • AniList β€” keyless community scores for anime titles.

  • Plex and Jellyfin β€” the media servers Plozz connects to. All library content, artwork, and ratings shown in the app are supplied by your own server. "Plex" and "Jellyfin" are trademarks of their respective owners.

License

GPL-3.0 (with an App Store Exception) Β© 2026 Brandon Moore

About

Free, open-source native Apple TV app for Jellyfin and Plex. Stream your movies, shows, and music on tvOS with auto skip, full subtitle support, dark/light modes, customizable UI density, multi-server sync, supports all trackers (Last.fm, AniList, MyAnimeList, Trakt, Simkl).

Topics

Resources

License

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages