A local-first audiobook player for iOS. Import folders of audio files, listen with background playback and lock screen controls, track progress per book and chapter, and generate on-device transcripts with Whisper.
- Local library — Drop audiobook folders in Files (
On My iPhone → Raven) or use Add Folder in the app - Automatic import — Scans your library folder on launch and when returning to the app
- Playback — Play/pause, skip ±15s/±30s, speed control (0.75×–2×), sleep timer
- Progress — Saves chapter index and timestamp; resumes where you left off
- Background audio — Lock screen and AirPods controls with artwork
- Mini player — Persistent bar when navigating away from the player
- Transcripts — On-device transcription via WhisperKit with search and SRT/VTT export
- iOS 18+
- Xcode 16+
- Swift 5
- Clone the repository
- Open
Raven.xcodeprojin Xcode - Select your device or simulator
- Build and run (
Cmd + R)
Option A — Files app
- Open Files → Browse → On My iPhone → Raven
- Create a folder for each book (e.g.
My Audiobook/) - Add audio files inside (mp3, m4a, m4b, aac, wav, flac)
- Open Raven — books appear automatically
Option B — In app
- Tap Add Folder in the library
- Pick a folder from Files — it is copied into your Raven library
Raven/
├── Models/ SwiftData (Book, Chapter, TranscriptSegment)
├── Services/ Audio, import, library sync, transcription
├── ViewModels/ Library and player state
├── Views/ SwiftUI screens and components
└── Utilities/ Shared helpers
- MVVM with
@Observableview models - SwiftData for persistence
- AVFoundation for playback
- WhisperKit for on-device speech-to-text
The first transcript download pulls the Whisper tiny model (~75 MB). Transcripts are stored locally per chapter and reused on later playback.
MIT — see LICENSE.