Skip to content

Chroma / ERNIE / Qwen / Z-Image LoRA training

Five smaller image-LoRA ecosystems share this page: each has its own ecosystem value and base checkpoint, but the request shape is otherwise the AI Toolkit standard.

ecosystemBaseBuzz / epochBest for
chromalodestones/Chroma1-HD200Chroma community model fine-tunes
erniebaidu/ERNIE-Image100ERNIE Image LoRAs
qwenQwen-Image (versioned)200Qwen Image / Qwen-Image-Edit LoRAs
zimageturboostris/Z-Image-De-Turbo (+ Z-Image-Turbo extras)100Z-Image Turbo LoRAs (cheap, fast inference)
zimagebaseTongyi-MAI/Z-Image100Z-Image base LoRAs

Each ecosystem has its own subsection with a runnable example. The shared schema lives in Common parameters; ecosystem-specific quirks are in each subsection.

Long-running step

Always submit with wait=0. These ecosystems run anywhere from ~10s/epoch (Z-Image Turbo) to ~2min/epoch (Chroma/Qwen). See Results & webhooks.

The request shape

json
{
  "$type": "training",
  "input": {
    "engine":    "ai-toolkit",
    "ecosystem": "chroma"   // chroma | ernie | qwen | zimageturbo | zimagebase
  }
}

Prerequisites

  • A Civitai orchestration token (Quick start → Prerequisites)
  • A training-data zip (signed R2 URL, Civitai R2 AIR, or any HTTPS URL)
  • An accurate count of images in the zip

Chroma

Trains on the Chroma1-HD base. Uses TextToImageV2Job for sample renders; output LoRA is usable wherever Chroma is supported.

http
POST https://orchestration.civitai.com/v2/consumer/workflows?wait=0
Authorization: Bearer <your-token>
Content-Type: application/json

{
  "tags": ["training"],
  "steps": [{
    "$type": "training",
    "priority": "normal",
    "retries": 2,
    "input": {
      "engine": "ai-toolkit",
      "ecosystem": "chroma",
      "epochs": 5,
      "resolution": 1024,
      "lr": 0.0001,
      "trainTextEncoder": false,
      "lrScheduler": "cosine",
      "optimizerType": "adamw8bit",
      "networkDim": 16,
      "networkAlpha": 16,
      "trainingData": {
        "type": "zip",
        "sourceUrl": "https://civitai-delivery-worker-prod.5ac0637cfd0766c97916cefa3764fbdf.r2.cloudflarestorage.com/training-images/5418/2382561TrainingData.B6Tr.zip",
        "count": 10
      },
      "samples": {
        "prompts": [
          "woman with red hair, playing chess at the park, dramatic explosion in background",
          "a woman holding a coffee cup, in a beanie, sitting at a cafe",
          "a horse acting as a DJ at a night club, fisheye lens, smoke machine, laser lights"
        ]
      }
    }
  }]
}
POST/v2/consumer/workflows
Set your Civitai API token via the Token button in the navbar to enable Try It.
Request body — edit to customize (e.g. swap the image URL or prompt)
Valid JSON

Chroma defaults: networkDim: 16, optimizerType: adamw8bit, trainTextEncoder: false, lrScheduler: cosine. 200 Buzz / epoch.

ERNIE

Trains on Baidu's ERNIE-Image. Comfy-based ecosystem with built-in diffuser. Uses ComfyImageGenJob for sample renders.

http
POST https://orchestration.civitai.com/v2/consumer/workflows?wait=0
Authorization: Bearer <your-token>
Content-Type: application/json

{
  "tags": ["training"],
  "steps": [{
    "$type": "training",
    "priority": "normal",
    "retries": 2,
    "input": {
      "engine": "ai-toolkit",
      "ecosystem": "ernie",
      "epochs": 5,
      "lr": 0.0001,
      "trainTextEncoder": false,
      "lrScheduler": "cosine",
      "optimizerType": "adamw8bit",
      "networkDim": 32,
      "networkAlpha": 32,
      "trainingData": {
        "type": "zip",
        "sourceUrl": "urn:air:other:other:civitai-r2:civitai-delivery-worker-prod@training-images/7918795/2435272TrainingData.bJ7P.zip",
        "count": 10
      },
      "samples": {
        "prompts": ["a portrait of TOK", "TOK walking through a comic book city"]
      }
    }
  }]
}
POST/v2/consumer/workflows
Set your Civitai API token via the Token button in the navbar to enable Try It.
Request body — edit to customize (e.g. swap the image URL or prompt)
Valid JSON

