README.md

August 3, 2026 ยท View on GitHub

mpvRx

Feature-rich, Efficient Powerful Android video player based on libmpv.
No ads. No trackers. No noise. Just a serious video player with a calmer surface and a sharper edge.

Important

Well Development is now Resumed


Showcase




Features

mpvRx pushes the mpv-android experience further with deep customization, thermal-aware performance, and unique quality-of-life features. Here's what sets it apart:

๐ŸŽจ Theme & Visual System
FeatureDescription
25+ Color ThemesDefault, Dynamic (Material You), Catppuccin, Nord, Tokyo Night, Rose Pine, Gruvbox, Dracula, and many more
AMOLED Pure Black ModeEvery theme has a dedicated variant with pure black backgrounds
Player Controls Animation5 animation styles: Default, Elastic Bounce, Cinematic Scale, Slide Up, Minimal Fade
Always Dark ModeOption to keep player controls in dark theme regardless of app theme
Themed Player ControlsAdaptive controls that match your app theme or system accent
Material 3 Expressive UIExpressive components, spring-based navigation, responsive grids, and polished predictive-back motion
๐Ÿ–๏ธ Gesture System
FeatureDescription
Refined Tap LogicConfigurable double-tap seek zones (left/center/right) with independently assignable actions
Multi-Tap Continuous SeekingTriple/quadruple tap to keep seeking further without lifting
Horizontal Swipe to SeekSwipe across video to seek with live time/delta overlay
Long-Press Dynamic SpeedLong-press activates configurable speed boost; swipe left/right to adjust across 8 presets
Subtitle Drag GestureLong-press center screen to drag subtitles vertically when active
Subtitle Zoom & Dialogue SeekPinch subtitle text to resize it and swipe across subtitles to seek between dialogue lines
Pinch-to-Zoom with PanPinch to zoom (-1x to 3x) with simultaneous pan and single-finger pan after zoom
Volume Boost via GestureVertical swipe volume can exceed 100% into configurable boost range
Swap Volume/Brightness SidesOption to swap which screen side controls volume vs brightness
๐Ÿ“บ HDR & Video Pipeline
FeatureDescription
Shader-Based HDR PipelinePowered by hdr-toys โ€” 77 bundled GLSL shaders
Four HDR ModesBT.2100 PQ (HDR10), BT.2100 HLG, BT.2020 gamut mapping, Linear HDR
SDR-to-HDR BoostBoost SDR content into HDR range when using Linear HDR pipeline
GPU DebandCPU (gradfun) or GPU deband with configurable iterations, threshold, range, grain
Smart Render BackendAuto-selects between OpenGL/Vulkan and gpu/gpu-next based on device support
๐Ÿ”ฅ Thermal & Battery Management
FeatureDescription
ThermalMonitorSamples thermal headroom every 10s during playback
Adaptive Shader BudgetAmbient shader budget auto-capped based on thermal headroom
Anime4K Proactive ThrottlingAuto-downgrades Anime4K quality when thermal headroom drops below 40%
Background Poll OptimizationPosition poll interval doubles when controls are hidden, cutting JNI wake-ups 50%
Stats Poll BackoffStats page poll loop backs off from 1s to 2s when playback is paused
๐Ÿงฉ Anime4K & Upscaling
FeatureDescription
7 Preset Quality TiersOff, A, B, C, A+, B+, C+ with clean switching
Quality Tiers in Decoder SettingsFast / Balanced / High quality choices
4K/8K Safety GuardAuto-disables Anime4K for high-resolution content
Thermal-Guarded SelectionAuto-downgrades quality tier under thermal pressure before frame drops
๐Ÿ’ก Ambient Mode
FeatureDescription
Two Visual ModesGLOW and FRAME_EXTEND โ€” both rendered via custom GLSL at runtime
15+ Configurable ParametersBlur samples, glow intensity, saturation, warmth, vignette, dither noise, and more
Shader Recompilation CachingSkips recompilation when parameters match last compiled version
๐Ÿ“ Subtitle System
FeatureDescription
Dual Subtitle SupportPrimary + secondary with auto-offset to prevent overlap
ASS Override ModesSmart force/scale handling for secondary subtitles
Comprehensive StylingFont, size, bold, italic, border, shadow, colors, justification, scale by window
Three Online Search ModesWyzie, SubtitleHub (6 aggregated sources), and Hybrid (both merged)
TMDB IntegrationFull media search with season/episode browsing for subtitles
Subtitle Font ManagerChoose a font directory, reload fonts, clear the cache, and select a default subtitle font
Speech-to-Subtitle GenerationExperimental subtitle generation from the active audio using supported cloud or offline Whisper providers
Explicit Subtitle OffDisable subtitles directly without cycling through every available track
๐ŸŽฎ Player Controls
FeatureDescription
Fully Customizable LayoutFour configurable zones (top-left/right, bottom-left/right) + portrait bottom row
25+ Button TypesCast, Mirror, Vertical Flip, A-B Loop, Custom Skip, Background Playback, Ambient, and more
Custom User ButtonsCreate arbitrary buttons executing Lua, JavaScript, or mpv commands
Landscape/Portrait Adaptive LayoutsCompletely different control layouts per orientation
"Slide to Unlock" ControlsSlide mechanism when controls are locked
Hide Button BackgroundsTransparent buttons with only icons visible
Centralized "More Sheet"Quick access to all player buttons and custom controls
In-Player SettingsToggle 10+ settings (gestures, PiP, UI behavior) without leaving playback
๐Ÿ“บ Google Cast
FeatureDescription
Native Cast ButtonStandard stateful Google Cast route icon in both portrait and landscape player controls
Device DiscoveryGoogle Cast framework discovery and native device chooser for Chromecast and Cast-enabled TVs
Position HandoffTransfers the current title, play state, duration, and playback position to the receiver
Local File CastingTokenized temporary LAN server exposes file:// and content:// media with byte-range seeking and CORS headers
Remote Stream CastingDirect handoff for receiver-accessible HTTP and HTTPS media URLs
Expanded Remote ControlsCast SDK controller, notification, lock-screen actions, reconnection, and receiver volume controls
Return to PhoneRestores local playback at the receiver's latest position when the Cast session ends

