README.md
May 30, 2026 · View on GitHub
JellyTunes
Sync your Jellyfin music library to any USB drive, SD card or local folder — with optional FLAC to MP3 conversion.
JellyTunes is a desktop app for Jellyfin users who want to take their music offline. Browse your server's artists, albums, and playlists, pick a destination — a USB drive, SD card, or any local folder — and hit sync. JellyTunes downloads everything, converts formats if needed, and mirrors your server's folder structure at the destination.
Key Features
- Browse your full library — artists, albums, and playlists pulled directly from your Jellyfin server
- Sync anywhere — USB drives, SD cards, and local folders all work as destinations
- Selective sync — only downloads what's new or changed; skips tracks already at the destination
- Out-of-sync detection — tracks that changed on the server since the last sync are automatically flagged for update
- Sync preview — review exactly what will be added, updated, or removed before you commit to a sync
- FLAC to MP3 conversion — built-in FFmpeg support with configurable bitrate (128k / 192k / 320k); settings saved per device
- Smart storage bar — visual capacity indicator with live size estimates; warns when your selection exceeds free space
- Smart filesystem handling — auto-detects FAT32, exFAT, and NTFS; sanitizes filenames accordingly
- Per-destination history — remembers what was synced to each device or folder so you can pick up where you left off
- Cancel anytime — stop a sync mid-progress without corrupting what's already been written
Screenshots
Browse your library · Sync to any device with optional MP3 conversion
Installation
Download the latest release for your platform from GitHub Releases:
| Platform | File |
|---|---|
| macOS | .dmg |
| Windows | .exe installer |
| Linux | .AppImage or .deb |
Open the installer and follow the prompts. No additional setup is required — FFmpeg is bundled with the app.
macOS: "App is damaged" or Gatekeeper warning
JellyTunes is not signed with an Apple Developer certificate. macOS may block it on first launch, especially on macOS 15 (Sequoia). To open it:
Option A — via Terminal (recommended):
xattr -cr /Applications/JellyTunes.app
Then open the app normally.
Option B — via System Settings:
- Try to open the app (it will be blocked)
- Go to System Settings → Privacy & Security → Security
- Click "Open Anyway" next to the JellyTunes entry
Prerequisites
- A Jellyfin server reachable on your network
- A USB drive, SD card, local folder, or any mounted storage device as destination
Development
Everything below is for contributors and developers who want to build JellyTunes from source.
Setup
git clone https://github.com/orainlabs/jellytunes.git
cd jellytunes
pnpm install
pnpm dev
This starts the Vite dev server and launches the Electron window.
Requirements: Node.js 18+ and pnpm
Commands
# Development
pnpm dev # Start dev server + Electron
pnpm build # Compile with electron-vite
pnpm typecheck # TypeScript type checking
# Testing
pnpm test # Unit tests (Vitest)
pnpm test:unit:watch # Unit tests in watch mode
pnpm test:bdd # BDD tests headless (Cucumber + Playwright)
pnpm test:bdd:dev # BDD tests with visible UI
# Packaging
pnpm package # Build + create installers
Architecture
Three Electron processes plus a standalone sync engine:
- Main process (
src/main/) — IPC handlers, USB/filesystem detection, sync orchestration - Preload (
src/preload/) — typed IPC bridge between main and renderer - Renderer (
src/renderer/) — React UI for library navigation, device selection, and sync progress - Sync module (
src/sync/) — dependency-injected sync engine (API client, file ops, FFmpeg converter); fully unit-testable without hitting the network or filesystem
Contributing
See CONTRIBUTING.md for guidelines on reporting bugs, submitting changes, and code style.
License
This project is licensed under the GNU General Public License v3.0 — see the LICENSE file for details.

