Desktop app for managing music leaks and supporting metadata.
Infra:
- Electron main process backend
- SvelteKit (Svelte 5) renderer
- SQLite database with SQL migrations
- Manage songs, albums, artists, and producers
- Ordered many-to-many relationships
- Mediabunny metadata extraction on upload with artist parsing and mapping flow
- Mediabunny metadata writing back to audio files
- Producer alias matching from filenames
- Artwork handling with album-to-song inheritance
- Optional Apple Music sync on macOS
- Node.js
20+ - pnpm
9+
Install dependencies:
pnpm installRun the desktop app in development mode:
pnpm dev:appRun tests:
pnpm test
cd svelte && pnpm checkThe Electron app is packaged with electron-forge on top of electron-vite and the SvelteKit static build. Output lands in dist-forge/.
pnpm package # .app only, no installers
pnpm make # macOS: builds .app + .zip + .dmgNotes:
- Use Node 20/22 LTS to run
pnpm makeorpnpm package. - Only macOS makers build on a Mac. Other platform makers must run on their own host or CI.
better-sqlite3is rebuilt for Electron during packaging. Runpnpm rebuild better-sqlite3before standalone Electron tests if needed.
- Migrations are stored in
electron/migrations/*.sql.
Data location:
- Development DB:
svelte/local.db - Production DB:
- macOS:
~/Library/Application Support/leaks-manager/local.db - Windows:
~/AppData/Roaming/leaks-manager/local.db - Linux:
~/.local/share/leaks-manager/local.db
- macOS:
Uploaded files:
- Songs:
uploads/songs/ - Artwork:
uploads/artwork/
Both upload folders are created automatically.
Primary workflow methods are in electron/domain/workflows.ts:
UploadAndExtractMetadata(files, albumID?)
- Saves uploaded files
- Extracts metadata
- Parses artists
- Returns unmapped artists and extracted data
-
User maps artists in the renderer.
-
CreateSongsWithMetadata(input)
- Creates artists when requested
- Associates songs, albums, and artwork
- Matches producers from filename
- Writes metadata back to each file
Supported metadata writing target file formats:
- MP3
- FLAC
- M4A
- OGG/Vorbis
.
├── electron/
│ ├── main.ts # Electron lifecycle, DB, IPC, app protocol
│ ├── preload.ts # exposes window.api
│ ├── channels.ts # IPC channel map
│ ├── ipc-handlers.ts # IPC handler map
│ ├── domain/ # CRUD, workflows, settings, initial data
│ ├── db/ # SQLite connection and migrations runner
│ └── migrations/ # SQL migrations
└── svelte/ # SvelteKit renderer
- Add numbered files in
electron/migrations/:
00000x_name.up.sql00000x_name.down.sql
- Put forward SQL in
.up.sql. - Put rollback SQL in
.down.sql. - Restart the app.