Classification & Staging
Genre tools
Section titled “Genre tools”get_genre_taxonomy no params
Section titled “get_genre_taxonomy ”Returns the canonical genre list and alias mappings. Use this tool as the authoritative current taxonomy rather than copying a genre count into clients.
suggest_normalizations
Section titled “suggest_normalizations”Analyze genres in your library and suggest normalizations to the canonical taxonomy.
| Parameter | Type | Required | Description |
|---|---|---|---|
min_count |
integer | Only include genres with at least this many tracks (default: 1) |
|
stage_aliases |
boolean | When true, auto-stage all alias normalizations in one call |
Returns three sections:
alias— known mappings from your genre strings to canonical genres (e.g., “Tech House” → “Tech House”)unknown— genres that don’t match any alias or canonical entrycanonical— genres that already match the taxonomy exactly
classify_tracks
Section titled “classify_tracks”Apply the genre decision tree to ungenred tracks using cached enrichment and audio evidence. Returns recommendations grouped by confidence level (high/medium/low/insufficient). Cache-only — never triggers external calls.
| Parameter | Type | Required | Values | Item values | Description |
|---|---|---|---|---|---|
track_ids |
string[] | Specific track IDs to classify | |||
playlist_id |
string | Classify tracks in this playlist | |||
max_tracks |
integer | Max tracks (default: 50, max: 200) |
|||
offset |
integer | Skip first N tracks for pagination | |||
genre_overrides |
array | Remap genre strings before scoring (e.g., [{"from": "Melodic House & Techno", "to": "Deep Techno"}]) |
|||
format |
string | ["full", "compact", "summary", "dispatch"] |
Output format ("full" by default) |
||
auto_stage |
string[] | ["high", "medium", "low", "insufficient"] |
Auto-stage results at these confidence levels |
Also accepts shared search filters. Enforces has_genre=false when using filters (bypassed when track_ids are provided explicitly).
audit_genres
Section titled “audit_genres”Verify existing genre tags against enrichment and audio evidence. Returns only conflicts and manual-review tracks — confirmed tracks are counted in the summary but omitted. Cache-only.
| Parameter | Type | Required | Description |
|---|---|---|---|
track_ids |
string[] | Specific track IDs to audit | |
playlist_id |
string | Audit tracks in this playlist | |
max_tracks |
integer | Max tracks (default: 50, max: 200) |
|
offset |
integer | Skip first N tracks for pagination | |
include_confirmed |
boolean | Include confirmed tracks in results (default: false) |
Also accepts shared search filters. Enforces has_genre=true when using filters (bypassed when track_ids are provided explicitly).
calibration_coverage
Section titled “calibration_coverage”Report per-genre readiness for audio-profile calibration from the verified playlist. Read-only — checks canonical genre counts, cached audio-feature availability, and stored prototype presence without recalibrating.
| Parameter | Type | Required | Description |
|---|---|---|---|
playlist |
string | Playlist containing ear-verified tracks (default: genre_verified) |
Use this before calibrate_audio_profiles to see which genres are ready, which need more analyzed tracks, and which stored profiles no longer appear in the current verified playlist.
calibrate_audio_profiles
Section titled “calibrate_audio_profiles”Build Fisher-weighted audio prototypes from a playlist of ear-verified tracks and store them in the internal SQLite cache. These prototypes provide supplementary votes during classification.
| Parameter | Type | Required | Description |
|---|---|---|---|
playlist |
string | Playlist containing ear-verified tracks (default: genre_verified) |
Run calibration_coverage first. Calibration skips tracks with missing genre tags, unknown genres, or missing cached audio features, and only builds a prototype for genres with enough verified audio.
backfill_labels
Section titled “backfill_labels”Auto-fill empty labels from enrichment caches (Discogs, MusicBrainz, Bandcamp, Beatport). Stages non-conflicting labels automatically; reports conflicts where the current label disagrees with enrichment.
| Parameter | Type | Required | Description |
|---|---|---|---|
dry_run |
boolean | Preview without staging (default: false) |
|
auto_enrich |
boolean | Automatically enrich uncached tracks via Bandcamp before backfilling (default: false) |
|
max_conflicts |
integer | Cap on conflict entries in the response (default: 50) |
|
conflict_offset |
integer | Offset into the stable ordered conflict list (default: 0) |
| Field | Type | Required | Description |
|---|---|---|---|
summary |
object | yes | Full scan and label-fill counts |
staged |
integer | yes | Changes staged by this call |
total_pending |
integer | yes | Total changes currently staged in memory |
dry_run |
boolean | yes | Whether this call avoided staging |
conflicts |
array | yes | Conflict entries returned on this page |
conflict_page |
object | yes | Conflict continuation metadata |
conflicts_truncated |
boolean | Legacy alias present and true only when conflict_page.has_more is true |
|
auto_enriched |
integer | Bandcamp hits when auto_enrich=true |
|
research_queue |
object | Remaining unlabeled-track research summary |
| Field | Type | Required | Description |
|---|---|---|---|
total |
integer | yes | Total conflicts in the stable ordered list |
returned |
integer | yes | Conflict entries emitted by this page |
offset |
integer | yes | Requested conflict offset |
next_offset |
integer | null | yes | Next conflict offset when more remain; null at the end |
has_more |
boolean | yes | Whether another conflict page remains |
Run the intended mutating or auto-enriching pass once. Retrieve later conflict
pages with dry_run=true, auto_enrich=false, and
conflict_offset=conflict_page.next_offset; this avoids repeating staging or
provider side effects. A zero page size and an offset beyond the end are
terminal no-ops.
backfill_years
Section titled “backfill_years”Auto-fill missing years (year=0) from file tags, folder paths, and enrichment cache (Discogs/Beatport/MusicBrainz/Bandcamp). Stages non-conflicting years automatically; reports conflicts where the current year disagrees with enrichment.
| Parameter | Type | Required | Description |
|---|---|---|---|
dry_run |
boolean | Preview without staging (default: false) |
|
auto_enrich |
boolean | Automatically enrich remaining year-zero tracks via Bandcamp and MusicBrainz before re-scanning (default: false) |
backfill_albums
Section titled “backfill_albums”Auto-fill empty album names from file tags, folder paths, and enrichment cache (Bandcamp/Discogs). Only fills tracks with no album set. Skips noise entries where the album matches the track title or artist name.
| Parameter | Type | Required | Description |
|---|---|---|---|
dry_run |
boolean | Preview without staging (default: false) |
|
auto_enrich |
boolean | Automatically enrich uncached tracks via Bandcamp before backfilling (default: false) |
Staging tools
Section titled “Staging tools”update_tracks ──> preview_changes ──> write_xml ──> verify in XML view ──> import │ clear_changes (undo)update_tracks
Section titled “update_tracks”Stage changes to track metadata. Held in memory until exported or cleared.
| Parameter | Type | Required | Description |
|---|---|---|---|
changes |
array | yes | Array of track change objects |
Each change object:
| Field | Type | Required | Description |
|---|---|---|---|
track_id |
string | yes | Track ID |
genre |
string | New genre | |
comments |
string | New comments | |
rating |
integer | Star rating (1-5) | |
color |
string | Color name | |
label |
string | Record label | |
year |
integer | Release year | |
album |
string | Album name |
You can stage changes for multiple tracks in one call. Calling update_tracks again for the same track merges fields — only the specified fields are overwritten, existing staged fields are preserved.
preview_changes
Section titled “preview_changes”Preview all staged changes, showing a diff from the current Rekordbox state.
| Parameter | Type | Required | Values | Description |
|---|---|---|---|---|
track_ids |
string[] | Filter to specific track IDs (omit to show all staged; an empty array matches nothing) | ||
format |
string | ["full", "summary"] |
"full" (default) or "summary" (aggregate counts by field and genre) |
write_xml
Section titled “write_xml”Export staged changes to Rekordbox-compatible XML. Optionally includes playlists.
| Parameter | Type | Required | Description |
|---|---|---|---|
output_path |
string | Output path (default: ~/reklawdbox-exports/reklawdbox-{timestamp}.xml) |
|
playlists |
array | Optional playlist exports | |
skip_label_gate |
boolean | Set to true to acknowledge that label research is complete and bypass the label gate |
Each playlist object:
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | Playlist name |
track_ids |
string[] | yes | Track IDs in playlist order |
clear_changes
Section titled “clear_changes”Clear staged changes, either entirely or selectively by track or field.
| Parameter | Type | Required | Description |
|---|---|---|---|
track_ids |
string[] | Track IDs to clear (omit to clear all; an empty array clears nothing) | |
fields |
string[] | Fields to unstage: "genre", "comments", "rating", "color", "label", "year", "album" (omit to clear all fields on matched tracks) |
