You expected sharp eyelashes, fabric weave, dust on the floor — and what you got looks like a smartphone JPEG from 2010. The image is technically correct (right subject, right pose), but it’s soft, plasticky, and reads “low quality” at a glance.
There are three independent causes, and they stack: pixel resolution, sampler / step count, and prompt density. Fix any one and the image improves; fix all three and it goes from “draft” to “hero.”
Common causes
Ordered by hit rate, highest first.
1. Generation resolution is too low
Most defaults still use 512×512 or 768×768 — fine for SD 1.5, terrible for SDXL or Flux. Modern models are trained on 1024×1024+ and produce noticeably softer output below that.
How to spot it: check your tool’s resolution setting. If it’s < 1024 on either axis (and you’re on SDXL / Flux / Midjourney), you’re starving the model.
2. Sampler / step count too low
Default 20 steps with a basic sampler under-resolves fine detail. Eyelashes, hair strands, fabric texture all need more denoising iterations.
How to spot it: your tool’s step count is at 20-25 with Euler or DDIM. Try 30-40 steps with DPM++ 2M Karras.
3. Prompt has no detail anchors
You wrote portrait of a woman. There’s nothing in there saying “detailed.” The model generates the minimum aesthetic baseline, not a peak. Detail-anchor words pull it up.
How to spot it: scan prompt for words like detailed, sharp, 8k, intricate, crisp, fine, texture, lens specs. Missing → soft output.
4. Wrong checkpoint for the subject
A general checkpoint produces general output. SDXL base is mid-detail on faces and weak on intricate fabrics; a realism-tuned checkpoint (Juggernaut, RealVisXL) produces much sharper results on the same prompt.
How to spot it: same prompt + settings, swap to a realism checkpoint. If detail jumps, the base model was the bottleneck.
5. CFG too low
Classifier-Free Guidance below 4 (SDXL) or 2.5 (Flux) makes the model loosely follow the prompt — including the detail anchors. Detail words get ignored.
How to spot it: CFG / guidance is at default. Bump it 1-2 notches and re-test.
6. Output saved as low-quality JPEG
Your platform may export as 70-quality JPEG. The pixels were fine; the export ruined them.
How to spot it: download original from the platform’s “save raw” / PNG export option, not the auto-shared preview.
Shortest path to fix
Step 1: Raise the output resolution
Per platform:
# Midjourney
"... --ar 1:1 --quality 1"
# Or use 4:5 / 9:16 — Midjourney auto-sizes to ~1024+ on each axis
# Stable Diffusion / SDXL via Forge / A1111
- Width × Height: 1024×1024 minimum
- Enable "Hires fix" → upscale by 2x with R-ESRGAN
- Denoise strength: 0.35-0.5
# Flux dev (ComfyUI)
- 1024×1024 base
- Optional: chain a 2x upscale node
# DALL-E 3 (ChatGPT)
- Ask for "HD quality, 1024×1024"
- ChatGPT respects quality flags in the prompt
Step 2: Increase sampler steps and switch sampler
# A1111 / Forge / SDXL
- Steps: 30-40 (was 20)
- Sampler: DPM++ 2M Karras OR DPM++ SDE Karras
- CFG: 5-7
# ComfyUI Flux
- Steps: 28-35 (Flux dev needs fewer steps than SDXL)
- Sampler: euler + simple scheduler
- Guidance: 3-4
# Midjourney
- Append "--quality 1" (default is "--quality 0.5" on many subscriptions)
Step 3: Add concrete detail anchors to the prompt
Paste these at the end (pick relevant ones, don’t use all):
# For portraits
intricate skin texture, fine pore detail, individual eyelashes,
crisp focus on the eyes, 50mm lens, f/2.8 portrait,
shot on Hasselblad H6D
# For products / objects
hyperdetailed, fabric weave visible, micro-texture,
macro photography, focus stacking, 100mm macro lens
# For environments
dust particles in light beams, weathered surface texture,
fine architectural details, sharp foreground bokeh background
# Generic boost
hyperdetailed, intricate, sharp focus, photorealistic, 8k,
masterpiece, professional photography, ultra-detailed
Step 4: Run a dedicated upscale pass
After base generation:
# Built-in upscalers
- Midjourney: click "Upscale (Subtle)" or "Upscale (Creative)"
- SDXL Forge: Extras tab → R-ESRGAN 4x+
- ComfyUI: UltimateSDUpscale or USDU custom node
# External upscalers (best quality)
- Topaz Gigapixel AI (paid, best for portraits)
- Upscayl (free, open-source, good for general use)
- Real-ESRGAN x4+ via Replicate
Step 5: Switch to a realism-tuned checkpoint
If the base model is the bottleneck:
# SDXL realism
- Juggernaut XL
- RealVisXL
- Realism Engine SDXL
- DreamShaper XL Turbo (faster)
# Flux realism
- Flux dev + Flux Realism LoRA (Civitai)
- Flux dev + Skin Realism LoRA
Step 6: Save as PNG, not auto-JPEG
Always download the raw PNG, not the auto-compressed preview. On Midjourney, right-click → “Save image as” gets the full-quality PNG.
Prevention
- Standard hero-image settings: 1024+ resolution, 30-40 steps, CFG 5-7, realism checkpoint, detail anchors in prompt
- Always run an upscale pass before exporting; never ship raw 1024 to a 2k+ display
- Save raw PNG; never use auto-shared JPEG previews as final output
- Keep one preset / config per model that hits these settings by default