An Android TV app that creates launcher channels from any Stremio-compatible manifest (xperience-app.com, aiometadatafortheweebs, etc.) and syncs them to the Android TV home screen.
1. User adds manifest URL
│
▼
2. App fetches manifest.json → parses catalog list
│
▼
3. User selects which catalogs to enable (toggle switches)
│
▼
4. "Sync Channels Now" → fetches catalog data (sequential, one at a time)
│
▼
5. Launcher channels created in Android TV (Projectivy / Leanback)
│
▼
6. User taps channel → opens content in Nuvio or Stremio
- Manifest-Based — Add any Stremio-compatible manifest URL (no API keys needed)
- Android TV Home Screen Integration — Creates launcher channels (works with Projectivy Launcher, Android TV Leanback)
- Simple UI — Add manifest → select catalogs → sync
- Deep Linking — Opens content in Nuvio or Stremio
- Background Sync — Automatic updates every 6 hours (on boot, on network change)
- Composable UI — Modern Jetpack Compose settings interface
- Extensible — Easy to add more playback providers
After installing the app, click "Manage Manifests" and add a manifest URL:
https://xperience-app.com/manifest/{profileId}/{token}/manifest.json
https://example.com/stremio/{appId}/manifest.json
The app will automatically fetch the manifest and show all available catalogs.
Each catalog becomes a potential TV channel. Toggle on the catalogs you want to see.
Click "Sync Channels Now" to fetch content and create launcher channels.
Open your Android TV launcher — you'll see the new channels with all the content.
nuvio://movie/{id}
nuvio://tv/{id}
stremio://detail/movie/tmdb:{id}
stremio://detail/series/tmdb:{id}
Manifest URL
│
▼
┌─────────────────┐
│ XperienceClient │ (fetch manifest + catalogs)
└──────┬──────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
Catalog Cache Compose UI Launcher Channels
│ │ │
│ │ │
└───────┬────┘ │
▼ │
DeepLink Router │
│ │ │
▼ ▼ │
Nuvio Stremio │
(Projectivy)
- Kotlin 2.1.0
- Jetpack Compose (Material 3)
- OkHttp + Gson (HTTP client)
- WorkManager for background sync
- DataStore for preferences
- Android TV Channels (androidx.tvprovider)
app/src/main/
├── java/com/makeran218/recommendtmdb/
│ ├── MainActivity.kt # Main TV UI + ViewModel
│ ├── ManifestModels.kt # Manifest/catalog data models
│ ├── ManifestRepository.kt # URL storage + caching
│ ├── XperienceClient.kt # HTTP client for manifest/catalogs
│ ├── DeepLinks.kt # Playback provider abstraction
│ ├── LauncherChannels.kt # Android TV channel management
│ ├── SyncWorker.kt # Background sync (WorkManager)
│ ├── SyncScheduler.kt # Sync scheduling
│ ├── Preferences.kt # Settings (playback app, display type)
│ └── BootReceiver.kt # Boot-time sync trigger
├── res/
│ ├── values/
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── themes.xml
│ ├── drawable/
│ │ ├── banner.png # Android TV banner
│ │ └── ic_launcher_foreground.png
│ ├── mipmap-*/ # App icons (mdpi through xxxhdpi)
│ └── xml/
│ ├── backup_rules.xml
│ └── data_extraction_rules.xml
└── AndroidManifest.xml
This project uses GitHub Actions. Every push to main or master triggers:
- Checkout code
- Set up JDK 17
- Run
./gradlew assembleDebug - Upload APK as artifact
View builds at Actions tab in your GitHub repo. Download the APK from the run's artifacts.
MIT
| App | Package Name |
|---|---|
| Nuvio | com.nuvio.tv |
| Stremio | com.stremio.one |
These are the correct package names for Android TV versions of the apps.