Vivid's accepted base-model evaluation covers 12 fixed scenes and 42 generated shots, with identity 0.3528, adherence 0.8437, and realism 0.8562.
42 generated shots across 12 scripted scenesVerified 2026-08-19Case 02 / Generative imaging
Vivid
Vivid turns a written scene into a sequence of photographs, then treats continuity, visual review, and the decision not to ship a faster but worse model as first-class product work.
- Role
- AI/ML Development Intern
- Built at
- Stick and Dot
- Contribution
- Generation pipeline, evaluation, and product delivery
- Status
- Live

Measured, with the denominator attached
Proof before polish.A Vivid Turbo evaluation was 5.90 times faster across 42 shots, but it was rejected because identity and text-scene quality regressed.
42 shots across 12 scripted scenesVerified 2026-08-2801 / What it is
The frame is not the product. The sequence is.
Vivid turns a written idea, scene, or screenplay into an ordered sequence of generated photographs. A planner establishes the world, cast, camera language, and continuity before the image worker renders each shot.
The product has three entry points: one-off image generation, a planned scene of two to six shots, and a longer script broken into scenes. Every sequence can be reviewed, regenerated shot by shot, edited with language, colour-graded, and exported.
Continuity is the product. A beautiful isolated frame is not a successful result if the next frame loses the person, invents another actor, or repeats the previous pose.
Filmmakers pitching a scene, writers pre-visualising a script, and small creative teams that need a coherent visual sequence before they have a camera, cast, or production budget.
At Stick and Dot, I rebuilt and evaluated Vivid's generation path across the FLUX.2 migration, planning and reference conditioning, the fixed evaluation harness, deployment behaviour, and the browser workflow. This page describes my contribution without claiming ownership of the company product.
Contribution record
02 / Product proof
See the actual product before reading the argument.
10.1-second product capture

The browser accepts a scene, seed, style, and generation mode. Planning can turn the same input into a structured sequence instead of one disconnected image.

The first evaluated shot establishes the recurring ceramic artist, workshop, wardrobe, light, and visual texture that later shots must preserve.

