Jellyfin for Android XR & beyond

Turn your headset into a real spatial cinema.

Built XR-first, then folded down to phone and TV from one codebase. Full Space cinema, stereoscopic 3D, spatial audio, an on-device AI voice assistant, anime-grade subtitles that survive casting, and multi-protocol casting (FCast, Google Cast, AirPlay).

XR + Phone + TV On-Device AI Assistant Anime-Grade Subtitles Encrypted Downloads Companion Hub Network Shares (SMB/NFS) Offline Engine FCast · Google Cast · AirPlay Split-A/V on Galaxy XR Music Assistant Client SendSpin Receiver
SpatialFin app icon
SpatialFin immersive spatial panels
SpatialFin translucent XR interface
XR-native controls Larger targets, clearer actions, fewer phone-style compromises.
Playback that respects the format 3D, subtitles, bitrate selection, downloads, and local files.
Immersion

Designed for headset-scale viewing

Full Space Mode, spatial panel placement, and room-scale interactions make the player feel native to XR instead of adapted from a phone UI.

Playback

Built for real media libraries

Stereoscopic formats, spatial audio, libass subtitle rendering, bitrate control, version selection, downloads, and local playback are first-class.

Control

Hands-free and social by default

Voice commands, in-player AI search, and native Jellyfin SyncPlay keep playback comfortable whether you are solo, remote, online, or offline.

See it in motion

Watch the SpatialFin trailer

The current build running in Android XR, including the spatial presentation and player experience.

Why SpatialFin

An XR media client that goes deeper than a skin.

Built XR-first and tuned for how media actually feels inside a headset — then the same codebase folds down to a native phone and Android TV experience.

Immersive spatial panels
Immersive XR

Headset-scale layouts

Massive spatial panels, restored window placement, orbiting controls, and readable action surfaces built specifically for Android XR.

Setup

Instant Configuration

Scan a QR code from the Companion App to setup servers and users instantly.

On-Device AI

Ask it anything

An open-palm gesture starts a local Gemma assistant that knows the last 60s of subtitles — "what just happened?" works offline, no cloud key required.

Connectivity

Network Shares

SMB and NFS support with automatic discovery and TMDB enrichment.

Smart Playback interface
Intelligence

Smart Playback Engine

Ordered spoken languages, original-audio preference, and series-level memory reduce repetitive track management.

The Full Stack

Everything designed for depth and distance.

Explore the complete technical depth of SpatialFin by category below.

Agency & Placement

  • Home + Full Space: Launches in Home Space for side-by-side multitasking; switch to Full Space for a cinematic, theater-scale experience.
  • Interactive Agency: Grab and move the entire application or video player window anywhere in 3D space.
  • Native XR Controls: Material 3 for XR orbiters float secondary controls in space.
  • Persistent Windows: The app remembers where you placed your panels in the room.

Visual Layout

  • XR-First Layouts: Larger typography and labeled action buttons instead of dense icon-only controls.
  • Large-Target Playback UI: Larger controls and a dedicated chapter picker for easier hand-first interaction.
  • Glassmorphic Aesthetic: A UI that feels like it belongs in your physical environment.

Visuals & Audio

  • Stereoscopic 3D: Automatic detection and rendering of SBS, top-bottom, and other 3D formats.
  • Spatial Audio: High-fidelity positional audio that pins sound to the screen's location.
  • Pixel-Perfect Subtitles: Integrated libass JNI renderer for ASS/SSA anime subtitles.

Quality & Selection

  • Version Selection: Choose between different versions, such as 3D vs. 2D or 4K vs. 1080p.
  • Adaptive Quality: Pick a resolution preset (Auto / 4K / 1080p / 720p / 480p / 360p); Auto steps down when the network can't keep up.
  • Smart Language Handling: Spoken-language ordering and subtitle fallback logic.

Assistant Features

  • Unified Smart Assistant: Hold an open palm near your face, or use the mic orbiter, for voice commands and natural-language questions.
  • Tiered AI Routing: Deterministic parsing first, then on-device LiteRT Gemma, with optional cloud Gemini fallback when you supply your own API key.
  • Contextual Awareness: The assistant uses a rolling subtitle buffer and current playback state for accurate clarifications.
  • Stateful Follow-Ups: "Shorter," "movie only," "more like the second one" all chain off the previous recommendation.

Feedback & Diagnostics

  • Spatial TTS Feedback: The assistant replies aloud with automatic media-volume ducking.
  • In-Player AI Search: Voice search opens as a spatial overlay so you never leave playback.
  • Voice Telemetry Dashboard: Per-attempt strategy, skill, and outcome are logged locally to make tuning the assistant straightforward.

Watch Parties

  • Jellyfin SyncPlay: Native support for creating, joining, and mirroring watch party states.
  • Real-time Sync: Seamlessly stay in step with friends regardless of their device type.
  • Group Management: Easy group joining directly from the spatial interface.

