POST
/
v1
/
training
/
lora
/
music
curl --request POST \
  --url https://geoff.ai/api/v1/training/lora/music \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "dataset": "https://files.geoff.ai/datasets/lofi_pack.zip",
    "name": "lofi_2026"
  }'
{
  "data": {
    "task_id": "trn_mus_abc123",
    "name": "lofi_2026",
    "status": "queued"
  },
  "trace_id": "04ede0ab069fb1ba8be5156a24b1e081"
}
Train a LoRA adapter on a corpus of reference tracks. Captures genre conventions, instrumentation choices, or production characteristics that the base music model doesn’t expose as a prompt-able style.

Authorization

Authorization
string
required
Bearer token. Bearer API_key.

Request Body

dataset
string
required
Reference to the training dataset. Accepts either:
  • A URL to a zip archive of reference tracks (mp3 / wav)
  • A file id returned from file upload
name
string
required
Stable snake-case identifier for the trained adapter. Passed as lora_name on music generation calls.
curl --request POST \
  --url https://geoff.ai/api/v1/training/lora/music \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "dataset": "https://files.geoff.ai/datasets/lofi_pack.zip",
    "name": "lofi_2026"
  }'
{
  "data": {
    "task_id": "trn_mus_abc123",
    "name": "lofi_2026",
    "status": "queued"
  },
  "trace_id": "04ede0ab069fb1ba8be5156a24b1e081"
}

Tips

  • Dataset size: 10–25 tracks for genre adapters; smaller curated sets often outperform large noisy ones.
  • Length: 30–120 second clips are the sweet spot. Full songs are automatically segmented.
  • Vocals vs instrumental: if the goal is the instrumentation treatment, pre-process the dataset with voice isolate and use the return_instrumental flag to keep only the no-vocals stems.
  • Status: poll Training Status.