I built Omni because every downloader app I tried either broke after a YouTube update, had obnoxious ads, or made you jump through hoops to get a decent quality file. I wanted something that just works: paste a link, pick a format, get the file.
It uses yt-dlp and FFmpeg under the hood, which means it supports 700+ sites and actually merges video and audio streams instead of giving you a muxed fallback. The engine updates itself automatically so YouTube changes don't randomly break everything.
No ads, no account, no nonsense.
| Home | Library | Favorites | Video Options | Audio Options | Downloads | Settings |
|---|---|---|---|---|---|---|
| Home | Library | Favorites | Video Options | Audio Options | Downloads | Settings |
Downloading: Supports YouTube, Instagram, TikTok, Twitter/X, SoundCloud, Vimeo, Reddit and hundreds more. Video and audio streams are merged via FFmpeg so you get the real highest quality. The format picker only shows options that actually exist for that video (no fake qualities). Audio downloads can embed the thumbnail directly into the file so your MP3s have cover art everywhere.
Playback: The built-in player uses ExoPlayer (Media3) with background audio, lock screen controls, Picture-in-Picture, and a MiniPlayer that stays visible while you browse the app. On Android 12+, PiP activates automatically when you leave the app mid-video.
Interface: Material You adapts the colors to your wallpaper. Fully edge-to-edge with dark/light themes and an option to reduce animations.
Language Kotlin
UI Jetpack Compose + Material Design 3
Architecture MVVM (ViewModel + StateFlow)
Download Engine youtubedl-android (yt-dlp) + FFmpeg
Player Media3 (ExoPlayer) + MediaSession
Database Room
Preferences DataStore
Images Coil
The APK is 30MB+ because it ships with a full FFmpeg build. It's only on GitHub releases, no Play Store.
Paste the repo URL into Obtainium and it handles updates automatically:
https://github.com/ferrdishx/Omni
Requirements: Android 8.0+ · ARM64 / ARMv7 / x86_64
Copy a link from any app and paste it into Omni (or use the share menu). Pick your format, only real options show up. Hit Start Download and track progress in the Downloads tab. Files go to Downloads/Omni.
On first launch, Omni downloads the yt-dlp engine (~15MB). This happens once.
git clone https://github.com/ferrdishx/omni.git
cd omniOpen in Android Studio Hedgehog or newer, sync Gradle, run. JDK 17 and Android SDK 35 required.
- Universal video/audio download
- Real format & quality detection
- Embedded thumbnail in audio files
- ExoPlayer with background playback
- Picture-in-Picture
- MiniPlayer
- Favorites & Library
- Playlist download
- Sleep timer
- SponsorBlock integration
- F-Droid release
Omni is built on top of other open source work. A few things worth calling out specifically:
RetroMusicPlayer (GPL-3.0, h4h13 and contributors): I borrowed the Settings screen structure, the accordion sections with colored circular icons and the dynamic palette extraction from artwork as a blurred background tint in the player.
YtDlnis (GPL-3.0, deniscerri): The download history data layer, HistoryItem entity structure, and the DAO query patterns for sorting and filtering by status came from here.
Libraries:
| Library | Purpose | License |
|---|---|---|
| youtubedl-android | yt-dlp wrapper | GPL-3.0 |
| ffmpeg-kit | FFmpeg for Android | LGPL-3.0 |
| Media3 (ExoPlayer) | Playback | Apache-2.0 |
| Coil | Image loading | Apache-2.0 |
| Room | Local database | Apache-2.0 |
| DataStore | Preferences | Apache-2.0 |
| Palette | Dynamic color extraction | Apache-2.0 |
Omni is a tool. You're responsible for what you download with it. Only download content you have the right to.
No affiliation with YouTube, Google, or any platform it supports.
PRs welcome. Open an issue first for anything significant.
git checkout -b feat/your-featureGPL-3.0 · Built by ferrdishx