Profile Safety & Content Control
Moonfin 1.1.1 focuses on family safety and smart content filtering. The media bar now respects profile permissions, Jellyseerr blocks inappropriate content automatically, and you can pre-select audio/subtitle tracks before playback starts.
What's New
🔒 Profile-Aware Media Bar
The featured media carousel now refreshes when switching profiles - no more scary movie banners showing up when the kids log in. Automatically detects profile changes and reloads appropriate content based on library permissions.
🔞 NSFW Content Filtering (Jellyseerr)
Jellyseerr results are now automatically filtered to block adult content from appearing in discovery and search using TMDB adult flags, keyword detection, and server blacklist integration. Can be toggled in Jellyseerr settings (enabled by default).
Note: For the most effective filtering, configure excluded keywords in your Jellyseerr server settings (Settings → Jellyseerr → Excluded Keywords). Server-side keyword blocking is more thorough than client-side filtering, though it's limited to 250 pages of results per keyword. Ensure you run the Process Blacklisted Tags job afterwards.
🎵 Pre-Playback Track Selection
Choose your audio and subtitle tracks before playback starts - perfect for content with multiple language options. New buttons in item details let you preview all available tracks with language, codec, channels, and forced/SDH indicators. Selections override saved preferences for that playback session only.
⚙️ Jellyseerr Advanced Settings
Power users and admins can now configure custom quality profiles for requests. Choose specific Radarr/Sonarr quality profiles for HD and 4K with separate settings for movies and TV shows. Requires admin permissions in Jellyseerr to configure.
🔑 Jellyseerr Local Authentication
New login method using permanent API keys instead of 30-day cookie sessions. Authenticate with your Jellyseerr email/password to get an API key that never expires. Both Jellyfin SSO and local login remain available - recommended for users who don't want to re-authenticate every month.
🎬 Play in Moonfin
Jellyseerr items that are already available now show a button to jump directly to playback. Searches by TMDB/TVDB/IMDB IDs for accurate results and only appears when content is in your library.
Improvements
- Toolbar Library Toggle - New preference to hide library buttons from the toolbar (useful if you'd rather have the old fashioned My Media row in Home)
- Screensaver Dimming - Optional 50% screen darkening for the in-app screensaver
- Favorites Navigation - Favorites toolbar button now goes to a dedicated "All Favorites" screen
- Better Shuffle Filtering - Shuffle button now explicitly excludes folders and collections (only picks playable content)
- Update System - Built-in update checker with automatic download and install (check Settings → App Updates)
- About Screen Split - Now shows both Moonfin version (1.1.1) and base Jellyfin version (0.19.4)
Bug Fixes
- Fixed: Collections (box sets) no longer show shuffle button - they should be played in order
- Fixed: Community ratings now display correctly (was showing 1/10th of actual value)
- Fixed: Toolbar focus issues on D-pad navigation - removed manual focus delegation
- Fixed: Redundant interaction tracking on programmatic navigation
Installation
Download moonfin-androidtv-v1.1.1.apk from the Releases page and sideload it on your Android TV device.
Compatible Devices:
- Android TV (5.0+)
- Nvidia Shield
- Fire TV / Fire Stick
- Google TV
- Any Android TV box
Upgrade Notes
Installing over v1.1.0 will preserve all your settings, login, and Jellyseerr configuration.
Jellyseerr Users: If you want permanent authentication, go to Settings → Jellyseerr → Login with Local Account to switch from cookie-based to API key authentication.
Technical Highlights
- Media bar observes
UserRepository.currentUserStateFlow for profile change detection - NSFW filtering uses both TMDB adult flags and regex keyword matching
- Pre-playback track selection stored in SharedPreferences with one-time-use pattern
- Update checker uses GitHub Releases API with OTA installation via FileProvider
- Quality profile selection fetches from Radarr/Sonarr settings endpoints
Full Changelog: v1.1.0...v1.1.1