Jellyfin for Android XR & beyond

Turn your headset into a real spatial cinema.

SpatialFin is built for immersive playback from the ground up: Full Space Mode, stereoscopic 3D, spatial audio, voice control, offline media, and Jellyfin SyncPlay.

Home + Full Space Encrypted Downloads Companion Hub Voice + AI Search Smart Language Memory Network Shares (SMB/NFS) Offline Engine
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.

Every major layer of the app, from layout and controls to playback and offline behavior, is tuned for how media actually feels inside a headset.

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.

Control

Hands-free control

Voice commands and AI search preserve immersion while you watch.

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.

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.

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).

Beta access

Try SpatialFin before public release

Access is currently handled through the Google Group and Play beta flow. The steps are simple, but the order matters.

1

Join the Group

Join the Google Group first so your account can be approved for beta access.

Join Group
2

Install

Install the current beta build of SpatialFin from the Google Play Store.