README.md

May 30, 2026 · View on GitHub

JellyTunes

JellyTunes

Sync your Jellyfin music library to any USB drive, SD card or local folder — with optional FLAC to MP3 conversion.

Latest Release   License: GPL v3

Support on Ko-fi


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 Jellyfin library    Sync to device with MP3 conversion

Browse your library  ·  Sync to any device with optional MP3 conversion

Installation

Download the latest release for your platform from GitHub Releases:

PlatformFile
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:

  1. Try to open the app (it will be blocked)
  2. Go to System Settings → Privacy & Security → Security
  3. 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.