How vovaaa312/viby works
Purpose and Runtime
Viby is a single-module Android offline music player. It downloads YouTube video/playlist audio entirely on-device, stores MP3s in app-scoped external storage, and plays the local library in the background. The APK bundles a Python runtime, yt-dlp, and FFmpeg; playback uses Android Media3/ExoPlayer and the platform equalizer. Build/runtime definition: app/build.gradle, app/src/main/AndroidManifest.xml.
Application and UI Entry Points
VibyApp is the application-level bootstrap. MainActivity is the primary library/player host, with player and queue presented as fragments. Dedicated activities isolate download intake, equalizer controls, and YouTube authentication/playlist selection.
• app/src/main/java/com/example/viby/VibyApp.java
• app/src/main/java/com/example/viby/ui/MainActivity.java
• app/src/main/java/com/example/viby/ui/PlayerFragment.java
• app/src/main/java/com/example/viby/ui/DownloadActivity.java
Persistent Library Model
Room-style local persistence represents downloaded tracks, playlist metadata/source links, and resumable/pending download state. This database is the boundary between UI/library management and background work; downloaded media itself lives under Android/data/com.example.viby/files/Music/<playlist>/.
• app/src/main/java/com/example/viby/data/VibyDatabase.java
• app/src/main/java/com/example/viby/data/Track.java
• app/src/main/java/com/example/viby/data/PlaylistInfo.java
• app/src/main/java/com/example/viby/data/PendingDownload.java
Download and Extraction Pipeline
A user supplies or shares a YouTube URL through the download/login/playlist UI. Download jobs coordinate per-track or per-playlist progress and persistent pending state. The background download service invokes the embedded extraction stack, produces tagged MP3s with cover art, and updates the local library. YouTube access/authentication and cookie handling are separate boundaries from local playback.
• app/src/main/java/com/example/viby/download/DownloadService.java
• app/src/main/java/com/example/viby/download/DownloadJob.java
• app/src/main/java/com/example/viby/ui/YoutubeLoginActivity.java
• app/src/main/java/com/example/viby/util/YtCookies.java
Playback and Audio Effects
PlaybackService owns long-lived background audio, media notification/session behavior, queue progression, shuffle/repeat, and the Media3/ExoPlayer lifecycle. UI observes/controls it through PlayerViewModel; it should not directly own playback resources. Equalizer effects attach at the Android audio-session boundary and expose preset definitions separately.
• app/src/main/java/com/example/viby/playback/PlaybackService.java
• app/src/main/java/com/example/viby/ui/PlayerViewModel.java
• app/src/main/java/com/example/viby/playback/EqFx.java
• app/src/main/java/com/example/viby/playback/EqPresets.java
Library, Queue, and Presentation Flow
Library screens render persisted tracks and playlists through adapters; selection/context actions change queue, playlist membership, or files/database records. QueueFragment represents the playback queue, while PlayerFragment provides transport controls and waveform seeking. Waveform generation/extraction is a local media-processing concern, not a download-service responsibility.
• app/src/main/java/com/example/viby/ui/QueueFragment.java
• app/src/main/java/com/example/viby/ui/TracksAdapter.java
• app/src/main/java/com/example/viby/ui/PlaylistsAdapter.java
• app/src/main/java/com/example/viby/util/WaveformExtractor.java
Key Boundaries and External Dependencies
The app has no server: YouTube is the external content source, while yt-dlp/FFmpeg are bundled on-device execution dependencies. Android app-scoped external storage is the media boundary, mediated by storage utilities. UI resources provide the Android presentation layer and localization/theme assets.
• app/src/main/java/com/example/viby/util/StorageHelper.java
• app/src/main/res/layout/activity_main.xml
• app/src/main/res/layout/fragment_player.xml
Main entry points: MainActivity.java MainActivity · DownloadService.java DownloadService · PlaybackService.java PlaybackService · VibyDatabase.java VibyDatabase
Components 17
Android UI
Activities, fragments, and presentation resources.
- VibyApp
app/src/main/java/com/example/viby/VibyApp.java - MainActivity
app/src/main/java/com/example/viby/ui/MainActivity.java - PlayerFragment
app/src/main/java/com/example/viby/ui/PlayerFragment.java - QueueFragment
app/src/main/java/com/example/viby/ui/QueueFragment.java - DownloadActivity
app/src/main/java/com/example/viby/ui/DownloadActivity.java - Track & playlist adapters
app/src/main/java/com/example/viby/ui/TracksAdapter.java
Local Library
Persistent metadata and app-scoped media.
- VibyDatabase · Tracks, playlist metadata, and pending downloads.
app/src/main/java/com/example/viby/data/VibyDatabase.java - Music storage · Downloaded files are organized by playlist.
app/src/main/java/com/example/viby/util/StorageHelper.java
Download Pipeline
On-device YouTube extraction and import.
- DownloadService
app/src/main/java/com/example/viby/download/DownloadService.java - DownloadJob · Coordinates track or playlist progress and resume state.
app/src/main/java/com/example/viby/download/DownloadJob.java - YouTube auth & cookies
app/src/main/java/com/example/viby/ui/YoutubeLoginActivity.java - YouTube
- yt-dlp + FFmpeg · Extracts, transcodes, tags, and embeds cover art on-device.
Playback
Background playback, queue, and effects.
- PlaybackService · Owns Media3 playback, notification/session, and queue progression.
app/src/main/java/com/example/viby/playback/PlaybackService.java - PlayerViewModel
app/src/main/java/com/example/viby/ui/PlayerViewModel.java - EqFx & presets · Applies platform equalizer settings to the playback audio session.
app/src/main/java/com/example/viby/playback/EqFx.java - WaveformExtractor
app/src/main/java/com/example/viby/util/WaveformExtractor.java
Connections 22
- VibyApp → MainActivity: launches
- MainActivity → PlayerFragment: hosts
- MainActivity → QueueFragment: hosts
- MainActivity → Track & playlist adapters: renders library
- Track & playlist adapters → VibyDatabase: reads and updates
- DownloadActivity → DownloadService: submits URLs
- DownloadActivity → YouTube auth & cookies: requests login
- YouTube auth & cookies → YouTube: authenticates with
- DownloadService → DownloadJob: runs
- DownloadJob → VibyDatabase: persists pending state
- DownloadService → yt-dlp + FFmpeg: invokes
- yt-dlp + FFmpeg → YouTube: retrieves media
- yt-dlp + FFmpeg → Music storage: writes tagged MP3s
- DownloadService → VibyDatabase: imports library records
- PlayerViewModel → PlaybackService: observes and controls
- PlayerFragment → PlayerViewModel: binds controls
- QueueFragment → PlayerViewModel: changes queue
- PlaybackService → Music storage: plays local files
- PlaybackService → VibyDatabase: loads library and queue
- PlaybackService → EqFx & presets: provides audio session
- PlayerFragment → WaveformExtractor: requests seeking waveform
- WaveformExtractor → Music storage: reads local media