Axortex

The culture of tech, food & beauty

← Tech
Tech

The Dream Was Not Softness: Building an Instagram Look Inside a Video Model

Reverse-engineering a hyper-saturated, particle-heavy reel aesthetic into a reusable prompt grammar for MiniMax H3 — the blur that had to be removed, the camera speed that cost more detail than step count, and the counting language that cloned an entire forest.

There is a genre of video on Instagram that is easy to recognise and hard to describe: a forest or a shoreline shot into the sun, colours pushed past anything a camera would record, the air visibly full of drifting light. It reads as a mood rather than a place. Trying to reproduce it with an open-weights video model turned into a week of finding out which parts of that impression are prompt, which are sampling, and which are camera.

Most of what follows is a record of being wrong in specific, correctable ways. The measurements come from one machine — an RTX 5080 with 16GB against MiniMax H3 — and the numbers should be read as directional, not as benchmarks.

Nacreous cloud panorama generated with the final prompt grammar

Settle the look on stills, not on clips

The first decision was the only one that never needed revisiting. A video generation at 1536×640 takes a little over four minutes. A still from Flux at the same aspect takes about twenty-five seconds. Iterating an aesthetic on video costs roughly ten times as much per attempt, for feedback that is worse — a clip mixes the look with the motion, and it is hard to tell which one you just broke.

So the look gets fixed on stills first, and the still is then handed to the video model as the literal first frame. Every subsequent finding depends on that split.

Blur is fog, not dream

The first attempt at "dreamy" stacked every softening term available: heavy bloom, halation, light wrap, soft diffusion glow, hazy atmospheric scatter. The result looked like it had a stocking over the lens. It was not dreamy; it was low-resolution.

The correction was not to remove glow but to bound it, and to demand sharpness explicitly in the same breath:

Tight intense bloom confined to the brightest areas only, a hard glow burning around the sun and the brightest highlights, sharp light wrap along backlit edges. The rest of the frame stays crisp and clear with no overall haze or softening.

Plus tack sharp focus, crystal clear crisp edges in the style block, and a negative list that names the failure directly: blurry, soft focus, hazy, foggy, misty, diffusion filter, dreamy soft glow, overall bloom, milky.

Left: bloom applied globally. Right: the same scene with bloom bounded to highlights and sharpness demanded explicitly

The reframing that made the rest of the work easier: a dream is not a soft image. What reads as dreamlike is saturation past the plausible, and a subject you have not seen before. Softness is just fog. Once that was stated plainly, the palette could be pushed much harder without the frame turning to mush — and the scenes could go looking for genuinely unfamiliar weather instead of generic prettiness.

Light needs something to break it

An empty sky lit from behind is just bright. The reference clips are full of things that interrupt the light: pollen, spray, dust, seed fluff, insects. Naming them individually, with a description of what each does optically, changed the frames more than any lighting term:

The air is thick with thousands of tiny floating particles at every depth… Each particle is a small sharp white pinpoint of light catching the backlight, sizes varying from barely visible specks to small bright points, densely scattered and unevenly distributed. The dust makes the light itself visible: dense volumetric god rays and solid shafts of sunlight carve through the air.

One detail mattered: earlier versions asked for prismatic rainbow bokeh, and got large iridescent discs that looked like a lens overlay. The reference particles are small, white and sharp. Asking for the wrong optical behaviour produces a convincing rendering of the wrong thing.

Anchor the clip to the still — then prove it

Handing a still to the video model as its first frame requires a specific node. The intuitive assembly — an empty latent plus a text encoder — runs perfectly and ignores the image entirely, because that latent node has no image input at all. Nothing errors. You get a good clip generated from the text, which resembles your still because the same prompt wrote both.

The verification that settles it is a pixel difference between frame 0 and the source image:

mean absolute difference pixels within 20
Anchored 6.5 – 11.3 82 – 93%
Not anchored 49 – 69 10 – 28%

The two regimes are far enough apart that no judgement is involved.

Left: the Flux still. Right: frame 0 of the generated clip, mean difference 7.8

There is a second trap sitting behind the first. The generation harness skipped any clip whose output file already existed — so after fixing the bug, it kept the results from the broken configuration and the verification reported failure against stale files. If a harness skips work, make it record what produced the file — prompt, first frame, frame count — and skip only when that still matches.

Camera speed costs more detail than step count

The clearest measured result of the week, and the one that reversed an assumption.

Symptom: the still handed in as frame 0 is sharp, the first second holds, and from around the midpoint the trunks smear and undergrowth turns to green mush. The obvious suspects were sampling — too few steps, or a missing sigma-shift node. Four cells, one variable each, same prompt and seed:

steps sigma shift node camera sharpness mid sharpness end time
A baseline 8 fast 177.6 152.4 250s
B shift 12 8 12.0 fast 177.6 152.4 246s
C more steps 16 12.0 fast 186.3 126.3 456s
D slow camera 8 12.0 slow 282.1 324.3 248s

B is identical to A to four significant figures. The shift node defaults to exactly the value the model already uses, so adding it changes nothing. It was worth running precisely because it was the confident hypothesis.

