Batch generation

In Library, open Batch generation. You import a UTF-8 JSON file, review a preview (song count, takes, requested vs admitted parallelism), then start. One project is created per song. Pause, cancel, resume, retry failures, and export of ready WAVs are available.

Takes use the same exclusive GPU queue as Create. Admitted capacity is 1: this is not two overlapping inferences. If the file asks for 2, allowReduction (default) starts at 1; requireRequested rejects the batch.

An invalid file creates no projects. After a crash, a running batch becomes “interrupted”; nothing auto-resumes.

Minimal file

UTF-8 encoding. schemaVersion must be 1. Each song needs a unique id, a title, a style, and lyrics.

{
  "schemaVersion": 1,
  "songs": [
    {
      "id": "night",
      "title": "The night moves on",
      "style": "French indie pop, warm bass, soft drums, intimate vocals",
      "lyrics": "[Verse]\nThe night moves across the roofs\nI keep a light for you\n\n[Chorus]\nCome back when day is breaking\nWe still have our dreams"
    }
  ]
}

With no other fields: 1 take, cot = full, 180 s target duration, lyrics sent as written.

Root fields

FieldRequiredDefaultRule
schemaVersionyes—Integer, only 1
songsyes—Array, 1 to 1000 songs
nameno—1 to 120 characters
maxParallelGenerationsno21 to 32. Admitted capacity is still 1
parallelismPolicynoallowReductionallowReduction (start at 1) or requireRequested (block if demand > 1)
onErrornocontinuecontinue (next song) or pause
retry.maxAttemptsno11 to 5
defaultsno—Shared song options (below)

Any unknown property is rejected. Duplicate JSON keys too. Max file size: 10 MB. At most 10,000 takes in total.

Each song (songs[])

FieldRequiredLimits
idyes1 to 64 characters, unique in the file
titleyes1 to 120. No trailing period. Forbidden: / \ : * ? " < > |
styleyes1 to 4000 characters
lyricsyes1 to 4000, unless instrumentalMode is true (then "" is allowed)
seednoInteger 0 to 4,294,967,295. If omitted, a seed is written
generationsno1 to 1000 takes for this song
cotnofull, melody, or off
targetDurationSecno30 to 360 (a target, not a guaranteed musical length)
preferFullLyricsnoboolean
instrumentalModenotrue: lyrics optional; this is not the YuE2 instrumental LoRA
singingLanguagenostring or null (1 to 40 characters when set)
tempoBpmnointeger 40 to 220, or null
keyno{ "tonic": "C", "mode": "minor" } or null
meterno{ "numerator": 4, "denominator": 4 } or null

tonic: C, C#, D, Eb, E, F, F#, G, Ab, A, Bb, B.
mode: major or minor.
Meter: 4/4, 3/4, 6/8, or 2/4 only.

defaults and precedence

defaults uses the optional song fields (not id, title, style, lyrics, seed). For each option: song value, else defaults, else the product default:

OptionProduct default
generations1
cotfull
targetDurationSec180
preferFullLyricstrue
instrumentalModefalse
singingLanguage, tempoBpm, key, meterunset

Example with options

Two songs, 3 takes then 2, policy that accepts reduction to 1:

{
  "schemaVersion": 1,
  "name": "Demo — two songs",
  "maxParallelGenerations": 2,
  "parallelismPolicy": "allowReduction",
  "onError": "continue",
  "retry": { "maxAttempts": 1 },
  "defaults": {
    "generations": 3,
    "cot": "full",
    "singingLanguage": "en",
    "targetDurationSec": 180,
    "preferFullLyrics": true,
    "instrumentalMode": false
  },
  "songs": [
    {
      "id": "night",
      "title": "The night moves on",
      "style": "French indie pop, warm bass, soft drums, intimate vocals",
      "lyrics": "[Verse]\nThe night moves across the roofs\nI keep a light for you\n\n[Chorus]\nCome back when day is breaking",
      "tempoBpm": 110,
      "seed": 42
    },
    {
      "id": "road",
      "title": "On the road",
      "style": "French rock, electric guitars, energetic drums, clear vocals",
      "lyrics": "[Verse]\nThe road unfolds its turns\n\n[Chorus]\nOn the road we keep going",
      "generations": 2,
      "targetDurationSec": 120,
      "tempoBpm": 140
    }
  ]
}

In the app, Batch generation can also download a sample file. The engine is the profile’s engine (YuE2 by default), not a second XOR.

What batch does not do

  • No overlapping GPU inferences.
  • No YuE2 audio_input and no Lego mix/stems fields in the JSON (Lego runs from Production on an open song).
  • Not a replacement for sequential candidates on the Create tab (N calls for one song).