Skip to main content

Adult Male AI Characters: Design a Cast Without the Same Face

Design distinct adult male characters through facial structure, age and build, then check whether the differences survive portraits and couple scenes.

Author
Lydia
Published
Read
13 min read
Updated
Three smiling adult men in dark suits and a tuxedo walking together on a wet city street outside a lit hotel entrance at night.

Start with Z-Image Turbo LoRA text-to-image ($0.012 per image) to invent a cast of adult men, then use Qwen Image 2512 LoRA editing ($0.03) to keep each man's face while you change the scene or put two or three of them in one frame. FLUX.1 Dev LoRA editing ($0.018) handles masked clothing changes. Men look alike because the model fills in a default face whenever you only specify hair, beard or clothes. Describe facial structure, age and build first, and add lighting, wardrobe and a romantic setting afterwards.

Which model should you use?

Your immediate jobStart hereExact starting settingsPrice per output
Invent separate male characters from textZ-Image Turbo LoRAaspect_ratio: "3:4", loras: [], output_format: "png"$0.012
Keep one man across scenes, or put two or three approved men in one compositionQwen Image 2512 LoRA EditOne to three image_urls, aspect_ratio empty for one man or "4:3" for a group, no LoRA initially, output_format: "png"$0.03
Change a jacket while protecting the faceFLUX.1 Dev LoRA EditOne image_url, a same-size mask_url, strength: 0.9, steps: 28, guidance_scale: 3.5$0.018

Z-Image and Qwen take no steps or guidance; only FLUX takes strength, steps and a mask. For keeping a face while the scene changes, use Qwen editing rather than Z-Image's restyling edit route ($0.012). Nine Z-Image portraits cost $0.108, enough for three candidates per man.

What each route delivers for adult-oriented collections

Based on our September 2026 tests (no LoRA loaded), the routes differ most on the most intense adult scenes:

RouteSuggestive to advanced NSFW imageryThe most intense adult scenes
Z-Image Turbo LoRA, text-to-imageDeliveredDelivered
Z-Image Turbo LoRA, editDeliveredSoftened
Qwen Image 2512 LoRA, text and editDeliveredImplied rather than shown; an adult LoRA closes the gap
FLUX.1 Dev LoRA, text-to-imageSuggestive and mature delivered; strong scenes softenedSoftened; an adult LoRA clears strong scenes but the most intense stay implied

For the most intense scenes with faces kept from reference images, add an adult edit LoRA trained for Qwen-Image-Edit-2511 to the Qwen route; match the LoRA to the endpoint, as the 2512 versus Edit 2511 guide explains. FLUX was the most restrictive of these text-to-image samples. Its masked-edit route is useful for clothing changes. Level-by-level results: Z-Image Turbo LoRA, Qwen Image 2512 LoRA, FLUX.1 Dev LoRA. In short: Z-Image text-to-image is the strongest adult-oriented start here, Qwen is the route for arranging faces you already have, and FLUX is the one to pick for clothing edits rather than for adult output. The prompts below are fully clothed and need no adapter.

Try it in the Playground

  1. Open Z-Image Turbo LoRA text-to-image with Adrian's prompt below already filled in, and sign in with a funded account to run.
  2. Set Aspect ratio to 3:4 and Output format to PNG. Press Remove item under Style LoRAs so no adapter is loaded.
  3. Run it three times and keep the best face. Then swap in the Marcus or Daniel identity and clothing sentences below, keeping the rest of Adrian's prompt.
  4. For scene changes and group shots, open Qwen Image 2512 LoRA Edit: add the approved portraits under Images (Add a file or Add URL), leave Aspect ratio on Auto for one man, and remove the LoRA item.

Then the API

Once a face works, send the same request from code. Fields and results are in the API reference.

json
{
  "model": "alibaba/z-image-turbo-lora/text-to-image",
  "input": {
    "prompt": "Photographic chest-up portrait of Adrian, a fictional 34-year-old adult man. Long oval face, prominent curved nose, narrow-set brown eyes, close-cropped dark curls, clean-shaven. Lean frame and relaxed shoulders. Fully dressed in a navy crew-neck sweater. Neutral grey studio wall, soft window light from camera left, eye-level camera, natural skin texture, calm direct gaze. One person, no lettering.",
    "aspect_ratio": "3:4",
    "loras": [],
    "output_format": "png"
  }
}

