A style is a contract
Turning one art-directed look into a spec that survives thousands of inputs nobody planned for.
- Year
- 2026
- Role
- Style definition, evaluation criteria, pipeline diagnosis
- Style systems
- Consistency
- Evaluation
The ask
Take a look that worked once, in one shot, chosen by hand — and make it hold across arbitrary user input without anyone supervising it.
Constraints
Constraints are what make this engineering rather than decoration.
- Unknown input
- Any source footage, any subject, any lighting. No curation, no retakes, no art director in the loop.
- Reads at thumb size
- Most viewing is 9:16 on a phone. A look that only resolves on a 27-inch display has failed.
- One pass
- No human review between generation and delivery. Whatever comes out is what ships.
- Bounded compute
- The style cannot be the reason a generation misses its latency target.
- Legible as a choice
- A user picking this style from a list must get something recognisably that style, every time.
Where style lives
Claiming the whole pipeline would be less credible, not more.
- 01
User input
Uncontrolled. Assume the worst case, because it arrives eventually.
- 02
Shot segmentation
Determines where continuity has to survive a boundary.
- 03
Keyframe selection
First real point of leverage — this is where a look becomes anchorable.
- 04
Style conditioning
Reference imagery, weights, and prompt structure. The core of the work.
- 05
Sampler and scheduler
Not mine to change, but its behaviour dictates what conditioning survives.
- 06
Temporal pass
Where consistency is either preserved or quietly destroyed.
- 07
Grade and output
Last chance to recover contrast and colour intent.
What broke
Four ways this failed before it worked.
- Failure 01
Style collapses under strong source colour
Cause
When the input already carries a dominant cast, style conditioning and source colour compete rather than compose. The output lands somewhere between the two and reads as neither the style nor the footage.
The lever
Separate luminance intent from colour intent so the style stops fighting the source for the same channel.
EvidenceStyle washing out against a strongly tinted source
- Failure 02
Look drifts across shot boundaries
Cause
Each segment is conditioned independently, so two adjacent shots resolve to different points on the same style manifold. Individually both are correct. Cut together, they look like two different styles.
AtlasThis failure class, in generalThe lever
Anchor every segment to shared reference imagery rather than letting each one re-derive the look.
EvidenceHue and saturation wandering between adjacent segments
- Failure 03
Texture boils frame to frame
Cause
High-frequency detail is a style's most fragile component. Fine grain and surface texture are exactly what temporal instability destroys first, and the effect is far more visible in motion than in any single frame.
AtlasThis failure class, in generalThe lever
Move the texture intent later in the chain, where it is applied once rather than re-synthesised per frame.
EvidenceFine texture reconstructing differently on every frame
- Failure 04
Reads as noise at 9:16
Cause
A look built and judged on a large landscape display loses its structure when cropped and scaled to a phone. Contrast relationships that felt subtle at full size collapse into mud.
The lever
Judge every style at final delivery size, on a phone, before calling it finished.
Evidence missing
This failure has no clip yet. A named failure with video evidence is far more convincing than one described in prose — add one.
The fix
The useful reframe was to stop treating the style as a look and start treating it as a contract: a set of guarantees that must hold no matter what arrives at the input.
A look is a description — warm, high-contrast, grainy. A contract is testable. It says which properties are invariant, which are allowed to vary with the source, and what happens at the edges. Written down, it turns arguments about taste into arguments about whether a specific guarantee held on a specific clip, which is a much shorter conversation.
Three guarantees did most of the work:
- Luminance structure is fixed; colour adapts. The style owns where the contrast sits. It does not own the input’s hue, and it stops trying to.
- Texture is applied once, at a fixed stage. Anything re-synthesised per frame will eventually be re-synthesised differently per frame.
- Every segment anchors to the same reference, not to its neighbour. Drift compounds when each shot inherits from the last; it does not compound when every shot inherits from the same origin.
The second one is the least intuitive and mattered the most. It is tempting to put every stylistic decision into the generation step, because that is where the model’s power is. But the generation step is also where the least stability is. Anything you can move out of it, you should.
Why this is a systems problem
The eye tells you something is wrong. It does not tell you where.
Almost every failure above looks the same on first viewing — the output is somehow off. Distinguishing “the style is wrong” from “the style is right and the temporal pass is destroying it” is not an aesthetic judgement, and no amount of taste will get you there. It takes knowing what each stage of the pipeline can and cannot do to an image, then testing stages in isolation until the variable that actually moves the output reveals itself.
That is the part of this work that surprises people. Most of the day is not choosing between two beautiful frames. It is figuring out which of eleven plausible explanations for a bad frame is the real one.
Result
The finished style holds its identity across source material it was never tuned on. The comparison below is the same input through the same pipeline — only the style definition changed.
Drag to compare. Arrow keys also work; space toggles playback.
Receipts
- Regeneration rate, before → after
- TK — unfilled
- Styles shipped to production
- TK — unfilled
- Generations reviewed while tuning
- TK — unfilled
What I'd do differently
I spent too long trying to fix this with better conditioning. The real lever was upstream, in what got anchored before conditioning ever ran — and I could have found that in a day by testing the pipeline's stages in isolation instead of iterating on the part I already understood. Next time I map where a variable can be influenced before I start tuning the place it is most convenient to tune.
Next case study
Keyframes as a control surface
The one place in a generative video pipeline where an art director still has direct authority.