AI Image Hair Looks Like Wires or Plastic Threads (Fix)

Generated portraits with hair that reads as stiff wire, fishing line, or melted plastic. Why diffusion models default to wire-hair, and the exact prompt, CFG, sampler, and inpaint settings that bring soft fiber texture back.

You generated a portrait. The face is fine, the lighting is fine, but the hair is wrong in a way you can feel before you can name it. Each strand is a perfectly even thickness from root to tip. Highlights run along strands the way they would on copper wire. Long hair falls in stiff parallel lines instead of clumping and crossing the way real hair does. Zoom in and you can almost count individual filaments, except every filament has the exact same diameter. The result reads as wig, fishing line, or melted plastic, not hair.

This is one of the most common failure modes for Stable Diffusion family models (SD1.5, SDXL, Pony, Illustrious) when generating photoreal portraits. The fix is almost always a combination of prompt structure, guidance setting, sampler choice, and not asking the model to do all the detail work in a single pass.

TL;DR fastest fix

If you only do three things, do these:

  1. Delete the over-detail tokens from your prompt (ultra detailed hair, every strand visible, 8k hair, sharp hair). Replace with natural hair texture, varied strand thickness, soft flyaways.
  2. Lower guidance. On SDXL/SD1.5 drop CFG to 5-7. On FLUX set traditional CFG = 1 and use Distilled CFG Guidance 3.5 (or lower) — FLUX uses a different guidance mechanism, see the model-bucket table below.
  3. Inpaint the hair region alone at denoise 0.5-0.6 with the fiber-texture prompt, instead of regenerating the whole frame.

That clears wire-hair in most cases. If it persists, your checkpoint can’t render photoreal hair and you need a different base model or a hair LoRA (covered at the end).

First, which model bucket are you in?

The single most important variable in June 2026 is which model you are running, because guidance behaves completely differently on FLUX than on Stable Diffusion. Getting this wrong is the most common reason a “lower your CFG” fix does nothing.

ModelGuidance setting for soft hairNegative promptNotes
SD1.5CFG 5-7Yes, works normallyNeeds hires fix to give hair room; weakest at photoreal hair
SDXL (Juggernaut XL, RealVisXL, etc.)CFG 5-7Yes, works normallyBest realism-for-VRAM; fits 8GB; mature LoRA/inpaint ecosystem
FLUX.1-dev / FLUX.2Traditional CFG = 1 + Distilled CFG Guidance 3.5 or lowerSkip it — distilled models largely ignore negativesRenders strands, pores, and light far more naturally by default; needs ~24GB VRAM for FLUX.2

If you are on FLUX and still seeing wire-hair, you are usually pushing Distilled CFG too high (try 2.5-3.5) or stacking a sharpening LoRA. FLUX rarely needs the heavy prompt surgery that SD does.

Common causes

Ordered by frequency in real generations.

1. Prompt over-specifies “detailed hair” and “every strand visible”

Telling the model ultra detailed hair, every strand visible, sharp focus on hair pushes it toward maximum strand contrast. The model reads that as “draw every strand as a separate high-contrast line,” which is exactly what wire looks like.

How to spot it: Your prompt contains individual strands, hyperdetailed hair, sharp hair, or 8k hair. Remove those and the wiriness softens.

2. CFG / guidance scale too high (Stable Diffusion)

On SD1.5/SDXL, CFG above ~8 makes the model crank the contrast of whatever it is drawing. On hair, that pushes mid-tone fibers to either highlight or shadow, leaving the rendered strands looking like polished wire. The community default of 7 is the upper edge of safe; for hair specifically, 5-7 is better.

How to spot it: CFG is 9-15. The same prompt at CFG 5-7 produces softer hair. (On FLUX this cause does not apply — see the model-bucket table; FLUX wire-hair comes from Distilled CFG being too high, not traditional CFG.)

3. Checkpoint is “smooth” or “anime-leaning” rendering “realistic” hair

Checkpoints fine-tuned heavily on anime, CG renders, or ultra-clean portrait styles have not seen enough real photographic hair. They draw what they know: clean separated locks with cel-shaded highlights.

