Storyboarding beat generator
Skill quicksketcherz/learn-teach-storyboarding-scenes-skill/skills/storyboarding-beat-generator
Generate single storyboard beats or short beat sequences for storyboarding practice in the Storyboarding as Choreography curriculum. Outputs a present-tense action line and a shift annotation — the smallest narrative unit a storyboard panel resolves. Use this whenever Johno asks for a beat, a sketching prompt, a scene moment, a panel prompt, or a starting point to sketch from — across Phase 1 (Observation), Phase 2 (Constraint Sketching), Phase 3 (Break Genre), or Phase 4 (Intention First). Trigger on phrases like "let's make a story beat", "give me a beat", "seed a sketch", "prompt for today's session", "beat for Phase 1/2/3/4", "story beat", "panel prompt", "scene moment for sketching", "generate a starting point", or any request to seed a sketching exercise with a beat to draw from.From its SKILL.md
npx -y skills add quicksketcherz/learn-teach-storyboarding-scenes-skill --skill storyboarding-beat-generatorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
30.0 KB, ~6.9k tokens by cl100k_base, as published. Nobody here has run it
Storyboarding Beat Generator
A reusable beat generator for the Storyboarding as Choreography curriculum. Produces a single storyboard beat — the smallest narrative unit a panel resolves — framed for sketching, not for screenwriting.
The skill positions itself as a collaborative screenwriter: it writes the page, you (and your sketching partner) edit it. The generated beat reads cleanly first; refinement comes after.
What a beat is here
The unit smaller than a scene and smaller than a screenwriter's beat. A screenwriter's beat is a narrative shift ("Lionel walks up, the car horn sounds, Claire arrives"). A storyboard beat in this skill's sense is one moment within that shift — the frame where the staging earns the feeling.
A well-formed beat has two parts:
- The image — 1–3 lines of present-tense action-line prose, presented in a screenplay-style action block. Only what can be seen and heard. No internal thoughts, no "she feels."
- The shift — a single-line annotation naming what changes between the start and end of the moment. The shift is a margin note, not a tagline. It belongs to the same tradition as ekonte left-column annotations, screenplay margin notes, and a storyboard artist's scribble next to a panel. It is the thinking about the frame, sitting next to the frame. It should never drift toward summary, caption, or punchline.
That's it. Composition, framing, and camera are the participant's job — the skill should not prescribe them by default.
How the skill behaves on trigger
Generate immediately. Don't ask questions first. Roll random defaults across the parameters and produce a beat in the default output format. Show the user which defaults rolled, so they can course-correct. Then offer the refine menu.
This is the "collaborative screenwriter" pattern. The page reads first; the editorial conversation happens after.
Pattern on first trigger
Rolling random defaults:
- Scale: [single panel / mini-sequence]
- Emotional register: [register]
- Genre: [single genre / hybrid (genre × genre)] [(sub-tag: X) ← only if a sub-tag rolled]
- Era tint: [contemporary (default — line omitted) / historical-X / near-future / far-future]
- Commitment level: [light tint / full commitment]
- Constraint modifier: [none / named constraint]
[Beat output in the output format]
[Refine menu via input UI]
When era tint = contemporary, omit that line entirely (contemporary is the silent default — only surface era when it's doing work). Same for sub-tag: only show when one rolled.
Output format
Default output is lean — image + shift, nothing else. The look-and-feel borrows from screenplay typography (fixed-width feel for the action block) but does not force full screenplay format (no slugline, no character cues unless dialogue is actually in the beat).
Single panel:
```
[1–3 lines of present-tense action-line prose.
Visible and audible only. Fixed-width feel —
borrow the rhythm of a screenplay action block.]
```
> **Shift:** [one-line margin note — what changes between the start and end of the beat]
Mini-sequence (3–5 panels):
**Panel 1**
```
[image]
```
> **Shift:** [shift]
**Panel 2**
```
[image]
```
> **Shift:** [shift]
...
The fenced code block carries the screenplay-action-block feel (fixed-width, page-like). The blockquote carries the margin-note feel for the shift. Together they evoke a screenplay page being marked up by a director — without pretending to be one.
Runtime parameters
| Parameter | What it controls | Default behaviour |
|---|---|---|
| Scale | Single panel or mini-sequence (3–5 panels for the ekonte page) | Roll random — single more often than sequence |
| Emotional register | The tone the beat should carry (dread, tenderness, awe, restrained anger, anticipation tipping into disappointment, etc.) | Roll random from a broad register pool |
| Genre | The genre tint the beat sits in. Pool of 17 (see below). | Roll random from the genre pool. ~20% of rolls produce a hybrid (two genres combined, e.g. sci-fi × fantasy, horror × romance, noir × western). Some genres carry sub-tags (cyberpunk under sci-fi, folk horror under horror, etc.) — when the parent rolls, the sub-tag rolls ~25% of the time. |
| Era tint | Orthogonal time-period axis that stacks on top of genre. Most rolls are contemporary (default, silent). Occasional rolls land a non-contemporary era — historical periods or futures — which combine with whatever genre rolled. | Roll random with low rate: ~85% contemporary, ~15% non-contemporary spread across the era pool (see below). |
| Commitment level | How visible the genre cue is in the action lines. Light tint: a hum from a vent, a hilt at the hip, a curse half-spoken — genre present but peripheral. Full commitment: the airlock, the dragon's shadow, the duel on the ridge — genre is the event. | Roll random — roughly 60% light tint, 40% full commitment. Light is more sketchable and avoids "too grand." |
| Constraint modifier | Optional. One composition rule the beat must accommodate (low angle, no faces, single light source, BG carries meaning, one static camera, negative space dominant) | Default to none. Only used when the user asks. |
Genre, era, and commitment — design notes
Why genre is its own parameter. Without it, the generator drifts to prestige-drama domestic interiors by default — restrained gestures, kitchen tables, doorways. That register is good but narrow. Genre as a rolled parameter forces the generator out of that gravity well.
Genre × emotional register is the productive pairing. "Awe + sci-fi" is different from "awe + fantasy" is different from "awe + noir." The emotional register anchors the beat; the genre tints the world it sits in. Always roll both.
Genre pool (17)
The pool reflects what Johno actually encounters across professional storyboarding work, not a neat critical taxonomy.
| # | Genre | Beat-shape note |
|---|---|---|
| 1 | Drama | Restrained gesture, domestic interior, internal stakes externalised. |
| 2 | Sci-fi | Future tech, anomaly, system-under-strain. Sub-tag available. |
| 3 | Action-adventure | Mobile bodies, terrain, stakes that move. |
| 4 | Fantasy | Made worlds, magic logic, threshold-crossings. Sub-tags available. |
| 5 | Horror | Dread accumulation, the thing-not-quite-seen. Sub-tag available. |
| 6 | Thriller | Time pressure, surveillance, peril without violence yet. |
| 7 | Noir | Moral register more than visual one. Doubt, compromise, smoke. |
| 8 | Western | Open space, code, the line between civilization and not. |
| 9 | Romance | Attention as the event. Eyes, hands, room geometry. |
| 10 | Comedy | Timing, mismatch, dignity-on-the-edge. Sub-tags available. |
| 11 | Mystery | Clue logic. Beats often resolve on a noticing, not an action. |
| 12 | Crime / heist | Planning mode. Tools, maps, the rehearsal before the act. |
| 13 | War | Procedural, weighty, command-and-comply. Distinct from action-adventure. |
| 14 | Coming-of-age | Threshold-crossings at small scale. Bedrooms, hallways, first jobs. |
| 15 | Survival | Resource logic. Weather, water, the count-down body. |
| 16 | Post-apocalyptic | Inhabited ruin. Time-after rules. Distinct visual grammar from sci-fi. |
| 17 | Magical realism | The everyday with one impossible thing. Distinct from fantasy — no world rebuild. |
Sub-tags
Some genres carry sub-tags. When the parent rolls, the sub-tag rolls ~25% of the time (so most rolls of "sci-fi" stay general; one in four lands a sub-tag). Show the sub-tag in parentheses on the rolled-defaults line.
| Parent | Sub-tags |
|---|---|
| Sci-fi | cyberpunk |
| Fantasy | epic fantasy, urban fantasy |
| Horror | folk horror |
| Comedy | screwball, dark comedy |
The sub-tag list is intentionally short — these are sub-genres with strong, distinct visual grammar. Other sub-genres exist (cosmic horror, slasher, body horror, etc.) but until they earn calibration examples here, they aren't part of the roll.
Era tint (orthogonal axis)
Era tint is not a genre. It's a time-period overlay that stacks on top of whatever genre rolled. Most rolls are contemporary (silent default). The non-contemporary slice is spread across:
- Historical: ancient, medieval, early-modern, Edo, Victorian, WWI–WWII, mid-century
- Future: near-future, far-future
When era tint rolls non-contemporary, it combines with the genre cleanly: "noir × historical-mid-century" (a 1950s diner phone booth), "fantasy × historical-Edo" (a torch-lit corridor in a feudal keep), "romance × near-future" (a first date through translation earpieces).
Era tint is a flavour event, not a default — keep the contemporary majority. If the rolled era is doing nothing for the beat, drop it.
Hybrid genres
Roughly 1 in 5 rolls combines two genres (e.g. sci-fi × fantasy, horror × romance, western × noir, comedy × action-adventure). Hybrids are not equal-weighted blends — pick one as the world and the other as the intrusion. A horror × romance beat is a romance world with a horror intrusion (a candle in a wine glass, smoke rising sideways), not a horror world with a romantic subplot.
Commitment level
Commitment level matters more than people think. The instinct on hearing "sci-fi" is to reach for the starship. But a sci-fi beat can be a server light blinking once in an empty server room, or a thumbprint smudge on a glass console. That's light tint — and it's almost always more sketchable than full commitment. Default to mostly light. Full commitment is reserved for beats that want to be a big composition (the airlock, the gate of the keep, the kaiju on the horizon).
Anti-grandness rule. If a rolled combination is pulling toward spectacle, prefer the smaller frame: a sentry's bored shift on the wall over the army at the gate; a single magic-light flicker on a tavern table over the wizard's duel. The participant has to be able to sketch it in five minutes.
Ratios (current — tunable)
| Roll | Rate |
|---|---|
| Hybrid genre | ~20% |
| Sub-tag (when parent has one) | ~25% |
| Non-contemporary era tint | ~15% |
| Light tint vs full commitment | ~60% / 40% |
These ratios are first-pass; adjust as live rolls reveal what feels right.
Register shapes (single, tip-compound, tension-compound)
The register pool implicitly contains three shapes — name them so the roll uses all three deliberately.
- Single register — one emotional note ("dread," "awe," "restrained anger"). The beat stages that note arriving, holding, or being interrupted. Most rolls.
- Tip-compound — two notes connected by a directional arrow ("anticipation tipping into disappointment," "relief tipping into suspicion"). The beat's job is to stage the tip — the frame where the first note becomes the second. The shift annotation usually names the tipping moment.
- Tension-compound — two notes held simultaneously in tension ("tenderness with hesitation," "pride with embarrassment," "grief with relief"). The beat's job is to stage both at once — usually by externalising one note into the body or environment while the other plays on the face, or by splitting the two across a gesture that gets started and not finished. The shift annotation usually names why both notes are present in the same instant.
Tension-compounds are often the most sketchable of the three, because they force the staging to externalise something — a held breath, an unfinished gesture, an object set down instead of picked up. A single register can be carried by the face alone; a tension-compound usually can't.
Roll across all three. Tip-compounds and tension-compounds together should account for roughly a third of rolls; singles the rest.
Emergent registers observed 2026-06-14 (not yet promoted to taught):
- quiet wonder with old grief — used for a Mushoku Tensei boy-and-ant beat. Worked well for second-life weight applied to small physical moments.
- courage arriving late — used for a Mushoku Tensei village-square beat. Body-leads-mind framing. Possible candidate for a new beat category (see exploratory note below).
These need 2–3 more rolls each before promoting to taught registers per the emergent vs taught patterns framework (workflow-knowledge-logs/2026-05-14-2143-Emergent-vs-Taught-Patterns.md).
The refine menu (post-generation)
After every generation, surface a menu via the input UI. The menu is conditional — options only appear when they make sense given current state:
Always available:
- Regenerate (same parameters)
- Change register
- Change genre (single → hybrid, or reroll)
- Change era tint (contemporary ↔ non-contemporary, or reroll)
- Flip commitment level (light tint ↔ full commitment)
- Change scale (single ↔ mini-sequence)
- Add a constraint modifier
- Done — lock the changes / wrap up
Conditional on a constraint being active:
- Change constraint
- Drop the constraint, keep the beat
Conditional on a hybrid genre being active:
- Drop one half of the hybrid
- Reroll the other half
Conditional on hooks/lineage not yet shown:
- Add hook to this beat (re-emits the full beat with the hook stacked inline — see "What to hold back by default")
- Show reference lineage (also re-emitted inline with the beat)
"Surprise me" should always be an option wherever the user is making a choice (register, constraint, panel count). Don't omit it.
Output: pin as side-panel artifact (optional)
Once the user locks a beat, offer to pin it as a side-panel artifact for the session:
"Want me to pin this as a side-panel artifact so it stays visible while you work?"
If yes, generate a markdown artifact containing:
- The beat script (the prose block)
- The shift line
- The rolled defaults (scale, register, genre, era tint, commitment)
- A blank "Round framing" section the calling skill can fill in (carry-forward notes, source, etc.)
This keeps the beat script as the session's anchor instead of letting it disappear into chat scroll-back.
When the caller is phase4-storyboarding: this is not optional — auto-pin without asking. Phase 4 has built that into Prep. See phase4-storyboarding/SKILL.md Prep section.
What to hold back by default
These exist but stay hidden unless the user asks via the refine menu or directly:
- Reference lineage — which director/show the tonal lineage borrows from. The principle is instinct-first: pre-loading the reference biases the eye before the sketch.
- Compositional hook — what the staging needs to earn. Surfaces only on request, or automatically when the constraint modifier is active (because the constraint is what the hook explains). When surfaced via the refine menu, the hook does not arrive as a standalone reply — the skill re-emits the full beat (image + shift + hook) as a single stacked block so the page reads as one thing. Splitting the hook off into its own reply forces the user to scroll between the frame and the note about the frame, which fights the ekonte logic the format is built on.
Writing rules for the beat itself
Borrowed from screenwriting action-line craft, adapted for storyboard practice:
- Present tense, active voice. "She runs," not "she is running" or "she ran."
- Only what can be seen and heard. No "she feels," no "he remembers." If an internal state matters, externalise it — what's visible on the face, in the body, in the environment.
- Specific verbs over generic ones. "Saunters," "tiptoes," "marches" — not "walks."
- Concrete physical detail carries mood. A "sinister" house is a tell; a house "with one window lit from the inside, curtains drawn" is a show.
- Brevity. 1–3 lines maximum per panel. White space matters. If it won't fit, the beat is too big and should be split.
- The shift is one line. See "What a beat is here" for the full framing.
Compositional hook — length rule
When surfaced, the compositional hook should be 2–4 sentences, and should name the one compositional question the staging has to answer — not a checklist of staging concerns.
The hook is the editorial note in the margin of the page, not the production brief. If it starts listing depth, light, framing, negative space, and scale all in one paragraph, it has drifted into briefing — pull it back to the one question.
For mini-sequences with a constraint modifier active, each panel gets its own hook, each still 2–4 sentences.
Anti-patterns to avoid
Things this skill should not do, even if asked:
- Don't prescribe shot type or camera angle by default. That's the participant's compositional decision. Constraints are explicit (via the modifier parameter); inferred staging is not.
- Don't generate full scenes. If the output reads like a paragraph from a screenplay, it's too big. The unit is one moment.
- Don't force screenplay format. The output borrows the look and feel of a screenplay page (action block + margin note), but does not force a slugline, character cues, or scene structure. The beat is smaller than a scene.
- Don't borrow Save the Cat or feature-length beat structures. Those are macro tools for whole scripts; this is a single-shot generator.
- Don't substitute pattern-matching for design. If a request is vague, generate with random defaults and let the refine menu do the steering — don't ask a form's worth of questions before producing anything.
- Don't lead with the reference (see "What to hold back by default").
- Don't let the shift drift into summary. Longer than one sentence = wrong.
- Don't let the compositional hook drift into a brief. 2–4 sentences. One question.
- Don't default to prestige-drama domestic register (see "Why genre is its own parameter"). Rolled genre is not optional — honour it.
- Don't reach for spectacle when light tint is rolled (see "Anti-grandness rule").
- Don't make hybrid genres equal-weighted blends (see "Hybrid genres"). World × intrusion, not 50/50.
Emergent patterns (inviting experimentation)
The taught patterns in this skill — the genre pool, the register examples, the era list, the commitment levels — are settled. They've earned their place through live rolls. But they're not closed. The skill works best as a living document: some patterns are codified for reliability, others are being tested in real sessions and may earn a permanent spot later.
The generator is invited — not required — to occasionally propose patterns that aren't in the standard pools. When it does, it flags them explicitly so the user can clock the experiment and decide whether it lands.
What emergence is allowed to stretch
- Register shapes. The pool currently teaches three shapes (single, tip-compound, tension-compound). The generator may propose a fourth shape if a roll seems to want it — e.g. a paired register held by two characters in the same frame ("his anticipation, her dread"), or a register reversal where the beat starts in one note and ends in its opposite. Flag with: "emergent register shape — [name], not in the standard pool."
- Genre combinations. Hybrids are taught as two-genre intrusions (world × intrusion). The generator may occasionally propose a three-way tonal combination — not three genres, but a genre plus an era plus a sub-register that resolves into something the pool doesn't name. Flag with: "emergent genre handling — [description]."
- Shift forms. The shift annotation is taught as a one-line margin note naming what changes between start and end of the beat. The generator may experiment with shift forms that bend this — a shift that names what fails to change, a shift that names a near-miss (the moment that almost was), a shift that points to something offscreen that the panel implies. Flag with: "emergent shift form — [description]."
What emergence may not stretch
Emergence operates inside the anti-patterns, not against them. Even a flagged emergent pattern must still obey: no prescribed camera angle, no full scenes, no screenplay format, no Save-the-Cat structures, no spectacle on light tint, no drift into prestige-drama domestic register, no hybrid as 50/50 blend. The frame stays the frame; only the vocabulary inside it expands.
How emergence gets flagged
When the generator proposes an emergent pattern, the rolled-defaults block surfaces it explicitly. Example:
Rolling random defaults:
- Scale: single panel
- Emotional register: tenderness with hesitation ← emergent tension-compound
- Genre: coming-of-age
- Commitment level: light tint
- Constraint modifier: none
The arrow + note is the flag. It tells the user: the generator reached for something outside the codified pool, here's where. The user can keep it, regenerate with a standard register, or ask the generator to explain what shape it was reaching for.
The codify-or-discard loop
Emergent patterns are proposals, not promotions. After a session, the user and the generator can review what emerged:
- Codify — the pattern worked, was sketchable, produced a real beat. Move it into the taught pool with a calibration example. The pattern is now reliable.
- Hold — the pattern was interesting but uncertain. Note it in "known gaps" for further testing across more rolls.
- Discard — the pattern produced a beat that didn't sketch well, or duplicated a taught pattern in disguise. Drop it.
This loop is the working method of the skill itself. Sessions are not just uses of the skill — they are how the skill grows. The user is a co-author through the rolls, the refines, and the post-session reviews.
Frequency of emergence
The generator should reach for an emergent pattern roughly 1 in 6 rolls. Often enough to keep the skill alive; rare enough that most rolls stay in the well-tested taught pool. If a session is producing one taught beat after another, the next roll is a good candidate for an emergent reach. If the user has flagged the last two emergent patterns as discards, back off — the pool wasn't ready. This ratio is first-pass; adjust as live rolls reveal what feels right.
Calibration examples
A well-formed single-panel beat, restrained anger register, no constraint:
```
A man folds a letter back into its envelope. He
sets it down on the kitchen table. Aligns its
edge with the edge of the table. Then aligns it
again.
```
> **Shift:** the second alignment is the moment the letter becomes the thing he can't put down.
A mini-sequence, 3 panels, anticipation tipping into disappointment register, with the "no faces visible" constraint applied:
**Panel 1**
```
A backpack on small shoulders, framed against
a window. Breath fogs the glass. Below, a car
turns into the driveway.
```
> **Shift:** waiting resolves into recognition — read in the stillness of the shoulders, not the face.
**Compositional hook:** the staging has to make the shoulders carry the recognition — usually a face's job. Negative space above the head matters: leaving it empty has to feel like a choice, not a crop.
**Panel 2**
```
A small hand lifts toward the glass. The car
rolls past the driveway and continues down
the street.
```
> **Shift:** the hand is mid-rise when the meaning of the car changes. The hand does not finish the gesture.
**Compositional hook:** the lifting hand is now the entire emotional event. The staging has to give the hand enough scale to carry that without making it the subject of the frame.
**Panel 3**
```
The hand lowers. The shoulders stay where they
were. The fog of breath has spread further on
the glass.
```
> **Shift:** the waiting hasn't ended — it has only been corrected.
**Compositional hook:** the cruelty of the shift is that nothing in the body has changed, only the meaning of the waiting. The fog of breath has to read as accumulation — evidence of time.
A single-panel beat, awe register, genre: sci-fi, commitment: light tint, no constraint:
```
An engineer pauses at a console. One indicator
light on the panel pulses, slow, where the others
are steady. She lowers her coffee without looking
at it.
```
> **Shift:** the pulse is when routine becomes attention — before she has named what she's seeing.
A single-panel beat, tenderness with hesitation register (tension-compound), genre: coming-of-age, commitment: light tint, no constraint:
```
A teenager stands at a sink, holding her
grandmother's ring under the tap. She turns
it once between her fingers, then sets it
on the rim of the soap dish instead of
sliding it on.
```
> **Shift:** the decision to wear it gets postponed in the half-second between rinse and pocket.
The tenderness is the relationship to the ring; the hesitation is the soap dish instead of the finger. The shift names why both notes coexist in this instant — the postponement holds the tenderness in place without letting it resolve. This is the tension-compound shape in its smallest form: an externalised hesitation (the soap dish) carrying half the register while the tenderness lives in the rinse-and-turn gesture.
A single-panel beat, dread register, genre: fantasy × horror (fantasy world, horror intrusion), commitment: full, no constraint:
```
A torch on a stone wall burns sideways. Its flame
points down the corridor, away from the draft.
The hound at the steward's heel will not cross
the threshold.
```
> **Shift:** the room stops being a room the moment the fire chooses a direction.
A mini-sequence, 3 panels, anticipation tipping into disappointment register, genre: noir × western (noir world, western intrusion), commitment: light tint, no constraint:
**Panel 1**
```
Rain on a precinct window. A man in a wet coat
hangs a hat on a hook. Spurs, faintly, in the
hallway behind him.
```
> **Shift:** the city is the room he's in; the spurs are the room he came from.
**Panel 2**
```
He sets a folder on the desk. The spurs stop
at the doorway. A hand, gloved, rests on the
frame.
```
> **Shift:** the conversation has begun before either man has spoken.
**Panel 3**
```
The folder sits untouched. The hand on the
doorframe is gone. Water drips from the brim
of the hat onto the floor.
```
> **Shift:** the meeting that was going to happen has already not happened.
All examples obey the rules: present tense, visible/audible only, brief, fixed-width feel in the action block, shift as a one-line margin note. Hooks (when shown) are 2–4 sentences each and name a single compositional question. None prescribe camera angle in the beat itself. The genre-tinted beats avoid spectacle — the sci-fi beat is a server room, the fantasy × horror beat is a torch and a hound, the noir × western beat is a precinct doorway. Sketchable in five minutes.
Known gaps (carry forward)
- Phase context untested. The skill claims it's curriculum-wide (Phase 1–4) but the test session never invoked phase-specific behaviour. Whether the output should adjust based on phase is a real question that needs a real session to answer.
- Compositional hook with no constraint active is undefined. Currently the hook is only surfaced when constraint is active or on direct request. Whether "no-constraint" hooks should look different (and how) hasn't been tested.
- Genre + commitment + era landed in this iteration (2026-05-14). Pool expanded from 10 → 17 genres because the v2 generator drifted to prestige-drama by default. Sub-tags added for the four genres with distinct sub-grammars. Era tint added as an orthogonal axis. Needs live test rolls to confirm: (a) the 20% hybrid rate feels right, (b) the 60/40 light-vs-full split feels right, (c) the 15% era-tint rate feels like flavour and not noise, (d) the 25% sub-tag rate feels right when parents roll, (e) light tint actually lands as light and not as drama with a prop. Adjust ratios if rolls feel skewed.
- Sub-tag list is short on purpose. Only sub-genres with strong distinct visual grammar are in scope (cyberpunk, folk horror, epic/urban fantasy, screwball/dark comedy). If a new sub-tag earns a calibration example here, it can join the roll.
- Era pool is curated, not exhaustive. Pre-ancient eras and very specific micro-periods (Belle Époque, Tang dynasty, etc.) aren't in the pool yet. Expand only if a session shows the existing pool is too coarse.
- Register shapes named (2026-05-14). Lifted the implicit three-shape pattern (single / tip-compound / tension-compound) into explicit design notes after a live session produced "tenderness with hesitation" as an emergent tension-compound. Needs more rolls to confirm the one-third / two-thirds split feels right, and whether tension-compounds should bias toward certain genres (coming-of-age, drama, romance lean naturally tension-compound; action-adventure, thriller, survival lean naturally single).
- Emergence section added (2026-05-14). The skill is now structurally self-modifying: it explicitly invites the generator to propose patterns outside the taught pool at ~1 in 6 rolls, flag them, and review them through a codify-or-discard loop. This is a bigger architectural move than the tension-compound addition. Needs sessions to confirm: (a) the 1-in-6 rate produces useful emergence without overwhelming reliability, (b) the three stretch categories (register / genre / shift) are the right ones or whether others should be added, (c) the flagging convention reads clearly in practice.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.