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.
Inattivo

$0.01per esecuzione·~100 / $1

A young African man stands tall and confident, captured in a natural outdoor setting with warm, golden-hour lighting that casts soft shadows across his skin. He wears traditional attire with intricate patterns, modest in design, reflecting cultural heritage. His expression is calm and thoughtful, eyes gazing slightly off-camera as if lost in thought. The background is softly blurred with shallow depth of field, emphasizing his presence while hinting at a rural landscape—trees, earthy tones, and distant hills. Shot in realistic, high-resolution photographic style with natural depth of field and cinematic lighting, evoking authenticity and emotional depth. Medium shot, eye-level perspective, capturing both his posture and the environment with photographic realism.

With glasses

Asian woman
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.
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.
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 |
| 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) |
Each LoRA in the loras array has:
| Item | Cost |
|---|---|
| Per image | $0.01 |
Simple flat-rate pricing regardless of image size, strength, or LoRA count.
Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/wavespeed-ai/z-image-turbo/image-to-image-lora with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Z Image Turbo Image To Image Lora below.
set -euo pipefail
: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"
REQUEST_BODY=$(cat <<'JSON'
{
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"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 "Content-Type: application/json" \
-H "Authorization: Bearer $WAVESPEED_API_KEY" \
-d "$REQUEST_BODY")
TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; 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 has("data") then .data else . end')
STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
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
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/wavespeed-ai/z-image-turbo/image-to-image-lora";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');
async function requestJson(url, options = {}) {
const response = await fetch(url, options);
if (!response.ok) throw new Error(await response.text());
return response.json();
}
// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"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"
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
`https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;
// 2. Poll until the prediction finishes.
while (true) {
const resultBody = await requestJson(resultUrl, {
headers: { "Authorization": `Bearer ${apiKey}` },
});
const result = resultBody.data ?? resultBody;
if (result.status === "completed") {
console.log(result.outputs);
break;
}
if (["failed", "cancelled", "timeout"].includes(result.status)) throw new Error(JSON.stringify(result));
if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
await new Promise(resolve => setTimeout(resolve, 2000));
}import json
import os
import time
from urllib.request import Request, urlopen
api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"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"
}
def request_json(url, data=None):
request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
with urlopen(request) as response:
return json.load(response)
# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/wavespeed-ai/z-image-turbo/image-to-image-lora", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
raise RuntimeError("Submission response did not contain a prediction id")
result_url = task.get("urls", {}).get("get") or f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"
# 2. Poll until the prediction finishes.
while True:
result_body = request_json(result_url)
result = result_body.get("data", result_body)
status = result.get("status")
if status == "completed":
print(result.get("outputs", []))
break
if status in {"failed", "cancelled", "timeout"}:
raise RuntimeError(result)
if status not in {"created", "processing"}:
raise RuntimeError(f"Unexpected status: {status}")
time.sleep(2)Z Image Turbo Image To Image Lora is a WaveSpeedAI model for AI inference, exposed as a REST API 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. You can call it programmatically or try it from the playground above.
POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/wavespeed-ai/z-image-turbo-image-to-image-lora.
Z Image Turbo Image To Image Lora starts at $0.010 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.
Key inputs: `prompt`, `image`, `size`, `seed`, `enable_base64_output`, `enable_sync_mode`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/wavespeed-ai/z-image-turbo-image-to-image-lora.
Median end-to-end generation time on WaveSpeedAI is around 7 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.
Commercial usage rights depend on the model's license, set by its provider (WaveSpeedAI). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.