Agent skill

Scenario Consistency

by scenario-labs in scenario-labs/skills

A skill your agent uses when one look must hold across Scenario generations: one character across scenes, a turnaround, or a video animated from its references, one product across angles, one style…

MITAuto-check passedFrontend & Design

Install Scenario Consistency

skills CLI
$ npx skills add scenario-labs/skills --skill scenario-consistency -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install scenario-labs/skills scenario-consistency --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/scenario-labs/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/scenario-consistency .claude/skills/scenario-consistency && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
scenario-consistency
GitHub stars
946
Token cost
~3.7k tokens
SKILL.md length
2,135 words
Files
1
Skills in repo
146
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when one look must hold across Scenario generations: one character across scenes, a turnaround, or a video animated from its references, one product across angles, one style…

  • Works in 4 steps: asset_display the approved hero… → recommend with the task's own words as… → One model_run per pose, five in all,… → …
  • One look must hold across Scenario generations: one character across scenes
  • SKILL.md covers Overview, Quick reference, The baseline-plus-delta prompt and Locking a style without a…, plus 5 more sections
  • Calls npx

What it does

Scenario Consistency is an agent skill from scenario-labs/skills. Use when one look must hold across Scenario generations: one character across scenes, a turnaround, or a video animated from its references, one product across angles, one style across icon sets, a character from an uploaded drawing, a variant off an approved baseline, or deciding when references stop scaling and a trained model is due. Triggers: make this match, same character, on-model, reference to video, style reference. Keywords: consistency, identity, control map, seed, LoRA.

Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Frontend & Design, covering Icons and illustration and Fine-tuning. The repository describes itself as: Get production-ready images, video, audio, and 3D from any AI agent: skills that pick the right model, price before spending, and keep characters and brands consistent through… The licence is MIT.

When your agent uses it

  • One look must hold across Scenario generations: one character across scenes
  • A video animated from its references
  • One product across angles
  • One style across icon sets

Example prompts

  • “/scenario-consistency”

Requirements

  • Node.js

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. asset_display the approved hero (asset_hero) and write its baseline: the full must-not-change enumeration above.
  2. recommend with the task's own words as prompt (search only for a named family), preferring models with reference-image slots, then…
  3. One model_run per pose, five in all, launched with wait=false in waves within the concurrency ceiling: the byte-identical baseline, the…
  4. jobs_wait on each wave, re-calling with pending_job_ids, and launch the next pose as a slot frees until all five are done. asset_display…

What it can do on your machine

Read from SKILL.md and the folder at commit f6f8ab7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Scenario Consistency loads about 3.7k tokens when it runs. Until then it costs about 127 tokens; SKILL.md has 2,135 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~127
When it runs · the whole SKILL.md, loaded when a task matches
~3.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from scenario-labs/skills at commit f6f8ab7, republished under its MIT licence (© scenario-labs). 2,135 words, ~3,716 tokens.

