From 5093ce1f9dd939921bfbb606e5cc80f7e2f9dcd1 Mon Sep 17 00:00:00 2001 From: Honey Date: Sat, 23 May 2026 22:45:14 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20update=20README=20=E2=80=94=20importer?= =?UTF-8?q?=20sources,=20metadata=20editor,=20file=20conventions,=20projec?= =?UTF-8?q?t=20structure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- README.md | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 643578c..50dbf34 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ Built with Vite + vanilla ES modules, served via nginx in Docker. ### Playback - Queue management with shuffle, repeat (all / once), and radio mode (endless random) +- Spotify-style shuffle — pre-shuffles the full queue so every song plays exactly once - Now Playing overlay with swipe-to-dismiss; queue tab stays active when selecting a song from the queue - Lock screen media controls (Android / iOS via Media Session API) - Gapless-style queue with prev/next, skip forward/back @@ -29,13 +30,24 @@ Built with Vite + vanilla ES modules, served via nginx in Docker. ### Discovery - iTunes / Last.fm integration — charts, global search, 30-second previews, similar artists, recommendations -- Spotify playlist importer — paste a Spotify playlist URL to preview and download all tracks, enriched with iTunes metadata and cover art +- Song Importer — paste a link from Spotify, YouTube, YouTube Music, or SoundCloud to preview and download tracks, enriched with iTunes metadata and cover art ### Downloads (yt-dlp backend) -- Download individual tracks, full albums, or entire artists from YouTube / SoundCloud -- Spotify playlist importer downloads with iTunes-enriched metadata (album, year, track number, genre, cover art) +- Download individual tracks, full albums, or entire artists +- Sources: YouTube Music (primary), YouTube, SoundCloud, Spotify (via playlist importer) +- iTunes enrichment — album, year, track number, genre, 1000×1000 cover art - Duplicate detection — skips tracks already present on the server -- Lyrics embedded into downloaded files (LRCLIB) +- Standard filename convention: `{01 - }Artist1, Artist2 - Title.ext` +- Files organised into `MusicRoot/AlbumArtist/Album/` folders automatically + +### Metadata Editor +- Edit title, artist, album artist, album, genre, year, track number, disc number from within the app +- Update embedded cover art via URL or file upload +- Artist separator normalization — accepts `•`, `;`, `,` as input; stores as `;` (Navidrome/MusicBrainz style) +- File renamed automatically on save to match the standard naming convention +- File moved to the correct `AlbumArtist/Album/` folder when those fields change +- Empty folders cleaned up after a move +- Navidrome rescan triggered automatically after every save ### Playlists - Create, edit, and delete playlists @@ -67,18 +79,27 @@ Music_App/ │ ├── api.js # Subsonic API, Navidrome REST, iTunes API │ ├── player.js # Playback, transport, queue, media session, preview │ ├── views.js # Navigation, page loaders, card makers, search -│ ├── ui.js # Modals, overlays, sidebar, settings, context menu +│ ├── ui.js # Modals, overlays, sidebar, settings, context menu, metadata editor │ ├── nowplaying.js # Now Playing overlay │ ├── abs.js # Audiobookshelf integration -│ ├── spotify.js # Spotify playlist importer -│ ├── components.js # Shared UI components +│ ├── spotify.js # Spotify importer (resolve + download) +│ ├── youtube.js # YouTube / YouTube Music importer +│ ├── soundcloud.js # SoundCloud importer +│ ├── components.js # Shared UI components (song rows, cards) │ ├── themes.js # Theme switching │ ├── pwa.js # Service worker registration + update banner │ └── main.js # App init, audio wiring, window globals ├── backend/ -│ ├── novasonic-server.js # Node.js download backend (yt-dlp + ffmpeg) +│ ├── novasonic-server.js # Express API: download jobs, metadata edit, resolvers +│ ├── spotify_resolve.py # Spotify page scraper (track/album/playlist metadata) │ └── lib/ -│ └── metadata.js # iTunes lookup, lyrics fetch, artwork download +│ ├── config.js # Backend config (env vars, paths, format) +│ ├── jobs.js # In-memory job store + log helper +│ ├── metadata.js # iTunes lookup, artwork download, lyrics fetch, filename helpers +│ ├── ytdlp.js # yt-dlp download cascade + ffmpeg metadata embedding +│ ├── squid.js # Squid/Qobuz download backend +│ ├── downloader.js # Unified downloadTrack / downloadAlbumTracks entry point +│ └── romaji.js # Japanese → romaji index for search ├── public/ # Static assets (copied as-is to dist/) │ ├── sw.js # Service worker │ ├── manifest.json # PWA manifest