Skip to main content

Z-Image Spicy is an uncensored text-to-image endpoint with exact width and height set independently from 256 to 1536 pixels. The prompt has no character cap, and the prompt expander is off unless you switch it on.

From $0.012/image5% below the Spicy list price

Workbench

Input

Text to image
No character cap. Spend the room on light direction, wardrobe material, film look and palette; uncensored wording is passed through as written when expansion is off. at least 1 characters
Output width in pixels, 256 to 1536, set independently of height. Keep the long side within roughly twice the short side unless the dead space is intentional. no lower than 256 · no higher than 1536
Output height in pixels, 256 to 1536, set independently of width. Generating at the placement's height avoids a crop that moves the subject away from where the layout expects it. no lower than 256 · no higher than 1536
Prompt expansionaffects price
Rewrites a short prompt into a longer one before generation. Off by default, and worth leaving off for uncensored briefs — expansion paraphrases, which is where deliberate wording gets generalised.
Seed
Pass the same seed with the same prompt and dimensions to hold the draw steady between two runs; that makes them comparable but does not guarantee an identical image. 0, or omitting it, asks for a random draw on every call. no lower than 0 · no higher than 2147483647
Safety checkerOff

SpicyAPI does not run a safety checker on this model. Your prompt and media go to the model as written, and the model itself decides what comes back.

Checking your account before enabling submission and pricing.

Output

Ready for a new run
blind-stripe-boudoirExample result

Related models and next tasks

Missing the model you need?

Tell us what to add and where you would use it. Requests go to the people who decide what gets onboarded next.

These previews show selected examples. Try your own prompt and settings in the Playground.

A LoRA-tuned uncensored branch of Alibaba's open Z-Image line

Z-Image Spicy is an uncensored text-to-image endpoint that takes a written brief and returns one image at a width and height you set yourself, each side anywhere from 256 to 1536 pixels. It is a LoRA-tuned tier in this catalog drawn from Alibaba Tongyi's open Z-Image line, not a model Alibaba has published under this name, and it has no aspect-ratio list: the frame is stated in pixels.

Open the playground
A LoRA-tuned uncensored branch of Alibaba's open Z-Image line
Base lineage
Alibaba Tongyi's open Z-Image line, 6B parameters, Apache-2.0
Sizing
width and height set independently, 256–1536px each, no aspect_ratio field
Prompt
No character cap declared on this endpoint
Billing
Two price tiers, keyed to enable_prompt_expansion
Content declaration
None: no maturity flag, no per-request field
Task window
Asynchronous, 1800 seconds to reach a terminal state
Lineage
A LoRA branch, not an official Alibaba releaseTongyi publishes the Z-Image line openly under Apache-2.0: a distilled Turbo tier and the 6B foundation model are out, with an editing variant and an omni base announced as still to come. None of those releases is this endpoint, which is a LoRA-tuned uncensored branch of that architecture running under its own name here.
Frame math
Pixels, not a ratio listThere is no aspect_ratio to pick from. width and height are set independently, so a banner, a portrait card or a square thumbnail is computed once from the placement and sent as two numbers.
Billing
Two prices, one switchenable_prompt_expansion is this endpoint's only pricing variant: leaving it false or setting it true picks which of the two price tiers a call lands in, and no other field in the request moves it.

Working with the Z-Image Spicy API

Migrating off a ratio-preset endpoint

Migrating off a ratio-preset endpoint

If an existing integration picks from a fixed list of ratios, the port is one calculation: multiply the target ratio by the pixel budget you need, then send the resulting width and height as two integers. No preset-matching step sits in between, so a 3:2 crop and a 21:9 strip are the same amount of work.

The expansion switch is a pricing decision

The expansion switch is a pricing decision

