losslesslogic
All projects
Resona app icon

Project 01 · Since 2026

Resona

A self-hosted server and iOS app for a lossless music library

Private beta on TestFlight

Resona, Home screen
Resona, Playlist screen
Resona, Now Playing screen

Resona streams my own lossless collection from a Mac mini to my iPhone: gapless, bit-perfect where the hardware allows, and entirely under my control.

In the app

Captured in the iOS Simulator, connected to the live server and a real library

  • Resona, Now Playing screen
    Now Playing A 24-bit / 96 kHz track mid-play, over an origami surface rendered live in Metal
  • Resona, Home screen
    Home The album of the day, this week's listening and what's new in the library
  • Resona, Playlist screen
    Playlist Each playlist gets a living ink-flow backdrop
  • Resona, Discover screen
    Discover The whole collection as a tilted wall of covers to wander through
  • Resona, Album screen
    Album Format, bit depth, sample rate, dynamic range and source edition on a single line
  • Resona, Signal path screen
    Signal path Every step from file to speaker, including the point where the sample rate changes
  • Resona, CoverFlow screen
    CoverFlow The library as a shelf of sleeves, one swipe per album
  • Resona, Moods screen
    Moods Mood collections derived from audio analysis on the server
  • Resona, Calm screen
    Calm A daily pick of calm tracks under its own shader material
  • Resona, Listening history screen
    Listening history Five months of listening drawn as growth rings

Why

Streaming services compress, reshuffle and forget. I wanted my own lossless library, with tags fixed by hand and albums in the order they were meant to be heard, to feel as good on my phone as the best commercial players, without handing it to anyone else.

What it does

  • Gapless playback. Live albums and continuous mixes play through with no gap between tracks.

  • An honest bit-perfect path. With a USB DAC attached, Resona measures the output format and only claims bit-perfect when the signal really reaches the DAC untouched.

  • Casting. Hand playback to Chromecast devices on the local network.

  • Offline downloads. Keep albums on the phone, lossless or transcoded to save space.

  • Word-synced lyrics. Lyrics aligned to the recording word by word, generated on the server with Whisper.

  • Mood collections. The server analyses every track with Essentia and groups the library by mood.

  • Loudness. Optional ReplayGain normalisation.

  • Living surfaces. Hand-written Metal shaders give mood and playlist pages their own moving material.

How it is built

Server. .NET on a Mac mini. It indexes the library, streams over HTTP range requests, transcodes with FFmpeg, serves artwork and keeps everything in SQLite. A web console covers first-run setup, device pairing and library maintenance: scans, artwork and metadata repair, merges and backups.

iOS app. SwiftUI, with UIKit where it counts. Playback runs on AVFoundation; the visual surfaces run on Metal.

Around it. A macOS menu-bar remote (ResonaBar), an OpenSubsonic-compatible API so third-party clients work too, and remote access over Tailscale.

Self-hosting. One Docker image with a first-run setup wizard, and optional TLS through Caddy.

Status

In daily use on my own library and in private beta on TestFlight. The app speaks English and Turkish and follows the language of your iPhone.

On the server

Resona, Server console
Server consoleThe web console: library totals, scan status and storage at a glance