ERNIE defaults: networkDim: 32, optimizerType: adamw8bit, trainTextEncoder: false, lrScheduler: cosine. 100 Buzz / epoch.

Qwen

Trains on Qwen-Image. The version field selects a specific Qwen-Image release:

versionBase resolved to
latest (default)Qwen/Qwen-Image-Edit-2512
2509urn:air:qwen:checkpoint:civitai:1864281@2110043
2512Qwen/Qwen-Image-Edit-2512 (same as latest)
http
POST https://orchestration.civitai.com/v2/consumer/workflows?wait=0
Authorization: Bearer <your-token>
Content-Type: application/json

{
  "tags": ["training"],
  "steps": [{
    "$type": "training",
    "priority": "normal",
    "retries": 2,
    "input": {
      "engine": "ai-toolkit",
      "ecosystem": "qwen",
      "version": "latest",
      "epochs": 1,
      "resolution": 1024,
      "lr": 0.00011,
      "trainTextEncoder": false,
      "lrScheduler": "cosine",
      "optimizerType": "adamw8bit",
      "networkDim": 16,
      "networkAlpha": 16,
      "trainingData": {
        "type": "zip",
        "sourceUrl": "urn:air:other:other:civitai-r2:civitai-delivery-worker-prod@training-images/3315022/2526079TrainingData.o4S8.zip",
        "count": 10
      },
      "samples": {
        "prompts": [
          "woman with red hair, playing chess at the park, dramatic explosion in background",
          "a woman holding a coffee cup, in a beanie, sitting at a cafe"
        ]
      }
    }
  }]
}
POST/v2/consumer/workflows
Set your Civitai API token via the Token button in the navbar to enable Try It.
Request body — edit to customize (e.g. swap the image URL or prompt)
Valid JSON

Qwen defaults: networkDim: 16, optimizerType: adamw8bit, trainTextEncoder: false, lrScheduler: cosine. 200 Buzz / epoch.

Z-Image Turbo

Trains on ostris/Z-Image-De-Turbo and pulls in the original Tongyi-MAI/Z-Image-Turbo as an extras model. Output LoRA is usable in Z-Image generation on the turbo model.

http
POST https://orchestration.civitai.com/v2/consumer/workflows?wait=0
Authorization: Bearer <your-token>
Content-Type: application/json

{
  "tags": ["training"],
  "steps": [{
    "$type": "training",
    "priority": "normal",
    "retries": 2,
    "input": {
      "engine": "ai-toolkit",
      "ecosystem": "zimageturbo",
      "epochs": 7,
      "resolution": 512,
      "lr": 0.000611,
      "trainTextEncoder": false,
      "lrScheduler": "cosine",
      "optimizerType": "adamw8bit",
      "networkDim": 32,
      "networkAlpha": 32,
      "trainingData": {
        "type": "zip",
        "sourceUrl": "urn:air:other:other:civitai-r2:civitai-delivery-worker-prod@training-images/3315022/2526079TrainingData.o4S8.zip",
        "count": 10
      },
      "samples": {
        "prompts": ["a photo of TOK", "TOK in a garden", "TOK portrait"]
      }
    }
  }]
}
POST/v2/consumer/workflows
Set your Civitai API token via the Token button in the navbar to enable Try It.
Request body — edit to customize (e.g. swap the image URL or prompt)
Valid JSON

Z-Image Turbo defaults: networkDim: 32, optimizerType: adamw8bit, trainTextEncoder: false. 100 Buzz / epoch.

Z-Image Base

Trains on Tongyi-MAI/Z-Image. The orchestrator overrides optimizerType to automagic and lr to 0.000001 regardless of what you submit — the input fields are accepted but ignored. Use the Z-Image Turbo recipe instead unless you specifically need a base-model LoRA.

http
POST https://orchestration.civitai.com/v2/consumer/workflows?wait=0
Authorization: Bearer <your-token>
Content-Type: application/json

