Help us improve
Share bugs, ideas, or general feedback.
From dj-music
This skill should be used when the user asks to classify tracks, audit playlist, get library stats, distribute to subgenres, run mood classification, or review library quality. Covers mood classification, audits, subgenre distribution and stats.
npx claudepluginhub evgenygurin/dj-music-plugin --plugin dj-musicHow this skill is triggered — by the user, by Claude, or both
Slash command
/dj-music:curate-libraryThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Guide the user through classifying, auditing, and organizing their techno library via the v1 polymorphic dispatchers (**20 tools** = 14 core dispatchers + 6 UI Prefab Apps — см. @docs/tool-catalog.md).
Applies 10 pre-set color/font themes or generates custom ones for slides, documents, reports, and HTML landing pages.
Share bugs, ideas, or general feedback.
Guide the user through classifying, auditing, and organizing their techno library via the v1 polymorphic dispatchers (20 tools = 14 core dispatchers + 6 UI Prefab Apps — см. @docs/tool-catalog.md).
Mood classification is a side-effect of the track_features_analyze handler — it runs at L1+L2 and writes mood / mood_confidence into track_audio_features_computed.
entity_create(entity="track_features", data={"track_ids": [...], "level": 2})entity_get(entity="playlist", id=<id>, include_relations=["tracks"])entity_create(entity="track_features", data={"track_ids": [...], "level": 2})entity_update(entity="track_features", id=<features_id>, data={"level": 2, "force": true})
(handler track_features_reanalyze)15 Techno Subgenres (low → high energy): ambient_dub → dub_techno → minimal → detroit → melodic_deep → progressive → hypnotic → driving → tribal → breakbeat → peak_time → acid → raw → industrial → hard_techno
Static reference: read reference://subgenres.
local://playlists/{id}/audit — BPM range, key distribution, energy coverage, missing features, gap reportreference://audit_ruleslocal://sets/{id}/review — transition scores, energy arc compliance, subgenre variety, weakest transitions + suggested fixesAggregate directly with entity_aggregate. Valid operation values: count | distinct | histogram | min_max | sum | avg. group_by is a parameter, not an operation — combine it with operation="count" (or distinct/sum/avg/min_max) to bucket results.
entity_aggregate(entity="track", operation="count")entity_aggregate(entity="track_features", operation="count")entity_aggregate(entity="track_features", operation="count", group_by="mood")entity_aggregate(entity="track_features", operation="histogram", field="bpm", bin_size=2.0)entity_aggregate(entity="track_features", operation="count", group_by="key_code")entity_aggregate(entity="track_features", operation="distinct", field="variable_tempo") → returns [false, true] (v1.3.7 bool-before-int union fix)Visual dashboards (Prefab UI):
ui_library_dashboard() — global totals + BPM histogram + mood PieChart + Camelot BarChartui_library_audit(playlist_id?) — DataTable of pass/fail per track + subgenre PieChartui_camelot_wheel(playlist_id?) — RadialChart of tracks-per-key + DataTableThere's no single distribute_to_subgenres tool in v1 — compose from primitives:
entity_create(entity="track_features", data={"track_ids": [...], "level": 2})entity_list(entity="track", filters={"mood": "peak_time"}, fields="summary", limit=500)entity_update(entity="playlist", id=<pl_id>, data={"track_ids_append": [...]})playlist_sync(playlist_id=<pl_id>, direction="push", source="yandex")
(namespace sync is locked by default — unlock first via unlock_namespace(namespace="sync", action="unlock"))expand_playlist_workflow or full_pipeline prompts.Tracks must meet these thresholds to be valid techno (see reference://audit_rules):
| Parameter | Range |
|---|---|
| BPM | 120–155 |
| LUFS | -20 to -4 |
| Energy mean | ≥ 0.05 |
| Onset rate | ≥ 1.0 |
| Kick prominence | ≥ 0.05 |
| Spectral centroid | 300–10000 Hz |
entity_create(entity="track_features", ...) — no need to download audio manually; temp download lives inside the handlerdriving / hypnotic are catch-all subgenres — penalized via settings.mood_catch_all_penaltyentity_list(entity="track", filters={...}): bpm__gte, mood__in, energy_mean__between, title__icontainsreference://audit_rules (live) and @docs/audio-pipeline.md