Ecosystem

  • Server Connectivity: Deep integration with Jellyfin for libraries and collections.
  • Seerr Integration: Connect Jellyseerr or Overseerr to search and request media.
  • Multi-Protocol Casting: One picker, three protocols — FCast (full v4 with NTP-style clock sync), Google Cast (Chromecast), and AirPlay v1 (Apple TV / AirPlay speakers). SpatialFin↔SpatialFin FCast casts keep native styled ASS subtitles and embedded fonts intact; when a receiver can't render them, SpatialFin transparently switches to a server-side burn-in transcode and tells you, instead of silently dropping the typesetting. As a receiver, an opt-in service accepts inbound media (such as YouTube via compatible apps, or public HLS/DASH URLs) — fetching embedded fonts so inbound anime renders correctly — with optional autopromote into XR Full Space.
  • Split-A/V on Galaxy XR: Watch a movie on the headset while the audio plays through a phone, Google TV Streamer, or any SpatialFin-running device on the same Wi-Fi. The XR holds the video master clock; the receiver renders audio after a one-time matched-filter calibration chirp that measures speaker + codec latency. An FCast v4 NTP exchange disciplines a shared clock so both ends can be started already aligned, then a continuous PI drift controller — fed by a freshness-gated beacon and an outlier-rejecting estimator — holds lip-sync over hours instead of bang-bang nudging. Tap Stop on the receiver and the headset unmutes automatically so the movie keeps playing locally — no interruption.

Direct Streaming

  • SMB & NFS Support: Stream media directly from network shares without a Jellyfin server.
  • mDNS Discovery: Automatically find network shares on your local network.
  • Metadata Enrichment: TMDB matching for posters, descriptions, and ratings on local files.

Local Playback

  • Local Storage: Browse and play videos stored directly on the XR device.
  • HTTP Proxy Bridge: High-performance seek support for network streams.
  • Local Resume: Progress and unplayed status tracked per video file.

Downloads

  • Resumable Engine: Downloads survive app restarts and network swaps.
  • Configurable Options: Choose between original files or smaller transcoded versions.
  • Foreground Tracking: Monitor download progress in real-time from the system tray.

Offline Experience

  • Automatic Mode: Seamlessly switches to offline library when the server is unreachable.
  • Complete Mirroring: Offline items include posters, backdrops, and scrubber thumbnails.
  • Smart Cleanup: Automatically reconciles library if files are removed manually.

First-Class Controller

  • Full Library Control: Browse, search, and play from your Music Assistant library with a unified interface across XR, phone, and TV.
  • Queue Management: Reorder, remove, or jump to tracks in your queue seamlessly.
  • Playlist Editor: Create new playlists, add tracks, and manage favorites directly from the app.
  • Party Mode: Start or join a collaborative queue and see what's playing in real-time.

Audio Integration

  • SendSpin Receiver: Turn your device into a high-fidelity, multi-room synchronized audio endpoint via the native SendSpin receiver service.
  • Deep Android Integration: Android MediaSession support brings lock-screen controls, Bluetooth headset compatibility, and native media notifications.
  • Optimistic UI: A persistent mini-player and full-screen Now Playing interface respond instantly to input, verified by live WebSocket events.

Fleet Management

  • Zero-Type Setup: Configure every detail of the headset from your PC/Mobile browser.
  • Multi-User Authentication: Pre-authenticate multiple Jellyfin accounts via username/password.
  • Remote Preferences: Set language priorities and AI keys centrally.

Advanced Logic

  • Network Share Sync: Direct import of SMB/NFS share details including credentials.
  • PWA Support: Install the dashboard as a standalone app for fast access.
  • Secure Discovery: unique setup tokens protect your local configuration.

SpatialFin is, to our knowledge, the only Jellyfin client that offers on-device encryption for downloaded media. The feature is off by default — enabling it is a deliberate decision about your threat model.

App Lock Modes

  • Off: No prompt on launch. Default state; existing users are never prompted.
  • Biometric / device credential: Android BiometricPrompt with BIOMETRIC_STRONG | DEVICE_CREDENTIAL. When encryption is on, the Keystore key is gated by the biometric prompt via CryptoObject.
  • SpatialFin PIN: A 4–8 digit PIN you manage, hashed with PBKDF2-HMAC-SHA256 (600 000 iterations, random salt). The PIN also derives the encryption key — a forgotten PIN is unrecoverable by design.
  • Wipe-on-wrong-PIN: Configurable 1–3 attempts, then full data wipe via ActivityManager.clearApplicationUserData() plus deletion of the downloads folder.

Encrypted Downloads

  • AES-256-CTR per file: Each new primary-video download is encrypted at finalize time with a random 16-byte IV. Subtitles and pre-existing downloads stay plain.
  • Keystore-wrapped DEK: A random 32-byte data-encryption key, wrapped on disk by a key-encryption key that matches the app-lock mode. Hardware-backed in the Keystore on capable devices.
  • DEK in memory only: Decryption happens on-the-fly through a custom Media3 DataSource; the plaintext DEK is zeroed when the app is backgrounded.
  • Delete unencrypted downloads: A Settings action lists pre-existing plaintext files and removes them in bulk. Re-download to get them encrypted.

Companion Enforcement

  • Global or per-device: Administrators can enforce the app-lock mode and encryption setting globally, or per device via the new devicePreferences map in the companion config.
  • Live push over WebSocket: When the admin changes a preference, the companion broadcasts config_changed and SpatialFin re-syncs within seconds.
  • Onboarding step: First-run asks the user to pick an app-lock mode before finishing setup, so security posture is set intentionally.

Threat Model

  • Protects against offline file dump of the app's private storage or the Downloads/SpatialFin folder — ciphertext is useless without the KEK.
  • Protects against process-level execution while locked — the DEK is not in memory; unwrapping requires biometric auth or the correct PIN.
  • Does not protect against a rooted device actively running SpatialFin with the DEK already in memory, or against streaming playback (only downloaded content is encrypted).

Available Now

Get SpatialFin

SpatialFin is available on the Google Play Store for your Android XR headset, phone, and TV.

Download on Google Play