enable_prompt_expansion decides which of the two price tiers a call lands in, so it is a budget setting as much as a prompt setting. Pick one value for a whole run and the total is forecastable before you submit; alternate it per request and the same batch straddles both tiers, which makes an estimate harder to hold.

  • No negative prompt, so exclusions go in the sentence

    There is no separate field for what to avoid, so anything that would have gone in a negative prompt has to be turned around into a positive instruction. Name the wardrobe material and the direction of the light you do want; the model has nothing to subtract from, so a sentence about what you do not want is still a sentence about that thing.

  • A seed only means something with the request beside it

    width, height and enable_prompt_expansion all feed the draw, so a seed on its own does not identify a result. Store the complete request body next to the seed in your logs and a frame from last week can be lined up against a new one; keep the prompt string alone and the seed points at a draw you can no longer rebuild.

  • One image per call, sized once

    There is no num_outputs or batch field on this endpoint, so one request returns one image. A set of sizes for the same subject, a square tile, a wide header and a tall card, is three calls with three width and height pairs, and three random draws unless the same seed is pinned across them.

  • A task handle, a poll loop and a ceiling

    A request opens a task instead of blocking until the image exists, and the endpoint allows 1800 seconds before that task is recorded as timed out. A poll loop with a fixed interval and a cap derived from that number is enough; the figure is a budget for retry logic and says nothing about how long an ordinary image takes.

Who calls the Z-Image Spicy API

  • Replace a ratio picker with two integers

    Teams moving off preset ratios

    Replace a ratio picker with two integers

    A UI that used to offer '1:1 / 16:9 / 9:16' can keep that picker and translate the selection to width and height at request time, or expose the two number fields directly for placements a preset list never covered.

  • Match the app's own asset grid exactly

    Companion and character products

    Match the app's own asset grid exactly

    Avatar tiles, banner strips and full-card art are rarely the same shape. Setting width and height per call means each asset renders at its native size, so a portrait card does not have to be generated square and then trimmed down to fit.

  • Queue the work and collect it later

    High-volume uncensored image pipelines

    Queue the work and collect it later

    Each request is an independent task with its own handle, so a run of several hundred images is a queue your worker drains at its own pace instead of a long blocking call. Failures land per task as well, which means a retry re-sends one prompt and one size.

  • Start from the placement, not the model

    Developers new to pixel-exact sizing

    Start from the placement, not the model

    Measure the space the image has to fill first, then send those numbers as width and height. Both sides accept any integer from 256 to 1536, and there is no rounding to a nearest supported ratio to account for, so a 1200x900 placement is literally 1200 and 900.

How to integrate the Z-Image Spicy API

  1. Compute width and height from the placement

    There is no ratio list to snap to, so start from the actual pixel dimensions the image needs to fill and send them as width and height, each between 256 and 1536.

  2. Decide enable_prompt_expansion once for the integration

    Leave it false for a fully written brief so the wording reaches the model unchanged; set it true only where the input is a short, deliberately thin line. This also fixes which of the two price tiers the call lands in.

  3. Write exclusions as positive instructions

    With no negative prompt field, write the brief entirely in terms of what should be in the frame. A clause about something you do not want still names that thing, so leave it out of the sentence instead.

  4. Submit the task and poll to a terminal state

    The call returns a task handle. Poll that handle on a fixed interval until it reports a terminal state, then fetch the file from platform storage and record the task id alongside your own asset id.

  5. Log the seed with the rest of the request

    Record the seed together with the prompt, width, height and the expansion flag when a frame is worth keeping. That set of values is what a later run has to match for two images to be comparable at all.

Z-Image Spicy worked examples

  • A portrait card sized for a companion app's grid

    Width and height are set to the app's own card dimensions directly, so nothing gets cropped after the fact to fit the grid.

    Intimate portrait of an adult woman in a silk robe, seated by a rain-streaked window at night, warm lamplight from one side, relaxed pose, soft film grain, muted amber and charcoal palette
  • A banner-shaped frame with expansion left off

    A fully written brief with enable_prompt_expansion left at its default so the wording reaches the model unchanged, sized wide for a header placement.

    Wide banner composition, an adult couple close together on a hotel balcony at dusk, city lights softly out of focus behind them, warm golden-hour light, cinematic color grade, shallow depth of field
  • A short brief with expansion switched on

    A one-line idea sent with enable_prompt_expansion true, letting the model fill in detail instead of writing it all out by hand, and landing in the endpoint's other price tier.

    Adult woman in a silk slip dress, candlelit room, soft focus

Z-Image Spicy integration questions

Start from the pixel dimensions of the placement rather than a ratio, and settle enable_prompt_expansion once for the whole integration: it fixes both how the wording reaches the model and which of the two price tiers a request lands in. Write the brief entirely in terms of what belongs in the frame, since there is no field for exclusions, and keep the seed next to the full request body so a later comparison has something to match against.