Introduction
Qwen Image 2.1 LoRA Text to Image runs Alibaba's newest open-weight image model with your own LoRA weights loaded on top — up to three files per request, each with its own strength.
A LoRA here is a URL, not an upload. There is no review of the weights you point at and no content filter on what comes back, which is what makes this usable for the weights most hosted APIs quietly exclude.
Choose a Qwen Image 2.1 LoRA mode by starting material
| Starting material | Mode |
|---|---|
| A brief plus your own weights | Qwen Image 2.1 LoRA Text to Image |
| Source images plus your own weights | Qwen Image 2.1 LoRA Editing |
| No custom weights needed | Qwen Image 2.1 |
Key features & highlights
No upload, no allow-list, no approval queue
Most hosted APIs that accept custom weights want them uploaded, reviewed, or picked from a curated list — which excludes exactly the weights most people want to run. Here you supply a direct link to a .safetensors file or a Hugging Face repository and a strength, and it is fetched when the request runs. We verified the case that actually matters with an uncensored LoRA: it loaded and generated without complaint.
Three slots, independent strengths
Three entries per call, each with its own scale from 0 to 4, covers the stack production work actually uses: a character LoRA holding the person, a house-style LoRA at a lower weight colouring the frame, a detail LoRA for skin or fabric. Change one scale per run — moving two at once leaves you unable to attribute the result.
The base model underneath is uncensored too
The weights are only half of it. The model they sit on has no content filter, no maturity flag and no prompt scanner, so an uncensored LoRA is not fighting a filter on the way out.
Request parameters
| Parameter | Required | Description |
|---|---|---|
prompt | Yes | Up to 5,000 characters. There is no negative prompt on this family, so exclusions belong here too. at least 1 characters · at most 5000 characters |
aspect_ratio | No | Composes the frame before generation rather than cropping afterwards. Fifteen options, from 3:1 and 21:9 strips to 1:3 and 9:21 columns. |
resolution | No | Sets output size and price: 1k default, 1.5k in between, 2k where skin texture and fabric hold together. Iterate at 1k, promote the keeper to 2k. |
loras | No | Up to three weight files, each {path, scale}. path is a direct HTTPS URL to a .safetensors file or a Hugging Face repository — nothing is uploaded to us and nothing is reviewed. Default: |
output_format | No | JPEG by default; PNG for compositing, WebP to ship straight to a page. Does not change the price or the render. |
seed | No | Steadies a draw so a series stays in the same neighbourhood. Not a reproduction guarantee — the same prompt and seed twice returned two different frames in our testing. |
Pricing
| Specification | Price |
|---|---|
| $0.03 / image |
| $0.054 / image |
| $0.102 / image |
Use cases
Uncensored LoRAs
Character, style and unfiltered weights load like any other file. No allow-list, no review, no filter on the output.
Consistent characters at scale
A character LoRA holds a face and body across hundreds of frames far more reliably than seeds or reference chaining.
House style over a general model
A style LoRA trained on your own catalogue makes output look like yours rather than like a generic render.
Production stacks
Character, style and detail weights together in one request, each at its own strength.
Prompt guide & pro tips
Let the weights do their job
Describe the scene, not the thing the LoRA already knows. Restating a character's features when a character LoRA is loaded tends to fight it rather than reinforce it.
Start at 1, then move one value
Scale 1 is neutral. Drop to 0.4-0.6 when a weight overwhelms the prompt; push past 1 when it has to survive a busy scene. One change per run.
Budget for the first call
The weights are fetched before generation. A 1.2 GB file added around 25 seconds to that request in our testing. Later calls with the same file are faster.
Check a new LoRA actually does something
Weights for a different base architecture can load without an error and barely affect the image. Run one obvious test prompt before committing a batch.
API quick start
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
-d '{
"model": "alibaba/qwen-image-2.1-lora/text-to-image",
"input": {
"aspect_ratio": "1:1",
"output_format": "jpeg",
"prompt": "A ceramic teapot on a linen cloth, soft window light, muted palette",
"resolution": "1k"
}
}'
# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"
See the API reference for authentication, the complete schema, polling, and error handling.


















