Learning studio and idle practice
Open Learning studio to monitor private practice and search the external recording catalog. This is a bounded experiment loop, not a deployed self-trained professional DJ model.
Recording catalog
The indexed catalog contains 63,038 external track IDs from Raveform and the DJ Mix Dataset. Search by title/artist text, open the source reference, import an available recording through Library, and link its exact version. Links are scoped to the user's library. A user link is an identity assertion, not fingerprint verification or approval of the song's beat grid.
Catalog indexing is metadata indexing. Audio is not included, downloaded or analyzed merely because its title appears here. Missing recordings remain unlinked; the practice worker uses already imported audio. These corpora do not provide a catalog of required samples, so the UI does not invent sample entries. The current link selector uses the library's first 100 loaded records.
The full DJ Mix transition table was imported at revision
8fb1fe1c91f7c8ac8cfc4dec4ca6ebc13a16efc5. Its 64,748 records contain all 57,416
accepted Raveform occurrences. Joint occurrence deduplication therefore produces
64,748, not 122,164, observations. Matching uses mix URL, source/target IDs and
tracklist position; alternate estimates retain provenance. Recording aliases
under different external IDs remain unresolved.
Cue-boundary overlap and the dataset's reported warping-path overlap are retained as separate fields: they are not interchangeable measurements. Joint connected components produce 64,237 training, 244 validation and 267 test rows; the largest component has 61,431 rows. That highly imbalanced holdout limits evaluation. No human quality labels or EQ/fader curves were inferred from these records.
Idle practice
aidj-practice runs every ten minutes in the root workspace. It uses four already
analyzed library tracks: Levels, Titanium, This Is What You Came For and One Kiss.
Change practice-config.yaml to change this explicit pool. Other private
workspaces do not automatically receive a worker.
Each job:
- Acquires a Mongo lease and checks the workspace pause setting and daily budget.
- Reads live API and mixer state. Unknown state, autopilot, active preparation or playing decks defers practice.
- Chooses an untried directed track pair and immutable recipe version. Identity includes source PCM hashes, analysis revisions, parameters and engine hash.
- Publishes through
aidj.learning.jobstoaidj.learning.practice.v1on the existing broker, then consumes one experiment. - Renders a private two-deck audition and records actual control snapshots, commands, audio and overlap-health measurements.
- Stores the best measured technical result in each exact timing/audio context. This does not promote a recipe into live playback or label it musically good.
The current recipe compiler supports 16 or 32 beats, not 16 or 32 bars. It compares existing blend/filter recipes; it does not generate arbitrary scripts or call Kimi. Each experiment has an eight-beat tail after the overlap.
Limits: one worker, 12 attempted jobs per UTC day, a 20-track maximum configured pool, 1 CPU / 2 GiB, a 240-second cancellation threshold and a 360-second job lifetime. A Mongo lease additionally fences overlapping job launches for eight minutes. Live playback or Pause requests cancellation at renderer checkpoints. New experiments stop when the configured pair/recipe/revision combinations are exhausted. Failures count against the budget and are not retried indefinitely.
The worker never sends transport, fader or mixer commands to the live services. The live-booth checks are resource/idle checks, not an audio-routing dependency. Artifacts are retained for review; automatic retention/deletion is not implemented, so storage growth is bounded by the finite pool and daily attempt budget.
Diagnostic boundaries
Most real recordings still have unreviewed timing. The practice request explicitly
sets diagnostic: true; its manifest, timing artifact and transition attempts
retain this status. Source hashes/revisions are checked, but estimated beats are
not converted into approved playback grids.
Normal auditions and replay of normal sessions still enforce approved-grid checks. Diagnostic attempts are excluded from approved transition ranking and the human-preference training export. Human comments and ratings can still be saved for listening review. They are retained without silently treating the underlying timing as approved.
Technical metrics measure clipping, silence and level change over the actual rendered overlap. They do not establish vocal compatibility, phrase correctness, musical taste or professional quality. The best result is only the best measured technical candidate in that exact experiment context.
What the monitor shows
- Practice status, recent experiment jobs, Pause/Enable and technical comparisons.
- Render telemetry while a private job produces control snapshots.
- Recorded performance replay after completion: audio controls drive the canvas playhead; recorded faders/EQ follow the same frame timeline.
- Links to Transition memory for listening, human scoring and Avoid feedback.
The canvas is not a live view of the four-CDJ booth and does not pretend a fast offline render is a real-time performance. It displays two actual private-render channels. There are no invented signal-level meters. Continuous real-time practice-booth streaming and an automatically advancing listening playlist remain future work.
Interfaces and reproducibility
GET/POST /api/v1/learning: scoped activity and pause setting.GET /api/v1/learning/catalog?q=...&missing=true&page=0: 50 external records/page.POST /api/v1/learning/links: bind an external ID to an existing local track.- Existing session artifact endpoints provide
mix.wavandbooth.jsonl. - Mongo:
practice_state,practice_settings,practice_jobs,practice_best,practice_lease,practice_links; shared metadata usesresearch_dj_tracksand versionedresearch_dj_observations.
tools/import_djmix.py in aidj-platform reads the pinned Parquet shards using
PyArrow and joins the earlier Raveform import. It hashes inputs and exports a
joint manifest, observations, catalog and train-only timing baseline.
tools/import-joint-corpus.py DIRECTORY in aidj-gitops imports those artifacts
through the mounted Mongo credential without printing it. Repeated imports use
immutable IDs. Audio and large metadata artifacts stay out of Git.
Sources: DJ Mix Dataset, transition table, Raveform schema. The DJ Mix dataset card does not declare an audio license; importing metadata makes no claim about rights to the referenced recordings.