MCPcopy Index your code
hub / github.com/Creiv/RE-KORD

github.com/Creiv/RE-KORD @v4.3

Chat with this repo
repository ↗ · DeepWiki ↗ · release v4.3 ↗ · + Follow
1,920 symbols 5,736 edges 324 files 67 documented · 3%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

RE-KORD

re-kord.com  ·  r/RE_KORD

RE-KORD 4.3

Your music. Your server. Your rules.

A self-hosted music hub that turns a folder of audio files into a complete listening, curation, and play experience — on your disk, on your network, under your control.

UI in English and Italian · exact semver in package.json


What is RE-KORD

RE-KORD is not a cloud service — it's a home for your audio. Point it at a folder and it becomes your personal music server: a fast library with rich metadata, a serious player with visualizers and synced lyrics, studio tools to grow and maintain your collection, and even a rhythm game generated from your own tracks. Everything stays on your machine; every device on your network can join in.

One install gives you the server + web app. Around it: a desktop app (Server or thin Client), a Docker image, an installable PWA, and — since 4.0 — a native Android client.

Highlights

🎧 Listen like you mean it Persistent player with queue, smart shuffle, repeat and crossfade; synced LRC lyrics; 8 audio-reactive visualizers (bars, waves, DiscoWall, karaoke…); sleep timer with 30s fade-out; Cast to Google Home (Chrome + Android APK); OS media integration (lock screen, headphone and car controls, Android Auto-friendly).

🗂️ A library that stays healthy Browse by artist, genre, or mood; instant search; quality alerts for missing covers and metadata; per-track and per-album metadata editors; multi-source artwork and trivia lookup; bulk scans and title cleanup. The library index and album/track metadata live in a local SQLite database (rekord.db) with cached artwork thumbnails and filesystem watching.

🛠️ Studio built in Discover and download new music (bundled yt-dlp), enrich metadata from MusicBrainz/iTunes and friends, manage covers, curate a per-profile catalog — all from the same UI, with the library re-indexed automatically.

🎮 Plectr A rhythm game charted on the fly from your tracks: three difficulties, holds and swipes, per-track records, and live sync with whatever is playing.

📊 Know your habits Play counts, top artists/albums/genres, favorites, listening streaks — plus an achievements system with XP, levels, and 60+ badges.

🎨 Make it yours 18 theme presets plus a fully custom theme (colors or background image), a unified Pro Workspace layout (icon rail, flat surfaces, organized canvas), glass surfaces with adjustable opacity, and shareable themes: export your look as a file, import it on any other server or profile.

🌐 Anywhere you are LAN access out of the box, one-click Cloudflare tunnel with QR code for remote listening, multiple local profiles, full backup/restore, and a self-updating client model: update the server once, every client follows.

New in 4.3

  • 🌌 Sonic Nebula — explore your library as an interactive galaxy: every track is a star positioned by BPM (horizontal) and energy (vertical), with colored nebulae for mood clusters; pan, zoom, fullscreen; click to play, Shift+click for local radio; new Nebula tab in Library plus a dashboard card with live mini-preview.
  • 📻 Smart Radio on Dashboard — quick-listen grid built from recent plays and favorites (one track per album, up to 19 tiles + Random); start smart radio from any tile or jump to Studio.
  • 📲 APK background resilience — when the Android client returns from background, automatic server health probe and state refresh; unreachable-server gate with manual retry; reconnect on visibility, online, and Capacitor appStateChange.

Since 4.2

  • 📂 Adaptive library scan — detects how your music folder is organized (artist/album/track, loose tracks per artist, flat files, or ID3 tags) and indexes accordingly; layout config in .kord/library-layout.json; structure probe when setting MUSIC_ROOT.
  • 🧭 Real vs logical paths — loose tracks keep the on-disk path (file_path) separate from the library path (rel_path); albums store folder_rel_path for the actual folder; incremental scans diff against a files table.
  • 🔄 Loose-track migration — schema v6 aligns legacy TracceTracks paths in SQLite; client state migrates old loose paths in queue, favorites, and recent plays.
  • 💿 Discogs integration — optional personal token (Settings or REKORD_DISCOGS_TOKEN); release search with scored candidates and a picker when several matches exist; album enrichment (label, country, genres, format, catalog no., community stats, lowest price); tracklist applied to files (track/disc numbers, duration); automatic fallback to MusicBrainz / TheAudioDB / iTunes when Discogs is unavailable.

