One Shot Ui

io.github.TN0123由 GitHub 账号 TN0123 发布v0.7.0更新于 Oct 24, 2026

Deterministic UI extraction and screenshot diffing for AI coding agents.

概览

AI 生成的概览

本地 MCP 服务器,从截图中提取 UI 结构、将实现与参考图做差异比对,并返回按影响排序的 CSS 修复建议。

可以做什么
  • 从参考截图提取布局区域、颜色、字体与文字
  • 对两张截图做像素与结构差异比对,生成热力图与 DOM 差异
  • 给出排序后的 CSS 或 Tailwind 修复建议,并通过 converge 产出经像素验证的补丁
  • 提取设计令牌与样式系统,并检查新界面是否符合参考图的设计语言
  • 截取 URL 或本地 HTML 文件的截图,并生成实现方案或运行基准测试
适用场景
适合 AI 编码代理已把界面做到接近参考截图、但在间距、颜色、阴影或字体上仍有细微偏差时,用可重复的确定性测量和具体 CSS 修复替代反复“再看一眼截图”的猜测。也适合检查新页面是否符合既有设计系统。
运行要求
通过 npx 以 stdio 在本地运行 npm 包 one-shot-ui,需要 Node.js 与 npm。涉及浏览器截图的命令需另行安装 Playwright Chromium。未声明任何 API 密钥或环境变量。
安装前请注意
converge 与 run 命令会向构建产物应用 CSS 补丁并驱动真实浏览器,保留前应先审阅生成的补丁。说明称像素比对、OCR 与布局提取均在本地运行且不发起网络请求,但 capture 会访问你指定的 URL。

安装

在 SourceWeft 中

  1. 打开 控制台中的 One Shot Ui,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

one-shot-ui

Catch what the eye can't.

Deterministic screenshot diffing for AI coding agents. Turn a reference screenshot into structured data, diff any build against it — pixel, layout, color, and type — then get the exact CSS to fix. Or copy a UI's design language onto a brand-new screen.

[npm version] [license] [node]

