AI generated Chinese faces: one word fixes it
Some links on this site are affiliate links. If you sign up through them we may earn a commission at no extra cost to you.
We asked for a woman holding a skincare bottle and got a face that read as mixed-race or European. We added one word, Chinese, and reran the same prompt. Both renders came back reading as Chinese.
That is four images, one prompt, one model, and two words of difference. The sample is small and the judgement is ours. But the direction was consistent across both pairs, and it matches what our production notes recorded months ago on a video model: the default face is not local unless you say so.
The fix is not a better model. It is a line in the template.
The test
The two prompts differ by exactly one word. Everything else is identical: same sentence, same bottle, same grey background, same light, same framing.
control: ... a woman in her late twenties with straight black hair and natural makeup ...
treatment: ... a Chinese woman in her late twenties with straight black hair and natural makeup ...
| Condition | Renders | Reads as |
|---|---|---|
| control | 2 | mixed-race / European, both |
| treatment | 2 | East Asian, both |
Chinese in front of woman.
One word changed the face. A skincare ad aimed at a Chinese buyer does not run with the top row.
Why the default drifts
A prompt that says “a woman” leaves the face unspecified, and an unspecified slot gets filled from whatever the model saw most of. We wrote about the same mechanism in the video piece on open slots: the model fills every blank you leave, and it fills it with a prior rather than with your market.
The prior is not a bug and not a policy. It is a distribution. In our four renders it produced a consistent, globalised beauty face, the kind that appears in international stock libraries.
That is why the failure is easy to miss: the image looks professional, and it is only wrong relative to an audience.
The fix that stays fixed
Changing the prompt once fixes one render. Our production notes record the version that fixed a whole pipeline: after a rejection, the rule was written back into the template layer, not into that one prompt.
The template we run has three layers. A mould layer holds the rules that must apply to every project: subject defaults, compliance lines, channel ratios. A translation layer turns the brief into the fields the model needs, and a generation layer is the prompt that actually goes out.
Editing the mould layer is editing a file. Every subsequent project inherits it immediately, with no code change and no restart. That is the difference between learning a rule and applying it once.
Why you have to keep re-earning it
Each new model resets the prior. A line that held on one endpoint is not guaranteed on the next, and we have watched a rule that worked for months stop working after a model change.
So the mould layer is not a one-time cleanup. It is a list of things the model gets wrong by default, and every rejection adds a line.
What this does not say
It is not a claim about what Chinese faces look like. The claim is narrower: with this prompt and this model, the unqualified wording returned faces our own team read as non-local, and the qualified wording did not.
It is not a demographic audit. Four images cannot say what a model’s distribution is. A real audit would need hundreds of prompts across many categories, scored by more than one rater.
The judgement is ours. We looked at four images and called two of them Chinese-looking and two of them not. We did not use a second rater and we did not define the features in advance, because the audience judgement is the thing that matters for the ad, and that judgement is also the thing we cannot fully specify.
Method
- Model:
openai/gpt-image-2.5/flare/text-to-imageon fal, low quality, 1024×1024, one image per call. - Prompt: identical apart from the word
Chinesein the subject clause. Both prompts are quoted above in full form in the test section. - Sample: two renders per condition, four total, run serially.
- Spend: four images at $0.00588 each, $0.02352.
- Judgement: I looked at the four renders side by side, unblinded, and sorted them by reading. There was no second rater and no blinding, which is the weakest part of this test and the first thing a proper version would fix.
- Production evidence: the same failure and its fix are recorded in the mould-layer notes from a video pipeline, where the rule added was the subject description plus hair and makeup, not a model change.
What we are working on next
Run it at sample size. Twenty prompts across four categories, two raters, a defined rubric. Until then this is a demonstration, not a rate.
Test whether the rule survives a model change. The mould layer assumes inheritance. We have not measured how much of it carries across endpoints.
Find the minimum qualifier. Chinese worked here. Whether a narrower phrase does better, or whether a reference face beats any adjective, is an open question with a cheap test behind it.