DEV Community

Diiiii
Diiiii

Posted on

Designing an AI Video Workflow as Explicit States

AI video interfaces often compress a complicated production pipeline into one bright “Generate” button. That is good for approachability, but dangerous for product reasoning. If script, presenter, format, language, and review status are treated as loose form fields, users can produce an output without understanding which decision caused which result.

This article is a black-box analysis of public product pages, not a claim about private code, models, or architecture.

Model the user job before the UI
Two related jobs appear in the public pages from Nextify. The AI Avatar Video Generator workflow describes choosing or creating a presenter, entering a script or voice, selecting language and delivery, then generating a talking video. The second job is campaign-oriented: the UGC Creator frames talking-head, demo, and unboxing formats as creative options for social advertising.

Those jobs overlap, but their success criteria differ. Presenter generation needs identity, speech, framing, and localization controls. UGC creation needs hook, scene logic, product evidence, and variation management. A single undifferentiated form hides that distinction.

Proposed state model
type VideoProject = {
intent: "explain" | "announce" | "ugc-ad";
presenter: { source: "library" | "reference"; id: string } | null;
script: { text: string; locale: string; approved: boolean };
format: { archetype: "talking-head" | "demo" | "unboxing"; ratio: "9:16" | "16:9" };
review: { claimsChecked: boolean; rightsChecked: boolean; captionsChecked: boolean };
status: "draft" | "ready" | "generating" | "review" | "approved";
};
The key design choice is that ready is derived, not clicked. A project is ready only when required fields for its intent are complete. A UGC ad without product evidence should not pass the same gate as an internal announcement.

Make invalid combinations visible
Interfaces often validate presence: a script exists, an avatar is selected, and a format is chosen. Production systems also need semantic checks. Is a testimonial written without a real source? Is a custom likeness authorized? Does a translated line preserve a product name? Is 16:9 selected for a vertical placement?

These cannot all be solved automatically, but the UI can make them reviewable. Display a preflight panel with warnings grouped by script, rights, output, and channel. Keep warnings attached to the decision that created them.

Preserve causality in variants
A useful variant system should know what changed. Instead of “Copy 7,” store a parent ID and a change set:

type VariantDelta = {
parentId: string;
changed: Array<"hook" | "presenter" | "voice" | "locale" | "format">;
hypothesis: string;
};
That small structure prevents a common analytics failure: comparing outputs that differ in five ways and attributing the result to one. It also gives the UI a meaningful history view.

Define failure and recovery states
Generation is asynchronous. The frontend should distinguish queued, processing, retryable failure, blocked failure, and complete. A retry should preserve inputs and idempotency. Editing after generation should create a new version rather than silently replacing the artifact under review.

Accessibility matters here too. Progress cannot be communicated by animation alone. Errors need a textual cause and a next action. Preview controls require keyboard operation and captions need an editable review surface.

Treat approvals as versioned data
An approval should apply to a specific script, locale, presenter source, and output configuration. If the script changes after a claims review, that review becomes stale. If the locale changes, pronunciation and captions need review again. A boolean such as approved: true is too coarse unless it is connected to a content hash or version ID.

The UI can communicate this without overwhelming users. Show “Approved for version 3” beside the relevant artifact, then explain why a change reopened review. This is more trustworthy than silently carrying an old green check into a materially different video.

Instrument the workflow, not imagined quality
Useful product analytics can measure where users abandon setup, which validation warnings recur, how often jobs are retried, and whether reviewers request changes. They should not pretend to measure authenticity or persuasion from a generation event alone. Those outcomes require a separate evaluation design and, where applicable, campaign data.

At the interface level, log declared intent and the single variable changed between variants. That gives later analysis a defensible unit of comparison while preserving the user’s creative rationale.

Questions to test
Can a user explain the difference between presenter settings and creative format?
Does changing locale trigger a pronunciation and text review?
Can reviewers identify unsupported claims before generation?
Does every output show which inputs and approvals produced it?
Are retries safe from duplicate jobs and lost edits?
Can a user compare variants by one declared hypothesis?
A better abstraction than “magic”
The generate button should feel simple, but the underlying product model should remain explicit. Intent, presenter, creative grammar, and approval are separate domains. Representing them as separate states makes the workflow easier to test, easier to explain, and safer to extend.

That clarity also gives support, design, and engineering a shared vocabulary for the next iteration.

Top comments (0)