Cast uses Google's Default Media Receiver. The TV/Chromecast must support the media container and codecs; mpv-only formats are not transcoded automatically.

๐Ÿงญ Smart Orientation
FeatureDescription
8 Orientation ModesFree, Video (auto aspect ratio), Portrait, Reverse Portrait, Sensor Portrait, Landscape, Reverse Landscape, Sensor Landscape
Persistent Per-VideoOrientation remembered per-video across sessions
๐Ÿ” File Browser & Navigation
FeatureDescription
Dual Browser ModesAlbum View (folder grid) and Tree View (file manager hierarchy)
Folder PinningPin frequently accessed folders to top
Single-Child Auto-FlattenFolders with one subfolder auto-flatten for faster browsing
Auto-Scroll to Last PlayedOpens to the last played video position
Recursive File/Folder CountsShows total video count, duration, size computed recursively
"NEW" BadgesConfigurable threshold for new video indicators
Grid/List LayoutPer-orientation column count settings
Multi-Protocol NetworkBuilt-in SMB, FTP, and WebDAV clients
Syncplay RoomsJoin a Syncplay server room to synchronize pause, resume, seeking, and playback position with other viewers
Responsive & Dual-Pane LayoutsAutomatic grid sizing plus optional folder/settings dual-pane views on tablets
Audio Library ModeMediaStore and filesystem audio browsing with square artwork, metadata titles, and mixed sibling playlists
Safer Folder DeletionMedia-only folder deletion by default, with an explicit option to delete every contained file
Settings Search MemorySearch suggestions and recently used settings queries
๐Ÿค– AI Integration
FeatureDescription
Provider SupportOpenAI, Anthropic, Groq, OpenRouter, Together, and OpenCode Zen with provider-specific models and API protocols
AI Subtitle TranslationTranslate subtitles with custom prompts
AI Subtitle FormattingReformat subtitle styling with custom prompts
AI File RenamingBulk rename video files with custom rename prompts
Reasoning-Safe ParsingRemoves reasoning blocks and code fences while accepting structured provider responses and citations
Speech ProvidersCloud transcription plus experimental offline Whisper subtitle generation
๐Ÿ“œ Scripting & Editor
FeatureDescription
Dual LanguageLua (.lua) and JavaScript (.js) script support
Sora Code EditorBuilt-in editor with TextMate syntax highlighting
Runtime Script LoadingEnable/disable scripts without restarting
Lua Module SupportRecursive script-modules/ synchronization enables custom scripts to use require() helpers
Config EditorBuilt-in editor for mpv.conf and input.conf
โš™๏ธ Utilities
FeatureDescription
Stats Page 6Live system monitor: FPS, dropped frames, codecs, network sparkline, battery
Video CompressorBuilt-in FFmpeg-based compression with presets
12 Video Filter PresetsVivid, Cinematic, Dramatic, Ghibli Style, Neon Pop, Deep Black, and more
Custom Skip SegmentsIntro/outro/recap/credits/preview detection from IntroDB, TIDB, AniSkip, Anime Skip
A-B LoopIn-player looping with visual markers on seekbar
Frame NavigationFrame-by-frame forward/backward with frame number display
Sleep TimerBuilt-in with quick presets (15/30/45/60 min)
Adaptive Background PlaybackAuto-PiP on Home, auto-resume after screen unlock
Unified Background PlaybackOne persistent audio/video switch; Back can return to browser lists without stopping the current media
Notification StylesNone, Media, or Progress with Chapters (Android 16+)
Safe Area / Window OffsetPrevents camera notch overlap
Display Cutout ModeFull-bleed on notch devices
Remember BrightnessPersists brightness level set during playback
M3U Playlist SupportParse and play local M3U playlists
yt-dlp IntegrationHigh-performance streaming support for YouTube, Twitch, Bilibili, and more via a native Python bridge (SDK 29+ bypass)
yt-dlp Quality ControlsIndependent codec, resolution, FPS, HDR, container, and audio-bitrate preferences
Dynamic Refresh RateMatches supported display refresh rates to the current video's frame rate for smoother motion
Audio Blob VisualizerOpenGL ES 3.0 FFT-reactive blob with bloom, touch rotation, pinch zoom, and an Audio Settings toggle
Screenshot TemplatesFilename placeholders for source name, playback position, and millisecond-accurate timestamps