Download SKILL.mdSave it as .claude/skills/scenario-consistency/SKILL.md (or your agent's skills folder).
name
scenario-consistency
description
Use when one look must hold across Scenario generations: one character across scenes, a turnaround, or a video animated from its references, one product across angles, one style across icon sets, a character from an uploaded drawing, a variant off an approved baseline, or deciding when references stop scaling and a trained model is due. Triggers: make this match, same character, on-model, reference to video, style reference. Keywords: consistency, identity, control map, seed, LoRA.
license
MIT

Scenario Consistency

Overview

"Make variant two look exactly like variant one except for X" is the most repeated creative ask, and agents reach for seeds, which do not solve it. Consistency comes from what you feed the model, in rising order of durability: a prompt baseline, reference images, a style reference, a control map, a trained model. The same references carry a character into video. Connection and the core loop: see the scenario skill; training: see scenario-model-training; creating and filing a named character or prop library, with its sheets: see scenario-identity-library. If a sibling skill named here is missing from your available skills, ask the user to install it (npx skills add scenario-labs/skills --skill <name>); unattended, proceed from tool schemas and flag the gap.

Quick reference

TechniqueHoldsEffortReach for it when
Baseline-plus-delta promptidentity, framing, palettelowalways, it is the floor
Reference image inputidentity and worldlowa set of scenes or angles
Style reference inputrendering style, not a subjectlowicon sets, UI, an illustration series
asset_detect control mappose, geometry, compositionmediumthe layout must not move
Reference-to-videoidentity through motionmediumthe character or product has to move
Seed reuseone image's exact rolllowre-rolling a single generation
Trained modela house style, or a cast at scalehighreferences stop scaling (see below)

Scenario's published pipeline guidance: generate one strong reference image, pass it as an image input to every scene generation, and prefer models with the most reference-image slots.

The baseline-plus-delta prompt

Write out everything that must not change, then put the single change in a final clause. Keep the prompt byte-identical between runs and edit only that clause. A change every item must carry (new wardrobe, a haircut) is baseline, not delta: run it once as the hero's own delta, approve the result as the new hero, then anchor the set to it, so the reference and the enumeration describe the same look.

Enumerate specifics: subject geometry, camera height and angle, subject size and position in frame, lighting direction, each named sub-element and where it sits, palette by name or hex, and embedded text. Look at the baseline first (asset_display): you cannot enumerate a shade you have not seen, and vague anchors drift.

Attach the approved baseline as a reference image alongside it. Image models converge on referenceImages, but cap, requiredness, and cardinality come from model_schema_get, and on some the field is a single scalar file. A scalar image plus strength is img2img, not a reference slot: it anchors composition along with identity, and at the default strength a plain-background anchor overrides a whole-scene delta, so a scene set needs a true reference field. Wrap an array only where the schema says array: true, even a lone asset as ["asset_..."]: a bare string is silently dropped and the run succeeds ignoring it. State each reference's role in the prompt. Approved on-model shots fill the remaining slots: curate them as a collection (catalog tools, write lane) and retrieve them with search filters={"collection_ids": [...]}. Some style-reference members mint a reusable style on the first run: the id sits in the finished job's output metadata (job_get with verbose=true), not in the run response or on the asset, and later runs pass it in the schema's id field in place of the images. The two fields are exclusive and only the image field is flagged cost_impact, so the mint is paid once: read the field text before passing the same reference set on every run. The first run must still carry the images even where the schema marks both fields optional: the member refuses a run with neither.

The anchor can be an upload: the user's character art, sketch, or product photo goes up with upload_asset plus upload_asset_complete (see scenario) and rides the reference field like any approved hero. asset_describe (see scenario-asset-analysis) returns a style synthesis (medium, palette, lighting, composition, mood) that seeds the palette and lighting lines of the enumeration; the sub-element inventory comes from looking, or from asset_analyze with the enumeration headings as its instruction (both are catalog tools; asset_describe prices with dry_run).

A set takes one model_run per item: a batch-count field repeats one prompt and cannot carry a per-item delta clause. Launch in waves within the team's concurrency ceiling (the parallel-custom-jobs row in the scenario skill): a launch refused with that 429 created no job, so relaunch it in the next wave instead of dropping it.

Locking a style without a subject

A style reference is a different slot from a subject reference, and a few image models expose it: at authoring time one family took one to ten images as styleReferenceImages, built a private style from them for a small extra charge, and returned a reusable style id in the job output that later runs pass as styleId instead of the images (the two are mutually exclusive), with styleMatch choosing precise or flexible adherence. It holds rendering, palette, and line, not a character: pair it with a subject reference or the baseline enumeration for identity. Find such members with recommend and the style need in the user's own words, then confirm the field on model_schema_get. Palette fields taking RGB triples (colors) are preferences, not constraints: keep the hex values in the prompt too.

Locking structure with a control map

Generate the map and pass it as a conditioning input. Never extract it for the attribute that is the delta: a pose map from the approved image locks the pose you were asked to change; a pose set needs its map from a target-pose image, or none.

asset_detect takes an asset_id and a modality from canny, depth, grayscale, lineart_anime, mlsd, normal, pose, scribble, segmentation, sketch (remove_background defaults true). Catalog-only and write lane, despite the docs page grouping it under Analysis: run it via scenario_tool_execute_write.

The control block (controlImage, controlModality, controlStrength, controlStart, controlEnd) exists only on models listing controlnet in capabilities: check before planning around it; models without it take reference images. controlModality allows canny, tile, depth, blur, pose, gray and low-quality: only canny, depth and pose map across, grayscale becoming gray. controlStrength defaults to 0.7 with a recommended 0.3 to 0.8 band: near 0.7 for canny, depth and tile, 0.8 to 0.9 for pose, gray and blur, rigid above 0.9. Strength is how much, controlStart and controlEnd are when: controlEnd near 0.65 locks composition early, then releases so the prompt refines detail.

Show full SKILL.md (1,072 more words)Show less

Carrying identity into video

Reference-to-video members animate the subject the references show, with no first frame locking composition. The catalog has no reference-to-video capability value: these members are tagged img2video, so recommend with capability="img2video" and the consistency need in the user's own words ("the same character as in these images"), then confirm on model_schema_get that the pick carries a multi-slot referenceImages array (7 to 9 slots on the leading members at authoring time, one of them billing slots past the first four) and, to copy a motion, a referenceVideo or referenceVideos slot (capped between 3 and 15 seconds, billed per second of upload on some). When nothing ranked carries the array, search a family name from the video model-family skills scenario-video lists. Slot count moves the price less than resolution and duration: read both enums off model_schema_get, where cost_impact marks them, and prove identity on the cheapest roll that still shows the whole action, the lowest resolution at the delivery duration (a shorter clip hides late drift), pricing that payload and the delivery payload with dry_run first (one proving roll priced 80 CU against 130 at the defaults). A passing proving roll validates the recipe, not the roll: the delivery render gets its own sweep before it ships. image, the first-frame anchor, and the reference arrays are mutually exclusive on several families: a reference run opens free, and pinning the opening frame is a different member. Fill the slots from the library: the hero and two or three approved on-model shots per scenario-identity-library, as individual shots, never the turnaround sheet. With no library yet, the approved hero alone in one slot is a valid first run (the published pipeline starts from one strong reference), and the next slots fill from approved stills out of the image reference loop above, once one reads as a clean character view (neutral pose, no scene props: a scene still carries its props and pose into the slot), never from cropping the sheet. Prompt the action, not the look: some schemas address uploads by order ("Image 1 turns toward the camera, moving as in Video 1"), others state that the subjects appear with or without a prompt, and on all of them re-describing the character fights the images. Per-family contracts and prompt syntax: the video model-family skills scenario-video lists. Judge identity across the whole clip: asset_get returns firstFrame and lastFrame as free asset ids, but a drift that fades in mid-shot passes both, so sweep the frames with model_scenario-video-to-image-seq (a fixed first-party id: Scenario's single deterministic frame extractor, so discovery would only re-derive it) before the clip ships: about two frames a second (frameInterval is an integer count of source frames between extractions, the clip's frameRate from asset_get halved and rounded, 12 at 24 fps; the clip goes in video), since a spot check of one frame per shot read clean at 10.5 seconds on a clip whose defect appeared at 11.0. Judge each frame against the baseline enumeration by sub-element: a named part gained, lost, recolored or reshaped is drift; a part that moves with the action, a cloak swinging or an antenna tilting, is animation and passes.

When references stop scaling

Reference-first is the published order and the cheaper one, so exhaust it before training. Training pays back when one character recurs across hundreds of images, when four or more identities must share scenes, or when every run needs the same rendering style whatever the subject. Train one model per recurring character and a separate one for the style: a single model carrying both drifts on whichever it saw less of. Multi-character scenes composite rather than co-generate, because reference slots split attention: generate each identity alone against its baseline, then place them together with the edit workflows in scenario-image-editing. Dataset size, base choice, and the quote-before-launch rule: scenario-model-training. A trained model never runs by its own id (runs_as and run_with, see scenario), and it still takes the baseline-plus-delta prompt: training lightens the enumeration, not the delta discipline.

Sprite sheets and animation frames are the hard case: adjacent frames from a general image model drift in proportion, scale, and silhouette, which an engine exposes at once. Frames of one character come from the video lanes in scenario-sprite-animation, where one render holds the identity instead of a generation per frame.

Worked example: five poses of one mascot

  1. asset_display the approved hero (asset_hero) and write its baseline: the full must-not-change enumeration above.
  2. recommend with the task's own words as prompt (search only for a named family), preferring models with reference-image slots, then model_schema_get: the reference field's name, cap, cardinality, requiredness. No reference field in the schema disqualifies the candidate: go back to the ranked list, and when that holds nothing reference-capable either (recommend ranks community fine-tunes and can miss first-party models), take a family name from a sibling model-family skill (scenario-gemini-image, scenario-seedream) and search for it.
  3. One model_run per pose, five in all, launched with wait=false in waves within the concurrency ceiling: the byte-identical baseline, the pose alone in the final clause, the hero in the reference field shaped as the schema says: ["asset_hero"] only under array: true. No seed. No control map: a pose map from the hero locks the pose being changed.
  4. jobs_wait on each wave, re-calling with pending_job_ids, and launch the next pose as a slot frees until all five are done. asset_display each against the hero; fix drift by tightening the enumeration, not by chaining outputs.

Common mistakes

  • Reaching for a seed to make two prompts match: it reproduces one generation and transfers nothing. Leave it unset across a set; set one only to re-roll a single unchanged prompt.
  • Writing "same as before": there is no memory between calls; restate the baseline in full each time.
  • Chaining a set output to output: drift compounds. Anchor every item to the same approved baseline.
  • Training for a one-off: one character in one scene is a reference job, and a recurring cast at scale is the training case above, one model per character plus one for the style.
  • Assuming asset_detect modality names are valid controlModality values.
  • Passing the turnaround sheet into a reference slot, video or image: a video member animates the grid, and on an image model the sheet is a filing and review artifact, not a reference. Slots take individual approved shots.
  • Re-describing the character in a reference-to-video prompt: the images carry the look; the prompt carries action, camera, and timing.

© scenario-labs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/scenario-consistency of scenario-labs/skills.

Open the folder on GitHubat commit f6f8ab7

Compare with similar skills

Scenario Consistency next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Scenario Consistency compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Scenario Consistency this skillscenario-labs/skills946—~3.7kAutomated safety check: PassMIT
Kill AI Slopyetone/kill-ai-slop1.3k—~1.4kAutomated safety check: PassApache-2.0
Better Iconsdtsola/xiaoyaosearch1k2 repos~895Automated safety check: PassCustom licence
Fluent Icons Lookupcoltongriffith/fluenticons442—~492Automated safety check: PassNone
Review UI DesignColourCloudSky/review-ui-design-skill120—~1.4kAutomated safety check: PassMIT
Solar Iconssaoudi-h/solar-icons190—~2.1kAutomated safety check: PassMIT

Similar skills

  • Kill AI Slop

    yetone/kill-ai-slop

    Find and remove AI slop — the generic, machine-default visual and copy tics of vibe-coded products — from a web project.

    1.3k GitHub stars~1.4k tokensUpdated 25 days ago
    Frontend & DesignAuto-check passed
  • Better Icons

    dtsola/xiaoyaosearch

    Searches more than 200 Iconify icon libraries and fetches icons as SVG from a command line tool or an MCP server.

    1k GitHub starsUsed in 2 repos~895 tokens
    Frontend & DesignAuto-check passed
  • Fluent Icons Lookup

    coltongriffith/fluenticons

    Looks up Microsoft Fluent UI System Icons and their exact @fluentui/react-icons component names through the Fluent Icons MCP server or HTTP API, instead of guessing.

    442 GitHub stars~492 tokensUpdated 2 days ago
    Frontend & DesignAuto-check passed
  • Review UI Design

    ColourCloudSky/review-ui-design-skill

    评审单份或一组产品 UI 设计稿,像资深设计专家团一样从视觉质量、交互体验、设计系统三个方面发现问题并给出具体、可执行、按优先级排序的优化建议;在可行时默认生成与报告编号对应的问题标注图和优化建议图,并支持修改稿增量复评。Use when the user provides UI screenshots, icon sets, screen recordings, product flows…

    120 GitHub stars~1.4k tokensUpdated 2 mo ago
    Frontend & DesignAuto-check passed
  • Solar Icons

    saoudi-h/solar-icons

    Add Solar Icons via @solar-icons/cli to any React, Vue, Svelte, Solid, Angular, React Native, Nuxt, Static, vanilla JS, or Laravel Blade project.

    190 GitHub stars~2.1k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Article Icons

    smallnest/goal-workflow

    Illustrate an article (Markdown, HTML, etc.) with animated-style icons from itshover.com/icons.

    291 GitHub stars~1.6k tokensUpdated 27 days ago
    Frontend & DesignAuto-check passed

More from scenario-labs/skills

All 146 skills in this repo
  • Scenario Blender Grease Pencil

    scenario-labs/skills

    A skill your agent uses when drawing or animating with Grease Pencil in Blender 5.x from Python: 2D or 2.5D illustration, frame-by-frame animation, a cutout or part-based 2D character, strokes with…

    946 GitHub stars~4.5k tokensUpdated today
    Auto-check passed
  • Scenario Blender Hair

    scenario-labs/skills

    A skill your agent uses when grooming hair or fur in Blender with hair curves, such as a character hairstyle, animal fur, procedural fur in geometry nodes, or hair cards and mesh hair for games.

    946 GitHub stars~4.7k tokensUpdated today
    Auto-check passed
  • A skill your agent uses when lighting, rendering or compositing in Blender: light a character, product or hero shot, interior at dusk or night, three-point or motivated lighting, sun and sky, HDRI…

    946 GitHub stars~5k tokensUpdated today
    Auto-check passed
  • Scenario Chatgpt Pet Create

    scenario-labs/skills

    A skill your agent uses when creating a ChatGPT pet or Codex pet with Scenario: hatching an animated companion from a text idea, a character, mascot or brand cue, or reference photos and art; making…

    946 GitHub stars~3.6k tokensUpdated today
    Auto-check passed
  • Scenario Godot Animation

    scenario-labs/skills

    A skill your agent uses when animating characters or scenes in Godot 4.7: AnimationPlayer clips and RESET, AnimationTree state machines and blend spaces built in code, Mixamo or glTF import, loop…

    946 GitHub stars~4.7k tokensUpdated today
    Auto-check passed
  • Scenario Godot Audio

    scenario-labs/skills

    A skill your agent uses when adding or fixing sound in Godot 4.7: audio buses and effects, volume sliders, 'too many sounds', combat audio with hundreds of enemies, sounds clipping or distorting, 3D…

    946 GitHub stars~4.7k tokensUpdated today
    Auto-check passed

Questions about Scenario Consistency

What does Scenario Consistency do?

A skill your agent uses when one look must hold across Scenario generations: one character across scenes, a turnaround, or a video animated from its references, one product across angles, one style…. Scenario Consistency is an agent skill from scenario-labs/skills. Use when one look must hold across Scenario generations: one character across scenes, a turnaround, or a video animated from its references, one product across angles, one style across icon sets, a character from an uploaded drawing, a variant off an approved baseline, or deciding when references stop scaling and a trained model is due.

When should I use Scenario Consistency?

Scenario Consistency fits situations like: one look must hold across Scenario generations: one character across scenes; A video animated from its references; one product across angles; one style across icon sets.

How do I install Scenario Consistency in Claude Code?

Run `npx skills add scenario-labs/skills --skill scenario-consistency -a claude-code`. Or copy the skill folder (skills/scenario-consistency in scenario-labs/skills) into .claude/skills/scenario-consistency in your project. Claude Code loads it when a task matches its description.

How do I install Scenario Consistency in Codex?

Run `npx skills add scenario-labs/skills --skill scenario-consistency -a codex`. Or copy the skill folder (skills/scenario-consistency in scenario-labs/skills) into .agents/skills/scenario-consistency in your project. Codex loads it when a task matches its description.

Can I use Scenario Consistency in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add scenario-labs/skills --skill scenario-consistency -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/scenario-consistency, .gemini/skills/scenario-consistency, .github/skills/scenario-consistency and .opencode/skills/scenario-consistency in your project.

What does Scenario Consistency need to run?

Going by SKILL.md and its folder, Scenario Consistency needs the command-line tools its instructions call (npx). Our summary lists: Node.js.

Does Scenario Consistency access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Scenario Consistency safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Scenario Consistency use?

Scenario Consistency is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Scenario Consistency use?

About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Scenario Consistency?

Skills that share tags, products or a category with Scenario Consistency: Kill AI Slop (yetone/kill-ai-slop, 1.3k stars), Better Icons (dtsola/xiaoyaosearch, 1k stars), Fluent Icons Lookup (coltongriffith/fluenticons, 442 stars) and Review UI Design (ColourCloudSky/review-ui-design-skill, 120 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Scenario Consistency?

scenario-labs (a GitHub organization) maintains it in scenario-labs/skills, which has 946 GitHub stars. The repository holds 146 skills in this directory. The repository was last updated on October 10, 2026.

Source: scenario-labs/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.