Qwen Image 2512 LoRA Trainer API Documentation
Playground
Try it on WaveSpeedAI!Qwen-Image-2512 LoRA Trainer lets you train custom LoRA models 10x faster with style, character, and object training. From concept to model in minutes, not hours—upload a ZIP file containing images to start. Ready-to-use REST inference API, best performance, no cold starts, affordable pricing.
Features
Qwen Image 2512 LoRA Trainer is a high-performance custom model training service for the Qwen Image 2512 text-to-image generation model. It allows you to train lightweight LoRA (Low-Rank Adaptation) adapters for personalized styles, characters, and concepts — with exceptional bilingual text rendering preserved throughout.
Training Architecture
The trainer is designed around Qwen Image’s 20B MMDiT architecture and produces specialized LoRA adapters optimized for the model’s unique capabilities:
-
Base LoRA adapter Trains on the core Qwen Image representation to capture your target style, character, or object, while keeping the base model frozen and stable.
-
Text-rendering preservation The training process is optimized to maintain Qwen Image’s superior Chinese and English text rendering capabilities even after fine-tuning.
-
Bilingual prompt compatibility Trained LoRAs work seamlessly with both Chinese and English prompts, preserving the model’s multilingual strengths.
This architecture ensures that your LoRA:
- Remains compact and easy to share
- Is plug-and-play with supported UIs and pipelines (e.g. ComfyUI, AI Toolkit)
- Preserves the text rendering and bilingual capabilities of Qwen Image 2512
Training Process
-
Data Upload Prepare and upload a ZIP file containing your training images. Include 10-20 high-quality images for best results.
-
Configure Trigger Word Set a unique trigger word (e.g., “p3r5on”) that will activate your trained style or character in prompts.
-
Adjust Training Parameters
- steps — Total training iterations (default: 1000)
- learning_rate — Training speed (default: 0.0004)
- lora_rank — Adapter capacity (default: 16)
- LoRA Training The system runs a tailored LoRA optimization loop:
- Freezes the base model weights
- Trains only the low-rank adapter layers
- Applies Qwen-optimized settings for best results
- Model Export After training completes, you receive:
- A LoRA adapter file (.safetensors) compatible with Qwen Image 2512
- Ready to use with Qwen Image 2512 LoRA
Parameters
| Parameter | Default | Description |
|---|---|---|
| data | — | ZIP file containing training images (required) |
| trigger_word | — | Unique word to activate your trained concept |
| steps | 1000 | Total training iterations |
| learning_rate | 0.0004 | Training speed (lower = more stable, higher = faster) |
| lora_rank | 16 | Adapter capacity (higher = more detail, larger file) |
Pricing
| Training Steps | Price (USD) |
|---|---|
| 1,000 | $1.00 |
| 2,000 | $2.00 |
| 5,000 | $5.00 |
| 10,000 | $10.00 |
Billing Rules
- Base price: $1 per 1,000 steps
- Total cost = $1 × (steps / 1000)
- Billed proportionally to the total number of steps in your job
Best Use Cases
- Character Consistency — Train on character images to maintain identity across generations.
- Brand Styles — Create custom visual styles for consistent marketing materials.
- Art Styles — Capture specific artistic aesthetics for creative projects.
- Product Visualization — Train on product photos for consistent e-commerce imagery.
Pro Tips
- Use 10-20 high-quality, diverse images of your subject for best results.
- Choose a unique trigger word that won’t conflict with common words.
- Start with default settings, then adjust if needed.
- Higher lora_rank captures more detail but increases file size.
- Lower learning_rate is more stable but requires more steps.
Notes
- Higher parameter values (steps, lora_rank) will increase training time.
- Training time scales with the number of images and total steps configured.
- For faster iterations, start with lower settings and increase gradually.
Try More Trainers
-
Z-Image LoRA Trainer — High-performance LoRA trainer for Z-Image models with Turbo-compatible optimization.
-
Wan 2.2 Image LoRA Trainer — LoRA trainer for the Wan 2.2 image model, ideal for custom styles that integrate into the Wan video/image ecosystem.
-
Flux Dev LoRA Trainer — LoRA trainer tailored for the Flux Dev model, focusing on high-fidelity creative visuals.
Reference
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
REQUEST_BODY=$(cat <<'JSON'
{
"data": "https://github.com/mdn/interactive-examples/archive/refs/heads/main.zip",
"steps": 1000,
"learning_rate": 0.0004,
"lora_rank": 16
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/qwen-image-2512-lora-trainer" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}")
TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body \
"${RESULT_URL}" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}")
RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
case "${STATUS}" in
completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
failed|cancelled|timeout) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
created|processing) sleep 2 ;;
*) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| data | string | Yes | - | - | URL to zip archive with images. Try to use at least 4 images in general the more the better. In addition to images the archive can contain text files with captions. Each text file should have the same name as the image file it corresponds to. |
| trigger_word | string | No | - | - | Optional trigger word. If a caption file exists, it is prepended when not already present. If no caption file exists and trigger_word is non-empty, a caption containing only the trigger word is created. Leave empty to enable no-caption training. |
| steps | integer | No | 1000 | 500 ~ 10000 | Number of steps to train the LoRA on. |
| learning_rate | number | No | 0.0004 | 0 ~ 1 | - |
| lora_rank | integer | No | 16 | 1 ~ 64 | - |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<string | object> | Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model. |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to poll for the prediction result |
| data.status | string | Status: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |