How to Build an AI Human Generator That Actually Works
Last month I needed to generate realistic human avatars for a client’s ad campaign, and the stock photo routes felt stale and expensive. I tried a few off‑the‑shelf AI human generators, but they either produced uncanny results or required costly subscriptions. By the end of this guide you’ll know how to assemble a reliable pipeline using open models, a simple prompt tweak, and a no‑code orchestrator, then decide whether to build it yourself or grab the blueprint.
Why does the default prompt give you weird hands?
Most off‑the‑shelf models ship with a generic prompt like “a realistic person, full body, studio lighting”. When you feed that straight into the API you often get extra fingers, fused limbs, or a face that looks like a wax mannequin. The problem isn’t the model; it’s the lack of constraints on anatomy and pose. Adding a few negative prompts and a clear pose description cuts the weirdness dramatically.
Here’s the prompt I settled on after a dozen failed attempts, with each token explained:
a photorealistic full‑body portrait of a woman, age 28, standing relaxed, hands naturally at sides, soft diffused light, 85mm lens, f/1.8, --no extra fingers, deformed hands, blurry face, lowres
The phrase “photorealistic full‑body portrait” tells the model to aim for a photo‑like output rather than an illustration. Specifying “age 28” narrows the facial features to a young adult range, reducing the chance of baby‑like or overly aged faces. “Standing relaxed, hands naturally at sides” gives the pose a clear anchor so the diffusion process doesn’t wander into awkward gestures. The lens and aperture details (“85mm lens, f/1.8”) bias the lighting toward a shallow depth‑of‑field look that hides minor imperfections in the background. Finally, the “–no” tokens explicitly forbid the most common artifacts: extra fingers, deformed hands, blurry faces, and low‑resolution noise.
If your backend doesn’t support negative prompts, you can achieve a similar effect by adding phrases like “avoid extra fingers” and “keep hands with five fingers only” into the positive description. The key is to be explicit about what you don’t want, because the model will otherwise fill the gaps with whatever patterns it saw in the training data.
What most guides get wrong
Many tutorials tell you to just copy a prompt from a community forum and call it a day. They skip the step of testing the output at scale. When you batch‑generate 500 images, the same prompt that looked fine on a single run starts producing drift: lighting shifts, pose variations, and occasional artifacts that only appear after the tenth iteration. The hidden cost is time spent re‑running batches and manually curating the good ones.
Another common mistake is treating the model as a black box and never checking the seed. If you don’t lock the seed, each call returns a different random noise pattern, making reproducibility impossible for a production workflow. Without a fixed seed you cannot guarantee that a character’s outfit or hairstyle stays consistent across poses, which breaks any attempt to build a brand mascot or a product catalog.
A third oversight is ignoring model version drift. Providers like Replicate periodically update the underlying weights, and a prompt that worked yesterday might produce a different style today. Always pin the model version in your API call (the long hash after “version:”) and record it in your changelog. If you notice a sudden shift in output quality, compare the current hash to the one you used when the workflow was last stable.
A concrete named example: prompt, tool, and cost
Let’s walk through a real‑world stack I use for client work. First, I host the model on Replicate using the Stable Diffusion XL base with the “realisticVision” LoRA. The API call looks like this:
curl -X POST https://api.replicate.com/v1/predictions \
-H "Authorization: Bearer $REPLICATE_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"version": "stability-ai/sdxl:39ed52f2a78e934b3ba6e2a89f5b1c712de7dfea5355292bf5b10e8108a97c7f",
"input": {
"prompt": "a photorealistic full‑body portrait of a woman, age 28, standing relaxed, hands naturally at sides, soft diffused light, 85mm lens, f/1.8, --no extra fingers, deformed hands, blurry face, lowres",
"negative_prompt": "",
"width": 768,
"height": 1024,
"prompt_strength": 0.8,
"num_outputs": 1,
"seed": 12345
}
}'
The response returns a URL to the generated image. For a solo operator, the cost on Replicate is about $0.0006 per second of GPU time; a typical SDXL run takes ~1.2 seconds, so each image costs roughly $0.0007. At 1,000 images per month that’s under $1, which is absurdly cheap compared to the $29/mo subscription many SaaS human‑generator tools charge for a fraction of the output.
I think $0.001 per image is a fair price for the quality you get, especially when you can batch‑run overnight. To illustrate the savings, here’s a quick comparison:
- DIY on Replicate: $0.001 per image → $1 for 1,000 images
- SaaS Plan A: $19/mo for 500 images → $0.038 per image
- SaaS Plan B: $49/mo for 2,000 images → $0.0245 per image
Even if you factor in the occasional failed run (about 5% retry rate), the DIY approach stays under $1.10 per thousand images, while the cheapest SaaS option is still twenty times more expensive.
