个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
A pure browser-based Discogs companion for DJs and collectors. Sync your collection and want list, link playable YouTube videos, build setlists, and dig crates with BPM/key filtering and harmonic mixing suggestions.
No backend. No install. No build step. All data stays in your browser.查看完整 README ↗A pure browser-based Discogs companion for DJs and collectors. Sync your collection and want list, link playable YouTube videos, build setlists, and dig crates with BPM/key filtering and harmonic mixing suggestions.
No backend. No install. No build step. All data stays in your browser.
Clone the repo and serve the files with any static server:
git clone https://github.com/haimw/discogs-tool.git
cd discogs-tool
python3 -m http.server 5000
Then open http://localhost:5000.
No build step or dependencies required.
How it works:
0 ("All") catches any unfiled releases.What gets stored per release:
| Field | Description |
|---|---|
| Artist / Title / Year | Core release info |
| Format | Vinyl, CD, Cassette, etc. |
| Genres / Styles | From Discogs metadata |
| Country | Country of pressing |
| Folder | Which collection folder it belongs to |
| Quantity | How many copies you own |
| Cover / Thumb | Cover art images |
| Date Added | When added to your collection |
| Videos | YouTube links from the release page |
| Tracklist | Physical side-by-side track listing (A1, B1, etc.) |
The Your Collection view shows your releases as a card grid.
Filters:
| Filter | How to use |
|---|---|
| Search | Type artist or title in the search box |
| Genre | Click a genre pill to filter |
| Folder | Click a folder pill to filter |
| Country | Click a country pill to filter |
Sort options: Artist, Title, Year, Date Added
Pagination: 48 releases per page
Each card shows:
Click any card to open the release detail page:
A flat list of every video across your entire collection — ideal for crate digging and DJ prep.
Filters:
| Filter | How to use |
|---|---|
| Search | Type title, artist, or release name |
| BPM Range | Enter min and/or max BPM |
| Key | Pick a Camelot key from the dropdown (1A–12B) |
| Min Rating | Click a star pill (1★–5★) |
| Tag | Click a tag pill (e.g. "peak", "floor filler") |
Sort options: Artist, Title, Release, Year, BPM, Rating
Each track row shows:
Sync and browse your Discogs want list with marketplace monitoring.
Sync: Click Sync Want List to download all your wants into the browser.
Filters:
| Filter | How to use |
|---|---|
| Search | Type artist or title |
| Genre | Click a genre chip |
| Format | Click a format pill |
| Decade | Click a decade pill (1960s, 1970s, etc.) |
| Country | Click a country pill |
| Availability | Filter to items currently for sale |
Sort options: Artist, Title, Year, Date Added, Rating
Actions:
| Action | Description |
|---|---|
| Play | Play linked YouTube video if available |
| Shuffle | Shuffle through playable want list items |
| Check Availability | Pull marketplace stats for all want list items |
| Export CSV | Download full want list as a CSV file |
| Dig Deeper | Analyse which genres, styles, and artists are in your want list but not yet in your collection — click any pill to filter |
An embedded YouTube player drives all playback. A Now Playing bar stays fixed at the bottom of the screen.
Now Playing bar contains:
Playback modes:
| Mode | How to trigger |
|---|---|
| Single track | Click any track row or video entry |
| Play all from release | "Play All" button on a release detail page |
| Play from collection | "Play Collection" on the collection view |
| Shuffle | "Shuffle" button — enter how many tracks (1–9999) |
| Setlist | "Play All" or click a specific track in a setlist |
Queue panel:
Automatic volume crossfade between tracks for smooth DJ-style transitions.
How to enable:
How it works:
[fade duration + 2] seconds from its end, the crossfade starts.Settings are saved to IndexedDB and persist across sessions.
Get a ranked list of compatible next tracks based on key, BPM, and genre.
How to open: Click the Suggestions button in the Now Playing bar.
How scoring works:
| Factor | Points |
|---|---|
| Exact Camelot key match | 100 |
| Adjacent key on Camelot wheel (±1 or relative major/minor) | 70 |
| Genre match | 40 |
| BPM within 6% delta | Up to 100, scaled by closeness |
| Track rating bonus | +2 per star |
Camelot wheel compatibility: Same key, one step clockwise, one step counter-clockwise, or the relative major/minor (A↔B same number).
Panel shows: Top 20 suggestions with score, BPM, key, artist, title. For each suggestion:
Tip: Add BPM and Key to your tracks via the Metadata Editor for best results. Without them, suggestions fall back to genre matching only.
Add DJ metadata to any track directly in the app.
How to open: Click the pencil (✎) icon on any track row in the Tracks view, Release detail, or Setlist detail.
Editable fields:
| Field | Type | Notes |
|---|---|---|
| BPM | Number | 40–220 |
| Key | Dropdown | Camelot 1A–12B |
| Rating | Stars | 0–5 stars |
| Energy | Number | 1–10 scale |
| Shelf Location | Text | Physical storage reference (e.g. "A3") |
| Tags | Text | Comma-separated (e.g. "peak, floor filler, closer") |
| Notes | Textarea | Freeform notes |
| Verified | Checkbox | Mark the YouTube link as confirmed correct |
Click Save to persist, or Cancel to discard. Data is stored per track (indexed by release ID + YouTube ID) and syncs immediately to filters and suggestions.
Build and manage DJ setlists (playlists) from your collection.
How to create a setlist:
Adding tracks to a setlist:
Setlist detail page:
| Action | How |
|---|---|
| Rename | Click the name field and type |
| Reorder tracks | Drag the ⋮ handle up or down |
| Remove a track | Click the × button |
| Add notes | Type in the Notes textarea (venue, vibes, cues, etc.) |
| Play all | Click Play All |
| Play from a track | Click that track row |
Export options:
| Format | Use case |
|---|---|
| M3U | Import into media players |
| TXT | Plain text track listing |
| CSV | Spreadsheet with BPM, Key, and metadata |
A canvas-based visualizer renders in the Now Playing bar while music plays.
Switch modes using the buttons above the canvas:
| Mode | Description |
|---|---|
| Bars | 56 vertical bars in a cyan-to-magenta spectrum with a mirror reflection |
| Wave | 3 overlapping animated sine waves |
| Particles | 180 star-field particles with fade trails |
| Rings | 6 concentric rings pulsing outward from centre |
| Aurora | 5 wavy bands mimicking the northern lights |
| Helix | Twin DNA strands with connecting rungs |
| Lissajous | Mathematical Lissajous curves with glow |
| Tunnel | Receding neon rectangles forming a tunnel |
Visualizer starts and stops automatically with playback.
Monitor Discogs marketplace listings for items on your want list.
How to use:
What gets tracked per item:
Notifications:
New listings trigger a notification only when a previously-unavailable item becomes available (0 → 1+ copies).
Manage a physical record store or selling inventory directly from your collection.
Serialization:
Inventory table columns: Serial, Artist, Title, Year, Country, Style, Format, Min Price, Status, Batch, Actions
Actions per item:
| Action | Description |
|---|---|
| Mark as Sold | Records sale date and price received |
| Assign to Batch | Move item into a named batch |
| Refresh Price | Pull current marketplace price from Discogs |
| Open on Discogs | Jump to the listing on Discogs.com |
Batch management:
Filters: Free-text search (serial, artist, title), Status (All / Active / Sold), Batch
Export and import your complete app data to protect against browser data loss or to migrate between browsers/devices.
Export (backup):
vinyl-backup-YYYY-MM-DD.json).What the backup includes:
Restore:
Important: All data is stored in your browser's IndexedDB. Clearing browser site data will delete everything. Regular backups are strongly recommended.
All data is stored locally in IndexedDB — nothing is sent to any custom backend.
| Store | Contents |
|---|---|
config | Discogs credentials and app settings |
releases | Full release metadata |
videos | YouTube video links per release |
folders | Collection folder structure |
tracklist | Physical track listings (Discogs side/position data) |
track_meta | Editable DJ metadata (BPM, Key, Rating, Energy, Shelf, Tags, Notes) |
wants | Want list items |
marketplace_stats | Price and availability data |
setlists | Setlists with tracks, order, and notes |
store_items | Serialised inventory records |
store_batches | Inventory batch groupings |
notifications | Marketplace alerts |
Session state (currently playing track) is stored in sessionStorage so playback context survives page refreshes.
discogs-tool/
├── index.html — SPA shell, navigation, now-playing UI
├── app.js — App entry point and initialisation
├── style.css — Visual theme and layout
└── src/
├── api.js — Discogs API client with rate-limit handling
├── db.js — IndexedDB wrapper
├── config.js — App configuration and constants
├── init.js — Startup and credential checks
├── router.js — Client-side routing
├── player.js — YouTube IFrame player wrapper
├── player_state.js — Playback state (queue, current track)
├── crossfade.js — Crossfade engine (dual player)
├── harmonic.js — Harmonic mixing and suggestion scoring
├── visualizer.js — Canvas visualizer (8 modes)
├── search.js — Search and filter utilities
├── setlists.js — Setlist CRUD and playback
├── marketplace.js — Marketplace polling and notifications
├── backup.js — Export and restore logic
├── meta.js — Track metadata read/write
├── meta_editor.js — Inline metadata editor UI
├── queue.js — Queue management
├── utils.js — Shared helpers
├── store_serial.js — Store serialisation logic
└── views/
├── setup.js — Credentials setup screen
├── collection.js — Collection grid and release detail
├── tracks.js — All Tracks view
├── wantlist.js — Want List view
├── wantlist_sync.js — Want list sync logic
├── release.js — Release detail page
└── store.js — Store & inventory view
| Layer | Technology |
|---|---|
| Language | Vanilla JavaScript (ES modules) |
| Storage | IndexedDB (via custom wrapper) |
| Music data | Discogs REST API |
| Video playback | YouTube IFrame API |
| Hosting | GitHub Pages (static) |
No frameworks, no bundler, no server.
MIT