docs: update README — importer sources, metadata editor, file conventions, project structure

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
HoneyandClaude Sonnet 4.6 committed 2026-05-23 22:45:14 +02:00
1 parent 4842c89c4e
commit 5093ce1f9d
1 file changed
+30 -9
+30 -9
View File
@@ -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