๐Ÿ”‹ Battery Optimization guide for Mpv

First Pro Tip Keep Mpv Conf empty if you are newbie

  • Use gpu not gpu-next โ€” gpu-next is a Vulkan-based renderer that keeps the GPU awake for no reason when playing normal video. The classic gpu backend is lighter and uses the OpenGL driver stack, which on most Android devices has better power characteristics.
  • Disable Vulkan entirely. Vulkan is great for Video Playback but also Heavy.
  • Use the fast mpv profile. It's literally built into mpvRx use that Mpv Profiles and Set it to Default or in mpv.conf profile=fast
  • Don't use shaders. That Anime4K preset you using that's what's eating your battery. Shaders run on the GPU every single frame. If you're watching 24fps content and you have a shader pipeline running, congratulations โ€” you're doing 24 unnecessary GPU compute passes per second for a Minute amount of visible benefit on a phone screen .
  • Don't use AI-generated configs. That means you, the person who copied a Reddit config with 200 lines of scale=ewa_lanczossharp and dscale=mitchell and cscale=sinc and a dozen glsl-shaders entries. Most of You have no idea what any of those do. You just made your phone render video like it's preparing for a 4K cinema projection. On a 6-inch screen. Grow some Brains Its your android Phone not some Fuckin.. 4k Television

My POV: mpv's default config with profile=fast and the gpu backend plays video with negligible battery impact โ€” often less than OEM players because mpv doesn't have a billion proprietary DRM modules, analytics SDKs, and ad frameworks burning CPU in the background. The next time your battery drops more than 20-25% watching a 2-hour movie, don't blame mpv. Blame the 14 shaders you blindly copy-pasted.

Just a Pro tip if your battery consumption stays within 200 mAh and belwo 0.9W ( See Page 6 of mpvRx - video player More Settings -> Page6) useage than ur Mpv Conf are Proper for Video watching thats what i have experimented and telling rest all i don't know About in detail technicality's if anyone wanna tell me In depth guide then keep it to yourself i dont wanna listen


Stable Release

If something breaks, feels off, or deserves another pass, don't be Dumb and ask for Trash Features which only you require it wll be auto deleted, report it in the Issues.


Build

Requirements

  • JDK 17
  • Android SDK with modern build tools installed
  • Git

Debug Build

./gradlew.bat :app:assembleStandardDebug

Release Variants

VariantDescription
standardMain release with in-app update support

APK Variants

VariantDescription
universalWorks on all supported devices
arm64-v8aRecommended for most current Android devices
armeabi-v7aFor older 32-bit ARM devices
x86For 32-bit Intel and AMD Android devices
x86_64For 64-bit Intel and AMD Android devices

Support

If you find mpvRx useful and would like to support its development, consider buying me a coffee! Your support keeps the project alive and helps push new features.

โ˜• Buy Me a Coffee

Buy Me a Coffee

UPI

panditritesh2001@okhdfcbank

UPI QR Code

Scan with any UPI app (Google Pay, PhonePe, Paytm, BHIM)


Release Notes For Maintainers

To cut a signed GitHub release through Actions, configure these repository secrets:

Secret NameDescription
SIGNING_KEYSTOREBase64-encoded keystore file (.jks or .keystore)
SIGNING_KEY_ALIASKey alias inside the keystore
SIGNING_STORE_PASSWORDPassword for the keystore
KEY_PASSWORDPassword for the signing key

Then bump versionCode and versionName in app/build.gradle.kts, create a tag, and push it:

git tag -a v1.3.1 -m "Release version 1.3.1"
git push origin v1.3.1

Preview releases use the same flow with preview tags such as:

git tag -a v1.3.1-preview.1 -m "Preview release"
git push origin v1.3.1-preview.1

Acknowledgments


License

Distributed under GNU Affero General Public License v3.0 (AGPL-3.0-or-later). See LICENSE for more information.


Star History

Star History Chart