C is worse at the end than the baseline, at 1.8× the time. More steps refine what the representation can hold; they do not enlarge it.

D more than doubles end-of-clip sharpness at no extra cost. The only change was wording:

before:  flies fast and continuously forward, the nearest trunks rushing
         toward the lens and streaming past both edges. Constant rapid
         forward motion
after:   drifts forward slowly and steadily, the nearest trunks easing
         past the edges of frame. Slow deliberate forward motion

Four variants at the clip midpoint. Only the bottom one used slow camera language

A distilled few-step model has a fixed budget per frame. Large per-frame displacement spends it on motion, and there is nothing left for texture. Note the gap widens over the clip — 59% at the midpoint, 113% at the end — so a single early frame will not reveal this.

What was tried next was to keep the sense of travel by lengthening the clip as the camera slowed: 124 frames to 226, roughly half the per-frame displacement over comparable ground, with generation time scaling linearly with frame count. The audio line was slowed alongside it (rushing air became soft moving air), since this model generates audio jointly; that was not separately ablated. An eight-shot forest set generated on those settings was discarded on viewing, so the controlled result above has not been shown to carry into a finished sequence.

Describe the destination, not just the move

A camera move that ends somewhere new — descending through cloud to reveal open sea below — held the look for the first half and then went flat and grey on arrival.

The prompt was eight lines describing cloud and one line describing sea. Conditioning from the first frame governs the opening; by the end the text is doing the work, and for the destination there was almost nothing to work from.

Descent through cloud: the look survives the first half and collapses on arrival

Writing the destination at the same length as the origin — what is on the ground, how light arrives there, what floats in the air, and an explicit the colour stays as deep and saturated at the bottom as it was at the top — removed the failure on an equivalent set of descents, with end-of-clip saturation matching or exceeding the opening frame. That comparison is confounded with a subject change and should be read as "the failure is gone", not as a measured effect size.

Ask for a count, get clones

A generated forest that reads as a repeating game asset — one tree stamped across the frame — traces back to prompt language that asked for a number and never asked for difference:

hundreds of trees receding to the horizon, all overlapping
packed completely full with no empty space
looking straight ahead into the direction of travel

Cloning is the cheapest way to satisfy a count. Filling every gap is easiest by repetition. A dead-centre vanishing point makes the frame near mirror-symmetric. And nothing in the negative list prohibited any of it.

Replacing the counting language with explicit variety — mixed species, trunk thicknesses from sapling to giant, individual lean angles, broken and dead trunks, irregular spacing with real gaps, vanishing point pushed off to one side — plus a negative covering repeating pattern, tiling, cloned, duplicated, wallpaper, symmetrical, mirrored, evenly spaced, rows, plantation:

mean mirror symmetry (n=8)
Before 62.6
After 43.5

Left: counting language. Right: variety stated explicitly, with the composition pushed off centre

But it split rather than improving everything. The three cuts that fell furthest all had a structurally asymmetric subject — a slope, a ridgeline, a hillside. The five that barely moved were all variations on standing inside a wood looking forward, where trunks get distributed evenly left and right regardless of what the text asks.

Text suppressed the repetition of individual elements. It did not fix global symmetry in a frontal composition. Choosing a subject that is asymmetric by construction did what the wording could not — which is a composition problem with a composition answer, not a prompting one.

The grammar that came out of it

What survived is a set of blocks that vary independently per shot, rather than one paragraph reused with the subject swapped:

Block Why it varies per shot
Lens Wide, normal and long produce different depth relationships; using only one makes every shot the same perspective
Light Backlit, side-raked, overcast, single shaft, dappled, moonlit — the largest single source of variety
Particles Heavy, sparse, none, rain. Uniform particle density across every shot is what reads as an overlay
Density Not everything should be full. Open frames make the packed ones land
Framing bias Which third of the frame carries the mass, stated explicitly
Camera Forward, lateral, banking, rising, descending — matched to the composition

The failure mode this fixes is subtle: with the subject line as the only variable, eight shots look like one template with different textures applied. That reads as CG even when every individual frame is convincing.

Four subjects under the same grammar with different light, lens and density settings

What is still unsolved

  • Frontal symmetry. Five of eight forest shots stayed near-symmetric no matter what the negative list said.
  • Everything above is n=1 per cell, on one scene, on one card. The effect sizes were large enough to see without the metric, which is the only reason they are quoted at all.
  • Whether the camera-speed result generalises. The four-cell test isolated the cause on a single shot. The eight-shot set built on those settings was not kept, and no diagnosis has been done on what was wrong with it — still soft, or slow enough to be inert, which point in opposite directions.
  • Mask resolution. This model reads a mask on a 32-pixel grid — a 1344×768 clip has a 42×24 mask — so subject-level masked replacement needs the subject cropped to fill the frame first, not masked in place.

The reproduction scripts and raw measurements are in a public repository of measured notes, alongside the earlier findings on frame ceilings and character consistency.

#ai-video#comfyui#prompt-engineering#generative-ai#workflow#measurement

← Back to all posts