Z Image Turbo Image To Image LoRA API Documentation
Playground
Try it on WaveSpeedAI!Z-Image-Turbo Image-to-Image LoRA transforms reference images with custom LoRA styles in sub-second time. Apply up to 3 LoRAs for personalized image transformation. Ready-to-use REST inference API, best performance, no cold starts, affordable pricing.
Features
Z-Image Turbo Image-to-Image LoRA is a versatile image generation model with full LoRA support. Apply up to 3 custom LoRA adapters while controlling the transformation spectrum — from subtle enhancement to dramatic reimagination — all via the strength parameter.
This is not a simple editing tool — it’s a generation engine that combines custom styles with flexible image modification.
Looking for the standard version? Try Z-Image Turbo Image-to-Image without LoRA support.
Why Choose This?
-
LoRA support Apply up to 3 custom LoRA adapters to personalize style, characters, or visual aesthetics.
-
Flexible transformation spectrum From near-lossless enhancement to complete style overhaul — all controlled by a single strength slider.
-
Quality enhancement mode At low strength, improve image quality and add detail while applying subtle LoRA styles.
-
Creative reimagination mode At high strength, combine LoRA styles with dramatic image transformation.
-
Prompt Enhancer Built-in tool to automatically improve your prompts for better results.
Understanding Strength
The strength parameter controls how much the output differs from your input image:
| Strength | Effect | Use Case |
|---|---|---|
| 0.0 - 0.3 | Minimal change — enhances quality, applies subtle LoRA style | Upscaling with style hints, quality improvement |
| 0.3 - 0.6 | Moderate change — preserves structure, blends LoRA style | Style fusion, character consistency |
| 0.6 - 0.8 | Significant change — keeps composition, strong LoRA influence | Style transfer, artistic reinterpretation |
| 0.8 - 1.0 | Maximum change — LoRA style dominates, image as reference | Creative reimagination, full style transformation |
Parameters
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Text description guiding the transformation |
| image | Yes | Source image to transform (upload or URL) |
| loras | No | List of LoRA adapters to apply (up to 3) |
| width | No | Output width in pixels (default: 1024) |
| height | No | Output height in pixels (default: 1024) |
| strength | No | Transformation intensity 0-1 (default: 0.6) |
| seed | No | Random seed for reproducibility (-1 for random) |
LoRA Format
Each LoRA in the loras array has:
- path (required) — URL to the LoRA weights file
- scale (optional) — Weight multiplier, default 1
How to Use
- Upload your image — drag and drop or paste a public URL.
- Write your prompt — describe the desired output or transformation.
- Add LoRAs — click ”+ Add Item” to include custom LoRA adapters (up to 3).
- Set strength — low for enhancement, high for reimagination.
- Adjust output size — set width and height as needed.
- Run — submit and download the transformed image.
Pricing
| Item | Cost |
|---|---|
| Per image | $0.01 |
Simple flat-rate pricing regardless of image size, strength, or LoRA count.
Best Use Cases
- Character Transformation — Apply character LoRAs while preserving pose and composition.
- Style Transfer with Control — Use style LoRAs with adjustable strength for precise blending.
- Brand Consistency — Transform images to match brand aesthetics via custom LoRAs.
- Artistic Reinterpretation — Combine multiple art style LoRAs for unique hybrid looks.
- Quality Enhancement — Improve image quality while subtly applying trained styles.
Pro Tips
- Start with strength 0.5-0.6 to balance original image and LoRA influence.
- LoRA effect is more visible at higher strength values.
- Combine LoRAs carefully — multiple LoRAs can conflict; test combinations.
- If your LoRA uses trigger words, include them in your prompt.
- Use the same seed to compare different strength levels or LoRA combinations.
Notes
- Up to 3 LoRAs can be applied simultaneously.
- LoRA version pricing is 2× the standard version.
- Output dimensions can differ from input — set width and height to your target size.
- At low strength, the original image dominates; at high strength, LoRA styles dominate.
Related Models
- Z-Image Turbo Image-to-Image — Standard version without LoRA support.
- Z-Image Turbo Text-to-Image — Generate images from text prompts only.
- Z-Image LoRA Trainer — Train custom LoRAs for Z-Image models.
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'
{
"prompt": "A cinematic ocean wave at sunrise, highly detailed",
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"size": "1024*1024",
"strength": 0.6,
"seed": -1,
"output_format": "jpeg"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/z-image-turbo/image-to-image-lora" \
-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 |
|---|---|---|---|---|---|
| prompt | string | Yes | - | The positive prompt for the generation. | |
| image | string | Yes | - | Reference image URL to guide the generation style or composition. | |
| loras | array<object> | No | 0 ~ 3 items | List of LoRAs to apply (max 3). | |
| size | string | No | 1024*1024 | - | The size of the generated media in pixels (width*height). |
| strength | number | No | 0.6 | 0 ~ 1 | Controls the strength of the transformation. Higher values produce outputs more different from the input image. |
| seed | integer | No | -1 | - | The random seed to use for the generation. -1 means a random seed will be used. |
| output_format | string | No | jpeg | jpeg, png, webp | The format of the output image. |
| enable_sync_mode | boolean | No | false | - | If set to `true`, the request attempts to wait for the generated result and return outputs in the same response. If the result is not ready within the sync wait window, the API can return a timeout body while the task continues processing. This option is only available via the API and is supported only by some models. |
| enable_base64_output | boolean | No | false | - | If set to `true`, the prediction's `output` strings are returned as **naked base64** (no `data:<mime>;base64,` prefix). When `false` (default), outputs are returned as URLs pointing to our CDN. |
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 |