SeerrTV is an Android TV application that provides a comprehensive media browsing and request management interface for Seerr, Jellyseerr and, Overseerr media request systems. It enables users to browse, search, request, and monitor the status of media requests directly from their Android TV device.
Main browsing interface
Detailed media information
Search functionality
Advanced filtering options
Request management interface
- Unified Browse Screens - Dedicated Movies and Series browse screens with grid-based layout optimized for Android TV
- Advanced Filtering System - Comprehensive filtering with 13+ filter categories:
- Release Date / First Air Date (date range)
- Genres (multi-select with search)
- Keywords (searchable multi-select)
- Original Language (single selection)
- Content Rating (multi-select with region support)
- Runtime, User Score, Vote Count (range filters)
- Studios (Movies only - searchable)
- Networks (TV only - searchable multi-select)
- Streaming Services (multi-select with region support)
- Sort Menu - Sort by Popularity, Release Date, First Air Date, TMDB Rating, or Title (AβZ / ZβA) with bidirectional sorting
- Enhanced Search - Real-time search with D-pad optimized navigation, inline results, and state preservation
- Category Browsing - Browse by categories (Recently Added, Recent Requests, Trending, Popular Movies, Movie Genres, etc.)
- Detailed Media Information - Cast, crew, ratings, and related content
- Dynamic Backdrop System - Cycling backdrop images with gradient overlays
- Person Information - Filmography browsing with biographical information
- Category Exploration - Browse by genres, studios, and networks with dedicated discovery screens
- Infinite Scroll Pagination - Automatic loading of additional results as you browse
- State Preservation - Grid position, selection, filters, and sort preferences preserved during navigation
- Movie & TV Requests - Request movies and TV shows with configurable options
- Tag Support - Organize requests with server-specific tags (multi-select)
- Sonarr Lookup - Interactive series matching when TVDB ID is missing (with poster images and D-pad navigation)
- HD/4K Support - Separate request options for HD and 4K quality tiers
- Server Selection - Choose from multiple Radarr/Sonarr servers when configured
- Quality Profile Selection - Select from configured quality profiles
- Root Folder Selection - Choose root folder for TV show requests (when enabled)
- Season Selection - Multi-select season picker for TV series
- Real-time Status Monitoring - Monitor request status and download progress with automatic refresh
- Permission-Based Actions - Support for different user permission levels (admin vs. regular user)
- Request Approval Workflow - Administrators can approve/decline pending requests
- Request Deletion - Delete requests and media files (based on permissions)
- Media Status Indicators - Visual status icons including deleted and blacklisted states
- Permission-Based Access - Issue functionality controlled by VIEW_ISSUES and CREATE_ISSUES permissions
- Issue Reporting - Report media quality and playback issues directly from the app
- Categorized Issue Types - Video, Audio, Subtitle, and Other categories with precanned descriptions
- Season/Episode Selection - Select specific seasons/episodes for TV series issues
- Custom Descriptions - Add detailed problem descriptions beyond precanned options
- Comment System - Discussion and updates on issues with threaded comments
- Issue Status Tracking - Open and Resolved status with visual indicators
- Issue Count Indicators - Display number of reported issues on media details screen
- Issue Management - View and manage existing issues with detailed history and status updates
- Multiple Authentication Methods:
- API Key authentication
- Local User authentication
- Plex authentication with PIN code system
- Jellyfin/Emby authentication (for Jellyseerr and Seerr)
- Automatic Server Detection - Detects Seerr, Overseerr, or Jellyseerr server types automatically
- Browser-Based Setup - QR code or URL-based configuration for easier setup
- Manual Wizard - Step-by-step configuration wizard with guided setup
- Cloudflare Protection - Bypass Cloudflare Access protection with service token authentication
- Flexible Configuration - Supports HTTP/HTTPS with SSL certificate validation
- Connection Testing - Real-time connection validation before proceeding
- Multi-user Profiles - Create multiple local user profiles, each bound to its own API configuration (1:M).
- Profile Selector & PIN (optional) - If multiple profiles exist (or a single profile is PIN protected), choose a profile at startup and enter an optional numeric PIN before activation.
- Material Design 3 - Theming optimized for TV screens with consistent styling
- D-pad Navigation - Comprehensive D-pad navigation with focus management throughout the app
- Visual Feedback - Clear focus indicators and selection state feedback
- Slide Animations - Smooth slide-in/out animations for modals, drawers, and menus
- Auto-Scrolling - Content automatically scrolls to keep focused items visible
- Expandable Content - Expandable text areas for long descriptions with "Read More/Less"
- Smart Layout - Dynamic layout adjustment based on content availability
- Persistent Top Bar - Always-visible top bar with search, settings, clock, and active profile avatar
- Settings - TV-friendly full-screen settings screen (includes
User profilesmanagement)
- Independent App Language - User interface language is independent of Discovery Language
- Language Selection - Choose from supported languages (English, German, Spanish, French, Japanese, Dutch, Portuguese, Chinese)
- On-the-Fly Language Change - Switch UI language from the Settings screen without restarting
- Automatic Migration - Existing users automatically use system default language (if supported) or English
- Regional Settings - Default streaming region setting for watch providers and content ratings
- Media Server Playback:
- Direct integration with Plex for media playback
- Jellyfin media server support
- Emby media server support with dual-app compatibility (Android TV and regular Android apps)
- Trailer Viewing - YouTube integration for trailer playback
- Metadata Integration - TMDb (The Movie Database) integration for ratings, cast, crew, and metadata
- Downstream Services:
- Sonarr server integration for TV series management
- Radarr server integration for movie management
- Multi-server support for both HD and 4K quality tiers
- Server-specific quality profiles and root folder selection
Option 1: Google Play Store (Recommended)
- SeerrTV is available on Google Play Store for official releases
- Automatic updates via Play Store
- Easiest installation method
Option 2: GitHub Releases (Sideload)
- Download the latest APK from GitHub Releases
- Enable "Install from Unknown Sources" on your Android TV device
- Transfer the APK to your device and install
- The app automatically checks for updates from GitHub Releases when opened
- See FAQ for detailed sideloading instructions
- Launch SeerrTV on your Android TV device
- Choose configuration method:
- Browser-based setup (QR code or URL) - Recommended for easier setup
- Manual step-by-step wizard
- Configure server connection:
- Enter protocol (HTTP/HTTPS)
- Set hostname or IP address
- Select authentication method (API Key, Plex, Local User, or Jellyfin/Emby)
- Complete authentication:
- Follow on-screen instructions for your chosen auth method
- For Plex auth: Visit plex.tv/link and enter the provided PIN
- For API key: Enter your server's API key
- For local user: Enter username and password
- Start browsing! The app will automatically detect your server type (Seerr, Overseerr, or Jellyseerr). If multiple user profiles exist, select one first (and enter an optional PIN).
For detailed configuration guides, see:
- Cloudflare Access Configuration Guide - Setting up Cloudflare Zero Trust protection
- App Configuration section below for more details
-
Clone the repository:
git clone https://github.com/devmesh-git/seerrtv.git cd seerrtv -
Open in Android Studio:
- Open Android Studio
- Select "Open an Existing Project"
- Navigate to the cloned
seerrtvdirectory - Android Studio will sync Gradle dependencies
-
Build and run:
# Debug build (standard app) ./gradlew assembleDirectDebug # Or build and install directly on connected device/emulator ./gradlew installDirectDebug # Launcher flavor (Apps row, reorder, home screen) β use this to test launcher features ./gradlew :tv:installPlayLauncherDebug adb shell am start -n ca.devmesh.seerrtv.launcher/ca.devmesh.seerrtv.MainActivity
-
See Development Setup below for detailed build instructions, including the Launcher build for the TV home-screen variant.
- Android TV device (Android 6.0 / API 23 or higher)
- Seerr, Overseerr, or Jellyseerr server instance
- Network access to your media server
- Java Development Kit (JDK): Java 21 (required)
- macOS (recommended): Android Studio includes Java 21 (JBR) which is automatically used via
gradle.properties- Alternative: Using Homebrew:
brew install openjdk@21 - Or download from Adoptium
- Alternative: Using Homebrew:
- Linux:
- Ubuntu/Debian:
sudo apt install openjdk-21-jdk - Fedora/RHEL:
sudo dnf install java-21-openjdk-devel - Arch Linux:
sudo pacman -S jdk21-openjdk - Or download from Adoptium
- Ubuntu/Debian:
- Windows:
- Download from Adoptium
- Or use Chocolatey:
choco install openjdk21
- Verify installation:
java -version(should show version 21)
- macOS (recommended): Android Studio includes Java 21 (JBR) which is automatically used via
- Android Studio Hedgehog or later
- Android SDK with API level 25-36
- Android TV emulator or physical device for testing
- UI Framework: Jetpack Compose for modern, declarative UI
- Dependency Injection: Hilt for clean architecture
- Image Loading: Coil for efficient image caching and loading
- Asynchronous Operations: Coroutines and Flow for reactive programming
- Navigation: Jetpack Navigation with custom transitions
- Data Storage: SharedPreferences for configuration
- HTTP Client: Ktor for API communication
- Platform: Android TV SDK for TV-specific features
SeerrTV supports two distribution methods. Use these main build tasks (run from project root with ./gradlew or gradlew.bat on Windows):
| Goal | Task | Output |
|---|---|---|
| Play Store (debug) | bundlePlayDebug |
.aab for testing |
| Play Store (release) | bundlePlayRelease |
.aab for Play Console |
| Direct / sideload (debug) | assembleDirectDebug |
Both app + launcher .apk files |
| Direct / sideload (release) | assembleDirectRelease |
Both app + launcher .apk files |
After a build, Gradle prints the paths to the generated APK/AAB files. Use these four tasks; the generic assembleDebug (all debug variants at once) is not needed for normal development.
Build the play flavor for Google Play (no in-app update, minimal permissions):
./gradlew bundlePlayDebug # Debug
./gradlew bundlePlayRelease # Release for Play Console- Generates
.aabintv/build/outputs/bundle/playAppRelease/ - Compliant with Play Store policies
Build the direct flavor for sideloading (includes auto-update from GitHub Releases):
./gradlew assembleDirectDebug # Debug
./gradlew assembleDirectRelease # Release: builds app + launcher APKs- Release outputs:
SeerrTV-vX.Y.Z.apkandSeerrTV-vX.Y.Z.launcher.apkundertv/build/outputs/apk/ - Upload both to a GitHub Release for the in-app updater to work
Platform notes: macOS uses Android Studioβs JBR via gradle.properties; set JAVA_HOME or org.gradle.java.home on Linux/Windows if needed.
SeerrTV can be built as an Android TV launcher (replaces the device home screen; app ID ca.devmesh.seerrtv.launcher).
- Direct release (both APKs):
./gradlew assembleDirectReleaseβ produces the main app and launcher APKs. - Launcher-only (debug or single variant):
- Play:
assemblePlayLauncherDebug,bundlePlayLauncherRelease - Direct:
assembleDirectLauncherDebug,assembleDirectLauncherRelease
- Play:
Install and test:
- Build one of the launcher variants above.
- Install on a device or emulator:
- One-liner (build and install on connected device/emulator):
./gradlew :tv:installPlayLauncherDebug
- Manual install (after building):
Use the same path for
adb install -r tv/build/outputs/apk/playLauncher/debug/tv-playLauncher-debug.apk
directLauncherif you built that variant (tv/build/outputs/apk/directLauncher/debug/...).
- One-liner (build and install on connected device/emulator):
- Emulator: Start your Android TV emulator (Device Manager in Android Studio, or
emulator -avd <your_tv_avd_name>), then run the install command above. - Set SeerrTV Launcher as the default home screen (required for Home to open SeerrTV):
- Via ADB (most reliable): disable the current default launcher, then press Home; the system will offer SeerrTV Launcher.
Google TV (Chromecast with Google TV, many recent devices):
Android TV (older devices, some set-top boxes):
adb shell pm disable-user --user 0 com.google.android.apps.tv.launcherx
To find your device's launcher package name:adb shell pm disable-user --user 0 com.google.android.tvlauncher
adb shell cmd package resolve-activity -a android.intent.action.MAIN -c android.intent.category.HOME. - Via device: Some devices have Settings β Apps β Default apps β Home app (or similar) where you can pick the launcher.
- Via ADB (most reliable): disable the current default launcher, then press Home; the system will offer SeerrTV Launcher.
Google TV (Chromecast with Google TV, many recent devices):
- Press Home on the remote; SeerrTV Launcher should open. Use the Apps row at the top to open other installed TV apps.
Restoring the default launcher
To switch back to the stock Android TV / Google TV home screen:
- Re-enable the stock launcher via ADB (use the same package name you disabled earlier):
- Google TV (Chromecast with Google TV, many recent devices):
adb shell pm enable --user 0 com.google.android.apps.tv.launcherx - Android TV (older devices, some set-top boxes):
adb shell pm enable --user 0 com.google.android.tvlauncher
- Google TV (Chromecast with Google TV, many recent devices):
- If you don't remember the package name, list home-capable apps:
adb shell cmd package resolve-activity -a android.intent.action.MAIN -c android.intent.category.HOME
Then run:adb shell pm enable --user 0 <package_name>. - Press Home on the remote; the system may show a launcher pickerβchoose the stock launcher. On some devices the stock launcher becomes active again automatically once re-enabled.
Launcher-specific behavior:
- The main screen shows an Apps row listing other installed Android TV apps; D-pad Left/Right to move, Enter to launch.
- From the top bar, Down goes to the Apps row first, then to content categories.
- For more detail (intent filters, features, phases), see docs/LAUNCHER_ANALYSIS.md.
| Task / variant | Output | Use case |
|---|---|---|
bundlePlayRelease |
.aab |
Play Store (main app) |
assembleDirectRelease |
app + launcher .apk |
Direct/sideload (GitHub Releases) |
playLauncher |
.aab/.apk |
TV launcher from Play |
directLauncher |
.apk |
TV launcher, sideload (auto-update) |
For release builds, you need to configure APK signing:
-
Create signing properties file:
# macOS/Linux: cp tv/signing.properties.template tv/signing.properties # Windows (Command Prompt): copy tv\signing.properties.template tv\signing.properties # Windows (PowerShell): Copy-Item tv\signing.properties.template tv\signing.properties
-
Edit
tv/signing.propertieswith your keystore information:storeFile=../localSigningKey.jks storePassword=your_keystore_password keyAlias=your_key_alias keyPassword=your_key_password
-
Security Notes:
signing.propertiesis automatically gitignored- Debug builds use the default debug keystore automatically
- For CI/CD, you can use environment variables:
KEYSTORE_PASSWORD,KEY_ALIAS,KEY_PASSWORD
For detailed signing setup instructions, see Signing Setup Guide.
Browser Configuration: The browser-based configuration endpoint can be customized by creating a browser-config.properties file:
- Copy
tv/browser-config.properties.templatetotv/browser-config.properties - Update the
browser.config.base.urlproperty if needed - Default value points to
https://seerrtv.devmesh.ca - This file is gitignored for security
Release: Play Store β ./gradlew bundlePlayRelease, upload the .aab to Play Console. Direct β ./gradlew assembleDirectRelease, upload SeerrTV-vX.Y.Z.apk and SeerrTV-vX.Y.Z.launcher.apk to a GitHub Release (tag e.g. v0.26.4). The app checks GitHub Releases for updates.
On first run, the app will guide you through the configuration process:
-
Choose configuration method:
- Browser-based setup (QR code or URL)
- Manual step-by-step wizard
-
Configure server connection:
- Enter protocol (HTTP/HTTPS)
- Set hostname
- Select authentication method
- Configure Cloudflare settings if needed (see Cloudflare Access Configuration Guide)
-
Complete authentication:
- Follow on-screen instructions for your chosen auth method
- For Plex auth: Visit plex.tv/link and enter the provided PIN
- For API key: Enter your server's API key
- For local user: Enter username and password
For detailed configuration guides, see:
- Cloudflare Access Configuration Guide - Setting up Cloudflare Zero Trust protection
The app is optimized for TV remote control navigation:
-
D-pad Navigation:
- UP/DOWN: Move between categories
- LEFT/RIGHT: Navigate within categories
- ENTER: Select focused item
- BACK: Return to previous screen
-
Special Actions:
- Press UP at top of screen to refresh content
- Use BACK button to close modals
- D-pad navigation preserves selection state
- Lazy loading of media content
- Efficient image caching
- Optimized focus management
- State preservation during navigation
- Debounced search to prevent excessive API calls
- Smart refresh mechanisms
- Memory-efficient data structures
Get Help:
- π― Discord: Join the Seerr Community Discord - Official community for support, discussions, and release announcements
- π GitHub Issues: Create an issue on GitHub for bug reports and feature requests
- π Community Website: Visit the Seerr community website
Contribute:
- π Contributing Guide: See our Contributing Guidelines to get started
- π Report Bugs: Use our bug report template
- π‘ Request Features: Use our feature request template
- π·οΈ Good First Issues: Look for issues labeled
good first issueto get started
SeerrTV is part of the Seerr community. This project was originally created by DevMesh and is now community-driven.
We welcome contributions! SeerrTV is an open-source project and contributions from the community are essential for its growth.
- Fork the repository and create a feature branch
- Make your changes following our code style guidelines
- Test thoroughly on an Android TV device or emulator
- Submit a pull request with a clear description
Android TV Requirements: SeerrTV is an Android TV application. All contributions must follow Android TV navigation patterns:
- β Use D-pad navigation, not touch/click
- β Test with TV remote controls
- β Follow the custom navigation component patterns
- β Do NOT use
onClickmodifiers - β Do NOT use
focusable()orclickable()modifiers for navigation
- π Full Contributing Guide: See CONTRIBUTING.md for detailed guidelines on:
- How to report bugs
- How to suggest features
- Pull request process
- Code style guidelines
- Android TV-specific requirements
- π¬ Discord: Join the Seerr Community Discord for contributor discussions
- π·οΈ Good First Issues: Look for issues labeled
good first issue- perfect for new contributors!
SeerrTV is available on Google Play Store for official releases. This is the recommended installation method as it provides:
- Automatic updates via Play Store
- Verified security and compatibility
- Easiest installation process
For users who prefer to sideload builds, direct APK releases are available on GitHub:
- Latest Release: GitHub Releases
- The app automatically checks for updates from GitHub Releases when opened
- Download the
.apkfile and install on your Android TV device
-
Enable Unknown Sources:
- Go to Settings β Security & restrictions β Unknown sources
- Enable installation from unknown sources (varies by device)
-
Download the APK:
- Visit GitHub Releases
- Download the latest
.apkfile
-
Transfer to Your Device:
- Use ADB:
adb install seerrtv-release.apk - Use a USB drive or network file transfer
- Use a file manager app on your TV
- Use ADB:
-
Install:
- Open the APK file using a file manager
- Follow the installation prompts
- Launch SeerrTV from your app drawer
Note: The direct distribution build includes auto-update functionality that checks GitHub Releases for new versions. Release notes and changelogs are also announced in the official Discord community.
| Distribution | Build task | File type | Updates |
|---|---|---|---|
| Play Store | bundlePlayRelease |
.aab |
Play Store |
| Direct/sideload | assembleDirectRelease |
.apk |
GitHub Releases |
Q: How do I sideload the APK on my Android TV?
A: Follow these steps:
- Enable "Install from Unknown Sources" in your TV's settings (Settings β Security & restrictions β Unknown sources)
- Download the APK from GitHub Releases
- Transfer the APK to your TV via USB, network share, or ADB
- Open the APK using a file manager app on your TV
- Follow the installation prompts
For detailed instructions, see the Downloads section above.
Q: The app won't install. What should I do?
A: Make sure:
- "Unknown Sources" is enabled in your TV settings
- You downloaded the correct APK for your device architecture
- Your TV has enough storage space
- The APK file wasn't corrupted during download (try re-downloading)
Q: How do I configure Cloudflare Access protection?
A: See the Cloudflare Access Configuration Guide for detailed instructions on setting up Cloudflare Zero Trust protection with SeerrTV.
Q: I can't connect to my server. What's wrong?
A: Check the following:
- Verify your server URL is correct (include
http://orhttps://and port if needed) - Ensure your Android TV device can reach your server over the network
- Check if your server has firewall rules blocking connections
- Verify SSL certificate settings if using HTTPS
- For Cloudflare-protected servers, ensure service token authentication is configured correctly
Q: How do I change the authentication method?
A: Go to Settings β Server Configuration β Authentication Method and select your preferred method. You'll need to re-authenticate with the new method.
Q: The app says an update is available, but I can't update. Why?
A: If you installed from Play Store, updates come through Play Store automatically. If you sideloaded:
- Make sure "Unknown Sources" is still enabled
- The app needs
REQUEST_INSTALL_PACKAGESpermission (only in direct builds) - Check your network connection
- Try manually downloading from GitHub Releases
Q: How do I check for updates manually?
A: Go to Settings β About β Check for Updates. The app will automatically check GitHub Releases for the latest version.
Q: D-pad navigation isn't working properly. What should I do?
A: This is an Android TV app designed for D-pad navigation. Make sure:
- You're using a TV remote with D-pad, not a mouse or touch screen
- The focused element is visible (try pressing UP at the top of screens to refresh)
- You're not trying to use touch/click interactions (this app doesn't support them)
- If issues persist, report a bug with specific navigation steps
Q: How do I navigate the app?
A: Use your TV remote D-pad:
- UP/DOWN: Move between rows/categories
- LEFT/RIGHT: Navigate within a row
- ENTER/SELECT: Open/select the focused item
- BACK: Return to previous screen or close dialogs
Q: Can I use this with Overseerr/Jellyseerr/Seerr?
A: Yes! SeerrTV automatically detects and works with all three server types: Overseerr, Jellyseerr, and Seerr. The app will detect your server type during initial configuration.
Q: Does SeerrTV support 4K requests?
A: Yes, SeerrTV supports separate HD and 4K request configurations. You can configure multiple Radarr/Sonarr servers for both HD and 4K quality tiers.
Q: How do I report a bug?
A:
- Check if the bug has already been reported in GitHub Issues
- If not, create a new issue using our bug report template
- Include as much information as possible: app version, device model, Android version, steps to reproduce
- For D-pad navigation issues, include the exact navigation path
- If possible, attach logs captured using the Support Logs Guide
Q: How do I request a new feature?
A:
- Check existing feature requests first
- Create a new issue using our feature request template
- Describe the use case, who would benefit, and how it would improve the experience
- Consider Android TV constraints (D-pad navigation, screen size, etc.)
Q: Where can I get help with issues not covered here?
A: Join the Seerr Community Discord - the official community for support and discussions. You can also create a GitHub issue with the question label.
Q: How do I restore the default (stock) launcher?
A: If you set SeerrTV Launcher as your home screen and want to go back to the stock Android TV / Google TV launcher, re-enable it via ADB (see Restoring the default launcher in the Launcher build section):
- Google TV:
adb shell pm enable --user 0 com.google.android.apps.tv.launcherx - Android TV:
adb shell pm enable --user 0 com.google.android.tvlauncher
Then press Home; choose the stock launcher if a picker appears. If you don't know your device's launcher package, use:
adb shell cmd package resolve-activity -a android.intent.action.MAIN -c android.intent.category.HOME
then adb shell pm enable --user 0 <package_name>.
This project is licensed under the MIT License - see the LICENSE file for details.