Parth TiwariStart a project
MenuClose

Case 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
A real Vivid evaluation frame showing the recurring ceramic artist holding a blue bowl in her workshop
Real evaluation frameFixed sequence, not a mockup

Measured, with the denominator attached

Proof before polish.
12 scenes / 42 shots

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-19
5.90x faster, not shipped

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-28
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.

Built for

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

See the actual product before reading the argument.

10.1-second product capture

A real recording of Vivid's browser workflow. It proves the product surface and controls, not current generation quality; the fixed evaluation frames below carry that evidence.
01
The real Vivid generation interface with scene, seed, style, planning, and render controls
Describe the scene

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.

02
A real Vivid evaluation frame establishing a ceramic artist seated in a wooden workshop
Establish the person

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

03
A later real Vivid evaluation frame showing the same ceramic artist presenting a blue bowl
Advance the story

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.

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.

Research only matters here when it changed a decision.

  1. 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.
  2. 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.
  3. 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.
  4. 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.

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.

One story plan, one serial image worker, one evidence trail
  1. 01BrowserCollects a scene, screenplay, actor references, style, and review actions
  2. 02PlannerWrites the world bible, character bible, structured shots, and continuity notes
  3. 03ReferencesBinds the current production anchor or a gated named-reference candidate
  4. 04FLUX.2 workerGenerates each shot serially on one L40S and records timing provenance
  5. 05EvaluationPairs identity and VLM metrics with human visual review before promotion

What I chose, what I rejected, and what the choice costs.

DecisionRejectedTrade-off
Keep one serial L40S worker and one bounded executor per container.

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.

Make production selection a fixed-plan evaluation and visual-review gate.

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.

Keep the slower base profile in production after Turbo failed visual review.

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.

Preserve the React product and rebuild the wrong backend surfaces in phases.

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.

The baseline is measured. The best speedup was still rejected.

12 scenes / 42 shots

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-19
5.90x faster, not shipped

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-28

No 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.

The failures are part of the architecture record.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
Read why the speedup was rejected

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.
investigating

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.

planned

Speed without the Turbo regression

Continue warmup, reference-budget, resolution, caching, and pipeline work toward a complete warm story in one to three minutes.

planned

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.

planned

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.

blocked

Commercial model path

Choose a commercial self-host licence, licensed provider, or permissive model before Vivid can become a paid product.

The systems underneath it, and where this account comes from.

  • React
  • Vite
  • Python
  • FastAPI
  • PyTorch
  • FLUX.2
  • Groq
  • Modal
  • ArcFace
Audited internallyVivid main and upgrade-flux repository history
Audited internallyCurrent Vivid rebuild plan, architecture, PRD, audit, and evaluation baselines
PublicPortfolio claim records