mcpField
V
vlmkit

vlmkit

github.com/mizchiテスト・品質41649 回インストール1 週間前に更新
リポジトリ

vlmkit について

vlmkit は、開発者やエージェントが UI の変更を検証するための TypeScript 製ビジュアルリグレッションツールキットです。ピクセル差分に計算スタイルやセクション単位の情報を加え、任意で VLM を CSS 修正に活用できます。

主な機能

  1. 01スクリーンショット、HTML、URL の比較
  2. 02計算スタイル差分の確認
  3. 03コンポーネント領域ごとの差分測定
  4. 04ブラウザーとビューポート間の比較
  5. 05CSS 修正向け VLM 変更リストの生成

活用シーン

  1. 01CSS 編集後の視覚的な変化の特定
  2. 02リファクタリングによる意図しないレイアウト変化の確認
  3. 03CI でのビジュアルリグレッション判定
  4. 04フレームワーク移行時の見た目の同等性評価

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mizchi/skills --skill vlmkit

インストール後、Claude Code で/vlmkitを入力して読み込まれたか確認します。

同梱ファイルREADME.mdscripts/doctor.sh

詳細

vrt

vlmkit は、Playwright と pixelmatch を基盤とする TypeScript 製のビジュアル回帰テスト用ツールキットです。単純なピクセル差分だけでなく、エージェントが扱いやすいシグナルも表示します。計算済みスタイルの差分を全画面共通とブレークポイントごとに分けて示すほか、コンポーネントのバウンディングボックスを基準にセクションごとの diffRatio を算出し、最も差分の大きいビューポートのスクリーンショットパスをその場で表示します。また、任意で VLM が出力する CHANGE リストを LLM による CSS 修正のステップに渡せます。

ソース:https://github.com/mizchi/vlmkit。CHANGELOG と旧 CLI から新 CLI への対応表:CHANGELOG.md。

このスキルを呼び出すタイミング

  • エージェントが CSS/HTML/コンポーネントを編集し、「見た目に何が、どこで変わったか」を知りたい場合。
  • リファクタリングの PR を監査し、意図しないレイアウトのずれがないか確認する場合。
  • 2 つの URL(開発サーバーとプレビュー環境、またはベースラインとバリアントなど)を比較する場合。
  • PR 全体にわたる回帰を検出する CI ゲートが必要な場合。
  • フレームワークや CSS ライブラリを入れ替え、書き換え後も見た目が同等か確認する場合。

呼び出さない場合

  • 純粋なデータ構造のスナップショットテスト(Jest のスナップショットを使用してください)。
  • CLS/LCP/FCP 以外の Lighthouse/Web Vitals(Lighthouse を直接使用してください)。
  • 差分コンポーネントを使わないブラウザードライバー専用のフロー(Playwright Test を使用してください)。
  • AI が生成したスクリーンショットの内容が正しいか確認する場合(review-image のようなビジョン LLM ツールを使用してください)。

インストール

前提条件:Node 24 以降。 CLI とワークスペースの各パッケージは、いずれも Node の --experimental-strip-types(24 以降ではデフォルトで有効)に依存しています。 Node 22 では動作しません。インストール前に node --version で確認してください。アップグレードするには、nvm install 24 && nvm use 24(または fnm/volta/お好みのバージョン管理ツール)を使用してください。

