← Tech
Tech

Four Ways to Add Detail to an AI Image That Don’t Work (Measured)

Generating at 2x resolution and downsampling made images less sharp, not more: 69-77 edge acuity down to 19. Tiled hi-res passes and low-sigma refinement measured as near-identity. What failed, by how much, and the one change that actually worked.

TL;DR — Trying to close a detail gap against a reference image, five standard techniques were measured and four did nothing or made it worse. Generating at 2× the resolution and downsampling made the image less sharp, not more — 69–77 down to 19 — and downsampling did not recover it. Tiled hi-res passes and low-sigma refinement measured as near-identity. The only lever that worked was switching off a distilled model. Negative results, with the numbers, because the failures are the useful part.

The gap, defined

The target was a reference image whose cloud structure was visibly denser than anything the local pipeline produced. "Visibly denser" is not a plan, so two measurements, both taken after resizing every image to a common 864 px width so the comparison is fair:

Metric Definition What it catches
Edge acuity mean of the top 5% of gradient magnitudes how crisp the strongest edges are
Micro-texture median gradient magnitude whether every part of the frame has structure, or just a few edges

The median is the important one. A picture of three sharp objects on a smooth background scores well on the first metric and badly on the second. Dense cloud structure — hundreds of small lit cells — is exactly a high-median image.

Edge acuity Micro-texture
Reference 168.8 7.28
Ours, generated directly at 1440×2560 49–85 3.0–3.6

A 1:1 crop comparison made the difference concrete: the reference is hundreds of small, sharply lit cells packed edge to edge; ours is a handful of large smooth masses. Not a sharpening problem — a structure density problem.

First, a warning about the metric everyone uses

Before the failures, the reason two metrics are defined above rather than the usual one.

Laplacian variance — the standard "is this image sharp" scalar — was actively misleading here. Measured at a common 480 px width:

Laplacian variance
Reference 7454
Our anchors, v1 2073
Our video, v1 1013
Our video, v2 856

By that table v1 beats v2 comfortably. But a set of stills generated with only the style wording changed to photorealistic scored 777–992 — below both — and looked overwhelmingly better to every person who looked at them.

The cause is content, not sharpness. The v1 look scattered thousands of small white bokeh discs across the frame, and the reference contains firework point sources. Both explode a gradient-variance statistic. The photoreal stills have continuous surfaces — rock grain, water reflection, soft optical bokeh — that carry far more real detail and far less high-frequency spike.

A sharpness scalar is only comparable between images with similar content. Across different content it measures how many hard point sources are in frame. Edge acuity plus median gradient is better, and still not immune — the reference's fireworks were excluded from the acuity comparison for exactly this reason. If a number disagrees with every set of eyes in the room, the number is measuring the wrong thing.

The four things that did not work

All five techniques below were applied to the same two scenes, same model, same seeds.

1. Asking for density in the prompt

A dedicated density block — "hundreds of small sharply lit cumulus cells, every part of the frame textured" — plus scene wording describing towers on towers.

Result: slightly more small cells at the same seed. Micro-texture stayed at 2.2–3.6. The model tends toward a few large masses regardless of how the request is phrased, because that is what the sampler produces at four steps, not what it misunderstood.

2. Partial denoise refinement at low sigma

The standard "img2img at low strength to add detail" move. Existing images fed back in as latents with sigma schedules starting at 0.55 and 0.40.

Result: near-identity. Edge acuity 75–86 before and after; micro-texture 2.2, rising to 4.1 only in a variant that also regenerated from scratch. The tell was the wall clock: the pass finished in about ten seconds. A refinement that costs nothing is not doing anything. At sigma ≤ 0.5 this model reconstructs its input.

3. Strong refinement at high sigma

Same idea, sigma 0.80 — enough noise to genuinely re-sample.

Edge acuity Micro-texture
Input 84 3.2
After σ 0.80 refine 90 5.0
Reference 168.8 7.28

The only one of the four with a real effect, and it works because at that sigma it is closer to regeneration than refinement — which also means it can move away from the composition you were trying to keep. Worth having; not a solution.

4. Tiled hi-res pass

Upscale to 2880 px, then run a 3×4 grid of 16 overlapping tiles at sigma 0.45 so each tile is refined at native resolution. This is the technique that works well in many pipelines.

Edge acuity Micro-texture Time
Input 84 3.2
Tiled hi-res, 16 tiles @ σ0.45 85.5 3.6 122 s

Two minutes of compute for +1.5 acuity, and side-by-side the output could not be told from the input. It inherits the failure of case 2: every tile is a sigma-0.45 pass, and sigma-0.45 passes are near-identity on this model. Tiling changes where the refinement happens, not whether it does anything.

5. Native supersampling — the one that went backwards

The most promising idea, and the most decisively wrong. Rather than enlarging afterwards, generate on a much larger canvas from the start so the model has room to place fine structure, then downsample with a good filter. This is standard practice in offline rendering.

Resolution Time Edge acuity Micro-texture
Direct 1440×2560 (3.7 MP) 22–38 s 69–77 3.2
1.5× then downsample 2160×3840 (8.3 MP) 40–46 s 33–37
2× then downsample 2880×5120 (14.7 MP) 111–135 s 19 2.0

Not a smaller gain — a reversal. Four times the compute for a quarter of the acuity. And the loss is not a resampling artefact: measuring the large images before downsampling gives the same figures (37 → 37, 19 → 19). The detail was never generated.