A later shot changes framing and action while keeping the person and workshop recognisable. The sequence remains evaluation evidence, not a claim that identity is solved.
03 / Problem and responsibility
Every new shot has to change the picture without changing the person.
Image generators are good at making one persuasive frame. A storyboard asks for something harder: the same people, world, light, and visual intent across a sequence while every shot still moves the story forward.
References can preserve identity and still damage the result. A previous frame may drag its pose and composition forward, a single anchor may omit a second character, and a faster model may improve aggregate scores while creating an obvious duplicate person.
The engineering problem is therefore not generation alone. It is planning, reference binding, measurable evaluation, human review, GPU economics, and a release rule that can reject an attractive speedup.
- Product
- Three entry modes, script-to-shot workflow, regeneration, semantic editing, review, and export behaviour.
- Generation
- FLUX.2 migration, prompt planning, character anchors, reference selection, warmup, memory limits, and deployment path.
- Evaluation
- Fixed scenes, deterministic seeds, identity and VLM metrics, resumable evidence, cost tracking, and mandatory visual review.
04 / Research that changed the build
Research only matters here when it changed a decision.
- 01
The complete main-to-upgrade-flux repository history
The product evolved from FLUX.1 with PuLID and stacked LoRA experiments into one FLUX.2 pipeline with native image references and a hand-merged quantised text encoder.
The rebuild kept the planner and product workflow, removed incompatible model paths, and concentrated generation in one measured engine instead of carrying parallel legacy implementations. - 02
The fixed 12-scene, 42-shot evaluation set
Broad lighting and environment quality were often strong, while identity, exact cast count, text, hands, and Indian-context details exposed repeatable failures.
Identity, adherence, realism, creativity, speed, cost, and provenance became explicit gates instead of relying on a handful of attractive outputs. - 03
Human review beside structured VLM and ArcFace scores
An automated judge missed an obvious extra person, and Turbo's aggregate scores hid visible duplication in individual scenes.
Every promotion now requires per-scene inspection and exact people-count review; automated metrics can reject a candidate but cannot approve one alone. - 04
FLUX.2 reference-conditioning experiments
Rendered prior shots carry useful identity and harmful pose or composition. A single unnamed anchor also cannot bind two or three recurring people reliably.
The current plan tests named one-person and multi-person reference profiles within a fixed image-area budget, while production remains on the measured legacy path.
05 / Architecture
Keep one generation engine, make continuity explicit in the plan, and require evidence before a new profile can become production.
A React and Vite browser app calls thin FastAPI routes on Modal. A Groq planner writes a world bible, character bible, structured shots, and continuity notes. One bounded L40S worker loads the FLUX.2 pipeline and generates each shot serially.
The production path still uses one legacy character reference. Named single-reference and multi-reference candidates now exist in source, but they remain behind a gated evaluation sequence and have not replaced production.
Evaluation records identity, prompt adherence, realism, creativity, time, cost, and provenance. Automated scores narrow the search; a human visual gate still decides whether duplicated people, missing cast, pose copying, or broken hands make a result unshippable.
- 01BrowserCollects a scene, screenplay, actor references, style, and review actions
- 02PlannerWrites the world bible, character bible, structured shots, and continuity notes
- 03ReferencesBinds the current production anchor or a gated named-reference candidate
- 04FLUX.2 workerGenerates each shot serially on one L40S and records timing provenance
- 05EvaluationPairs identity and VLM metrics with human visual review before promotion
06 / Decisions and trade-offs
What I chose, what I rejected, and what the choice costs.
Introduce a queue, WebSockets, multi-GPU sharding, or parallel generation before the product needs them.
A story is not realtime, but the operating model stays understandable, memory-bounded, and honest at the current scale.
Promote a profile from aggregate scores, one showcase image, or a faster local run.
Evaluation is slower and costs real GPU time, but a visible identity failure cannot hide behind an average.
Ship the 5.90-times speedup because its headline timing and aggregate scores looked better.
The current product remains too slow, but it does not exchange a recurring character for a more marketable latency number.
Rewrite the entire product while changing the model, evaluator, prompts, references, and interface together.
The product remains visually unfinished in places, but each quality change can be traced to one isolated decision.
07 / Evidence
The baseline is measured. The best speedup was still rejected.
Vivid's accepted base-model evaluation covers 12 fixed scenes and 42 generated shots, with identity 0.3528, adherence 0.8437, and realism 0.8562.
42 generated shots across 12 scripted scenesVerified 2026-08-19A Vivid Turbo evaluation was 5.90 times faster across 42 shots, but it was rejected because identity and text-scene quality regressed.
42 shots across 12 scripted scenesVerified 2026-08-28No Vivid user count appears here. The owner knows at least ten people who used it, but there is no durable analytics record or agreed counting rule, so the number remains unpublished.
08 / What failed
The failures are part of the architecture record.
01 Uploaded actors disappeared before generation
- What I saw
- The browser accepted an actor image, but the planned character still used an invented reference.
- Why
- The upload path named characters char_A and char_B while the planner and generation path expected char_1 and char_2, so the images were silently discarded.
- What changed
- The product now enforces one char_1 through char_N contract and the deployed actor path received a real four-shot visual gate.
- Still true
- Phase 4 still has to prove the same binding across multiple people, regeneration, and session reloads.
02 Regeneration forgot the character
- What I saw
- Regenerating an individual shot ran without the reference chain used by the original sequence.
- Why
- The regenerate path looked for the wrong reference key and a zero chain-reference limit excluded the intended fallback.
- What changed
- Reference selection was repaired and generation plus regeneration now share one selection path with recorded provenance.
- Still true
- The production selector still supplies only one legacy anchor until the named-reference candidate passes live evaluation.
03 The faster profile duplicated people
- What I saw
- Turbo cut accepted GPU work sharply, yet several scenes gained duplicated or substituted people and one text-heavy scene lost identity.
- Why
- Aggregate improvements did not protect every scene, exact cast count, or visible reference-to-person binding.
- What changed
- Turbo stayed iteration-only, production stayed on base, and the gate gained per-scene identity plus mandatory visual people-count review.
- Still true
- Production still misses the one-to-three-minute target, so speed work has to continue without reopening this quality regression.
04 Better prose still failed the photograph
- What I saw
- A deterministic prose prompt improved aggregate adherence and realism but added an extra man in the fixed tram sequence.
- Why
- The rewritten prompt changed too many visual relationships for the automated aggregate to expose one scene's cast error.
- What changed
- Phase 3 concluded with no promotion. Legacy prompting remains production and later prompt arms were not run without a valid selected prerequisite.
- Still true
- Prompt fidelity and reference binding remain coupled in people-heavy scenes and must be isolated before another paid comparison.
09 / Limits and future
What the product cannot do yet, beside what may come next.
Current limitations
- The measured base identity score is 0.3528 against a target above 0.70, so recognisable continuity is not solved.
- Production still uses one legacy reference anchor; named single-person and multi-person reference candidates exist only as an unmeasured source checkpoint.
- The current base path is far outside the one-to-three-minute warm target, while the proven faster profile is not good enough to ship.
- Quality scores live in the evaluator rather than the product, so a person cannot yet ask Vivid to regenerate the objectively weakest shot.
- FLUX.2 dev weights are non-commercial. A paid launch needs a commercial licence, a licensed API provider, or a different model path.
- There is no account system, database, billing layer, or production analytics because those systems are not yet justified by the product's scale.
Deliberate boundaries
- Call one attractive frame evidence of sequence continuity.
- Promote an aggregate score when a person is visibly duplicated or missing.
- Present source-only Phase 4 reference work as deployed quality.
- Treat non-commercial model weights as a solved launch licence.
Named multi-person references
Run the locked legacy, named-single, and named-multi sequence, then promote nothing until exact cast, binding, identity, VRAM, and visual gates all pass.
Speed without the Turbo regression
Continue warmup, reference-budget, resolution, caching, and pipeline work toward a complete warm story in one to three minutes.
A higher-fidelity identity tier
Evaluate per-character LoRA and the Vivid Indian fine-tune only after the reference path and speed gates are stable.
Expose evaluation in the product
Surface shot-level quality signals and make the weakest frame easier to inspect and regenerate without rebuilding the existing frontend.
Commercial model path
Choose a commercial self-host licence, licensed provider, or permissive model before Vivid can become a paid product.
10 / Stack and sources
The systems underneath it, and where this account comes from.
- React
- Vite
- Python
- FastAPI
- PyTorch
- FLUX.2
- Groq
- Modal
- ArcFace