[one-shot-ui diffs an agent's build against the reference screenshot and flags the exact deltas]

The problem

AI agents get UI ~90% of the way there — then stall. The layout looks right, but a card is 8px too tall, a panel is the wrong shade of gray, a shadow is flat, a gap is off by 24px. Asking the model to "look at the screenshot again and fix it" is slow, and you get a different answer every time.

one-shot-ui closes that last 10% deterministically. It extracts structured data from a reference screenshot — layout regions, colors, typography, spacing, design tokens — diffs your implementation against it, and returns specific, ranked fixes, not "make it look more like this."

Set width to 616px (currently 640px)Change the fill color to #303040.Set box-shadow to -3px 0px 24px 0px rgba(28, 29, 38, 0.32).gap: 176px; /* currently ~152px */

Copy-paste CSS, ranked by visual impact — every example above is real output from the run below.

Watch it converge

The run command loops extract → capture → compare → fix until the heatmap goes quiet. In the run above, the agent's first build looked identical to the eye — one-shot-ui flagged 15 concrete deltas (position, size, color, shadow, spacing) and the loop drove the build to ~2.5% pixel mismatch, within ~0.5% of the tool's own estimated irreducible floor (≈2%, sub-pixel font rendering) for this design.

Why one-shot-ui

  • Deterministic, not vibes. Stable pixel + structural diff scores — same input, same numbers — so you can gate CI on "is this pixel-close enough?"
  • Exact fixes, not nudges. It returns concrete CSS (width: 616px, #303040, gap: 176px), grouped by component and ranked by visual impact.
  • Structural, not just pixels. Detects missing/extra elements, position & size shifts, color, shadow, spacing, and typography — and labels which differences are irreducible (anti-aliasing, photographic content) so agents don't chase ghosts.
  • Not gameable. converge scores structural fidelity — is the reference's content present, placed, and legible? — not just pixel mismatch, and it refuses to win pixels by hiding, overlapping, or recoloring text into its background. It even flags reference text your build renders but clips out of view (a fixed-height overflow:hidden box) — the failure a pixel diff rewards, because cropped text lowers the mismatch.
  • Agent-native. Ships an AGENTS.md (auto-discovered by Claude Code, Cursor, Codex, …) plus a Claude Code skill, so your agent drives it without hand-holding.
  • Local & private. Pixel diffing, OCR, and layout extraction all run on your machine. No images leave your box, no API keys.

Copy a UI's style, not just match it

Matching a screenshot pixel-for-pixel is one job. The other: building a different screen that feels like it belongs to the same design system. one-shot-ui extracts the design language from a reference and verifies a new UI conforms to it — deterministically, with no pixel oracle to lean on.

sh
# Extract a reusable style system — palette, spacing scale, type ratio, radii, elevationone-shot-ui tokens reference.png --emit shadcn      # or: tailwind | json
# Build a different screen in that style, then check it conformsone-shot-ui style-check reference.png ./pricing.html

It reports measured facts and leaves the taste to the agent: it won't name your "primary" color or classify the mood — you decide those from the image (you're the vision model; the tool is your exact, hallucination-free eyes). Conformance is judged on what a screenshot grounds reliably — palette, spacing rhythm, type scale — while roundedness and elevation are flagged as advisories, since a raster can't pin them down.

Install

sh
npm install -g one-shot-ui

For commands that need a browser (capture, run):

sh
npx playwright install chromium

Quick start

sh
# Diff your implementation against a reference and see exactly what's offone-shot-ui compare reference.png build.png --json --heatmap heatmap.png
# Get copy-paste CSS fixes, ranked by impactone-shot-ui suggest-fixes reference.png build.png --json
# The step that gets you pixel-perfect: trial fixes in a live browser and keep# only the ones that provably reduce pixel mismatch — outputs a verified patch,# a structural fidelity score, and any reference text your build hides or clipsone-shot-ui converge reference.png --impl ./index.html
# Or run the full automated loop until it convergesone-shot-ui run reference.png --impl ./index.html --max-passes 5 --threshold 0.02

Every command supports --json for structured, agent-friendly output.

Use it with your coding agent

one-shot-ui ships an AGENTS.md (auto-discovered by Claude Code, Cursor, Codex, and other agent tools) plus a skill/SKILL.md for Claude Code.

Install the skill in one line:

sh
mkdir -p .claude/skills/one-shot-ui && cp "$(npm root -g)/one-shot-ui/skill/SKILL.md" .claude/skills/one-shot-ui/

Use it as an MCP server

one-shot-ui also runs as a local MCP server, so any MCP-capable agent (Claude Code, Cursor, Cline, Windsurf, VS Code) can call compare, converge, suggest_fixes, extract, tokens, plan, and style_check as tools — no shell glue. It runs over stdio, makes no network calls, and needs no API keys.

sh
claude mcp add one-shot-ui -- npx -y one-shot-ui mcp

Or add to any client's MCP config:

json
{  "mcpServers": {    "one-shot-ui": {      "command": "npx",      "args": ["-y", "one-shot-ui", "mcp"]    }  }}

See docs/MCP.md for per-client setup and registry publishing.

Commands

CommandPurposeKey Flags
extractAnalyze a screenshot into layout, color, and text data--json, --no-ocr, --overlay, --fine
comparePixel + structural diff between two screenshots--json, --heatmap, --dom-diff
tokensDesign tokens + a reusable style system (palette, spacing, type, radii)--json, --emit shadcn|tailwind|json
style-checkCheck a new UI conforms to a reference's design language--json (new UI = URL / HTML / screenshot)
planGenerate an implementation strategy--json
captureScreenshot a URL or local HTML file--url, --file, --output
suggest-fixesTailwind/CSS fix suggestions from a diff--json, --top, --dom-diff, --framework
convergeClosed-loop optimizer: pixel-verified CSS patch + structural fidelity score, flags hidden/clipped text--impl, --out, --json, --budget-seconds
runMulti-pass extract→capture→compare→fix loop--impl, --max-passes, --threshold
benchmarkRun benchmark suites--json, --output

How it works

  1. extract — segments the reference into layout regions, samples colors/tokens, and OCRs text.
  2. capture — screenshots your implementation (URL or local HTML) at a matched viewport.
  3. compare — aligns the two, computes a pixel heatmap and a structural diff, and classifies each issue (layout / color / typography / spacing) plus whether it's actionable.
  4. suggest-fixes — turns issues into concrete, ranked CSS edits.

run chains all four in a loop until the diff drops below --threshold.

Development

Requires Bun.

sh
bun installbun run install:browsers   # Playwright Chromiumbun run typecheck

Dev scripts run directly from source:

sh
bun run dev:extract -- ./reference.png --jsonbun run dev:compare -- ./reference.png ./build.png --json

Build for npm:

sh
bun run build

License

MIT

来源:README.md,提交 b3f90a7

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.7.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分