Why AI Images Have Artefacts: Latent Space and VAE Explained

Broken text, six-fingered hands, melted faces in crowds, jewellery that turns into skin — these are usually discussed as separate quirks with separate explanations. They are mostly one phenomenon. The image you see was not generated at the size you see it, and almost everything follows from that.

The one fact

Diffusion does not run on pixels. It runs in a compressed latent space, typically 8× smaller per side — a 512×512 image is generated as a 64×64 latent.

A separate decoder then expands that back to pixels. So fine detail is reconstructed by the decoder, not generated by the model. Anything too small to occupy several latent pixels never really existed.

Why generation happens in miniature

Running diffusion directly on pixels is possible and ruinously expensive. Latent diffusion compresses first.

// The pipeline random noise → 64×64×4 latent ↓ diffusion, many steps, all at 64×64 refined latent 64×64×4 ↓ VAE decoder final image 512×512×3 // Compression ratio 512×512×3 = 786,432 values 64× 64×4 = 16,384 values // 48× fewer

Forty-eight times less data to process at every one of twenty or fifty denoising steps. That is the difference between image generation being a consumer product and a research curiosity — the compression is not a compromise bolted on, it is what made the whole thing viable.

The cost is that the model's actual canvas is tiny. Everything it composes, it composes at 64×64.

The arithmetic of small objects

Here is where the artefacts come from. Work out how much latent space an object actually gets:

Object in a 512px imageOutput pixelsLatent pixels
Full-frame portrait face~300~37 — plenty
Half-body subject's face~120~15 — adequate
A hand at half-body distance~60~7 — marginal
Background face in a crowd~40~5 — fails
Text on a sign~20 tall~2 — hopeless
An individual finger~15~2 — hopeless
Distant eyes~8~1 — nothing

Read that table as a prediction rather than an observation, because it predicts exactly the failure list everyone knows. Text and fingers get two latent pixels. Two values cannot encode a letterform or a knuckle. The diffusion model produces something with the right statistical texture for that region, and the decoder faithfully expands texture that has no structure underneath it.

💡 Why the results look confidently wrong rather than blurry

A blurry result would be the honest output of insufficient information. Instead you get crisp nonsense — sharp letters that spell nothing, well-defined fingers in the wrong quantity.

That is the decoder doing its job. It was trained to produce plausible, sharp, detailed pixels from latents. Given a latent encoding "text-like texture here", it renders convincing letterforms. It has no concept of spelling, and no mechanism for expressing uncertainty.

Why hands are the worst case

Hands are famous because they combine three problems at once, rather than being uniquely difficult in themselves:

  • Small in frame. Rarely more than 5–8 latent pixels — right at the threshold where structure collapses.
  • Highly articulated. A hand has a precise, non-negotiable structure: five digits, specific joint counts, specific proportions. Faces are also structured, but a face is usually larger in frame and its features are more forgiving of small variation.
  • Enormously variable in training data. Hands appear in every conceivable pose, orientation and degree of occlusion. The model learns "hand-shaped things vary a lot", which is exactly the wrong lesson for a structure with a fixed count.

The result is a region that has hand texture, hand colouring and hand-like protrusions, with no constraint enforcing that there be five of them. Hands in close-up portraits generally come out fine — because then they have enough latent pixels.

VAE artefacts specifically

The decoder introduces its own signature, separate from the resolution problem:

ArtefactCause
Slight colour shiftLossy latent round-trip
Faint grid or checkerboardUpsampling in the decoder
Washed-out or oversaturated tonesVAE trained on a different distribution
Loss of very fine textureHigh frequencies compressed away
Seams on tiled generationTiles decoded independently

The VAE is a swappable component, which is why the same model with a different VAE produces visibly different colour and detail. If your outputs look consistently dull or oddly tinted across many prompts, that is a VAE symptom rather than a prompting one — the fix is a different decoder, not different words.

Artefacts that are not the latent's fault

Not everything traces back to resolution. Three other sources, worth separating so you fix the right thing:

// CFG scale too high → oversaturated colour, crunchy contrast, "burnt" look → the model is being pushed so hard toward the prompt that image realism is sacrificed // Too few sampling steps → residual noise, soft incoherent shapes, muddy detail → denoising was stopped before it finished // Generating far above training resolution → duplicated subjects, two heads, repeated horizons → the model composes a coherent scene at its trained size; asked for a much larger canvas, it composes several

That last one is the counterweight to "generate bigger to fix small objects". It works up to a point and then reverses — go too far beyond the training resolution and you trade mangled hands for two people where you asked for one. The usual resolution is to generate at native size and enlarge afterwards, which is covered in upscaling AI images.

⚠️ Duplicated limbs are a composition failure, not a decoder one

It is easy to lump extra arms in with extra fingers. They are different failures. Fingers fail because there is not enough latent resolution to represent them. Limbs duplicate because the model has composed the scene incoherently at low resolution — a global structure problem, not a local detail one.

The distinction matters for fixing them: more resolution helps fingers, and often makes duplication worse.

What actually helps

  • Frame the thing you care about larger. The single most effective change. A portrait crop gives a face ten times the latent pixels of a full-body shot.
  • Generate at the model's native resolution, then enlarge. Fighting the training size costs more than it gains.
  • Regenerate small regions at full size. Inpainting a hand region as its own generation gives it the entire latent canvas — this is what dedicated face and hand fixing passes actually do.
  • Do not put text in an image. Add it afterwards with a text layer. Newer models handle short words better, but "better" is not "reliable", and real typography is a solved problem.
  • Moderate the CFG scale. If everything looks burnt, this is usually why.

🚨 This is a moving target

Architectures are changing in exactly the areas described here. Higher latent resolutions, different compression ratios, transformer-based backbones and improved decoders all shift the artefact profile, and newer models are visibly better at text and hands than the generation that made those failures famous.

What does not change is the underlying trade: compression is what makes generation affordable, and detail below the latent resolution is reconstructed rather than generated. Whenever a model improves at small detail, check whether the latent got bigger — usually it did, and usually generation got slower to match.

Working with generated images?

Resize, crop, convert and compress images entirely in your browser — nothing is uploaded to a server.

Open Image Resizer →

Summary

  • Diffusion runs at ~1/8 scale per side. A 512px image is generated as a 64×64 latent.
  • Fine detail is reconstructed by the VAE decoder, not generated by the model.
  • Text and fingers get ~2 latent pixels — not enough for structure, only texture.
  • Results are confidently wrong, not blurry, because the decoder always renders sharp detail.
  • Hands combine small size, strict structure and huge training variance.
  • VAE choice affects colour and fine texture independently of the prompt.
  • Duplicated limbs are a composition failure, and more resolution makes them worse.
  • Frame subjects larger, generate at native size, inpaint small regions.

Frequently Asked Questions

Why does AI-generated text look like gibberish?

Because letters are fine high-frequency detail and diffusion runs in a compressed latent space around eight times smaller per side than the output. A 20-pixel-tall word occupies barely two latent pixels, so there is not enough resolution to represent letterforms — the decoder then reconstructs something with the texture of text but not the structure.

What is a VAE in image generation?

A variational autoencoder — a pair of networks that compress an image into a small latent representation and expand it back to pixels. Diffusion models generate in that compressed space because it is far cheaper, then the VAE decoder produces the final image, which is why fine detail is reconstructed rather than directly generated.

Why are hands and fingers so difficult for AI image models?

Hands combine several problems: they are usually small in frame, so they get very few latent pixels; they are highly articulated, so plausible-looking variations are structurally wrong; and training images show them in enormous positional variety. The model produces hand-textured regions without the underlying count and joint structure.

Why do faces in the background look wrong?

Same resolution problem. A face occupying 40 pixels in the output has roughly five latent pixels to work with, which cannot encode eyes, nose and mouth as distinct features. The decoder fills in face-like texture, which reads as uncanny because the structure was never there.

Does generating at higher resolution reduce artefacts?

For small objects, yes — more output pixels means more latent pixels per object, so faces and hands get enough representation to hold together. But generating far beyond a model's training resolution introduces its own problems, commonly duplicated subjects and incoherent composition.

P

Written by Paras

We build free, browser-based file tools and write the reference material we wish existed when we were looking things up. Spotted an error? Tell us and we will fix it.