Or let an Agent run it. An assistant can make the same call through the CLI (npx @spicyapi/cli tasks create --model alibaba/z-image-turbo-lora/text-to-image --input-file input.json --wait), the MCP server (npx --yes --package=@spicyapi/mcp spicyapi-mcp) or the Agent Skill (npx skills add spicyapi-ai/spicy-skill). CLI and MCP show the price and ask you to confirm before a task is created.

Build three faces that stay different in the same light

Select faces under one neutral framing: chest-up, eye-level, plain grey wall, soft side window light. Then give each man a different value on every axis the model reads reliably:

AxisContrast to write (use plain words)Weak cue to avoid
Face shapelong oval, broad with full cheeks, square jaw"handsome", "rugged", "perfect face"
Eyesnarrow-set, deep-set, wide-seteye colour alone; it varies between runs
Noseprominent and curved, straight and broad"nice nose"
Agean exact number plus marks: smile lines, receding hairline, grey at the temples"mature", "young-looking"
Build and posturelean with relaxed shoulders, stocky and upright, broad shoulders and substantial torso"powerful masculine physique"
Hair and beardclose-cropped dark curls, salt-and-pepper with trimmed beard, short with a receding hairlinebooru-style names, which can pull in unrequested styles

These endpoints have no negative-prompt field, so state adulthood positively in every identity sentence ("a fictional 34-year-old adult man", an exact age plus age marks). Write full sentences rather than tags, and skip weighting syntax such as (((broad))). For variety in skin tone or ancestry, name it specifically; Z-Image falls back to a default look otherwise.

CharacterStable face cuesStable body cuesClothing for the first portrait
Adrian, 34Long oval face, prominent curved nose, narrow-set eyesLean frame, relaxed shouldersNavy crew-neck sweater
Marcus, 48Broad face, full cheeks, deep-set eyes, smile linesStocky frame, upright postureOlive overshirt, closed over a T-shirt
Daniel, 41Square jaw, wide-set eyes, straight broad noseBroad shoulders, substantial torsoRust knit polo

Copy this prompt for Adrian:

Photographic chest-up portrait of Adrian, a fictional 34-year-old adult man. Long oval face, prominent curved nose, narrow-set brown eyes, close-cropped dark curls, clean-shaven. Lean frame and relaxed shoulders. Fully dressed in a navy crew-neck sweater. Neutral grey studio wall, soft window light from camera left, eye-level camera, natural skin texture, calm direct gaze. One person, no lettering.

For Marcus, replace the identity and clothing sentences with:

Marcus, a fictional 48-year-old adult man. Broad face, full cheeks, deep-set brown eyes, visible smile lines, short salt-and-pepper hair and a neatly trimmed beard. Stocky frame, upright posture. Fully dressed in an olive overshirt buttoned over a plain cream T-shirt.

For Daniel, use:

Daniel, a fictional 41-year-old adult man. Square jaw, wide-set hazel eyes, straight broad nose, short dark hair with a receding hairline, clean-shaven. Broad shoulders and a substantial torso. Fully dressed in a rust knit polo.

Keep the rest of the prompt unchanged and generate three versions of each description before selecting one. A seed is not an identity mechanism. If Marcus still resembles Adrian, strengthen the conflicting structure (broad cheeks and deep-set eyes versus long face and narrow-set eyes) rather than adding beard adjectives. Lay the three chosen portraits side by side: if you can tell them apart by face length and jaw with the hair hidden, the cast works.

Three aligned male portraits labelled long, broad and angular face, with jaw outlines.

Illustration: three facial structures under the same framing and light, not output from these prompts.

If all three candidates still look like Adrian, generate Marcus in Qwen 2512 text-to-image with the Marcus brief, aspect_ratio: "3:4" and no LoRA ($0.03 per output). Never supply Adrian's portrait as a reference image for a different man: the model preserves the face it is given.

Preserve the person when you change the scene

Use the selected Adrian portrait as the input to Qwen editing instead of recreating him from text. Upload it as Picture 1, leave LoRAs and aspect_ratio empty so the result follows the portrait's shape, choose PNG, and use:

Keep the adult man from Picture 1: the same long oval face, curved nose, narrow-set eyes, short curls and lean build. Show him standing beside a theatre entrance at dusk in a closed navy wool coat. Waist-up composition. Warm light from the entrance illuminates one side of his face; the other side remains visible. Keep his apparent age and grooming. One person, no lettering.

This changes setting, clothes and light at once. If the face becomes wider, return to the original portrait and simplify the next request to the coat alone; do not keep editing the drifted output.

