Install
openclaw skills install @vargai/character-passportCast an AI video before anything moves: for every character and hero prop, a passport (one paragraph, every visible detail, pasted word for word into every prompt), a turnaround sheet in the moodboard's look, six expressions written as cause + physical tells, a measured voice line (pace in words per minute, accent, one verbal habit), and for props the materials, wear and how they move and sound. Includes anti-slop design rules, a prompt builder that refuses paraphrased passports, code routes (three.js, VRM, SVG face rig) and tested reference sites. Use for "make a character", "consistent character", "character sheet", "turnaround", "character bible", "expression sheet", "voice for my character", "prop sheet", "same person in every shot", or characters that look generic, plastic or different from shot to shot. Not for category looks (varg-character-design), real actor photos in multi-scene ads (varg-consistent-characters) or the film's look (video-moodboard).
openclaw skills install @vargai/character-passportStep 5 of 10 in How to make a video with an AI agent in ten steps. The full guide, with every test and source: https://varg.ai/how-to/design-characters-and-props-for-ai-video (as Markdown: add
.md).
Character slop comes from letting the model choose the face, the clothes and the feeling. This skill takes those choices back, one checkable line at a time, and proves each step on a still before any video is paid for.
What our test showed (Nano Banana 2.1, 2026-11-03, full write-up: https://varg.ai/how-to/design-characters-and-props-for-ai-video):
cast/<id>.md one per character and hero prop: premise, ```passport, ```voice or ```motion, never-change list
cast/<id>-sheet.png turnaround sheet (approved), plus panels/ cut by scripts/crop_sheet.py
cast/<id>-faces.png six-expression sheet (characters)
cast/<id>-voice.wav approved voice take + its voice_check.py result
cast/board.md the cast at a glance: one row per character/prop with sheet, faces, voice, status
Read moodboard.md (video-moodboard) for the look block and script.md / story.md for what each character does.
No moodboard yet: run video-moodboard first, or write a 3-line look block (light, palette, film stock) and say so.
Answer in cast/<id>.md, one line each: premise (who, in one sentence) · job and history · what they want in this
film and what stops them · one visible flaw · one BIG signature detail readable at phone size · a silhouette that reads
as a black shape · why each garment is on them (job, money, weather, era). Category looks (grandmas, big guys,
mascots, beautiful women, cartoon): open the matching varg-character-design recipe.
Rules and the slop-tell list: references/design.md.
One paragraph, fixed order: who (name, age as a number, origin, job) → height, build, posture → face top to bottom → skin → hair → clothes outer to inner, top to bottom, each with colour, material and one sign of wear → hands. Only what a camera sees; side and size for every mark (then check it: models mirror sides); no value words; no detail that hides another (a scarf over the missing button); under ~900 characters. Put it in a
### 3. Turnaround sheet in the moodboard look
Front, side, back full body (same scale, one ground line, empty hands) over three big close-ups (front,
three-quarter, profile). Light it with the film's key direction and colour temperature, the film stock's texture,
a plain backdrop in the palette's darkest tone, and a fill that keeps every feature readable. Use flat 18% grey
instead when the character moves between very different lights. Prompts: [references/sheets.md](references/sheets.md).
**Check** the sheet against the passport line by line; fix misses with an edit pass on the sheet, not a re-roll.
Cut panels: `python3 scripts/crop_sheet.py cast/<id>-sheet.png --out cast/<id>-panels`.
### 4. Six expressions (characters)
Pick six moments the film needs. Write each as **a cause in the film + physical tells** (brows, lids, mouth,
jaw, head, breath), never an adjective. Default set: listening (rest face), real laugh, anger held in, worry,
startle, contempt. Generate one 3x2 sheet with the turnaround as Image 1. Tells per emotion and what video models
get wrong: [references/acting.md](references/acting.md).
### 5. Voice line (characters who speak)
Write a ```voice block: pace in words per minute + where the pauses go · pitch and texture · accent (region,
class, first language) · one verbal habit · default emotion. Generate a test line in the character's words, then
`python3 scripts/voice_check.py take.wav --text "<line>" --target-wpm <n>`. Fix the instruction, not the target,
until it passes. Then listen for the accent: no script checks it. Details and model notes:
[references/voice.md](references/voice.md).
### 6. Props
Every object the camera lingers on or a character touches twice gets its own `cast/<id>.md`: a ```passport
(what it is, materials and finish, size, wear and where it comes from, never-change) and a ```motion block
(weight, how it moves, what it sounds like). Sheet: five views on the same backdrop, no hands, one close-up of
the wear. Attach the prop sheet as Image 2 in every shot where the prop must read: without it, the worn handle came
out right 0 of 22 times. [references/props.md](references/props.md).
### 7. Use them in every shot
Build each shot prompt with the script, so the passports go in word for word and the prompt stays under the
model's limit:
```bash
python3 scripts/prompt.py build --sheet "Vesna" --shot "Close-up, 50mm: ..." \
--cast cast/vesna.md --cast cast/umbrella.md --look moodboard.md [--video]
python3 scripts/prompt.py check prompts/*.txt --cast cast/vesna.md --cast cast/umbrella.md # before any batch
Images: the sheet (or its panels) as Image 1, prop sheet as Image 2, location master as Image 3, each named by job, plus a winner rule. Video: animate an approved still (Kling 4), or give Seedance 2.5 the face close-up and the full-body front. Model table: references/generate.md. On GPT Image 2.6 / ChatGPT: references/gpt-image.md.
Code first: scripts/face_check.py for identity, scripts/voice_check.py for pace, scripts/prompt.py check for
passports. Then AI judges on one binary criterion per call, blind, reference first, three model families, takes
ranked in pairs in both orders. Calibrate each criterion against people (scripts/judge_agreement.py) before
trusting it. Rubric, judge prompt and the biases to design against: references/judge.md.
Show cast/board.md with sheet, faces, prop sheet and the voice take's numbers. Nothing moves before a yes.
code/, routes and gotchas in references/code.md."beautiful", "perfect", "stunning", "flawless", "cinematic" in a passport · a celebrity's or a living actor's name · paraphrasing a passport between shots · props in the character's hands on the sheet · two looks on one sheet · expressions as bare adjectives · a voice without a measured take · brand names (they draw logos) · real people's faces without consent.
references/design.md: designing a specific person; the slop tellsreferences/passport.md: template, rules, filled examplesreferences/sheets.md: turnaround, expression and prop sheet prompts; moodboard vs greyreferences/acting.md: six expressions with physical tells; making emotion read as real in videoreferences/voice.md: the voice line, pace numbers, accents, verbal habits, TTS modelsreferences/props.md: prop passport, materials, wear, motion and soundreferences/generate.md: models and reference order for stills and videoreferences/gpt-image.md: GPT Image 2.6 (ChatGPT's model): settings, measured drift, fixes, promptsreferences/code.md: three.js, VRM, SVG and Blender routesreferences/reference-sites.md: tested sites for faces, costumes, props, poses and accentsreferences/people.md: who to learn from on X and in the craft, why to trust them, and red flagsreferences/x-evidence.md: 200+ techniques from X by topic, verbatim, with links and metricsreferences/craft-evidence.md: design, slop, acting, voice, prop and sheet rules from studios, research and model guides, with quotesreferences/evidence.md: the blind-judged test behind this skill (numbers, prompts, cost)references/judge.md: judging and ranking takes with AI judges: rubric, prompt, protocol, biasesreferences/judge-evidence.md: the research behind judge.md (biases with numbers, VLM failure modes, sources)references/goal-prompt.md: the whole skill as one copy-paste promptscripts/prompt.py, scripts/voice_check.py, scripts/crop_sheet.py, scripts/face_check.py (identity by face
embedding), scripts/judge_agreement.py (judge vs judge vs human: kappa, TPR, TNR)code/: tested three.js blockout turnaround, VRM expression sheet, SVG FACS face rig, PBR prop, GLB turnaround,
image-to-3D client scripts, and shoot.ts (Bun + Playwright headless renderer)examples/vesna/: the worked example (passport, voice, six expressions, umbrella, all image URLs)