ryandrake08/aplayer

Vibe-coded NFS video player for Android TV

★ 0Forks 0KotlinGitHub ↗Compare

README

aplayer

A lightweight video player for Android TV, designed for local and network-hosted media files.

Note

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.

Philosophy

  • 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

Features

  • 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

Supported Formats

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)

Installation

  1. Download the APK from Releases
  2. Install on your Android TV device via adb or sideloading
  3. Create a configuration file (see below)
  4. Launch aplayer

Configuration

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/

Usage

Browsing

  • D-pad - Navigate files and folders
  • OK/Select - Open folder or play file
  • Back - Go up one folder; exit app at root

Playback

  • 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).

Maintenance

Clearing the Thumbnail Cache

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/thumbnails

This 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.

What aplayer is NOT

  • 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)

Contributing

See CONTRIBUTING.md for development setup and guidelines.

License

Apache 2.0 - see LICENSE

Contributors

ryandrake08

Issues