POST
/
v1
/
training
/
lora
/
image
curl --request POST \
  --url https://geoff.ai/api/v1/training/lora/image \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "dataset": "https://files.geoff.ai/datasets/my_brand_pack.zip",
    "name": "my_brand_style"
  }'
{
  "data": {
    "task_id": "trn_img_abc123",
    "name": "my_brand_style",
    "status": "queued"
  },
  "trace_id": "04ede0ab069fb1ba8be5156a24b1e081"
}
Train a lightweight LoRA adapter on a curated image dataset to capture a style, subject, or aesthetic. The trained adapter is addressable by the name you supply and can be passed to any LoRA-aware image generation tool.

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 training images
  • A file id returned from file upload
name
string
required
Stable snake-case identifier for the trained adapter. Used as the lora_name field when passing the adapter to image generation calls. Lowercase letters, digits, and underscores only.
curl --request POST \
  --url https://geoff.ai/api/v1/training/lora/image \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "dataset": "https://files.geoff.ai/datasets/my_brand_pack.zip",
    "name": "my_brand_style"
  }'
{
  "data": {
    "task_id": "trn_img_abc123",
    "name": "my_brand_style",
    "status": "queued"
  },
  "trace_id": "04ede0ab069fb1ba8be5156a24b1e081"
}

Status polling

Poll Training Status with the returned task_id until status is completed. The completed adapter is then addressable by its name everywhere LoRAs are supported.

Tips

  • Dataset size: 10–30 images for style adapters; up to 100 for subject adapters with diverse viewpoints.
  • Resolution: 1024×1024 is the sweet spot. Mixed aspect ratios are fine — they’re center-cropped server-side.
  • Caption format: include caption text files alongside images inside the zip when you want explicit guidance; otherwise the trainer auto-captions via a VL pre-step.