# Creator workflow — controlled human video

Phase 182, `182.C.39.01`. Ten stages: reference preparation, consent, script
locking, pronunciation, audio approval, scene direction, take review,
correction, export, and deletion.

## Read this first

**Five of the ten stages are reachable now, and the other five are not.** That
replaced "none of this is reachable today" on 2026-09-12, when the last of the
ingestion adapters landed. What runs: reference upload (stage 1) end to end,
identity packs with a CPU face detector, script and pronunciation through the
project draft, audio takes with a measured duration and a forced alignment, and
the approval that fixes the durations (stage 5). What does not: everything from
scene direction's submission onward — jobs, candidates, review, correction,
export and deletion have no adapter, and their endpoints answer
`hv.internal.store_unavailable` per request rather than an empty list.

The boot line says which is which on any given deployment, and one from a real
run is archived at `evidence/2026-09-12-live-surface-capture/boot-line.txt`.
Read a stage below as a map of the decisions a creator meets; the ones past
stage 5 are still a map rather than instructions.

That distinction is the point of writing it now. Each stage below says what the
creator supplies, what will refuse them and why, and what the stage does **not**
do — because the failure this phase exists to avoid is a creator who believes a
take was checked for something nobody checked.

## The stages

### 1. Reference preparation

The creator uploads one or more images of the person to be rendered.

- Upload is a session with a declared purpose, not a bare file POST
  (`human-video-upload-session.ts`).
- Each asset is validated as the media it claims to be
  (`human-video-asset-validation.ts`), scanned (`human-video-upload-scan.ts`),
  and stripped of camera metadata (`human-video-metadata-strip.ts`).
- Reference quality is assessed and the creator is told what is weak before
  money is spent (`human-video-reference-quality.ts`,
  `human-video-reference-guidance.ts`).
- The pack is checked for internal contradiction: a pack that mixes two people
  produces a video of neither, at full cost
  (`human-video-identity-consistency.ts`, `human-video-identity-pack.ts`).

**This stage does not decide identity.** The pack check catches a gross
mismatch; the cutoff that could settle identity is `182.C.19.08`'s, and it is
fitted against a corpus that does not exist yet.

### 2. Consent

An authorization record binds a named subject to the **digests** of the
references uploaded in stage 1 (`human-video-likeness-authorization.ts`), with
proof that the person enrolling is that subject
(`human-video-enrolment-proof.ts`).

- Consent cannot precede the upload, because it binds to digests the upload
  produces. It must precede every submission.
- Voice use is a separate gate from likeness use
  (`human-video-voice-use-gate.ts`).
- Minors and public figures have their own paths
  (`human-video-minor-safeguards.ts`, `human-video-content-policy.ts`).
- Withdrawal is immediate in force and bounded in reach
  (`human-video-revocation.ts`) — see stage 10.

### 3. Script locking

The exact words are fixed before anything is generated
(`human-video-script-exactness.ts`).

- Exact-dialogue mode promises the approved words. Prompt-only dialogue is a
  different mode and does not make that promise
  (`human-video-dialogue-mode.ts`).
- A script that cannot be aligned to audio is refused at this stage rather than
  discovered at evaluation (`hv.validation.script_not_alignable`).

### 4. Pronunciation

Names, loanwords and locale-specific forms are pinned
(`human-video-pronunciation.ts`), and the script is normalised for the locale
(`human-video-speech-normalization.ts`).

**An unsupported locale is a refusal, not a degradation.** A normalizer with no
rules for a language cannot silently pass the text through.

### 5. Audio approval

The creator supplies or generates the speech, hears it, and approves it
(`human-video-speech-source.ts`, `human-video-speech-preview.ts`).

- Long scripts are split on speech boundaries, not on character counts
  (`human-video-speech-splitting.ts`).
- The approved audio is what reaches the model. On OpenRouter today only the Wan
  2.7/2.6 `audio` passthrough carries it; every other family refuses
  exact-dialogue mode for want of an audio input
  (`human-video-lane-adapters.ts`).

### 6. Scene direction

The creator describes the scene and the performance, and it becomes a shot plan
(`human-video-shot-planner.ts`, `human-video-prompt-compiler.ts`).

- The plan is checked against the speech it has to carry: a shot too short for
  its line is a plan error, not a take error (`human-video-speech-fit.ts`).
- Each speech window declares a visibility. `on-camera` is the only one sync is
  scorable in, and a deliberate occlusion needs a written reason, because "the
  mouth was hidden" is what a bad take looks like too
  (`human-video-offscreen-dialogue.ts`).
- What the chosen route can and cannot honour is shown before submission
  (`human-video-shot-feasibility.ts`, `human-video-pre-submission-summary.ts`,
  `human-video-pre-generation-warnings.ts`).

### 7. Take review

Candidates are generated, evaluated, and presented.

- Candidates are bounded and traceable (`human-video-candidate-lineage.ts`,
  `human-video-candidate-ranking.ts`).
- Sync, delivered words, speaker, identity and artefacts are measured on the
  decoded frames and audio, not inferred from the provider's response
  (`182.C.17`–`182.C.20`).
- A window nobody could measure is reported as unmeasured, never as passed
  (`human-video-measurability.ts`).
- Comparison and acceptance are explicit creator actions
  (`human-video-take-comparison.ts`, `human-video-acceptance.ts`).

**No take is released on an unmeasured gate.** Fail-closed is the default
(`human-video-release-fail-closed.ts`).

### 8. Correction

A take that misses can be retried, rerouted, or sent for corrective processing
(`human-video-failure-response.ts`, `human-video-correction.ts`).

- Corrective sync is **disclosed**, never silent (`human-video-disclosure.ts`).
- Correction can damage what was already right, and that damage is measured
  rather than assumed away (`human-video-correction-damage.ts`).

### 9. Export

- The final bytes are evaluated, not the pre-encode master
  (`human-video-final-bytes-gate.ts`).
- Provenance is attached and travels with the file (`human-video-provenance.ts`,
  `human-video-provenance-transport.ts`).
- The release proof records what passed, at what version, on what bytes
  (`human-video-release-proof.ts`).
- Download and sharing are scoped (`human-video-export-controls.ts`,
  `human-video-delivery.ts`, `human-video-premature-sharing.ts`).

### 10. Deletion

- Erasure destroys what we hold (`human-video-erasure.ts`), including the face
  embeddings, which outlive the images they came from
  (`human-video-embedding-store.ts`).
- A deletion report lists what it could **not** reach — provider-side copies,
  edge caches, issued links, downloads — because a notice saying a likeness has
  been removed when it is still served is worse than no notice: it ends the
  conversation (`human-video-revocation.ts`).

## Where the flow is not a line

- **Consent sits between stages 1 and 2 and applies to every later one.**
  Withdrawal stops new submission immediately and leaves in-flight work to drain
  through evaluation (`182.C.13.08`).
- **Audio constrains direction.** Stage 5 fixes durations that stage 6 has to
  fit, so a shot plan written first will be rewritten.
- **Deletion can be entered from anywhere and completed from nowhere.** It is
  the only stage whose success is partial by construction.
- **Correction loops back into review**, and a corrected take is a new take with
  its own evidence, not an annotation on the old one.

## What a creator should not infer from this document

1. That any of it runs. See the first section.
2. That a passing take is a good take. The gates reject known failures; they do
   not certify quality, and the pass rates that would qualify that are
   `182.C.30.03`'s, measured on a corpus that does not exist.
3. That the thresholds are final. Several are exported as `PROVISIONAL` and say
   so in the code — `182.C.17.08` is the calibration that replaces them.