事前チェック:scripts/doctor.sh を実行すると、Node のバージョン、Playwright Chromium、任意の API キー、インストール済みのサブスキルをまとめて確認できます。セットアップ段階に応じた 2 種類の実行方法があります。

  • インストール前(apm がまだない場合):curl で一度だけ実行 — bash <(curl -sSL https://raw.githubusercontent.com/mizchi/skills/main/vlmkit/scripts/doctor.sh)
  • インストール後(apm install -g mizchi/skills/vlmkit/vlmkit の実行後):ローカルのコピーを実行 — bash ~/.claude/skills/vlmkit/scripts/doctor.sh

重大度のルール:FAIL 扱いとなるのは Node 24 以降とPlaywright Chromiumだけです(終了コード 0 を阻止します)。vrt CLI がまだ PATH にない場合を含め、それ以外はすべて設計上 WARN です。このスクリプトはインストール途中でも実行できることを想定しているためです(初回実行時に vlmkit CLI が WARN となるのは想定どおりです。まずすべての FAIL を解消してから vrt をインストールし、再実行すると WARN が解消されます)。

# CLI (global)
pnpm add -g @mizchi/vrt
# or per-project
pnpm add -D @mizchi/vrt
npx playwright install chromium

# Library packages (deep imports via .ts source)
pnpm add @mizchi/vlmkit-core @mizchi/vlmkit-capture @mizchi/vlmkit-markup @mizchi/vlmkit-ai

CLI チートシート(0.5.0 の動詞グループ)

以下で使用する I/O の規則:--output <dir> には常にディレクトリパスを指定します(エンジンはその中に diff-report.json とビューポートごとの PNG を書き込みます)。vlmkit diff agent はデフォルトで Markdown を標準出力に書き込みます。ファイルに書き込むには --out <path> を指定してください。 位置引数を 2 つ取るコマンド(例:vlmkit diff html <baseline> <variant>)には、ローカルファイルパス 2 つ、または URL 2 つを指定できます。明示的に指定する場合は --url/--current-url を使用してください。

# Diff
vlmkit diff html <baseline> <variant> --output reports/        # → reports/diff-report.json + PNGs (dir output)
vlmkit diff agent reports/diff-report.json [--out diff.md]     # → stdout (default) or --out path
vlmkit diff png  base.png current.png                          # Direct PNG diff (positional files)
vlmkit diff elements --selector .card …                        # Element-level shift isolation
vlmkit diff browsers <url>                                     # Chromium / Firefox / WebKit parity
vlmkit diff runs <dirs...>                                     # Aggregate N VRT runs

# Snapshot (baseline + diff lifecycle)
vlmkit snapshot <url1> [url2]... --output snapshots/
vlmkit snapshot approve                                        # Promote current → baseline
vlmkit snapshot stability <url...> --iterations 5              # FP-rate measurement
vlmkit snapshot flipbook --output snapshots/                   # Embed PNGs in a self-contained HTML

# Check (CI gates)
vlmkit check a11y contrast|touch|focus <html>                  # WCAG scans
vlmkit check tokens <html>                                     # Design-token scale conformance
vlmkit check theme  <html>                                     # prefers-color-scheme parity
vlmkit check perf   <html>                                     # CLS / LCP / FCP

# Inspect / Stress / Scan / Build
vlmkit inspect interact|explore|smoke <html|url>
vlmkit stress  i18n|media  <html>
vlmkit scan    component|breakpoints  <…>
vlmkit build   component <target.png> <current.html>           # Markup-from-screenshot loop

# Migration (framework / CSS-library swap audit). Three modes:
#   compare  — deterministic side-by-side audit; the default. Start here.
#   blind    — variant agent never sees baseline pixels (forces convergence from spec text alone).
#   subagent — dispatched subagent runs `compare` + writes a verdict.
# `--mask` and `--output` work identically across all three modes.
vlmkit migration compare|blind|subagent <baseline> <variant> --output reports/

# Long-running / stateful
vlmkit watch       <baseline> <variant>                        # File-watcher inner loop
vlmkit manifest    add|list|rm|check                           # Approval rules
vlmkit diff-pr     pin|verify|post                             # PR CI gate
vlmkit baseline    pin|verify|post|list|rm                     # Canonical alias of diff-pr

0.4.x の単一トークン形式のコマンド(vrt compare、vrt png-diff、vrt theme-parity など)は、引き続き非推奨の互換コマンドとして利用できます。これらのコマンドは 1 行のヒントを表示して、後続の処理を転送します。

サブスキルの振り分け

設計上、リポジトリは2つあります:このオリエンテーションスキルは mizchi/skills(汎用 スキル)にあり、vrt 固有の5つのサブスキルは .claude/skills/ 配下の mizchi/vlmkit/vlmkit にあります。以下の2つの apm install パスが異なっているのは、 対象のリポジトリが異なるためです。これは意図的なもので、誤記ではありません。

サブスキルをインストールしなくても、CLI は完全に動作します — サブスキルは、特定のタスクの形に合わせた振り分けを詳しくする、エージェント向けの参考資料です。エージェントに追加のコンテキストが必要な場合にのみインストールしてください。コマンドラインから vrt を実行するエンドユーザーには必要ありません。

対象範囲の境界:このオリエンテーションスキルが扱うのは 振り分け までです。読み込むサブスキルがわかったら、詳細な運用情報 — すべてのフラグ一覧、永続化パス(例:回帰監視の .vrt/last-diff-for-agent.json)、モードごとの動作、出力スキーマ — は対応するサブスキルに記載されています。エージェントにその詳細が必要な場合は、上記の apm コマンドでインストールしてください。

apm install mizchi/vlmkit/.claude/skills/<skill-name>

タスクの形に合わせて選びます:

サブスキル使用する場面エントリーワークフロー
vrt-visual-diff単発で「この CSS の編集でピクセルに変化があったか、どこにあったか」を確認するvlmkit diff html → vlmkit diff agent
vrt-regression-watch実行をまたいだドリフト検出の CI ゲート/スケジュール実行vlmkit diff agent --previous --fail-on-regression
vrt-migration-evalフレームワーク/CSS ライブラリ/ビルドシステムの切り替え監査(意図的に大きな差分を生成)vlmkit migration compare|blind|subagent
vrt-markup-synthスクリーンショットからの HTML/CSS 生成、トークン/テーマ/i18n/a11y の監査vlmkit build|scan|check|stress
vrt-css-fix-loopVLM + LLM による CSS 自動修正ループfix-loop.ts (VRT_VLM_MODEL=…)

振り分けのヒューリスティック(ユーザーがタスクを伝えたら、自分に問いかけます):

Is the markup deliberately different (rewrite / framework swap)?
├─ yes → vrt-migration-eval
└─ no
   ├─ Need to detect change between runs over time? → vrt-regression-watch
   ├─ Want a CSS-fix loop (auto-repair)?          → vrt-css-fix-loop
   ├─ Building from a screenshot / token audit?   → vrt-markup-synth
   └─ One-shot "what changed"                     → vrt-visual-diff

出力の構成

vlmkit diff html は次を書き込みます:

<output>/
├── diff-report.json            # canonical machine input for diff agent
├── migration-report.json       # legacy alias, byte-identical (will be removed)
├── diff-mobile.png             # per-viewport pixel diff
├── diff-desktop.png
└── diff-wide.png

続いて vlmkit diff agent <report.json> は、次の構成の Markdown を出力します:

# VRT diff (for agent)

### Diff by viewport (worst first)
| Viewport | Diff | Dominant category | Categories | Shift bands |
| ...

### Verified deltas (computed-style) × viewport     ← HOISTED to #2
#### Universal pairs         ← fix the base rule
#### Breakpoint-gated pairs  ← fix or add @media rule

### Per-section diffRatio
### Heuristic fix candidates

先頭にまとめられた 検証済みの差分 が重要なシグナルです — まず Universal ペアを読み、次に Breakpoint で制御された項目を読み、その後 Per-section を詳しく確認します。

よくある注意点

  • マスキングは重要です。 実行のたびに変動する要素には、--mask ".marquee,.timestamp, [data-testid='live-counter']" を指定してください。 予期しないベースラインノイズの差分は、実際の回帰ではなく、マスクの指定漏れが原因であることがほとんどです。
  • 出力先はファイルではなくディレクトリです。 --output reports/ を指定すると、 reports/diff-report.json と PNG が生成されます。vlmkit diff agent にはディレクトリではなく、JSON のパスを渡してください。
  • Playwright のインストールが必要です。 初回実行時に "browser not found" とエラーが出た場合は、npx playwright install chromium を実行してください。
  • マスクなしで同じ URL 同士を比較すると、誤検知のベースラインになります。 差分%のしきい値を信頼する前に、--mask が変動する要素をすべて検出できることを確認するために使ってください。
  • dist バイナリはバンドルされています。 dist/vlmkit.mjs には、分割されたすべてのリーフコードが含まれています。インストール時にソースへの依存関係はありません。

環境変数

変数用途デフォルト
VRT_LLM_PROVIDERfix-loop 用の LLM プロバイダー(gemini / openrouter / anthropic)gemini
VRT_LLM_MODELLLM モデルの上書きプロバイダーのデフォルト
VRT_VLM_MODELVLM モデル(OpenRouter の ID、または gemini:/claude: プレフィックス)bytedance/ui-tars-1.5-7b
OPENROUTER_API_KEY / GEMINI_API_KEY / ANTHROPIC_API_KEYプロバイダーごとの認証情報—
VRT_CAPTURE_BACKENDlocal(デフォルトの Playwright)または cloudflare(Browser Run)local
DEBUG_VRT詳細なログ出力未設定

ライブラリの使用(vrt-core / vrt-capture / vrt-markup / vrt-ai)

CLI の機能では足りない場合は、該当するパッケージをディープインポートします:

import { compareScreenshots } from "@mizchi/vlmkit-core/heatmap.ts";
import { discoverViewports }  from "@mizchi/vlmkit-capture/viewport-discovery.ts";
import { extractComponents }  from "@mizchi/vlmkit-markup/component/component-extract.ts";
import { askVlm }             from "@mizchi/vlmkit-ai";

@mizchi/vlmkit-core の軽量な機能(画像/DOM/a11y のプリミティブ)には、Playwright への依存関係がありません。その他の3つのパッケージは、推移的に Playwright を取り込みます。

問題の報告/コントリビューション

コメント