Image & realism
How to fix plastic skin and waxy AI images
Plastic skin is usually a pipeline problem, not a missing magic word. Strip the workflow back to the base model, hold the seed still, and find the first stage that turns skin into wax. Grain and pore prompts come later—if they are needed at all.
Based on official documentation, public benchmarks where relevant, and corroborated practitioner reports where useful. No placement in these guides is paid.
The short answer
What I would pick
Start with the base checkpoint at its documented settings and native resolution. Turn off every LoRA, face detailer, restoration node, image-to-image pass, and AI upscaler. Generate the same seed with a short photographic prompt.
If that clean image already looks plastic, change the prompt, lighting, or base model. If it looks fine, add the disabled pieces back one at a time. That boring A/B test fixes more waxy faces than a 40-word negative prompt ever will.
On this page
Skip to the part you need
Do not diagnose by vibe
First, name the actual failure
“Plastic” gets used for several different failures. They do not have the same fix. Zoom out before you zoom into pores and decide which problem you actually have.
| What you see | Likely cause | First test |
|---|---|---|
| Perfectly smooth cheeks with glossy highlights | Beauty-language bias, flat light, or an over-strong portrait LoRA | Remove beauty terms and LoRAs; use one directional light |
| Sharp pores stamped evenly across the whole face | Overcooked guidance, detailer, sharpening, or “skin texture” prompt spam | Return to the base sampler output before enhancement |
| A natural first pass that becomes waxy after enlargement | Face restoration or generative upscaling is replacing texture | Compare a plain pixel upscale against the enhanced branch |
| Face looks pasted onto a believable room | Lighting, color, or sharpness does not match the scene | Fix the shared light direction and local contrast |
| Every subject gets the same polished face | Checkpoint or dataset bias | Run the same short prompt on a neutral base model |
Skin does not look real because every pore is visible. It looks real when the texture, softness, specular highlights, color variation, and lighting all belong to the same photograph. An aggressively sharpened face in a softly focused room is still synthetic.
Remove variables
Build a clean baseline before fixing anything
Save the original workflow, then make a diagnostic copy. Keep the seed, model, dimensions, sampler, scheduler, steps, and prompt fixed. Remove every optional component:
- all character, realism, skin, lighting, and style LoRAs;
- face detailers, face restoration, CodeFormer/GFPGAN-style repairs, and sharpen nodes;
- ControlNet, IP-Adapter, reference-style transfer, and prompt enhancers;
- high-resolution fixes, tiled diffusion, image-to-image, and generative upscaling;
- automatic color grading, film grain, bloom, and post-processing.
Generate at a resolution recommended for that exact model. Do not diagnose a model while forcing an odd legacy resolution copied from an SD 1.5 workflow. Make a four-image batch, but keep one seed as the control image for every later change.
A changing seed is not a comparison. If the new image improves, you need to know whether your setting fixed it or whether you simply rolled a friendlier face.
Prompt less, direct more
Remove the beauty-prompt trap
A common “realism” prompt is actually a beauty-advertising prompt wearing a camera badge. Words such as flawless, perfect face, porcelain skin,airbrushed, glowing skin, 8K, and hyper-detailed all reward the polished surface you are trying to remove. Stacking pores,blemishes, and wrinkles on top often produces a texture decal instead.
masterpiece, best quality, stunning flawless woman, perfect symmetrical face, porcelain glowing skin, ultra detailed pores, hyperrealistic, sharp focus, 8K, cinematic, professional studio lightingClose portrait of an adult woman beside an apartment window, relaxed expression, soft directional morning light from camera left, 50mm lens feel, shallow but believable depth of field, natural skin and fabric texture, restrained color, unretouched editorial photographThe second prompt gives the model a light source, camera position, mood, and material context. “Unretouched” is a useful nudge, not a guarantee. If the checkpoint was trained toward glossy beauty work, prose cannot fully argue it out of that prior.
Keep negative prompting equally restrained where the model supports it. Name visible failures—airbrushed skin, wax figure, flat frontal beauty light—instead of pasting a generic negative list that also suppresses contrast, texture, and photographic noise. Distilled models may ignore or handle negative conditioning differently, so check the model card first.
Model cards beat folklore
Use guidance and steps for your exact model
More guidance does not mean more realism. Guidance pushes the result harder toward the conditioning; taken too far, it can harden edges, crush subtle gradients, and exaggerate every “detailed skin” instruction. More steps can also be pointless on a distilled model designed for a short schedule.
| Model family | Sane diagnostic starting point | Common mistake |
|---|---|---|
| Z-Image-Turbo | Official example: 9 requested steps / 8 forwards and guidance 0 | Applying base-model CFG recipes to the distilled Turbo checkpoint |
| Z-Image foundation model | Official range: 28–50 steps, guidance 3–5; test CFG normalization for realism | Running an arbitrary high CFG because another architecture liked it |
| FLUX.2 Klein distilled | Start from the current official template for the exact 4B/9B variant | Copying a Base, dev, FLUX.1, or SDXL schedule into a distilled workflow |
| FLUX.2 Klein Base / dev | Use the variant-specific example, then change one sampler variable at a time | Treating a trainable Base model like the four-step production model |
| Hosted editors | Use the service defaults and make a precise edit request | Inventing CFG advice for a system that does not expose CFG |
Once the official baseline works, sweep one setting over a small range with the same seed. Compare the full frame at 100%, not cropped faces posted at different zoom levels. Stop when added guidance makes the prompt louder but the photograph less coherent.
The stack can be the bug
Audit LoRAs and face detailers separately
LoRAs are additive influences, and ComfyUI can chain several of them. A character LoRA, a realism LoRA, a skin LoRA, and a lighting LoRA may each look fine alone while the combined stack collapses toward the same glossy portrait. Set every LoRA strength to zero, confirm the baseline, then restore one at a time.
- Add the identity LoRA first and test several strengths against the control seed.
- Add the style LoRA only if it solves a problem the base model did not solve.
- Compare both the model and text-encoder strength where the loader exposes them.
- Delete redundant “realism enhancer” LoRAs before trying to balance five weights.
A face detailer is a second generation, not a neutral cleanup. It can change age, identity, makeup, light direction, and texture. Save the pre-detailer image and compare it directly. If only the detailed face looks waxy, lower its denoise or prompt pressure, expand and feather the mask, or remove the pass. Do not compensate by sharpening the result again.
If your own character LoRA produces plastic skin at every strength, inspect the training data. Repeated beauty filters, compressed social-media images, overexposed cheeks, and one dominant studio setup get learned. That is a dataset problem, not a sampler problem.
Second passes replace pixels
Control denoise, restoration, and upscaling
In ComfyUI image-to-image, lower denoise preserves more of the source while higher denoise allows a larger change. That does not make one number universally correct. It gives you a clean test: start low, increase in small increments, and stop before the face becomes a new glossy interpretation.
- Need only more pixels? Compare a non-generative resize or a restrained ESRGAN-style upscale first. It should not redesign the person.
- Need local texture repair? Mask the cheek or forehead and inpaint it. Keep the surrounding light and color visible to the model.
- Need a larger re-render? Use image-to-image at conservative denoise and inspect identity, light direction, hairline, and makeup—not just apparent sharpness.
- Need web compression cleanup? Do that before aggressive enhancement; an upscaler may faithfully amplify ringing, smoothing, and block artifacts.
Film grain can unify a finished image, but it cannot repair flat material response. Add it last and toggle it off during diagnosis. Otherwise grain simply hides the evidence while the underlying face still reads like vinyl.
A workflow you can actually debug
Use this minimal ComfyUI diagnosis
Load exact base model → encode short positive/negative prompts → create native-size latent → model-recommended sampler and schedule → VAE Decode → Save Image- Queue the clean branch and record the seed plus every visible sampler value.
- Duplicate it and change only the prompt. If that fixes the skin, stop there.
- Restore the identity LoRA in a new branch. Compare at equal seed and dimensions.
- Add the detailer, image-to-image pass, and upscaler in separate later branches.
- Save each output with the workflow metadata; label the first branch that fails.
This is deliberately unglamorous. A giant downloaded graph may have twenty places where texture is replaced. The minimal graph tells you whether the base model and prompt can make a believable portrait before those places exist.
Do not mix recipes
Z-Image, FLUX.2, and hosted editors need different treatment
- Z-Image-Turbo
- Use its distilled recipe: guidance zero and the short official schedule. If the skin is too polished, simplify the beauty language and light before adding steps. The foundation Z-Image is a different checkpoint with CFG and a longer schedule.
- Z-Image foundation model
- Work inside the official guidance and step ranges first. Its repository specifically exposes CFG normalization as a realism-related choice, so test that switch with the same seed instead of guessing from another model family.
- FLUX.2
- Confirm whether the file is Klein distilled, Klein Base, or dev. The distilled model is for fast inference; Base is the flexible training target; dev is much larger. A workflow named only “FLUX” is not specific enough to trust.
- Nano Banana and other hosted editors
- You cannot inspect their hidden sampler stack. Give a local, visual edit request: preserve identity, pose, framing, and light; remove airbrushed smoothing; restore subtle natural skin variation. If repeated edits keep polishing the whole face, mask or crop the target where supported, or return to an earlier source image.
A faster final pass
Match the symptom to the fix
| Failure | Change next | Do not reach for first |
|---|---|---|
| Base output is smooth and glossy | Prompt, directional light, official settings, then base model | Grain or sharpening |
| Only LoRA output is waxy | Weight, combination, checkpoint compatibility, training data | Another realism LoRA |
| Only face-detailer output is waxy | Denoise, prompt pressure, mask, or remove detailer | A second face-restoration pass |
| Only upscale output is waxy | Use a restrained/non-generative upscale or lower second-pass denoise | Extra pore prompting |
| Skin is detailed but face still looks pasted on | Match scene light, color, focus, and sharpness | Microtexture |
| Every configuration gives the same beauty face | Switch checkpoint or retrain the biased LoRA dataset | Endless sampler sweeps |
The practical rule is simple: repair the earliest stage that creates the defect. If the clean model output is good, protect it. If the clean output is bad, no downstream detail stack deserves your time.
Research notes
Primary sources and further reading
Model names, licenses, limits, and prices move quickly. These are the sources used for the dated market check above; confirm live pricing and terms before spending money.
- Z-Image official repositoryOfficial variant descriptions and recommended steps, guidance, resolution, and CFG-normalization settings.
- Black Forest Labs FLUX.2 repositoryOfficial distinction between distilled, Base, and dev variants, including their intended workflows.
- ComfyUI text-to-image workflowThe official basic node graph used as the clean diagnostic baseline.
- ComfyUI image-to-image guideOfficial explanation of how KSampler denoise changes preservation versus regeneration.
- ComfyUI LoRA guideOfficial description of model and text-encoder strength and chained LoRA loading.
- ComfyUI image-upscale workflowOfficial overview of pixel upscaling and model-based upscale workflows.
- ComfyUI inpainting workflowOfficial masked-edit workflow for repairing a local area without rebuilding the whole portrait.