Since 4.1

  • 🗄️ SQLite library coreMUSIC_ROOT/.kord/rekord.db is the source of truth for the library index, album/track metadata, and artwork thumbnails. One-shot bootstrap from the legacy JSON cache or a full filesystem scan on first run.
  • 🖼️ Artwork cache — cover images copied into .kord/artwork/ and served from /api/library/artwork/:id; falls back to /api/cover on disk when needed.
  • 🧹 Library metadata cleanup — Studio → Tools migrates useful fields from legacy JSON sidecars into the DB, removes per-track sidecars, and compacts album files (trivia/infoItems stay on disk).
  • 📂 Track order by filename — album track lists follow download/filename order; tag-based track numbers are no longer used for sorting.
  • 🔁 Watcher + epochs — filesystem changes trigger rescans; clients poll /api/library/changes for index updates. Paginated library APIs are ready for large collections.
  • 🔊 Cast to Google Home — stream to Chromecast/speakers from Chrome on LAN or the Android APK. Lossless formats the speaker can't decode (FLAC, OGG, WAV…) are transcoded on the fly via bundled ffmpeg.
  • ⏱️ Sleep timer — fade out over 30 seconds then stop; presets or a custom duration (1 min – 12 h) from the Listen view.
  • 📲 ExoPlayer on Android — optional native playback in the APK (Settings); disables crossfade, falls back to WebView audio on error. Foreground MediaService keeps playback alive in the background.
  • 🎮 Plectr on low-end devices — lighter canvas backdrop, smoother song clock sync, less stutter while charts generate in a Web Worker.
  • 📡 Large FLAC over tunnel — robust HTTP Range streaming for big lossless files through the Cloudflare tunnel (seek-friendly).
  • 🖥️ Pro Workspace UI — redesigned shell: 56px icon rail, flat card surfaces, content canvas with max-width — the old Classic/Modern style toggle is gone; one consistent layout for everyone.

Since 4.0

  • 📱 Android client (APK) — connects to your server like the desktop client, with QR pairing straight from Settings → Network: scan, pick a profile, play. Native playback widget and media controls, portrait-locked, hardware back navigation.
  • 🎨 Theme sharing — one-click theme export (colors, glass, background image) into a portable file anyone can import.
  • 🪟 Adjustable glass — a transparency slider for glass surfaces, with text contrast that adapts automatically.
  • 📐 Mobile, polished — every page reviewed and tightened for phones: full-height layout on every device, stacked toolbars, denser dashboards, instant cover placeholders.
  • 🖥️ Cross-platform packaging fixes — proper app icon on Windows builds made from Linux, one-command Android packaging.

Get RE-KORD

Flavor What it is How
Server (desktop) Full app: server + UI + bundled yt-dlp/cloudflared Downloads on re-kord.com
Client (desktop) Thin UI that connects to an existing server Downloads on re-kord.com
Android client Native APK, QR pairing, media widget npm run pack:android:clientrelease/
Docker Single container: server + built UI See below
PWA Install the web app from any browser on your network Open the server URL → install

Docker quick start

cp .env.docker.example .env       # set REKORD_MUSIC_HOST to your music folder
npm run docker:build && npm run docker:up
# → http://localhost:3001

Bind mounts: REKORD_MUSIC_HOST → /music (library) and REKORD_CONFIG_HOST → /config (accounts, settings, cookies). Useful knobs: REKORD_PORT, REKORD_LISTEN_HOST=127.0.0.1 (loopback only), MUSIC_ROOT (lock the library path).

From source

npm install
npm run dev          # browser: Vite :5173 + API :3001
npm run dev:app      # Electron desktop + server

