A lightweight video player for Android TV, designed for local and network-hosted media files.
This codebase is an experiment in fully using AI assisted development. No hand-editing of source files, build system, commit messages, or configuration. The project is generated entirely by Claude Code, Opus 4.5 model, using REQUIREMENTS.md to describe requirements and TODO.md to track bugs.
- No media database - Your filesystem is the source of truth
- No online scraping - All metadata comes from your files, never fetched from the internet
- No tracking - No watched/unwatched status, no history, no analytics
- Simple - Fewer features done well, not feature bloat
- NFS streaming - Play videos directly from network shares
- Embedded metadata - Displays artwork and duration from your media files
- Multi-track audio - Switch between audio tracks during playback
- Subtitle support - Embedded subtitles (SRT, ASS/SSA, PGS) with easy toggle
- Smart subtitle defaults - Automatically enables subtitles for foreign audio
- Resume playback - Automatically resumes from where you left off
- Remote-friendly - Fully operable with a standard TV remote
| Type | Formats |
|---|---|
| Containers | MKV, MP4 |
| Video | H.264, H.265/HEVC, MPEG-4, VP9 |
| Audio | AAC, AC3, MP3, DTS |
| Subtitles | SRT, ASS/SSA, PGS (embedded) |
- Download the APK from Releases
- Install on your Android TV device via adb or sideloading
- Create a configuration file (see below)
- Launch aplayer
Create aplayer.yaml in the app's data directory:
Location: /sdcard/Android/data/org.existens.aplayer/files/aplayer.yaml
sources:
- name: Movies
export: nfs://your-nas.local/mnt/media # NFS server and export path
path: /movies # Path within the export
- name: TV Shows
export: nfs://your-nas.local/mnt/media
path: /tv
# Audio output configuration (optional)
audio:
speakers: stereo # mono|stereo|2.1|3.0|3.1|5.0|5.1|7.0|7.1
passthrough: [] # formats to pass through: ac3, eac3, dts, truehd, etc.You can push the config via adb:
adb push aplayer.yaml /sdcard/Android/data/org.existens.aplayer/files/- D-pad - Navigate files and folders
- OK/Select - Open folder or play file
- Back - Go up one folder; exit app at root
- OK/Select - Show overlay (track selection, progress)
- Back - Hide overlay; exit to browser if overlay hidden
- Left/Right - Seek backward/forward 10 seconds
- Play/Pause - Toggle playback (media keys)
Playback automatically resumes from where you left off. Positions are cleared when you finish watching (within 10 minutes of the end, to account for credits).
Thumbnails extracted from media files are cached locally. To force aplayer to re-extract thumbnails from your MKV files:
adb shell rm -rf /sdcard/Android/data/org.existens.aplayer/cache/thumbnailsThis is useful when:
- You've updated cover art embedded in your media files
- Thumbnails appear corrupted or incorrect
- You want to free up storage space
The cache will be rebuilt automatically as you browse your media library.
- Not a media center (no music, photos, news, weather)
- Not a library manager (no database, no organization)
- Not connected to the internet (no TMDB, TVDB, or any online service)
- Not tracking you (no watch history, no recommendations)
See CONTRIBUTING.md for development setup and guidelines.
Apache 2.0 - see LICENSE