diff --git a/skills/core/character-architect/SKILL.md b/skills/core/character-architect/SKILL.md index efa06e6..3018343 100644 --- a/skills/core/character-architect/SKILL.md +++ b/skills/core/character-architect/SKILL.md @@ -1,195 +1,103 @@ -# Character Architect Skill +--- +name: character-architect +description: "Develops psychologically coherent characters with want/need/lie profiles, distinct voice fingerprints, a scored relationship matrix, and image-generation-ready visual descriptions. Produces CHARACTER_SHEETS, RELATIONSHIP_MAP.json, and CAST_LIST.md. Use when LOGLINE_LOCK.md is approved and characters need to be developed before story structure." +--- -## Purpose -Develop deep, psychologically coherent characters with distinct voices, trackable relationships, and image-generation-ready visual descriptions. +# Character Architect -## Trigger -LOGLINE_LOCK.md exists and is approved. +Develop deep, psychologically coherent characters with distinct voices, trackable relationships, and image-generation-ready visual descriptions. Each character drives conflict through their psychology, not just their plot function. -## Inputs Required -- `CREATIVE_BRIEF.md` -- `POWER_STACK.md` -- `LOGLINE_LOCK.md` +## Inputs -## Outputs Produced -- `CHARACTER_SHEETS/{NAME}.md` - Individual character profiles -- `RELATIONSHIP_MAP.json` - Machine-readable relationship matrix -- `CAST_LIST.md` - Summary of all characters +- `CREATIVE_BRIEF.md` — genre, protagonist, key relationship, aesthetic keywords +- `POWER_STACK.md` — story structure framework +- `LOGLINE_LOCK.md` — approved logline with protagonist flaw and stakes -## Process - -### Step 1: Identify Required Characters +## Outputs -From CREATIVE_BRIEF.md and LOGLINE_LOCK.md, identify: +- `CHARACTER_SHEETS/{NAME}.md` — individual character profiles (identity, psychology, visual, voice, arc) +- `RELATIONSHIP_MAP.json` — machine-readable relationship matrix with 5 axes per pair +- `CAST_LIST.md` — summary of all characters with roles and tiers -**Tier 1 - Must Have (Pilot)**: -- Protagonist -- Key relationship character (from brief) -- Primary antagonist or obstacle character +## Process -**Tier 2 - Series Regulars**: -- Supporting cast needed for series engine -- Additional relationship dynamics -- Typically 3-5 additional characters +### Step 1: Identify Required Characters -**Tier 3 - Recurring**: -- Characters who appear in multiple episodes -- World-building characters -- Define as needed +Extract character requirements from `CREATIVE_BRIEF.md` and `LOGLINE_LOCK.md`: -### Step 2: Build Protagonist First +| Tier | Scope | Characters | +|------|-------|------------| +| 1 — Must Have (Pilot) | Protagonist, key relationship character, primary antagonist/obstacle | 3 | +| 2 — Series Regulars | Supporting cast for series engine + relationship dynamics | 3–5 | +| 3 — Recurring | World-building, multi-episode characters | As needed | -Complete the full CHARACTER_SHEET template for the protagonist. +### Step 2: Build Protagonist -**Critical Sections**: +Complete the full CHARACTER_SHEET template with these critical sections: -#### Psychology Deep Dive -1. **Want**: What they consciously pursue -2. **Need**: What they actually require (unconscious) -3. **Lie**: The false belief that blocks them -4. **Wound**: The origin event of the lie -5. **Ghost**: How the wound manifests daily -6. **Virtue with Cost**: Their strength that also causes problems +**Psychology Deep Dive:** +1. **Want** — what they consciously pursue +2. **Need** — what they actually require (unconscious) +3. **Lie** — the false belief that blocks them +4. **Wound** — the origin event of the lie +5. **Ghost** — how the wound manifests daily +6. **Virtue with Cost** — their strength that also causes problems -#### Relationship Wiring -- How they attach to others -- What triggers their defenses -- What they never talk about -- How they show (not say) love +**Relationship Wiring:** How they attach, what triggers defenses, what they never discuss, how they show (not say) love. -#### Voice Profile -- Sentence structure patterns -- Vocabulary level and domains -- Metaphor sources -- Sarcasm/humor patterns -- What topics they avoid -- Speech patterns under stress +**Voice Profile:** Sentence length patterns, vocabulary domains, metaphor sources, sarcasm/humor levels, taboo topics, stress speech patterns. ### Step 3: Build Key Relationship Character -The character identified as "who they need most" in the brief. - -**Special Focus**: -- Why they are uniquely suited to the protagonist -- What they provide that no one else can -- Their own want/need/lie (independent arc) -- The "bond mechanism" - what draws them together -- The "pressure mechanism" - what creates conflict +The person identified as "who they need most" in the brief. Define their independent want/need/lie arc, plus the **bond mechanism** (what draws them together) and **pressure mechanism** (what creates conflict). ### Step 4: Build Remaining Cast -For each additional character: - -1. **Role Check**: What story function do they serve? - - Ally - - Antagonist - - Mentor - - Threshold Guardian - - Shapeshifter - - Trickster - - Herald - -2. **Differentiation Check**: Are they distinct from existing characters in: - - Voice - - Visual appearance - - Worldview - - Relationship to protagonist +For each additional character, verify: -3. **Arc Potential**: What change is available to them over the season? +1. **Role check** — story function (ally, antagonist, mentor, threshold guardian, shapeshifter, trickster, herald) +2. **Differentiation check** — distinct from existing characters in voice, visual, worldview, and relationship to protagonist +3. **Arc potential** — what change is available to them over the season ### Step 5: Generate Relationship Map -Create `RELATIONSHIP_MAP.json` with: +Create `RELATIONSHIP_MAP.json` with scored axes for every character pair: -For each character pair: -- **Trust** (-5 to +5): Belief in reliability/honesty -- **Respect** (-5 to +5): Admiration for competence/character -- **Dependency** (-5 to +5): Need for the other -- **Intimacy** (-5 to +5): Emotional closeness -- **Moral Alignment** (-5 to +5): Shared values - -Plus: -- **Bond Mechanism**: What connects them -- **Pressure Mechanism**: What creates conflict -- **Private Language**: Unique terms/references -- **Arc Direction**: Where the relationship is heading +- **Trust** (−5 to +5), **Respect** (−5 to +5), **Dependency** (−5 to +5), **Intimacy** (−5 to +5), **Moral Alignment** (−5 to +5) +- Plus: bond mechanism, pressure mechanism, private language, arc direction ### Step 6: Visual Description Optimization -For each character, ensure the visual description is: - -**Prompt-Ready**: -- Specific physical features (not vague) -- Age-appropriate markers -- Distinctive silhouette elements -- Signature clothing/accessories -- Color associations +Ensure each character's visual description is prompt-ready for image generation: -**Consistency-Focused**: -- Locked visual anchors (never change) -- Allowed variations (outfit changes, etc.) -- Negative prompts (what to avoid) +- Specific physical features (not vague — avoid "attractive woman") +- Distinctive silhouette elements, signature clothing/accessories, color associations +- Locked visual anchors that never change + allowed variations +- Negative prompts (what to avoid generating) ### Step 7: Voice Differentiation Test -Read sample dialogue for each character. They should be distinguishable WITHOUT dialogue tags. - -Test: Write the same line ("We need to talk about what happened.") in each character's voice. - -If voices are too similar: -- Adjust sentence length patterns -- Change vocabulary domains -- Modify directness levels -- Add unique verbal tics +Test: write the same line ("We need to talk about what happened.") in each character's voice. Characters must be distinguishable WITHOUT dialogue tags. If voices overlap, adjust sentence length, vocabulary domain, directness level, or add verbal tics. ### Step 8: Contradiction Check -Verify each character: +Verify each major character: + - [ ] Has at least one surprising trait (against type) - [ ] Causes at least one problem in the pilot (not just reactive) - [ ] Has one relationship they're actively failing - [ ] Has a secret (even if never revealed) -- [ ] Wants something in every scene they're in +- [ ] Wants something in every scene they appear in ## Quality Gate: Gate 2 -**Pass Criteria**: -- [ ] Every major character has complete want/need/lie -- [ ] Every major character causes at least one pilot problem -- [ ] Every major character has one surprising competency -- [ ] Every major character has one failing relationship -- [ ] Visual descriptions are prompt-ready -- [ ] Voices are distinguishable in blind test - -**Fail Action**: -- Identify specific gaps -- Return to relevant step -- Do not proceed to story-architect until passed - -## Character Sheet Sections - -1. **Identity**: Name, age, role, archetype -2. **Psychology**: Want/need/lie/wound/virtue -3. **Relationships**: How they connect to others -4. **Visual**: Physical description, wardrobe, props -5. **Voice**: Speech patterns, vocabulary, quirks -6. **Arc**: Where they start, where they're going -7. **Secrets**: What they hide -8. **Casting Notes**: Actor comparisons (optional) - -## Common Pitfalls - -### Avoid: -- Characters who only react, never initiate -- Visual descriptions that are generic ("attractive woman") -- Voices that all sound like the writer -- Relationships without conflict potential -- Backstory that doesn't affect present behavior -- Perfect heroes or pure villains - -### Ensure: -- Every character believes they're the hero of their own story -- Antagonists have understandable (not sympathetic) logic +**Pass**: Every major character has complete want/need/lie, causes a pilot problem, has a surprising competency, has a failing relationship, has prompt-ready visuals, and passes voice differentiation. + +**Fail**: Identify specific gaps, return to the relevant step. Do not proceed to story-architect until this gate passes. + +## Notes + +- Every character believes they are the hero of their own story — antagonists have understandable logic - Supporting characters have lives beyond the protagonist -- Physical descriptions include something memorable -- Voice profiles include what they WON'T say +- Voice profiles must include what the character WON'T say, not just what they will +- Visual descriptions feed directly into character-reference-generator — specificity here saves regeneration cycles later diff --git a/skills/core/story-intake/SKILL.md b/skills/core/story-intake/SKILL.md index 359bb04..e7c5cab 100644 --- a/skills/core/story-intake/SKILL.md +++ b/skills/core/story-intake/SKILL.md @@ -1,93 +1,88 @@ -# Story Intake Skill +--- +name: story-intake +description: "Conducts a structured 8-10 question creative interview to generate CREATIVE_BRIEF.md and POWER_STACK.md, establishing genre, protagonist psychology, key relationships, series engine, theme, tone, and visual aesthetic. Use when starting a new story project and no creative brief exists yet." +--- -## Purpose -Conduct the initial creative interview (8-10 questions) and generate foundational story documents that drive all downstream development. +# Story Intake -## Trigger -User initiates a new story project. +Conduct the initial creative interview (8–10 questions) and generate foundational story documents that drive all downstream skill execution. Sparse user input enables autonomous development across the full pipeline. -## Inputs Required -- User responses to interview questions +## Inputs -## Outputs Produced -- `CREATIVE_BRIEF.md` - Comprehensive story overview -- `POWER_STACK.md` - Story structure framework selection +- User responses to the interview questions below + +## Outputs + +- `CREATIVE_BRIEF.md` — comprehensive story overview with genre, characters, relationships, tone, and visual keywords +- `POWER_STACK.md` — selected story structure framework tailored to the genre ## Process ### Step 1: Conduct Creative Interview -Ask ONLY these questions, one at a time. Wait for each response before proceeding: - -1. **Genre & Comparisons**: "What genre is your show? Name 2 comparable shows you want to evoke, and 1 anti-comp (a show in the genre you want to avoid resembling)." +Ask exactly these 8 questions, one at a time. Wait for each response before proceeding. +1. **Genre & Comparisons**: "What genre is your show? Name 2 comparable shows you want to evoke, and 1 anti-comp (a show you want to avoid resembling)." 2. **Protagonist Duality**: "Who is your protagonist? What are they exceptionally good at, AND what personal flaw ruins their closest relationships?" - 3. **Key Relationship**: "Who does the protagonist need most in their life, and why do they push that person away?" - 4. **Series Engine**: "What's the 'engine' that generates new episode problems each week? (e.g., new cases, new clients, new missions)" - 5. **Theme Question**: "What's the central thematic question your show explores? (One sentence, framed as a question)" - -6. **Tone Guardrails**: "What are your tone boundaries? (Content rating, comedy level 1-10, violence level 1-10)" - -7. **Setting & Aesthetic**: "Describe your setting and visual aesthetic in 5-10 keywords." - +6. **Tone Guardrails**: "What are your tone boundaries? (Content rating, comedy level 1–10, violence level 1–10)" +7. **Setting & Aesthetic**: "Describe your setting and visual aesthetic in 5–10 keywords." 8. **Season Endpoint**: "By the season finale, what must be irrevocably different about your protagonist's world or relationships?" -**Optional Deep-Dive Questions** (only if answers above are thin): +**Optional deep-dive** (only if core answers are thin): - "What's a secret your protagonist keeps from everyone?" - "What would make your protagonist walk away from everything they've built?" +Do NOT ask more than 10 questions total. Do NOT ask about plot details — those come from downstream skills. + ### Step 2: Synthesize Creative Brief -Using the interview responses, generate `CREATIVE_BRIEF.md` following the template. +Generate `CREATIVE_BRIEF.md` from the interview responses. Key synthesis tasks: -Key synthesis tasks: -- Extract implicit genre conventions from comps -- Identify the core dramatic engine -- Map the protagonist's want vs. need -- Define the relationship stakes -- Establish visual/tonal identity +- Extract implicit genre conventions from the comp and anti-comp choices +- Identify the core dramatic engine that sustains episodic storytelling +- Map the protagonist's conscious want vs. unconscious need +- Define the central relationship stakes and pressure points +- Establish visual and tonal identity using the aesthetic keywords (critical for image generation downstream) ### Step 3: Select Power Stack -Based on genre and story type, recommend the appropriate story structure framework in `POWER_STACK.md`. +Based on genre and story type, generate `POWER_STACK.md` with the recommended structure framework. Default stack for relationship-driven drama: -1. 4-6 Act TV Structure + +1. 4–6 Act TV Structure (pacing, act-outs) 2. Want/Need/Lie character engine -3. Relationship Arc Matrix (5 axes) -4. Scene Design: Goal/Obstacle/Turn/Cost +3. Relationship Arc Matrix (trust, respect, dependency, intimacy, moral alignment) +4. Scene Design: Goal / Obstacle / Turn / Cost 5. Dialogue System: Subtext + Status + Private Language -6. Theme Argument +6. Theme Argument (central question for coherence) + +Adjust the stack for non-drama genres (e.g., procedural, comedy, thriller) based on the interview responses. ### Step 4: Validate Completeness -Before completing, verify: -- [ ] Genre conventions are clear +Before completing, verify all criteria are met: + +- [ ] Genre conventions are clear from comps - [ ] Protagonist has both strength AND flaw -- [ ] At least one key relationship is defined -- [ ] Series engine can generate episodes -- [ ] Theme is expressible as a question -- [ ] Tone boundaries are set -- [ ] Visual keywords exist for image generation -- [ ] Season arc has clear endpoint +- [ ] At least one key relationship is defined with bond and pressure mechanisms +- [ ] Series engine can generate distinct episode problems +- [ ] Theme is expressible as a single question +- [ ] Tone boundaries are set (rating, comedy, violence) +- [ ] Visual/aesthetic keywords exist for image generation +- [ ] Season arc has a clear, irrevocable endpoint ## Quality Gate: Gate 0 -**Pass Criteria**: -- All 8 core questions answered -- No contradictions in responses -- Sufficient detail for autonomous development +**Pass**: All 8 core questions answered, no contradictions, sufficient detail for autonomous development. -**Fail Action**: -- Ask ONE clarifying question (maximum) -- If still insufficient, note gaps in CREATIVE_BRIEF.md for later resolution +**Fail**: Ask ONE clarifying question maximum. If still insufficient, note gaps in `CREATIVE_BRIEF.md` for later resolution — do not block the pipeline. ## Notes -- Do NOT ask more than 10 questions total -- Do NOT ask about plot details - those come later -- DO capture visual/aesthetic keywords - critical for image generation -- The goal is SPARSE input that enables AUTONOMOUS development +- The goal is sparse input that enables autonomous development — resist over-questioning +- Visual/aesthetic keywords captured here directly feed character-reference-generator and location-reference-generator downstream +- This skill is the entry point for the entire pipeline; all other skills depend on its outputs diff --git a/skills/production/canon-database-manager/SKILL.md b/skills/production/canon-database-manager/SKILL.md index c9f7bb3..5cedfc1 100644 --- a/skills/production/canon-database-manager/SKILL.md +++ b/skills/production/canon-database-manager/SKILL.md @@ -1,31 +1,34 @@ -# Canon Database Manager Skill +--- +name: canon-database-manager +description: "Creates and maintains CANON_DB.json, the machine-readable source of truth for all visual generation and consistency checking. Extracts characters, locations, props, visual style, factions, and canon facts from Phase 1 story artifacts. Use when all Phase 1 artifacts pass Gate 5 and the visual production pipeline needs a structured data source." +--- -## Purpose -Create and maintain CANON_DB.json - the machine-readable source of truth that powers all visual generation and consistency checking. +# Canon Database Manager -## Trigger -All Phase 1 (story foundation) artifacts pass Gate 5. +Create and maintain `CANON_DB.json` — the machine-readable source of truth that powers all visual generation, reference creation, and consistency checking across the production pipeline. -## Inputs Required -- `CREATIVE_BRIEF.md` -- `CHARACTER_SHEETS/*.md` -- `RELATIONSHIP_MAP.json` -- `EP{{XX}}_SCENELIST.md` (all episodes) -- `SCRIPTS/SCRIPT_EP{{XX}}.md` (all episodes) -- `SHOW_BIBLE.md` +## Inputs -## Outputs Produced -- `CANON_DB.json` - Machine-readable canon database +- `CREATIVE_BRIEF.md` — aesthetic keywords and visual style +- `CHARACTER_SHEETS/*.md` — psychology, visual descriptions, voice profiles +- `RELATIONSHIP_MAP.json` — scored relationship axes +- `EP{{XX}}_SCENELIST.md` — all episode scene lists (locations, time-of-day) +- `SCRIPTS/SCRIPT_EP{{XX}}.md` — all episode scripts (action descriptions, props) +- `SHOW_BIBLE.md` — consolidated canon facts + +## Outputs + +- `CANON_DB.json` — structured database with meta, characters, locations, props, visual_style, factions, canon_facts, and continuity_log sections ## Process ### Step 1: Initialize Database Structure -Create the base CANON_DB.json with all required sections: +Create the base `CANON_DB.json`: ```json { - "meta": {}, + "meta": { "show_title": "", "version": "1.0.0", "last_updated": "", "knowledge_cutoff": "", "phase": "PRE_VISUAL" }, "characters": {}, "locations": {}, "props": {}, @@ -36,177 +39,62 @@ Create the base CANON_DB.json with all required sections: } ``` -### Step 2: Populate Meta Section - -```json -"meta": { - "show_title": "", - "version": "1.0.0", - "last_updated": "", - "knowledge_cutoff": "", - "phase": "PRE_VISUAL" -} -``` - -### Step 3: Extract Characters - -For each character in CHARACTER_SHEETS: - -1. **Create character ID**: UPPERCASE_SNAKE_CASE (e.g., "ALICE_CHEN") - -2. **Extract psychology**: - - want, need, lie, wound from character sheet - - virtue_with_cost - -3. **Extract visual data**: - - Physical description (prompt-optimized) - - Signature outfit - - Color palette - - Signature props - - Negative prompts - - Initialize empty reference_images object - -4. **Extract voice data**: - - Sentence length pattern - - Metaphor domain - - Sarcasm/directness levels - - Linguistic fingerprints - - Taboo topics - -5. **Extract relationships**: - - Convert from RELATIONSHIP_MAP.json - - Include all axes, bond/pressure mechanisms - -### Step 4: Extract Locations - -Scan all SCENELIST files for unique locations: - -1. **Create location ID**: UPPERCASE_SNAKE_CASE - -2. **Determine type**: primary / secondary / recurring / one-off - -3. **Extract visual data**: - - Description from scene headers - - Time variants needed (from scenes) - - Key areas (from action descriptions) - - Mood associations - - Initialize empty reference_images object +### Step 2: Extract Characters -4. **Define blocking rules** (if applicable): - - Standard character positions - - Key furniture/feature placement +For each character in `CHARACTER_SHEETS/`: -### Step 5: Extract Props +1. Create ID in `UPPERCASE_SNAKE_CASE` (e.g., `ALICE_CHEN`) +2. Extract psychology: want, need, lie, wound, virtue_with_cost +3. Extract visual data: physical description (prompt-optimized), signature outfit, color palette, signature props, negative prompts. Initialize empty `reference_images` object +4. Extract voice data: sentence length, metaphor domain, sarcasm/directness levels, linguistic fingerprints, taboo topics +5. Convert relationships from `RELATIONSHIP_MAP.json` with all axes and bond/pressure mechanisms -Identify signature props from CHARACTER_SHEETS and scripts: +### Step 3: Extract Locations -1. **Create prop ID**: UPPERCASE_SNAKE_CASE +Scan all `SCENELIST` files for unique locations: -2. **Define properties**: - - type: signature / functional / environmental - - owner (if character-specific) - - description - - significance - - Initialize empty reference_images object - -### Step 6: Define Visual Style - -From CREATIVE_BRIEF.md aesthetic section: - -```json -"visual_style": { - "global_aesthetic": "", - "color_grading": "", - "lighting_style": "", - "lens_language": "", - "camera_movement": "", - "shot_taxonomy": {} -} -``` - -### Step 7: Extract Factions/Groups - -If applicable, identify organizational groupings: - -- Members list (character IDs) -- Values -- Conflicts with other factions - -### Step 8: Compile Canon Facts - -List all established facts that cannot be contradicted: - -- Timeline events -- Character history facts -- World rules -- Relationship history - -### Step 9: Initialize Continuity Log - -Empty array ready for tracking changes: - -```json -"continuity_log": [ - { - "date": "", - "change": "", - "affected_artifacts": [], - "reason": "" - } -] -``` +1. Create ID in `UPPERCASE_SNAKE_CASE` +2. Determine type: primary / secondary / recurring / one-off +3. Extract visual data: description, time variants needed, key areas, mood. Initialize empty `reference_images` object +4. Define blocking rules where applicable (standard character positions, furniture placement) -### Step 10: Validate Completeness +### Step 4: Extract Props -Check that: -- [ ] All characters from CHARACTER_SHEETS are present -- [ ] All locations from SCENELISTs are present -- [ ] All relationships from RELATIONSHIP_MAP are present -- [ ] Visual descriptions are prompt-ready -- [ ] No placeholder text remains +Identify signature, functional, and environmental props from `CHARACTER_SHEETS` and scripts. Create ID, set type and owner, write description and significance, initialize empty `reference_images`. -## Schema Reference +### Step 5: Define Visual Style -See `templates/CANON_DB_schema.json` for complete JSON schema. +Populate from `CREATIVE_BRIEF.md` aesthetic section: global_aesthetic, color_grading, lighting_style, lens_language, camera_movement, and shot_taxonomy. -## Key Design Principles +### Step 6: Extract Factions, Canon Facts, and Continuity Log -### IDs -- All IDs are UPPERCASE_SNAKE_CASE -- Character IDs match first_last format -- Location IDs are descriptive but concise +- **Factions**: organizational groupings with member IDs, values, and inter-faction conflicts +- **Canon facts**: immutable timeline events, character history, world rules, relationship history +- **Continuity log**: initialized empty, grows with each update (date, change, affected_artifacts, reason) -### Visual Descriptions -- Optimized for image generation prompts -- Include specific, concrete details -- Include negative prompts (what to avoid) -- Reference images start empty, populated by generators +### Step 7: Validate Completeness -### Relationships -- Bidirectional (A→B stored under A, includes B reference) -- Axes use -5 to +5 scale -- Arc directions describe season trajectory +- [ ] All characters from `CHARACTER_SHEETS` are present +- [ ] All locations from scene lists are present +- [ ] All relationships from `RELATIONSHIP_MAP.json` are present +- [ ] Visual descriptions are prompt-ready (no placeholders) -### Extensibility -- New fields can be added -- Reference_images objects expand as images are generated -- Continuity_log grows with each update +See `templates/CANON_DB_schema.json` for the complete JSON schema. ## Update Protocol -When updating CANON_DB.json: +When updating an existing `CANON_DB.json`: 1. Read current version 2. Make targeted changes only -3. Update meta.version (semver) -4. Update meta.last_updated -5. Add entry to continuity_log +3. Increment `meta.version` (semver) +4. Update `meta.last_updated` +5. Add entry to `continuity_log` 6. Validate against schema ## Notes -- CANON_DB.json is the single source of truth for visual generation -- All reference generators read from this database -- Updates must be logged in continuity_log -- Never edit directly in scripts—use this skill -- Visual reference paths are added by generators, not this skill +- All IDs use `UPPERCASE_SNAKE_CASE`; character IDs follow `FIRST_LAST` format +- `CANON_DB.json` is the single source of truth — all reference generators read from it +- Visual reference paths are populated by downstream generator skills, not by this skill +- Never edit `CANON_DB.json` directly in scripts — always use this skill to maintain the continuity log diff --git a/skills/production/prop-reference-generator/SKILL.md b/skills/production/prop-reference-generator/SKILL.md index fde815c..5d9a0cc 100644 --- a/skills/production/prop-reference-generator/SKILL.md +++ b/skills/production/prop-reference-generator/SKILL.md @@ -1,140 +1,91 @@ -# Prop Reference Generator Skill +--- +name: prop-reference-generator +description: "Generates consistent reference images for signature props, plot-critical objects, and recurring items using CANON_DB.json data and style guidelines. Produces isolated, in-context, and detail close-up shots for each prop. Use when CANON_DB.json and STYLEGUIDE_VISUAL.md exist and prop references need to be created for visual production." +--- -## Purpose -Generate reference images for signature props and objects that need consistent appearance across shots. +# Prop Reference Generator -## Trigger -CANON_DB.json and STYLEGUIDE_VISUAL.md exist. +Generate reference images for signature props and objects that need consistent appearance across shots. Reads prop definitions from `CANON_DB.json`, applies the show's visual style from `STYLEGUIDE_VISUAL.md`, and produces a categorized reference pack for each prop. -## Inputs Required -- `CANON_DB.json` (props data) -- `STYLEGUIDE_VISUAL.md` -- `CHARACTER_SHEETS/*.md` (for signature props) +## Inputs -## Outputs Produced -- `PROP_REFS/{PROP}/refs/*.png` - Reference images -- Updated `CANON_DB.json` (reference paths added) +- `CANON_DB.json` — props section with type, owner, description, significance +- `STYLEGUIDE_VISUAL.md` — global aesthetic and style keywords +- `CHARACTER_SHEETS/*.md` — for signature prop ownership and interaction context -## Reference Types Required +## Outputs -For each signature prop: - -### 1. Isolated Object -- Clean background -- Multiple angles -- Detail visible - -### 2. In Context -- With owner/user -- In typical usage - -### 3. Detail Close-ups -- Specific important features -- Texture and material +- `PROP_REFS/{PROP}/refs/*.png` — isolated, context, and detail reference images +- Updated `CANON_DB.json` — reference image paths added to each prop entry ## Process -### Step 1: Identify Required Props +### Step 1: Identify and Prioritize Props -From CANON_DB.json and CHARACTER_SHEETS: -- Signature props (character-associated) -- Plot-critical objects -- Recurring items +Extract props from `CANON_DB.json` and `CHARACTER_SHEETS`. Assign priority: -**Priority**: -- Signature character props (high) -- Plot McGuffins (high) -- Frequently seen objects (medium) -- Background props (low - may not need refs) +| Priority | Category | Reference Scope | +|----------|----------|-----------------| +| High | Signature character props | All three reference types | +| High | Plot McGuffins | Isolated + detail | +| Medium | Frequently seen objects | Isolated + context | +| Low | Background props | Skip unless appears in close-ups | ### Step 2: Extract Prop Data -From CANON_DB.json: +Read each prop's entry from `CANON_DB.json`: + ```json { "type": "signature", "owner": "CHARACTER_ID", - "description": "...", - "significance": "..." + "description": "Worn leather-bound notebook, frayed bookmark", + "significance": "Contains all case notes, never out of sight" } ``` ### Step 3: Generate Isolated Reference -Load prompt template: -``` -prompts/isolated_prop.txt -``` +Load `prompts/isolated_prop.txt` and substitute variables. Generate a clean studio shot: -Create clean object shot: -- White/neutral background -- Multiple angles if possible -- Clear detail visibility +- White or neutral background +- Multiple angles where possible +- Full detail visibility, material texture clear -Save as `refs/{prop}_isolated.png` +**Prompt template example:** +``` +{{PROP_DESCRIPTION}}, product photography style, clean white background, +studio lighting, multiple angles visible, high detail, +{{MATERIAL_DESCRIPTION}}, {{STYLE_KEYWORDS}} -### Step 4: Generate Context Shots +Negative: people, hands, cluttered background, shadows, low detail +``` -Show prop in typical use: -- With character (if signature prop) -- In typical environment -- Natural interaction +Save as `refs/{prop}_isolated.png`. -Use character reference as input for consistency. +### Step 4: Generate Context Shots -Save as `refs/{prop}_context.png` +Show the prop in typical use — with its owner character (using character reference images for consistency) in a natural environment. Save as `refs/{prop}_context.png`. ### Step 5: Generate Detail Shots -For important props: -- Close-up of distinctive features -- Texture/material clarity -- Any text/markings - -Save as `refs/{prop}_detail.png` +For high-priority props, generate close-ups of distinctive features: texture, material, markings, text. Save as `refs/{prop}_detail.png`. ### Step 6: Update CANON_DB -Add reference paths: +Add generated reference paths to each prop entry: + ```json "reference_images": { "isolated": "PROP_REFS/ALICE_NOTEBOOK/refs/notebook_isolated.png", "in_hand": "PROP_REFS/ALICE_NOTEBOOK/refs/notebook_hand.png", - ... + "detail": "PROP_REFS/ALICE_NOTEBOOK/refs/notebook_detail.png" } ``` -## Prompt Template - -### prompts/isolated_prop.txt - -``` -{{PROP_DESCRIPTION}}, product photography style, clean white background, studio lighting, multiple angles visible, high detail, {{MATERIAL_DESCRIPTION}}, {{STYLE_KEYWORDS}} - -Negative: people, hands, cluttered background, shadows, low detail -``` - -## Prop Categories - -### SIGNATURE PROPS -Items associated with specific characters. -- Generate all reference types -- Include character interaction shots - -### PLOT PROPS -Items critical to story. -- Generate isolated + detail -- Ensure distinctive features are clear - -### ENVIRONMENT PROPS -Items that define locations. -- May only need establishing shot inclusion -- Generate if appears in close-ups - ## Notes -- Signature props get full treatment -- Plot props need distinctive features visible -- Background props may not need dedicated references -- Use character references when generating interaction shots -- Props should match show's visual style +- Signature props get full treatment (all three reference types) +- Use character reference images when generating interaction shots for consistency +- Props must match the show's locked visual style — apply `STYLEGUIDE_VISUAL.md` keywords +- Background props rarely need dedicated references unless they appear in insert shots diff --git a/skills/production/visual-continuity-validator/SKILL.md b/skills/production/visual-continuity-validator/SKILL.md index fc6b62e..55c6d75 100644 --- a/skills/production/visual-continuity-validator/SKILL.md +++ b/skills/production/visual-continuity-validator/SKILL.md @@ -1,267 +1,94 @@ -# Visual Continuity Validator Skill +--- +name: visual-continuity-validator +description: "Validates visual consistency across all shots in an episode by analyzing character, location, scene, and style continuity threads. Detects progressive, sudden, and pattern drift and generates a prioritized correction report. Use when shot quality validation is complete for an episode and cross-shot consistency needs verification." +--- -## Purpose -Check visual consistency across all shots in an episode, identifying drift patterns and enforcing visual canon. +# Visual Continuity Validator -## Trigger -Shot quality validation complete for episode. +Check visual consistency across all shots in an episode, identifying drift patterns and enforcing visual canon. Produces a prioritized report with regeneration recommendations. -## Inputs Required -- `SHOTS_EP{{XX}}/*.png` - All episode shots -- `SHOT_LIST_EP{{XX}}.json` - Shot specifications -- `SHOT_QA_REPORT_EP{{XX}}.md` - Individual shot QA -- `CANON_DB.json` - Visual canon -- `CHARACTER_REFS/*/refs/*.png` - Reference images +## Inputs -## Outputs Produced -- `VISUAL_CONTINUITY_REPORT_EP{{XX}}.md` -- Drift alerts and correction recommendations +- `SHOTS_EP{{XX}}/*.png` — all generated episode shots +- `SHOT_LIST_EP{{XX}}.json` — shot specifications with character/location references +- `SHOT_QA_REPORT_EP{{XX}}.md` — individual shot QA results +- `CANON_DB.json` — visual canon (locked descriptions, negative prompts) +- `CHARACTER_REFS/*/refs/*.png` — character reference images -## Continuity Dimensions +## Outputs -### 1. Character Continuity -- Same character looks consistent across all appearances -- Outfit consistency within scenes -- Expression/pose progression makes sense - -### 2. Location Continuity -- Same location looks consistent across all shots -- Time-of-day matches within scenes -- Props/furniture don't move unexpectedly - -### 3. Scene Continuity -- Shots within a scene are visually cohesive -- Lighting consistent within scene -- Color grading consistent - -### 4. Style Continuity -- Overall aesthetic maintained -- Color palette consistent -- Mood appropriate throughout +- `VISUAL_CONTINUITY_REPORT_EP{{XX}}.md` — scored report with drift alerts and correction recommendations ## Process -### Step 1: Group Shots +### Step 1: Group Shots into Threads -Organize shots by: -- Scene (same location, continuous time) -- Character (all appearances of each character) -- Location (all shots at each location) +Organize all episode shots into three analysis threads: + +- **Scene thread**: shots sharing location + continuous time +- **Character thread**: all appearances of each character across the episode +- **Location thread**: all shots at each location regardless of scene ### Step 2: Character Thread Analysis -For each character: -1. Collect all shots featuring character -2. Compare character appearance across shots -3. Identify drift patterns -4. Flag significant inconsistencies +For each character, collect all shots and compare sequentially: + +| Check | Within Scene | Across Scenes (Same Day) | Across Episode | +|-------|-------------|-------------------------|----------------| +| Face features | Identical | Consistent | Recognizable | +| Hair | Identical | Consistent | Consistent | +| Outfit | Identical | Can change if justified | Flexible | +| Body proportions | Identical | Consistent | Consistent | -**Check Points**: -- Face consistency -- Hair consistency -- Outfit consistency (within same scene) -- Body proportions -- Age appearance +Flag inconsistencies as drift events with shot IDs and severity. ### Step 3: Scene Thread Analysis -For each scene: -1. Collect all shots in scene -2. Verify temporal continuity -3. Check spatial consistency -4. Validate lighting continuity +For each scene, verify internal cohesion: -**Check Points**: -- Lighting angle doesn't jump -- Props don't move unexpectedly -- Character positions make sense -- Background consistent +- Lighting angle and color temperature stay consistent between shots +- Props and furniture maintain position (no unexplained movement) +- Character spatial positions follow logical blocking +- Background elements remain stable ### Step 4: Location Thread Analysis -For each location: -1. Collect all shots at location -2. Compare architectural elements -3. Verify key features present -4. Check time-of-day consistency - -**Check Points**: -- Key architectural features -- Furniture/prop placement -- Window positions -- Color of walls/surfaces +For each location appearing in multiple scenes, compare architectural elements, key features (windows, furniture), and wall/surface colors across all shots. Verify time-of-day rendering matches the shot list specifications. ### Step 5: Drift Detection -Calculate drift metrics: - -**Progressive Drift**: -- Character slowly changes over episode -- Detected by comparing first vs. last appearance - -**Sudden Drift**: -- Abrupt change between adjacent shots -- Detected by sequential comparison +Classify detected issues into three drift types: -**Pattern Drift**: -- Consistent error across multiple shots -- Detected by comparing against reference +- **Progressive drift**: character or location slowly changes over the episode (compare first vs. last appearance) +- **Sudden drift**: abrupt change between adjacent shots (sequential comparison) +- **Pattern drift**: consistent error across multiple shots (compare against locked reference images) ### Step 6: Generate Report -```markdown -# Visual Continuity Report: EP{{XX}} - -## Summary -- Overall Continuity Score: {{0-100}} -- Characters: {{SCORE}} -- Locations: {{SCORE}} -- Scenes: {{SCORE}} -- Style: {{SCORE}} - -## Critical Issues - -### Character Drift: {{CHARACTER}} -- First appearance: SC01_SH03 -- Drift detected: SC05_SH02 onward -- Issue: Hair color shifted darker -- Action: Regenerate SC05+ with corrected refs - -## Scene Continuity Issues - -### Scene 03 -- Shots affected: SH04, SH06 -- Issue: Lighting angle inconsistent -- Action: Regenerate with matched lighting - -## Drift Patterns - -### {{CHARACTER}} Over Episode -[Visual timeline or scores showing consistency] - -### {{LOCATION}} Across Scenes -[Visual timeline or scores] - -## Recommendations - -### High Priority -1. Regenerate shots: [list] -2. Update references: [if refs are causing drift] - -### Medium Priority -1. Review and potentially regenerate: [list] - -### Acceptable Variance -[List of minor issues that don't require action] -``` - -### Step 7: Prioritize Corrections - -Rank issues by: -1. **Critical**: Breaks story clarity -2. **High**: Noticeable distraction -3. **Medium**: Visible but not distracting -4. **Low**: Minor, acceptable variance - -### Step 8: Update Canon if Needed - -If generated shots are consistently better than references: -- Flag for reference-library-updater -- Document what works better - -## Continuity Rules - -### Within Scene (STRICT) -- Characters must look identical -- Outfits cannot change -- Props cannot move -- Lighting must match - -### Across Scenes, Same Day (MODERATE) -- Characters should look consistent -- Outfits can change if justified -- Minor lighting variation acceptable - -### Across Episode (FLEXIBLE) -- Characters recognizable -- Style consistent -- Overall aesthetic maintained - -## Common Continuity Errors - -### Character Issues -- Face features drifting -- Hair changing -- Age appearing different -- Outfit changing mid-scene - -### Location Issues -- Architecture changing -- Props moving -- Lighting direction flipping -- Color of surfaces changing - -### Scene Issues -- Shot-to-shot jumps -- Lighting inconsistency -- Color grading shifts - -## End-of-Clip Continuity Review (Video Production) - -When generating video clips, continuity must be validated BETWEEN clips, not just within shots. - -### Workflow - -``` -Generate Clip N → Extract Last Frame → Claude Reviews → Decision: - ├─ Continue to Clip N+1 (if continuity is good) - ├─ Generate Bridge Clip (if gap needs bridging) - └─ Generate New Frame(s) → New Bridge Clip (for exceptional continuity) -``` - -### Review Process - -After each clip is generated: - -1. **Extract last frame** using ffmpeg: - ```bash - ffmpeg -sseof -1 -i clip.mp4 -update 1 -q:v 2 last_frame.png - ``` +Write `VISUAL_CONTINUITY_REPORT_EP{{XX}}.md` with: -2. **Claude reviews** the extracted frame: - - What is the character's position/state/expression? - - Does this flow naturally into the next clip's requirements? - - Are there any continuity breaks? +- **Summary scores** (0–100) for overall continuity, characters, locations, scenes, and style +- **Critical issues** with affected shot IDs, description, and recommended action (regenerate, update refs) +- **Drift patterns** showing each character/location's consistency timeline +- **Prioritized corrections**: Critical (breaks story clarity) → High (noticeable distraction) → Medium (visible but not distracting) → Low (acceptable variance) -3. **Decision**: - - **Continue**: Last frame flows naturally into next clip's start frame - - **Bridge needed**: Gap exists but can be bridged with additional video - - **New frames needed**: Generate supporting frame(s) using Nano Banana Pro +### Step 7: Flag Reference Updates -### Bridge Clip Strategy +If generated shots are consistently better than references, flag those improvements for the reference-library-updater skill to incorporate. -When a bridge clip is needed: +## End-of-Clip Continuity (Video Production) -1. Use extracted last frame as start frame (strategy: `last_frame`) -2. Write prompts that transition FROM the current state TO the next clip's expected state -3. Keep prompts START FRAME AWARE - describe continuation, not contradiction +When validating video clips (not just still shots), continuity must also be checked BETWEEN clips: -### Continuity Decision Criteria +1. Extract last frame: `ffmpeg -sseof -1 -i clip.mp4 -update 1 -q:v 2 last_frame.png` +2. Review the extracted frame for character position, state, and expression +3. Decide: **Continue** (flows naturally) → **Bridge clip** (gap needs transitional video) → **New start frame** (new location or major change) -| Scenario | Decision | -|----------|----------| -| Character in same position, same framing | Continue | -| Character in similar position, different framing | Continue (cut handles it) | -| Character needs to move to new position | Bridge clip | -| Significant time/action gap | Bridge clip | -| New location | New generated start frame | +Bridge clips use the extracted last frame as their start frame and prompt a transition TO the next clip's expected state. ## Notes -- Perfect continuity is impossible with current tech -- Focus on maintaining character recognition -- Location minor drift is less noticeable -- Scene boundaries can hide more variance -- Some drift is acceptable if not distracting -- Progressive drift is harder to catch than sudden -- **End-of-clip review is essential for video production** +- Perfect continuity is impossible with current AI generation — focus on character recognition and scene-level cohesion +- Progressive drift is harder to catch than sudden drift; always compare first vs. last appearance +- Scene boundaries naturally hide more variance than within-scene cuts +- Strict continuity rules apply within scenes; flexibility increases across scenes and across the episode