npm test && npm run lint && npm run build

On a fresh Ubuntu/Debian machine, if npm run dev fails on better-sqlite3, install build tools then rebuild the native module:

sudo apt update && sudo apt install -y build-essential python3
npm run rebuild:native:dev

If the AppImage opens but shows “cannot reach the server”, check ~/.config/rekord/rekord-server.log. A common cause on external drives is EACCES (library folder not writable): RE-KORD needs to create MUSIC_ROOT/.kord/. Fix permissions, e.g. sudo chown -R $USER:$USER /path/to/music, then restart.

Library root: MUSIC_ROOT env or in-app Settings. Per-profile state and the library database live in MUSIC_ROOT/.kord/ (rekord.db plus account data) and survive reinstalls. After upgrading from 4.0, run Library metadata cleanup once in Studio → Tools to migrate legacy JSON sidecars.

Packaging 4.3

npm run pack:linux:server -- 4.3.0   # → release/RE-KORD-Server-4.3.0-linux-x86_64.AppImage
npm run pack:win:server  -- 4.3.0    # Windows server (NSIS on Windows hosts, .7z from Linux)
npm run pack:linux:client -- 4.3.0   # thin desktop client
npm run pack:win:client  -- 4.3.0
npm run pack:android:client -- 4.3.0 # → release/RE-KORD-Client-4.3.0-android.apk

Server packs bundle yt-dlp and cloudflared for the target OS. Windows builds made from Linux get the correct app icon automatically. On Linux without libfuse2, run AppImages via ./scripts/run-linux-appimage.sh.

Tech, in one line

React 19 + Vite on the front, Express + SQLite (better-sqlite3) on the back, Electron for desktop, Capacitor for Android, Docker for servers — a single codebase, local-first storage, no telemetry.

Disclaimer

RE-KORD and its creators are not responsible for what users download, import, or manage. Each user is solely responsible for copyright and local law compliance. Use only content you have the rights or permission to use.


RE-KORD 4.3 by Creiv — local music, serious tools, play on the beat.

Extension points exported contracts — how you extend this code

ActionListener (Interface)
(no doc)
android/app/src/main/java/app/rekord/client/RekordMediaService.java
ImportMetaEnv (Interface)
(no doc)
src/vite-env.d.ts
Difficulty (Interface)
(no doc)
src/game/types.ts
SideBarProps (Interface)
(no doc)
src/components/AppShell/SideBar/SideBar.tsx
DiscoTriad (Interface)
(no doc)
src/views/discowallPlectr.ts
WebBridge (Interface)
(no doc)
android/app/src/main/java/app/rekord/client/RekordCastManager.java
ImportMeta (Interface)
(no doc)
src/vite-env.d.ts
Lane (Interface)
(no doc)
src/game/types.ts

Core symbols most depended-on inside this repo

sendError
called by 257
server/httpUtils.mjs
sendOk
called by 77
server/httpUtils.mjs
getMusicRoot
called by 73
server/musicRootConfig.mjs
rgbaFromHex
called by 68
src/context/UserStateContext.tsx
apiFetch
called by 62
src/lib/api.ts
useI18n
called by 54
src/i18n/useI18n.ts
getLibraryDb
called by 53
server/db/index.mjs
unwrap
called by 43
src/lib/api.ts

Shape

Function 1,773
Method 84
Interface 37
Class 26

Languages

TypeScript97%
Java3%

Modules by API surface

src/lib/api.ts96 symbols
server/albumInfo.mjs69 symbols
server/musicRootConfig.mjs60 symbols
src/components/RekordUiIcons.tsx53 symbols
server/userState.mjs46 symbols
src/game/components/GameCanvas.tsx40 symbols
server/ytdlpStudio.mjs39 symbols
src/game/lib/audioAnalysis.ts38 symbols
src/views/discowallPlectr.ts35 symbols
src/context/UserStateContext.tsx34 symbols
src/lib/libraryNav.ts29 symbols
server/youtubeMusicDiscover.mjs29 symbols

For agents

$ claude mcp add RE-KORD \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact