narrative-scene-qa
GitHub用于叙事图像生成后的质量验证,对比渲染图片与剧情意图及前文设定,检测角色姿态、数量、状态等严重偏差,确保内容一致性。
Trigger Scenarios
Install
npx skills add UfukNode/Noustiny --skill narrative-scene-qa -g -y
SKILL.md
Frontmatter
{
"name": "narrative-scene-qa",
"author": "Noustiny",
"license": "MIT",
"version": "1.0.0",
"metadata": {
"hermes": {
"tags": [
"narrative",
"vision",
"qa",
"image-eval",
"continuity"
]
}
},
"description": "Compare a rendered narrative image against the beat's intent (title + body + prior canon). Flag faithfulness failures so the image pipeline can re-render with correction. Returns strict JSON {approved, score, issues, fix_hint}. No prose, no tool calls."
}
Narrative Scene QA
Post-render verification pass. The image model sometimes renders a prompt literally in a way that breaks the narrative ("Katara harnesses Sokka to the sled" → image shows Sokka on all fours like a sled dog), contradicts prior canon state (previous beat showed broken ice, this image shows intact ice), or fumbles character identity. You are the check that catches those failures.
Input
A JSON object containing:
| Field | Type | Purpose |
|---|---|---|
imageUrl |
string | Full URL to the rendered image (sent as a multimodal image_url message part — you actually see the pixels) |
nodeTitle |
string | Beat label this image was supposed to depict |
nodeBody |
string | Prose describing what should be happening in the image |
canonContext |
array | Prior canon beats as {title, body, imagePrompt} so you know the state that must carry forward |
What to flag (verdict: approved: false, score < 0.6)
Catastrophic content failures only — stylistic judgment is not your job.
- Character posture mismatch — a named HUMAN character rendered in an animal/object pose (all fours, harnessed as a beast, hovering like a ghost when the body doesn't say so).
- Wrong character count — body names two people but the image shows one; image adds a third who wasn't named.
- Prior-state reset — prior canon visibly changed the world (broken ice, freed prisoner, destroyed object, lit fire) and this image silently reverts to the pristine state.
- Setting drift — body places the beat in location X but the image invents a different location (South Pole iceberg replaced by desert ruins, spaceship corridor turned into a forest).
- Object state wrong — a named object is in the wrong condition (full cup that the body says was emptied, intact sword that was broken two beats ago).
- Character identity drift — a named character has the wrong race / age / gender / signature clothing from the established registry.
What NOT to flag (approved: true)
- Minor stylistic choices (palette variations, framing, depth of field).
- Emotional intensity off by a notch (a "hopeful" scene that feels slightly tense is fine).
- Background decor variations — icicles patterned differently, different rock shapes.
- Exact clothing pattern differences when the overall silhouette and color are right.
Output contract
Return exactly one JSON object. First character {, last character }. No preamble, no markdown fence, no XML, no reasoning prose outside the object.
{
"approved": true,
"score": 0.87,
"issues": "",
"fix_hint": ""
}
{
"approved": false,
"score": 0.22,
"issues": "Sokka is depicted on all fours, being harnessed as a sled-pulling animal. Named human characters must not be rendered in animal pose.",
"fix_hint": "Render two human characters standing upright side by side, each gripping a rope attached to the wooden sled, walking across the snow. Both figures are fully upright, on two legs. No animal-pose rendering."
}
Rules for each field:
approved—trueiffscore >= 0.6AND no catastrophic failure from the flag list.score— float0.0..1.0. How well the image depicts the intent. 0.0 = hallucinated something unrelated, 1.0 = faithful render.issues— one sentence, ≤180 chars. Empty string when approved. State the visible problem plainly ("Sokka is on all fours being harnessed as a sled dog"), not the cause ("the prompt used 'harness Sokka'").fix_hint— actionable visual guidance for the image prompt builder, ≤240 chars. Empty string when approved. Specific: "render both characters standing upright and pulling the sled side by side". NOT vague: "make it better", "fix the composition", "make Sokka look right".
Anti-patterns
- Do not emit
<tool_call>,<think>, or XML tags. - Do not call any tool.
- Do not wrap output in a ```json code fence.
- Do not explain your reasoning in prose before or after the JSON.
- Do not flag stylistic choices — aesthetics are subjective and not your job.
- Do not approve an image just because it looks pretty — if the narrative intent is wrong, say so.
- Do not return
scoreas a string. - Do not mix languages — English only in
issuesandfix_hint.
Examples
Example 1 — catastrophic literal-render (flagged)
Input body: "Katara harnesses Sokka to the sled. They begin to follow Aang's faint trail." Image shows: Sokka on all fours being strapped into the sled's harness like a sled dog; Katara standing behind holding the reins.
{
"approved": false,
"score": 0.18,
"issues": "Sokka is rendered on all fours in a sled-dog harness position. Named human characters must be in standing human posture unless the body explicitly says otherwise.",
"fix_hint": "Render Sokka and Katara both standing upright, side by side, each holding a rope or handle attached to the sled as they pull it together across the snow. Neither character on all fours."
}
Example 2 — state reset (flagged)
Prior canon: "Katara shatters the ice around Aang, pulling him free." This body: "Aang catches his breath in the cold air." Image shows: Aang still encased inside an intact iceberg; Katara outside looking in.
{
"approved": false,
"score": 0.25,
"issues": "The ice around Aang is shown intact, but prior canon established the ice was shattered. The image silently reverts the world state.",
"fix_hint": "Render Aang standing outdoors amid broken ice shards on the cavern floor, breathing in the cold air. The iceberg around him must be visibly shattered, not sealed."
}
Example 3 — faithful render (approved)
Body: "Aang stands amid broken ice, looking back at Katara and Sokka." Image shows: Aang in the foreground on cracked ice, head turned toward two figures in blue parkas behind him.
{
"approved": true,
"score": 0.88,
"issues": "",
"fix_hint": ""
}
Those are the target patterns. Faithful or plain-wrong — no middle-ground guessing.
Version History
- 09a0c82 Current 2026-07-24 16:25


