Photoreal humans
Where realism is enforced, why it is a chain, and the one rule that decides whether skin language applies at all.
The product’s core output is a person who has to look like a person. That is not decided by the model. It is decided by a handful of prompt surfaces we control, arranged in a chain where each stage caps the next.
A clip can only be as real as the still it was animated from, and a still can only be as real as the portrait it took the face from. Fixing stage 3 fixes stage 4 for free. Fixing stage 1 fixes everything downstream.
The failure this was built to stop
The image prompt engine already had a UGC realism protocol. It also had a second style profile asking, in as many words, for flawless glowing skin, poreless, and a default profile whose skin treatment was imperfections not emphasized. Nothing in code chose between them, so the model chose, differently each time.
Underneath that, the character-definition anchor preset asked for shadow-free studio lighting and a vague “realistic skin texture”. Every scene reads the face from that portrait, so the app was generating a waxy anchor and then asking later stages to add back realism the anchor had already removed.
What is enforced now
Poreless is gone from the vocabulary. Editorial means better lighting and composition, never smoother skin. Every profile keeps skin as skin.
The guards, all in prompts/image-prompt-engine/system.md:
| Guard | What it prevents |
|---|---|
| Skin rendering physics | Subsurface scattering, vascular detail, edge translucency at ear rims and nostrils, uneven specular response. Adjectives produce plastic; render behaviour produces skin. |
| Non-repeating blemishes | Models tile acne into a regular pattern. A tiled pattern reads faker than clear skin. |
| Hand realism | Veins, tendons, knuckle creases, real nail beds. Hands are the second-biggest tell after skin, and in UGC a hand is on screen constantly. |
| No symmetry correction | Real faces are asymmetric. |
| Identity lock | In Same Character Mode, carry the reference person’s blemishes, scars and asymmetries forward. Never beautify, slim, smooth or age down. |
| Universal negatives | No AI glow, plastic or waxy skin, airbrushing, beauty filter, skincare-ad look, poreless skin, flat shadow-free light. |
The identity lock is worth understanding as a continuity mechanism, not a cosmetic one. Those markings are the strongest signal a later generation has that scene 7 shows the same human as scene 1. Cleaning them up breaks the character, not just the texture.
Coverage
Everything that renders a person goes through the image prompt engine, with one exception that had to be closed separately.
| Path | Covered by |
|---|---|
| Chat single images | image prompt engine |
| Chat character creation | image prompt engine plus the character-definition anchor |
| Creative Studio images | image prompt engine |
| Portrait regeneration | reuses the already-enhanced stored prompt |
| Storyboard scene frames | lib/realism.ts, because this path never calls the engine |
Route A frames come from the storyboard frames agent, or straight from a Director shot passed through as written. Neither had a word about skin, so a UGC ad produced through the storyboard route inherited none of the realism work. PHOTOREAL_HUMAN_DIRECTIVE is that path’s equivalent.
The preset contract
So: generate with no preset, or with Phone Realism, and the full treatment applies. Generate with Claymation and you get claymation.
Two presets exist specifically for this work:
- Phone Realism - a real person photographed on a phone in real light. The default look for UGC scenes and podcast frames. Carries the skin block, hand block, phone-camera characteristics and a negatives list.
- Skin Macro - extreme close-up detail cutaways (eye, cheek, lips, hands) where the texture is the subject. Also the safest place to push hard, because no identity matching depends on these frames.
Motion
A flawless still still reads synthetic if the motion is metronomic. The talking-head engine directs asymmetric expression, skin that stretches and compresses where the expression pulls it, micro-movements between beats (weight shifts, a swallow, a breath before a sentence), imperfect delivery, and no return to the exact starting pose.