Visually the failure is legible. As the canvas grows the clouds spread and soften, contrast drains, and at 2× the moon acquires a crescent-shaped artefact. A distilled model pushed outside its training resolution does not invent structure to fill the space — it stretches the structure it already had. There is no out-of-memory error and no warning; the images look plausible until measured against a smaller one.

The same crop region from three generations: direct, 1.5x downsampled, 2x downsampled

The identical 620 × 620 region of the same scene, at 1:1 with no resampling. Left: generated directly at 1440 wide. Middle: generated at 1.5× and downsampled. Right: generated at 2× and downsampled. The cauliflower cell structure on the left simply is not present on the right.

Full-frame comparison of the supersampling runs

The same comparison at full frame, showing the contrast drain and the distorted moon at 2×.

A related result from the video side of the same pipeline: a two-stage path that generated at half resolution, upsampled in latent space, then refined for three steps measured 49.2 edge acuity, against 68.8 for a single-stage pass at full resolution. Same lesson in a different component — latent upsampling plus a short refine enlarges smoothly rather than adding anything.

The one thing that worked

Every technique above was applied to a distilled model — the kind that generates in four steps at guidance 1.0, where the negative prompt and CFG are effectively inactive. Switching to the non-distilled variant of the same model, at 20 steps with real classifier-free guidance:

Edge acuity Time per image
Distilled, 4 steps 69–88 22–38 s
Non-distilled, 20 steps, CFG 3.5 76–116 99–105 s

Plus 10 to 30 points, three to four times the cost, and in 1:1 crops the cauliflower sub-structure that the density prompt had failed to produce simply appears. Guidance is the mechanism: it amplifies the prompt's instructions instead of leaving them as suggestions, and detail instructions are instructions.

Still 76–116 against a reference of 168.8. The gap narrowed by roughly a quarter; it did not close.

A cheaper answer nobody checks

Worth stating because it invalidates part of the chase. The reference images were uploaded at 1440×2560. The platform serving them re-encodes to 1080×1920. Nobody has ever seen those files at the resolution they were made at.

So the practical target is 1088×1920 — the nearest multiple of 64 — and everything spent generating above the serving resolution is spent on a version of the image no viewer receives. That reframes the whole exercise: the reference is not out-reaching us on pixels. It has more structure per pixel, which is why supersampling was never going to help and guidance did.

What to take from this

Verify that a refinement pass is doing anything before believing it improved something. Wall-clock time is a free check: a sigma-0.45 pass that returns in ten seconds is a no-op regardless of how the output looks in a thumbnail.

Distilled models have a resolution band, and outside it they degrade quietly. The failure mode is not an error but a smooth, plausible, emptier image. If you supersample, measure the result against a direct generation at target size before adopting it.

Detail comes from the sampler, not from pixels. Four techniques that add pixels or re-run the sampler weakly all failed. The one that changed the sampling process — more steps with guidance — worked. Resolution is not the axis; steps and guidance are.

Distinguish edge sharpness from texture density. They come apart, and the second is what makes an image read as detailed. Ours were never much less sharp than the reference; they were much less dense.

What this does not show

One model family, two scenes, one seed per configuration. The mechanism behind the supersampling failure — a distilled model reproducing learned structure at a scale it was not trained on — should generalise to other distilled models, but the resolution band where it starts will differ. A non-distilled model at high step counts may supersample perfectly well; that was not tested.

The comparison is against a single reference image whose provenance and pipeline are unknown. It is a target, not a control. Its 168.8 acuity may partly come from post-processing rather than generation.

Higher step counts (28–40), multiple seeds per scene, and larger model tiers were all listed as next steps and none of them have been run. The 168.8 figure remains unmatched.

FAQ

Does generating at higher resolution and downsampling add detail?

Not with a distilled model outside its training band. Measured here: 1440 direct gave 69–77 edge acuity, 1.5× gave 33–37, 2× gave 19 — and the large images measured the same before downsampling, so nothing was lost in the resize. The structure was never generated.

Why did my hi-res tiled upscale do nothing?

Probably the denoise strength. At sigma ≤ 0.5 this model reconstructs its input almost exactly, so every tile is a no-op and tiling only distributes no-ops across the frame. A 16-tile pass at σ0.45 cost 122 seconds for +1.5 edge acuity. Check the wall clock: if a refinement returns far faster than a generation, it is not refining.

Is Laplacian variance a good sharpness metric?

Only between images of similar content. It responds strongly to point light sources and small bright discs, so a frame full of bokeh or fireworks scores far above a frame of continuous detailed surfaces that any viewer would call sharper. Measured here, photorealistic stills scored 777–992 against 1013 for images everyone agreed looked worse.

What actually increases detail?

More sampling with guidance. Moving from a distilled 4-step model at CFG 1.0 to the non-distilled variant at 20 steps and CFG 3.5 gained 10–30 points of edge acuity and produced sub-structure that no prompt had been able to elicit, at roughly 4× the time per image.

How much resolution do I actually need?

Check what the destination serves. A platform that re-encodes uploads to 1080×1920 makes anything above that invisible to viewers, so 1088×1920 — the nearest multiple of 64 — is the sensible target, and effort is better spent on structure per pixel than on pixel count.

#image-generation#upscaling#measurement#negative-results#flux

← Back to all posts