How to spot it: Your checkpoint name contains anime, toon, smooth, render, CG, or 3D. Or the rest of the image (skin, fabric) also looks slightly plastic. For SDXL realism, switch to a photography checkpoint such as Juggernaut XL or RealVisXL.

4. Resolution too low for hair detail

At 512x512, hair gets only ~50-100 pixels across. The model has no room to draw realistic fiber clumping, so it draws the simplest thing it knows: parallel lines.

How to spot it: You are generating at 512 or 640 base resolution. Upscaling afterward does not fix the underlying coarse structure — it just sharpens the wire.

5. Sampler is too “crisp” for organic texture

DPM++ 2M Karras at low step counts and Euler a at 20 steps are crisp; they emphasize edges, and on SDXL the plain Euler family tends to look simplistic. Hair benefits from softer organic samplers (DPM++ SDE Karras, UniPC) or higher step counts.

How to spot it: Switching sampler with the same seed and prompt visibly changes hair softness. Wire-hair specifically clears up with DPM++ SDE Karras.

6. LoRA stack is fighting itself

You loaded a detail enhancer LoRA at 1.0 plus a portrait LoRA plus a style LoRA. Detail enhancers push everything toward maximum micro-contrast, which kills hair softness.

How to spot it: Disable the detail/sharpness LoRAs and rerun. If hair improves but face detail drops, the LoRA was the cause. Re-add it at a lower weight (0.3-0.5) rather than 1.0.

7. Negative prompt accidentally suppresses softness (SD only)

Negatives like blurry, soft, low quality, out of focus tell the model to avoid soft renders, including soft hair.

How to spot it: Your negative prompt has blurry or soft as standalone tokens. Replace with more specific negatives like motion blur, jpeg artifacts. (On FLUX-dev this does not apply — distilled models largely ignore negative prompts, so leave them off.)

Shortest path to fix

Step 1: Strip the over-detail tokens from the prompt

Remove anything pushing maximum strand visibility:

# before
photo of woman, ultra detailed hair, hyperdetailed strands,
8k, sharp focus on hair, every strand visible

# after
photo of woman, natural hair texture, soft hair clumps,
shallow depth of field, 50mm lens

The shift from every strand visible to natural hair texture does most of the work.

Step 2: Set guidance correctly for your model

On SD1.5 / SDXL, drop CFG to 5-7:

cfg_scale: 6.5

Lower CFG gives the model permission to render mid-tones instead of forcing everything to high contrast.

On FLUX, leave traditional CFG = 1 and set Distilled CFG Guidance to 3.5 or lower for photoreal portraits. Do not add negative prompts on FLUX-dev.

Step 3: Switch to a softer sampler

DPM++ SDE Karras at 25-30 steps renders soft organic texture noticeably better than Euler a or DDIM at the same step count. UniPC is a good second choice. For pure structure replacement during inpaint, DPM++ 2M Karras is also reliable.

Step 4: Generate at higher base resolution

For SDXL, base at 1024x1024 or 1024x1280. For SD1.5, use hires fix with denoise 0.4-0.5 and an upscale of 1.5x-2x (a detail upscaler like 4x-UltraSharp works well) — that gives the second pass room to redraw hair as fibers instead of just upscaling the wire-hair from pass one.

Step 5: Add explicit fiber-texture tokens

hair: natural fly-aways, fine baby hairs at hairline,
hair clumping, varied strand thickness, soft highlights

varied strand thickness is the specific antidote to wire-hair. fly-aways forces the model to render less-organized strands so the hair stops reading as a manufactured object.

Step 6: Inpaint just the hair region at moderate denoise

If the rest of the image is good, mask only the hair, switch to an inpainting workflow at denoise 0.5-0.6, and rerun with the fiber-texture prompt above. This fixes hair without disturbing face and lighting. Two practical settings that matter:

  • Grow the mask. In ComfyUI set grow_mask_by to 6-8 pixels (or paint the mask slightly larger than the hair in A1111/Forge) so the new generation blends at the edges instead of leaving a seam.
  • If the inpaint looks glowing, flat, or lit wrong, your denoise is too low — the model has no room to redraw the lighting context. Push denoise up toward 0.75-0.85 for those regions.