Qwen uses two bases: Qwen-Image-Edit-2511 for editing and Qwen-Image-2512 for text generation, and a LoRA trained for 2512 is not automatically suitable for editing. The edit route accepts up to three sources and three compatible adapters.

Put two or three adult men together without merging them

Qwen Edit 2511 is built to fuse separate person images into one group shot, but faces can still blend. "Don't change the identity" alone does not specify whose face belongs where: make the inputs distinct, then assign each man by source image, position, facial features and clothing.

Upload Adrian as Picture 1 and Marcus as Picture 2. Choose aspect_ratio: "4:3", PNG and no LoRA. Put the main subject first, because Picture 1 sets the composition.

A quiet romantic editorial photograph of two fully clothed adult men outside a theatre. On the left is the 34-year-old lean man from Picture 1, preserving his long oval face, curved nose and short curls; he wears his navy sweater. On the right is the 48-year-old stocky man from Picture 2, preserving his broad face, smile lines and salt-and-pepper beard; he wears his olive overshirt. They face each other with a small space between their shoulders. Their hands remain separately visible beside their own bodies. Waist-up, eye-level, warm doorway light, no text.

Start with no hand contact. For a second composition, request one simple contact: Marcus's right hand resting on Adrian's left upper arm. Name the owner, side and destination; "they hold each other" leaves them unspecified. The two-character guide covers contact points and repairs in more depth.

For all three men, add Daniel as Picture 3 and use aspect_ratio: "16:9" so there is room for three waist-up figures. Position them left, centre and right, keep clothing colours different (navy, olive, rust) and hands visible beside their own bodies. Three sources is the cap, so a fourth character needs a second pass: use the trio as Picture 1 together with the fourth man's portrait.

A two-man cafe scene and a hand detail use coloured traces to show sleeve-to-hand ownership.

Illustration: tracing each sleeve to its hand shows who owns which arm.

Change a jacket without touching the face

Use FLUX.1 Dev LoRA editing when you want a new garment and nothing else to move. Make the mask in any image editor: paint the jacket white on a black layer (face and neck stay black) and export it at exactly the portrait's pixel size. Upload both files (JPG, PNG, WEBP or GIF, up to 10 MB each) or pass URLs as image_url and mask_url. Follow the garment's outline with a soft edge; a hard rectangle leaves a visible seam. The output keeps the source's shape at about 0.7 megapixels, so a 1024 x 1536 portrait comes back at 672 x 1008.

With a mask, describe only what belongs in the white area:

A charcoal wool overcoat with a high collar, closed, over a grey knit sweater, soft window light from the left.

Use strength: 0.9, steps: 28, guidance_scale: 3.5 and fix the seed. If the old jacket shows through, raise strength towards 1; if the jaw or neckline drifts, shrink the white region before lowering strength.

Fix the failure you can see

FailureChange on the next attempt
Different hair, almost identical facesReturn to separate portraits; contrast face length, nose shape, eye spacing and age cues. Drop "perfect handsome face" language.
Everyone defaults to the same look and skin toneName skin tone and features specifically in each identity sentence, instead of expecting the model to vary them.
Stocky man becomes a muscular athleteReplace "powerful masculine physique" with "stocky frame, broad waist, relaxed abdomen under a loose overshirt." Show the waist rather than only a tight head crop.
Both men inherit the same beardAssign "clean-shaven man from Picture 1 on the left" and "bearded man from Picture 2 on the right." Remove any unassigned grooming phrase.
Faces blend in a two-man editGive the sources different clothing and backgrounds and assign left and right.
The face changes with dramatic lightingUse soft directional light with both eyes visible; go back to the original reference, not the altered face.
Clothing edit alters the jawUse the masked FLUX route with the mask confined below the neckline. Keep the face outside the white region.
An arm cannot be assigned to either personSeparate the bodies and remove contact; then reintroduce one named hand-to-upper-arm contact.

Keep a cast sheet

A usable cast is one approved portrait per man plus the identity sentence that produced it. Add a three-quarter or side view when you need profile compositions (ask Qwen editing for it from the approved portrait, repeating the face description). If the reference images still drift after repeated scenes, train a character LoRA on your approved images and load it on these endpoints, as described in the LoRA API guide.

Also in 日本語 · 한국어 · Deutsch · Français · Español · Português (Brasil) · Русский · Italiano · Polski

Try it yourself

Pay only for what you run — no plan, no subscription.

Made with MiniMax H3 · ByteDance Seedance 2.0 Fast