Pre-spend contradiction gate for AI-video runs: checks every prompt in the batch, blocks on style / character / physics mismatch. Triggers 'validate the prompts', 'check the storyboard'.
Scanned 9/2/2026
Install to Claude Code
npx -y skills add event4u-app/agent-config --skill prompt-validator --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Prompt Validator?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/event4u-app-prompt-validator-agent-config)More formats (shields.io, HTML) on the badges page.
---
model_tier: inherit
name: prompt-validator
description: "Pre-spend contradiction gate for AI-video runs: checks every prompt in the batch, blocks on style / character / physics mismatch. Triggers 'validate the prompts', 'check the storyboard'."
personas:
- ai-video-technical-director
domain: product
workspaces:
- small-business
packs:
- ai-video
lifecycle: experimental
trust:
level: experimental
install:
default: false
removable: true
---
# prompt-validator
> Deterministic pre-spend gate: collect **every** prompt a video run is
> about to send (all scenes, all blocks), cross-check them against each
> other and against the run's locked facts (character lock, vocal map,
> model capabilities), and **block with a specific error** on
> contradiction. Skills are deterministic — the failure mode of a
> multi-scene batch is not drift, it is *contradiction*: two prompts
> that cannot both be true of the same video (AI-council convergence,
> 2026-06-06). One blocked batch costs a re-edit; one rendered
> contradiction costs the whole spend.
## When to use
- Immediately **before** the unified storyboard/cost preview gate in
[`/video:from-song`](../../commands/video/from-song.md)
Step 8 / [`/video:from-script`](../../commands/video/from-script.md) —
after every scene's eight-block prompt exists, before anything is
shown for approval or sent live.
- After an operator hand-edits scene prompts (`/video:scene` re-runs) —
re-validate the batch, not just the edited scene.
Do NOT use when:
- Only a single scene exists (nothing to contradict) — the per-scene
checks in `video-director` already cover internal consistency.
- The run is pure preview with no approval intent — validate when the
batch is about to be gated, not on every draft keystroke.
## Inputs
- `<project>/script.md` — every `## Scene N` (duration, mood, action,
camera, dialogue).
- Every rendered scene prompt (the eight-block image/video prompts from
`video-director` / blueprint JSON), in scene order.
- `<project>/character.json` — when present, the locked identity
(subject, palette, wardrobe, prop, seed).
- `<project>/vocal-map.json` — when present, the signed-off
line → singer assignments.
- The chosen model's capability entry (`capability --model <id>`).
## Procedure
### 1. Collect the full prompt set
Read every scene's prompt blocks into one table:
`scene → {style, subject, environment, action, camera, lens, lighting,
mood, duration, aspect, dialogue/singer}`. A scene whose prompt is
missing or unparseable → **block**: `scene N: prompt missing/unreadable`
— an incomplete batch is already a contradiction with the script.
### 2. Style consistency
The `style` block must agree across all scenes — one look per video
unless the script *names* an intentional break (e.g. "dream sequence").
- Conflicting render families (`photorealistic` vs `cel-shaded` /
`claymation` / `watercolor`) with no scripted break →
`style mismatch: scene 3 'photorealistic' vs scene 7 'cel-shaded'`.
- Conflicting era/grade tokens (`1970s film grain` vs `clean digital
HDR`) → same error shape, name both scenes and both tokens.
### 3. Character consistency (character mode)
With `character.json` present, every scene naming the subject must
match the lock:
- Wardrobe / palette / prop drift (`red coat` locked, scene says
`blue jacket`) → `character mismatch: scene 5 'blue jacket' vs lock
'red coat'`.
- A scene inventing a second recurring subject the script never cast →
flag it — uncast identities break continuity AND the likeness gate.
- **Lip-sync ownership:** a scene with a `dialogue:` line must name the
vocal map's singer for that line — wrong mouth on wrong words is the
render-money-burning failure (`media-sync-ground-truth`). A `"?"`
singer with a lip-sync scene → block until resolved.
### 4. Physics + continuity
- Day/night or weather flips **inside one contiguous song section**
with no scripted transition → `continuity: scene 4 'noon sun' →
scene 5 'starry night' within the same chorus`.
- Impossible camera/action pairs (`locked-off tripod` + `whip pan`),
(`underwater` + `desert dust`) → name scene + the two tokens.
- Duration / aspect vs. the model envelope: any scene outside
`[min_duration, max_duration]` or with an aspect the model does not
list → block with the violated bound (defense-in-depth after
`song-to-script` Step 1 — hand-edited prompts re-open this hole).
### 5. Verdict
- **Zero findings** → emit `prompt-validator: N scenes, no
contradictions` and hand the batch to the preview gate.
- **Any finding** → **block the gate**. Report every finding (not just
the first), each as `class: scene(s) + conflicting values + fix
hint`. The operator (or the calling command) fixes the prompts and
re-runs the validator — never "approve anyway" past a contradiction;
an intentional break gets *scripted* (named in `script.md`), which
legitimizes it on the next pass.
## Output format
1. One line per finding — `class: scene(s) + conflicting values + fix
hint` — and report **every** finding, never just the first.
2. Terminal `verdict:` line: `OK` with the scene count, or
`BLOCKED (N contradictions) — fix and re-run`; a blocked verdict
never hands the batch to the preview gate.
```
prompt-validator: 12 scenes checked
✅ style: one look (neo-noir, consistent)
❌ character: scene 5 'blue jacket' vs character.json 'red coat' — align scene 5 or update the lock
❌ lip-sync: scene 9 dialogue assigned to 'Freya' but vocal-map line 24.5-27.8 is singer '?' — resolve the singer first
verdict: BLOCKED (2 contradictions) — fix and re-run
```
## Gotchas
- **An intentional style break is scripted, not waved through.** The
validator only accepts a break that `script.md` names; "the operator
said it's fine in chat" does not survive to the next run.
- **Re-validate after every hand-edit.** A single edited scene can
contradict five untouched ones; the batch is the unit, not the scene.
- **`verified: false` capability entries still gate.** Blocking on a
documented-best-effort bound beats rendering past a real one; the
report names the unverified flag so the operator can override by
editing the manifest, never by skipping the check.
## Do NOT
- Do NOT auto-fix prompts — report and block; the fix is the
operator's (or calling skill's) edit, visible in the diff.
- Do NOT validate only changed scenes — always the full batch.
- Do NOT soften a contradiction into a warning — contradictions block;
only consistency passes.
- Do NOT duplicate `video-director`'s per-scene craft checks — this
skill owns *cross-scene* contradiction only.
## See also
- [`/video:from-song`](../../commands/video/from-song.md) —
invokes this before the unified storyboard/cost preview gate (Step 8).
- [`video-director`](../video-director/SKILL.md) — produces the prompts
this skill cross-checks.
- [`character-consistency`](../character-consistency/SKILL.md) — the
lock this skill enforces against.
- [`song-to-script`](../song-to-script/SKILL.md) — upstream timing +
vocal-map source.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!