{
  "tags": ["training"],
  "steps": [{
    "$type": "training",
    "priority": "normal",
    "retries": 2,
    "input": {
      "engine": "ai-toolkit",
      "ecosystem": "zimagebase",
      "epochs": 7,
      "resolution": 512,
      "lr": 0.000611,
      "trainTextEncoder": false,
      "lrScheduler": "cosine",
      "networkDim": 32,
      "networkAlpha": 32,
      "trainingData": {
        "type": "zip",
        "sourceUrl": "urn:air:other:other:civitai-r2:civitai-delivery-worker-prod@training-images/3315022/2526079TrainingData.o4S8.zip",
        "count": 10
      },
      "samples": {
        "prompts": ["a photo of TOK", "TOK in a garden", "TOK portrait"]
      }
    }
  }]
}
POST/v2/consumer/workflows
Set your Civitai API token via the Token button in the navbar to enable Try It.
Request body — edit to customize (e.g. swap the image URL or prompt)
Valid JSON

Z-Image Base defaults: networkDim: 32, optimizerType: automagic (overridden), lr: 0.000001 (overridden), trainTextEncoder: false. 100 Buzz / epoch.

Common parameters

Defaults shown are the post-ApplyDefaults values; per-ecosystem deviations are noted above.

FieldRequiredDefaultNotes
engineAlways ai-toolkit.
ecosystemOne of: chroma, ernie, qwen, zimageturbo, zimagebase.
version(qwen only)latestlatest, 2509, 2512. Selects the Qwen-Image base release.
epochs5120. Billed per epoch.
numberOfRepeatsvaries (see ecosystem)15000. ERNIE / Z-Image auto-derive ceil(200 / count); Chroma / Qwen don't auto-set.
lr0.0001UNet learning rate.
trainTextEncoderfalseAll five ecosystems leave the text encoder frozen.
lrSchedulercosineconstant, constant_with_warmup, cosine, linear, step.
optimizerTypeadamw8bit (automagic for Z-Image Base)Full enum on the SDXL/SD1 page.
networkDim32 (16 for Chroma / Qwen)1256.
networkAlphamatches networkDim1256.
noiseOffset001.
flipAugmentationfalseRandom horizontal flips.
shuffleTokens / keepTokensfalse / 0Caption-tag shuffling.
triggerWord(none)Activation token. Recommended for character / style LoRAs on Chroma, Z-Image.
trainingData.{type, sourceUrl, count}type: "zip".
samples.prompts[][]Per-epoch preview prompts rendered with the trained LoRA.
samples.negativePrompt(none)

Reading the result

Same envelope as the other training recipes — see SDXL/SD1 → Reading the result. Each epoch yields a .safetensors LoRA blob plus any sample images.

The trained LoRA is usable in the corresponding generation recipe — Chroma LoRAs in any Chroma workflow, ERNIE LoRAs in ERNIE image generation, Qwen LoRAs in Qwen image generation, Z-Image LoRAs in Z-Image generation.

Runtime

Per-epoch wall time, default settings on a 10-image dataset:

EcosystemPer-epochTypical full run
chroma~60–120 s5–15 min for 5 epochs
ernie~30–60 s3–8 min for 5 epochs
qwen~60–120 s5–15 min for 5 epochs
zimageturbo~10–25 s1–4 min for 7 epochs
zimagebase~10–25 s1–4 min for 7 epochs

Always use wait=0.

Cost

total = costPerEpoch × epochs
EcosystemBuzz / epochepochs: 5epochs: 10
chroma20010002000
ernie1005001000
qwen20010002000
zimageturbo1005001000
zimagebase1005001000

Sample-prompt rendering is billed separately at each ecosystem's image-generation rate. Use whatif=true (the Preview cost button on the widgets above) to confirm exact charges before submitting.

Troubleshooting

SymptomLikely causeFix
400 with "ecosystem unknown"Typo, or not one of chroma / ernie / qwen / zimageturbo / zimagebaseCheck spelling.
400 with "version not allowed" (Qwen only)version not one of latest / 2509 / 2512Use one of the listed values.
Z-Image Base: optimizerType you set seems ignoredIntentional — ApplyDefaults overrides to automagicUse Z-Image Turbo if you need full optimizer control.
Trained LoRA underbakedToo few epochs / too low lrRaise epochs to 8–15 (these ecosystems often need more epochs than SDXL); keep lr5e-4.
Trained LoRA overcookedToo many epochs or networkDim too highDrop networkDim to 16, lower epochs.
Step failed, moderationStatus: "Rejected"Dataset failed content moderationReplace flagged images.

Civitai Developer Documentation