Step 7: Optional soft pixel-level pass

After inpainting, a light Gaussian blur (0.5-1px) applied to the hair mask only, blended at 30-50%, breaks any remaining wire look. Never apply it globally — only inside the hair mask, or you will soften the whole face.

How to confirm it’s fixed

Before you call it done, run these checks at 100% zoom on the hair, not on the thumbnail:

  • Strand thickness varies. Some strands should be thicker, some hair-thin. Uniform diameter means it is still wire.
  • Strands clump and cross. Real hair groups into locks and overlaps. Perfectly parallel lines mean the fix did not take.
  • A few flyaways exist at the hairline and crown. Their absence is a tell-tale sign of synthetic hair.
  • Highlights sit on clumps, not on every single strand. Highlight running down every individual filament is the classic copper-wire look.

If all four pass at full resolution, the hair will read as real.

When this is not on you

Some base checkpoints simply will not produce photoreal hair without a fine-tune or LoRA, no matter how good your prompt is. If you have run the steps above and hair still reads as plastic, you are hitting the model’s ceiling. Two options:

  • Switch base model. As of June 2026, FLUX.2 renders hair, pores, and skin-light interaction far more naturally than SDXL by default and needs noticeably less prompt surgery (the trade-off is ~24GB VRAM). For 8GB cards, a photography-focused SDXL checkpoint like Juggernaut XL is the realistic baseline.
  • Add a hair LoRA trained on photographic hair (see the FAQ).

Also, hairstyles with high motion (wind-blown, mid-flip) are genuinely harder; even commercial models struggle. Accept some compromise there.

Easy to misdiagnose as

The “skin too smooth / plastic” failure looks adjacent because both feel plasticky. They usually share a root cause (CFG too high, smooth checkpoint, over-detail tokens) but the fixes diverge: skin wants film-grain and pore-texture tokens; hair wants varied-thickness and flyaway tokens. Do not reuse the same negative-prompt set for both.

Also, what looks like wiry hair on a small thumbnail sometimes resolves to fine hair at full resolution. View the actual output size before debugging.

Prevention

  • Default to CFG 5-7 for SD portraits; on FLUX keep Distilled CFG at 3.5 or below.
  • Keep a snippet library of hair-texture tokens to paste into any portrait prompt.
  • Avoid stacking detail-enhancer LoRAs on portrait generations; if you need one, run it at weight 0.3-0.5.
  • Generate portraits at 1024+ base resolution; use hires fix on SD1.5.
  • When critiquing your own output, zoom to 100% on the hair area, not the full thumbnail.
  • For client work, make a dedicated hair-only inpaint pass a standard step.

FAQ

  • Why does this happen more on long straight hair than curly? Long straight hair gives the model a long uninterrupted line to draw. Curly hair forces direction changes that hide the wire-look. Generate the same subject with curls and the issue often disappears.
  • Does a “hair LoRA” actually help? Yes, when it is trained on photographic hair. Look for LoRAs explicitly labeled realistic hair texture or photographic hair, not generic detail LoRAs, which often make wire-hair worse.
  • I lowered my CFG to 1 on FLUX and nothing changed — is that wrong? No. On FLUX, traditional CFG 1 is correct; the dial that controls contrast is the separate Distilled CFG Guidance. Lower that to 2.5-3.5 for portraits instead.
  • My inpainted hair looks pasted on / has a visible seam. Why? The mask was too tight. Grow it by 6-8px (grow_mask_by in ComfyUI) and, if it still looks flat, raise inpaint denoise toward 0.75-0.85 so the model can redraw the edge lighting.
  • Does upscaling fix wire-hair? No. A plain upscaler sharpens the existing wire. You need either hires fix (denoise 0.4-0.5, which lets the model redraw) or a hair-only inpaint pass — not a flat upscale.

Tags: #ai-image #Troubleshooting #Image generation #hair #Portrait #texture