Storybook Check
rstackjs/storybook-rsbuild
Audit ported storybook-rsbuild source files against the CURRENT upstream Storybook source, grouped by the local package that owns each port, independent of commit history.
Make Storybook stories deterministic for UI Verify so captures stop coming back "changed" without a real change (flaky diffs).
$ npx skills add igrlk/storybook-addon-test-codegen --skill storybook-visual-testing -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install igrlk/storybook-addon-test-codegen storybook-visual-testing --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/igrlk/storybook-addon-test-codegen.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/storybook-visual-testing .claude/skills/storybook-visual-testing && rm -rf skills-srcUse ~/.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/
Install the "storybook-visual-testing" agent skill from https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/storybook-visual-testing into .claude/skills/storybook-visual-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "storybook-visual-testing", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/storybook-visual-testingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add igrlk/storybook-addon-test-codegen --skill storybook-visual-testing -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install igrlk/storybook-addon-test-codegen storybook-visual-testing --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/igrlk/storybook-addon-test-codegen.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/storybook-visual-testing .agents/skills/storybook-visual-testing && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "storybook-visual-testing" agent skill from https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/storybook-visual-testing into .agents/skills/storybook-visual-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "storybook-visual-testing", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add igrlk/storybook-addon-test-codegen --skill storybook-visual-testing -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install igrlk/storybook-addon-test-codegen storybook-visual-testing --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/igrlk/storybook-addon-test-codegen.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/storybook-visual-testing .cursor/skills/storybook-visual-testing && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "storybook-visual-testing" agent skill from https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/storybook-visual-testing into .cursor/skills/storybook-visual-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "storybook-visual-testing", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/igrlk/storybook-addon-test-codegen.git --path .agents/skills/storybook-visual-testing--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add igrlk/storybook-addon-test-codegen --skill storybook-visual-testing -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install igrlk/storybook-addon-test-codegen storybook-visual-testing --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/igrlk/storybook-addon-test-codegen.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/storybook-visual-testing .gemini/skills/storybook-visual-testing && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "storybook-visual-testing" agent skill from https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/storybook-visual-testing into .gemini/skills/storybook-visual-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "storybook-visual-testing", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install igrlk/storybook-addon-test-codegen storybook-visual-testingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add igrlk/storybook-addon-test-codegen --skill storybook-visual-testing -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/igrlk/storybook-addon-test-codegen.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/storybook-visual-testing .github/skills/storybook-visual-testing && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "storybook-visual-testing" agent skill from https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/storybook-visual-testing into .github/skills/storybook-visual-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "storybook-visual-testing", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add igrlk/storybook-addon-test-codegen --skill storybook-visual-testing -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install igrlk/storybook-addon-test-codegen storybook-visual-testing --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/igrlk/storybook-addon-test-codegen.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/storybook-visual-testing .opencode/skills/storybook-visual-testing && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "storybook-visual-testing" agent skill from https://github.com/igrlk/storybook-addon-test-codegen/tree/main/.agents/skills/storybook-visual-testing into .opencode/skills/storybook-visual-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "storybook-visual-testing", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
storybook-visual-testingMake Storybook stories deterministic for UI Verify so captures stop coming back "changed" without a real change (flaky diffs).
Storybook Visual Testing is an agent skill from igrlk/storybook-addon-test-codegen. Make Storybook stories deterministic for UI Verify so captures stop coming back "changed" without a real change (flaky diffs). Use when setting up story-level visual tests or debugging a story that diffs every run. Focuses only on the run-to-run variation the capturer can't neutralize from outside your app — the clock, infinite JS animations, live data, and non-Math.random randomness — and deliberately skips what UI Verify already handles for you.
Its SKILL.md is about 1.9k 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 Visual regression testing. It works with Storybook and React. The repository describes itself as: Addon for Storybook that generates test code for your stories. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit cdfbf4e. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
storybook.js.orgnpmjs.comgithub.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Storybook Visual Testing loads about 1.9k tokens when it runs. Until then it costs about 119 tokens; SKILL.md has 894 words of instructions outside code blocks.
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.
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.
The full file from igrlk/storybook-addon-test-codegen at commit cdfbf4e, republished under its MIT licence (© igrlk). 894 words, ~1,859 tokens.
.claude/skills/storybook-visual-testing/SKILL.md (or your agent's skills folder).UI Verify renders each story as a baseline. Because a story is an isolated component in a controlled
harness, you get for free the things that make real-page capture hard: no page scroll, no A/B / analytics
/ chat / consent scripts, no lazy-load-on-scroll races. That isolation is the point — the determinism
work here is narrow. If you reach for scroll-settling or third-party stubbing, you're fighting a
problem Storybook already removed; that's a real-page concern (see playwright-visual-testing).
UI Verify's capturer also neutralizes these automatically — do NOT hand-fix them:
prefers-reduced-motion: reduce — emulated, so any component that honors it renders its calm state.Math.random — seeded before your app code runs (a shuffle/jitter driven by Math.random is
already stable).<img> loading — waited for before capture.So the checklist below is only the remainder — what lives inside your app and can't be fixed from
outside it. And like Vitest browser mode (vitest-visual-testing) and unlike a real page, a story has
no SSR — no server-rendered random pick to reconcile.
The headline: freeze the data. Once the list above is off the table, the one thing left that floods a story suite with false "changes" is live/dynamic data — star counts, follower counts, contributor lists, tiles, timestamps. Give every story static args / fixtures and that entire class disappears at the source: static data can't churn run-to-run, so there is nothing to diff. This is the single highest-value determinism step here — do it first (step 1), and most stories need nothing else.
Point UI Verify at your built stories:
npm run build-storybook && uiverify upload --static-dir storybook-staticA story fed live/dynamic data is flaky by construction: the stars, followers, contributor list, tile order, and timestamps move between runs, so the diff lights up with no code change. Give every story static args/fixtures and the whole class is gone. Never let a story hit a real backend.
Concrete — fixed, ordered, complete data:
Two ways to inject them, both fine:
args on the story;msw-storybook-addon
returns the same response every time.One component per story file, every variant × state in one story where you can — cheaper and easier
to eyeball than N near-identical stories. Keep each in its own file so --only-changed carries the
untouched ones forward, and add a path filter so the visual job only runs on UI PRs.
The one thing the capturer deliberately does not do (freezing time breaks entry animations). Any
component that reads the clock — a relative timestamp, a date picker defaulting to "today", a chart's day
axis — drifts every run. Pin it with
storybook-addon-mock-date (Storybook 10+),
which mocks Date per story:
// .storybook/main.ts
addons: ['storybook-addon-mock-date'],// .storybook/preview.ts — a fixed date for every story (meta- or story-level overrides it)
export default { parameters: { mockingDate: new Date('2020-01-01T00:00:00Z') } };Pass a Date, a millisecond timestamp, or an ISO string as mockingDate; the most specific value
(story > meta > preview) wins, so a single story can pin its own "today". On older Storybook, install
@sinonjs/fake-timers in a decorator instead
(install({ now: FROZEN_NOW })) — it covers Date, Date.now, and timers in one call.
A CSS/WAAPI/finite animation is handled for you (above). What's left is an infinite JS loop that
never has a final frame — framer-motion pulsing dots, a Lottie loop, an autoplay spinner, or a
<canvas> / requestAnimationFrame loop (which no media query can reach). Two fixes:
Preferred — honor reduced motion. The capturer emulates prefers-reduced-motion: reduce, so make
the component respect it. framer-motion ignores it by default (reducedMotion: "never"); opt in:
// .storybook/preview.tsx decorator
<MotionConfig reducedMotion="user"><Story /></MotionConfig>or gate the loop yourself with useReducedMotion(). One line, and it's good app behavior anyway.
Escape hatch — detect the capture and render the end state. UI Verify flags every capture with a
UIVerify marker on the user-agent and a window.__UI_VERIFY__ global, so a component can branch:
export const isUIVerify = () =>
(typeof navigator !== 'undefined' && navigator.userAgent.includes('UIVerify')) ||
(typeof window !== 'undefined' && '__UI_VERIFY__' in window);<RadarChart isAnimationActive={!isUIVerify()} />Prefer pausing at the end frame, not the start. For a hand-rolled <canvas> rAF loop the same
branch applies: if (isUIVerify()) drawOneStaticFrame(); else startRaf(); in the component's effect.
Math.random randomnessMath.random is seeded for you, but crypto.randomUUID(), a uuid library, or faker are not. Use
fixed fixtures for anything that ends up on screen (an id in the DOM, a faker name), or set a fixed faker
seed.
A JS-measured layout that reflows or reorders on its own (packing driven by measured size, a shuffled list) can vary run-to-run even with identical content. Force a deterministic variant in the story (a fixed order/size), or mask the region.
Math.random / waiting on fonts by hand → wasted effort; the
capturer already does all three. Spend the effort on the clock and infinite loops.crypto/uuid/faker or a bare Date.now() → fixtures + freeze the clock.© igrlk, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/storybook-visual-testing of igrlk/storybook-addon-test-codegen.
Open the folder on GitHubat commit cdfbf4e
Storybook Visual Testing 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Storybook Visual Testing this skilligrlk/storybook-addon-test-codegen | 154 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Storybook Checkrstackjs/storybook-rsbuild | 156 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Wonder BlocksKhan/wonder-blocks | 163 | — | ~3.2k | Automated safety check: Pass | MIT | |
| Vrtmarigold-ui/marigold | 146 | — | ~787 | Automated safety check: Pass | MIT | |
| DaleuiDaleStudy/daleui | 119 | — | ~675 | Automated safety check: Pass | MIT | |
| Storybook Syncrstackjs/storybook-rsbuild | 156 | — | ~5.2k | Automated safety check: Pass | MIT |
rstackjs/storybook-rsbuild
Audit ported storybook-rsbuild source files against the CURRENT upstream Storybook source, grouped by the local package that owns each port, independent of commit history.
Khan/wonder-blocks
Implements user interfaces using the Wonder Blocks (WB) design system — Khan Academy's React component library.
marigold-ui/marigold
DST — Trigger the Visual-Regression-Tests (Chromatic) GitHub Actions workflow on the current or a given branch.
DaleStudy/daleui
Use the daleui React design system with semantic Panda CSS tokens and accessible components.
rstackjs/storybook-rsbuild
Check and analyze upstream Storybook repository changes that may need to be synced to storybook-rsbuild.
Qovery/console
Design review and implementation guidance for the Qovery Console.
igrlk/storybook-addon-test-codegen
Check the visual impact of an edit mid-task with uiverify check — render just the components you're touching on the UI Verify fleet and diff them against the real CI baseline, without opening a PR…
igrlk/storybook-addon-test-codegen
Author economical visual tests — full visual coverage in the fewest billable snapshots.
igrlk/storybook-addon-test-codegen
Triage a UI Verify build from your coding agent via the UI Verify MCP — bucket a build's changed stories into real regressions vs cosmetic reflow vs rendering noise, summarize the real regressions…
igrlk/storybook-addon-test-codegen
Read before changing any component, page, or styles. An agent skill from igrlk/storybook-addon-test-codegen.
Categories
Make Storybook stories deterministic for UI Verify so captures stop coming back "changed" without a real change (flaky diffs). Storybook Visual Testing is an agent skill from igrlk/storybook-addon-test-codegen. Make Storybook stories deterministic for UI Verify so captures stop coming back "changed" without a real change (flaky diffs).
Storybook Visual Testing fits situations like: setting up story-level visual tests; debugging a story that diffs every run.
Run `npx skills add igrlk/storybook-addon-test-codegen --skill storybook-visual-testing -a claude-code`. Or copy the skill folder (.agents/skills/storybook-visual-testing in igrlk/storybook-addon-test-codegen) into .claude/skills/storybook-visual-testing in your project. Claude Code loads it when a task matches its description.
Run `npx skills add igrlk/storybook-addon-test-codegen --skill storybook-visual-testing -a codex`. Or copy the skill folder (.agents/skills/storybook-visual-testing in igrlk/storybook-addon-test-codegen) into .agents/skills/storybook-visual-testing in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add igrlk/storybook-addon-test-codegen --skill storybook-visual-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/storybook-visual-testing, .gemini/skills/storybook-visual-testing, .github/skills/storybook-visual-testing and .opencode/skills/storybook-visual-testing in your project.
Going by SKILL.md and its folder, Storybook Visual Testing needs the command-line tools its instructions call (npm).
SKILL.md names 3 domains. As links in the text: storybook.js.org, npmjs.com and github.com. This is read from the text; nothing was executed.
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.
Storybook Visual Testing is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Storybook Visual Testing: Storybook Check (rstackjs/storybook-rsbuild, 156 stars), Wonder Blocks (Khan/wonder-blocks, 163 stars), Vrt (marigold-ui/marigold, 146 stars) and Daleui (DaleStudy/daleui, 119 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
igrlk (a GitHub user) maintains it in igrlk/storybook-addon-test-codegen, which has 154 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on September 13, 2026.
Source: igrlk/storybook-addon-test-codegen on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.