Your portrait comes out with skin so smooth it looks plastic: no pores, no subtle redness, no peach fuzz, no micro-shadows. It reads as either CGI or as if someone abused a beauty filter. This is one of the most distinctive AI-image tells and the biggest reason “AI photos” still feel uncanny.
Fastest fix: turn down the face-restore strength (in Automatic1111 / Forge that is the CodeFormer visibility slider, not the weight), prompt explicitly for skin pores and natural skin texture, and add film grain. If you are on Flux, the single biggest lever is a realism/detail LoRA plus lower distilled guidance. If you are on Midjourney, add --style raw and real camera gear.
Why this happens
Three forces stack up, and they apply across every tool:
- Training data is pre-retouched. Most portrait and stock photos were already airbrushed before they entered the dataset, so “average skin” the model learned is smoothed.
- Face-restore and detailer steps smooth by default. CodeFormer and GFPGAN were trained to maximize face similarity against that same retouched data, so they push skin toward the same look.
- Your prompt asks for it. Words like
beautiful,perfect skin, andflawlessmap directly to the smoothest, most-retouched examples in training.
Which tool are you using?
The fix differs by pipeline. Find your row first.
| Tool | Main cause of plastic skin | First thing to change |
|---|---|---|
| Automatic1111 / Forge (SD1.5, SDXL) | Restore faces / CodeFormer visibility too high | Drop CodeFormer visibility to ~0.3; raise weight toward 1.0 |
| ComfyUI (SDXL, Pony) | FaceDetailer denoise too high; no skin LoRA | Lower FaceDetailer denoise to ~0.3; add a skin/detail LoRA |
| Flux (dev / Krea) | Distilled-model smoothing bias | Add a realism/detail LoRA; lower distilled guidance to ~2.5 |
| Midjourney v7 | Default stylization | Add --style raw --v 7 + real camera gear |
| All | ”perfect/flawless/smooth skin” in prompt; no grain cues | Remove those words; add pore + grain prompts |
The CodeFormer trap (read this first)
This is the single most common mistake. In Automatic1111 and Forge the face-restore panel has two sliders, and they do opposite things:
CodeFormer visibility(0 to 1): how strongly the restored face is blended in. Higher = more smoothing. This is the strength knob.CodeFormer weight(0 to 1): the fidelity weight. It is inverted —weight = 0is the most aggressive restoration (most smoothing),weight = 1preserves the original face the most (least smoothing).
So the fix for plastic skin is to lower visibility and raise weight toward 1.0 — not to “lower the weight,” which makes it worse. As of June 2026 this inversion still trips people up because the older advice floating around says “turn the weight down.”
Recommended face-restore settings (A1111 / Forge):
CodeFormer visibility: 0.3 (or 0 to disable entirely)
CodeFormer weight: 0.9 (closer to 1 = less smoothing)
GFPGAN visibility: 0 (GFPGAN has no fidelity control; it smooths harder)
If you only need face-restore to fix eyes, keep visibility at 0.3 so it corrects glaring asymmetry without flattening texture. In current A1111 (1.6+), if you do not see the sliders in txt2img, enable them under Settings > User interface > [info] Quicksettings list or run restoration in the Extras tab where the GFPGAN/CodeFormer visibility sliders live.
Fix it by tool
Stable Diffusion (Automatic1111 / Forge / ComfyUI)
1. Lower face-restore strength using the CodeFormer settings above. In ComfyUI’s FaceDetailer node, the equivalent lever is denoise:
FaceDetailer denoise: 0.30 (was ~0.45)
guide_size / max_size: leave default
2. Prompt for explicit skin texture. Add to the positive prompt:
(skin pores:1.1), (natural skin texture:1.2), (visible peach fuzz:1.0),
slight skin imperfections, fine wrinkles, subtle moles, natural micro-shadows,
(realistic skin detail:1.15), unretouched photograph, no filter
The colon-weight values keep these terms loud enough to override the smoothing bias. Note that colon weighting ((term:1.2)) is an SD-family syntax; it does nothing in Midjourney or DALL-E.
3. Negative-prompt the plastic look (SD-family only):
plastic skin, airbrushed, overly smooth, smooth skin, perfect skin,
flawless skin, beauty filter, retouched, doll-like skin, CGI skin,
3d render skin, wax figure, mannequin skin, no pores
Keep these at weight 1.0 — they are strong enough.
4. Use a realism/detail LoRA. Many popular photoreal LoRAs (some RealVision, JuggernautXL, and EpicRealism variants) were trained on retouched stock and add smoothing. Test your prompt without the LoRA: if texture comes back, the LoRA is the culprit. Swap to a skin-detail LoRA (for example a “Detail Tweaker” / “add-detail” LoRA at strength 0.4 to 0.8) instead.
Flux (dev / Krea)
Flux’s plastic skin is a known property of the distilled model, not your settings. As of June 2026 the reliable fixes are:
- Add a realism / detail LoRA.
Shakker-Labs/FLUX.1-dev-LoRA-add-detailson Hugging Face is the most-recommended for restoring pores and fine detail; run it around strength 0.6 to 1.0. - Lower the distilled guidance (CFG) to ~2.5 to 3.0. Flux’s default
guidanceof 3.5+ bakes in the glossy look; dropping it gives modest but real improvement. Lowering it alone is not enough — pair it with the LoRA. - Consider an SRPO-tuned Flux checkpoint. Tencent’s SRPO fine-tune of Flux was built specifically to remove the glossy/oily skin and is available as a regular and distilled checkpoint.
- Upscale with a skin-detail model (such as a
SkinDiffDetail-style detailer pass) rather than a generic upscaler, which tends to re-smooth.
Midjourney (v7)
Midjourney ignores SD-style colon weights and negative prompts; you steer it with parameters and lens vocabulary:
<your subject>, natural skin texture with visible pores and peach fuzz,
shot on Sony A7R V, 85mm f/1.4, soft window light --style raw --v 7 --ar 4:5
--style rawis the key flag: it drops Midjourney’s default “painterly” stylization that waxes skin. As of June 2026 this is still the single most effective fix for Midjourney portraits.- Name real camera gear and a macro/portrait lens (
100mm macro,f/2.8) — this pulls from high-resolution photography in training and triggers pore-level detail. - Use the technical term
vellus hairfor peach fuzz; it is more effective than “peach fuzz” because it appears in medical/portrait captions.
If it is still too smooth: add grain in post
A near-good render can be rescued without re-running the pipeline. Film stocks like Kodak Portra 400, Fujifilm Pro 400H, Cinestill 800T, and Ilford HP5 carry built-in grain associations if you want to add them at the prompt stage, but post is more controllable:
Photoshop: Filter > Noise > Add Noise, Gaussian, 1.5%–2.5%, Monochromatic
Affinity: Filters > Noise > Add Noise, 2% Gaussian
Lightroom: Detail > Grain, Amount 25, Size 25, Roughness 50
Dedicated skin-repair tools (for example Enhancor) also exist that re-add pores to Midjourney/Flux/SD output, if you process portraits in volume.
How to confirm it is fixed
- Zoom to 100% on the cheeks, forehead, and nose. You should see irregular micro-texture and tiny tonal variation, not a single flat gradient.
- Check the hairline and ears for fine vellus hair against the skin.
- Look for the highlight on the nose/cheekbone: a plastic render gives one smooth specular blob; a real face shows broken, slightly noisy highlights.
- If skin is right but eyes/teeth went soft, that is face-restore visibility too low — nudge it back up slightly rather than re-enabling full restoration.
Prevention
- Default CodeFormer visibility to 0.3 (and weight to ~0.9) in your global settings; raise per-image only when needed.
- Save a “skin texture” preset block:
(skin pores:1.1), (natural skin texture:1.2), (film grain:0.6)and append it to every SD portrait prompt; keep--style rawin your Midjourney template. - Avoid the words
flawless,perfect,smooth, andairbrushedin portrait prompts entirely. - Render at 1.5x final resolution then downscale — downscaling preserves micro-texture better than upscaling adds it.
- Build a comparison sheet of CodeFormer visibility 0.2 / 0.4 / 0.6 / 0.8 / 1.0 for your favorite checkpoint so you know exactly where the smoothing kicks in.
FAQ
Should I lower or raise the CodeFormer weight? Raise it toward 1.0. The weight slider is a fidelity control and is inverted: higher preserves the original face (less smoothing). To reduce smoothing strength, lower the visibility slider instead.
My Flux portraits are plastic even with no face-restore enabled. Why?
Flux’s distilled model bakes in glossy skin at the architecture level, so there is nothing to turn off. Add a detail/realism LoRA (such as FLUX.1-dev-LoRA-add-details), lower distilled guidance to ~2.5–3.0, or switch to an SRPO-tuned checkpoint.
Do the (skin pores:1.1) weights work in Midjourney or DALL-E?
No. Colon-weight syntax and negative prompts are Stable Diffusion features. In Midjourney use --style raw, real camera gear, and vellus hair; in DALL-E describe the texture in plain language.
Why does GFPGAN look worse than CodeFormer here? GFPGAN has no fidelity weight, so you cannot dial back how much it rewrites the face — it tends to smooth harder. For texture-sensitive portraits prefer CodeFormer at low visibility, or disable face restoration entirely.
It is still slightly too smooth after everything. Quickest rescue? Add 1.5–2.5% monochromatic Gaussian noise in Photoshop (or Lightroom grain at Amount 25). Post-grain fixes a near-good render in seconds without re-rendering.