Vexxx Mobile - Releases Soon for Venti (Patreon)
Content
Vexxx Mobile — Features
Native Android client for your self-hosted Vexxx media library. Built entirely in Kotlin with Jetpack Compose and Media3, Vexxx Mobile gives you a first-class touch experience on phones and tablets without compromising on power.
Player
Inline Playback on Scene Detail
Tap Play and the video starts right in the scene’s hero banner — no jumping to a separate screen. Your performers, tags, chapter markers, and related scenes stay fully scrollable beneath the player.
Fullscreen with One Tap
Hit the fullscreen icon in the player controls and the device locks to landscape, immersive mode kicks in (status bar, nav bar — all gone), and the video expands to fill the screen. Tap again or press Back to return to the inline view.
Pinch-to-Zoom
Pinch open on any player surface — inline or fullscreen — to switch from letterboxed fit to a cropped zoom. Pinch back to restore. Works on both orientations.
Double-Tap to Seek
Double-tap the left half of the player to rewind 10 s, right half to skip forward. Rapid taps on the same side accumulate — three taps on the right skips 30 s. A translucent circle flash confirms direction and total offset.
VTT Sprite Scrub Preview
Drag the seek bar and a thumbnail strip appears showing the exact frame at that position, using the server’s generated VTT sprite sheet.
Chapter/Marker Bar
A tap-to-seek marker bar sits beneath the player with screenshots for every chapter. Tap any chip to jump directly to that moment in the inline player.
Picture-in-Picture
Press the home button while playing and the player shrinks to a floating overlay so you can keep watching while you multitask.
Resume Playback
Open a scene you’ve watched before and Vexxx Mobile automatically offers to resume where you left off, or restart from the beginning. Your progress is reported back to the server every 10 s.
Play Count Tracking
After watching 10 % of a scene, the server play count increments automatically.
MediaSession Integration
Lock-screen and notification transport controls (play, pause, seek) backed by a proper MediaSession — compatible with Bluetooth headsets, Android Auto, and assistant queries.
Adaptive Buffering
Buffer sizes tune themselves to available RAM so playback stays smooth on low-memory devices.
Scene Detail
Full-width 16:9 hero with screenshot or inline player
Performers, tags, studio chip with logo, rating, date, and file details
Chapter markers with screenshots — tap to seek inline
Related scenes grid
Scene-specific Generate dialog — trigger sprite, preview, marker, phash, or clip-preview generation for just this scene
Edit button — change title, date, details, organised flag without leaving the app
Browse & Search
Tabbed grids for Scenes, Performers, Studios, Groups, Galleries, Images, Tags, Playlists
Global text search across all entity types
Filter sheets on every tab — sort field, sort direction, rating, date ranges, duration ranges, organised flag, markers, previews, interactive, gender, orientation, birth year, performer favourites, relationship pickers (multi-select performers, tags, studios)
Active filter chip bar showing sort field and badge count of applied filters
Animated WebP card thumbnails where available
Pagination with a live total item count display, e.g. < 3/30 > (1163)
Pull-to-refresh on every screen — swipe down to reload from the server
Home Screen
Customisable carousel layout:
| Carousel | Description |
| Recently Released | Scenes sorted by release date |
| Recently Added | Scenes sorted by date added to server |
| Recently Played | Your last-watched scenes |
| Recommended | Server-curated recommendations |
| Recent Galleries | Galleries sorted by creation date |
Customise Home in Settings lets you toggle carousels on/off and drag them into any order — drag handle, no long-press required.
Long-Press Context Menu
Long-press any scene card anywhere in the app for a YouTube-style bottom sheet:
Play now — opens the player immediately
Play next — inserts the scene right after the current queue position
Add to queue — appends to the end of the playback queue
Add to playlist — lazy-loads your server playlists; one tap adds the scene
New playlist… — creates a new playlist inline without navigating away
Playlists & Queue
Playlists tab — paginated grid of all server playlists with search
Playlist Detail — item list, tap any scene to play from that position, or Play All to queue everything
Group “Play All” — one button to queue all scenes in a group and start playing
Queue persistence — the active queue (scene IDs, position, playlist name) is saved to DataStore and survives app restarts and process death
Library Management & Tasks
Library scan — full or selective (directory picker), configurable generate options
Metadata generate — covers, sprites, previews, phashes, markers, clip previews, per scene or library-wide
Metadata identify — connect to a stash-box source to auto-tag scenes
Library path management — add/remove server stash paths with excludeVideo / excludeImage flags
Full filesystem browser — navigate the server’s directory tree to pick paths
Task Dashboard
Live job queue with real-time WebSocket updates
Progress bars with percentage complete and ETA (34% • ~2m 15s remaining) or elapsed time when indeterminate
Cancel individual jobs or clear the entire queue
Foreground notification when tasks are running — taps back to the app
Detail & Edit Screens
Full edit panels for every entity type — field parity with the Vexxx web app:
| Entity | View | Edit |
| Scene | ✅ | ✅ |
| Performer | ✅ | ✅ |
| Studio | ✅ | ✅ |
| Group | ✅ | ✅ |
| Gallery | ✅ | ✅ |
| Image | ✅ lightbox | ✅ |
| Tag | ✅ | ✅ |
Performance
Apollo SQLite normalized cache + 5 MB memory cache — GraphQL object graph persists across restarts; detail screens open instantly on revisit
Apollo HTTP disk cache — 50 MB response cache; cacheable queries served from disk without a network round-trip
Apollo watch() on detail screens — reacts automatically to mutations (edits, generates) without a full network re-fetch
@Stable on all 28 UiState classes — Compose skips recomposition of unchanged subtrees
Stable list keys — partial data changes don’t trigger full list recomposition
Coil image caches — 15 % of heap (memory) + 512 MB (disk) for smooth scrolling in large grids
Browse search debounced 300 ms — no redundant page requests on fast typing
Home invisible-section guard — hidden carousels never trigger network calls
Setup
Server setup wizard — enter your Vexxx server URL (http or https, custom port) and optional API key; live connection test with clear error feedback
Auto-reconnect — skips the setup screen on launch if saved credentials still work
LAN scanner — tap to auto-discover Vexxx servers on your local network without typing an IP