pr-screenshots

GitHub

用于在游戏项目PR中自动捕获并对比前后端视觉变更截图的自动化技能。涵盖基于Diff的目标识别、离线客户端驱动、图形预设标准化及移动端适配,确保视觉提交符合规范。

.claude/skills/pr-screenshots/SKILL.md levy-street/world-of-claudecraft

Trigger Scenarios

需要为视觉变更提交提供before/after截图 执行代码审查或对比游戏界面变化 PR模板要求附带截图

Install

npx skills add levy-street/world-of-claudecraft --skill pr-screenshots -g -y
More Options

Non-standard path

npx skills add https://github.com/levy-street/world-of-claudecraft/tree/main/.claude/skills/pr-screenshots -g -y

Use without installing

npx skills use levy-street/world-of-claudecraft@pr-screenshots

指定 Agent (Claude Code)

npx skills add levy-street/world-of-claudecraft --skill pr-screenshots -a claude-code -g -y

安装 repo 全部 skill

npx skills add levy-street/world-of-claudecraft --all -g -y

预览 repo 内 skill

npx skills add levy-street/world-of-claudecraft --list

SKILL.md

Frontmatter
{
    "name": "pr-screenshots",
    "description": "Capture before\/after screenshots for a World of ClaudeCraft PR (desktop and mobile), commit them under docs\/screenshots, and reference them from the PR body. Use when a change is visual (render, HUD, CSS, content models, windows), when the PR template's screenshot requirement applies, or when asked to screenshot the game for a review or comparison. Covers the change-aware capture tooling, the before\/after protocol, and the known puppeteer\/CDP traps.",
    "user-invocable": true
}

PR screenshots

The repo rule (root CLAUDE.md): a visual change ships with before/after screenshots, desktop and mobile where relevant, committed under docs/screenshots/ and referenced from the PR body. This skill is the capture recipe.

1. Use the change-aware tooling first

With npm run dev running (serves :5173):

git diff <base>...HEAD > /tmp/pr.diff
BROWSER_PATH=/path/to/chrome DIFF_FILE=/tmp/pr.diff SHOTS_DIR=pr-shots \
  node scripts/pr_screenshots.mjs

scripts/pr_screenshots.mjs drives the OFFLINE client through the shared entry flow (scripts/enter_offline_game.mjs, which handles the intro overlay that otherwise hides #ui) and decides WHAT to shoot from the diff: specific windows via the target table, the generic desktop/mobile HUD for broad visual changes, and nothing for non-visual diffs.

Adding coverage is one entry in scripts/pr_shot_targets.mjs, not a new script. Each target maps changed-path substrings to a bring-up recipe (driving window.__game) and a clip region. Only write a bespoke scripts/<thing>_shot.mjs when the flow genuinely cannot be a target entry (for example an online-only or multi-client scene).

Standing capture rule (maintainer preference): every capture rig seeds the LOWEST graphics preset before the app boots. Seed it the way the existing rigs seed presets, via page.evaluateOnNewDocument writing localStorage woc_settings with { graphicsPreset: 1 } before page.goto. scripts/climb_stall_shot.mjs shows the seeding MECHANISM, but copy only the shape: that rig deliberately seeds a high profile (preset 5, the Advanced expert profile whose sub-dials it also seeds; the ladder in src/ui/options_view.ts tops out at the Insane preset above Ultra) because its purpose is a graphics shot. The default preset is not the lowest either (src/game/settings.ts pins the range), so an unseeded rig is NOT lowest. The one exception: shots whose PURPOSE is a graphics comparison (preset ladders, VFX quality, shadow tiers) keep the preset the comparison needs.

2. Before/after protocol

  1. Capture AFTER on your branch.
  2. git stash or check out the base commit in a scratch worktree, capture BEFORE with the same script and targets, restore.
  3. The Vite dev client picks up source changes live, but npm run server bundles at START: after any branch flip, restart the server before online captures or you will shoot a stale bundle.
  4. Move the keepers to docs/screenshots/<slug>/before-*.png / after-*.png, commit them, and reference them from the PR body with repo-relative links.
  5. For screenshots in a REVIEW COMMENT on someone else's PR: GitHub user-attachments upload URLs only work from the web UI. Push the PNGs to a gist and embed the gist's raw URLs instead.

3. Traps that have burned sessions before

  • Viewport sizing: after page.setViewport, window.innerWidth can be stale. Use raw CDP Emulation.setDeviceMetricsOverride for exact metrics, and remember CDP Page.captureScreenshot shoots the WINDOW, not the viewport: clip explicitly.
  • page.evaluate under tsx: tsx's keepNames injects __name and breaks nested functions inside evaluate callbacks. Pass string-form bodies to evaluateOnNewDocument/evaluate when a script runs under tsx.
  • window.__game proves reachability only to the window boundary. For a claim about real behavior, drive the actual bound key or click, not the debug hook.
  • Mobile is landscape-only in-game on the web client: use landscape device metrics for mobile HUD shots (the shell/guide/admin pages allow portrait).
  • Dev commands: captures that teleport, level, or grant items need a server started with ALLOW_DEV_COMMANDS=1 (dev only, never production).

Version History

  • 51b342b Current 2026-08-13 10:12
  • 2edc3ac 2026-07-19 18:52

Same Skill Collection

.agents/skills/woc-codex-audit/SKILL.md
.agents/skills/woc-extract-and-test/SKILL.md
.agents/skills/woc-feature-plan/SKILL.md
.agents/skills/woc-file-issue/SKILL.md
.agents/skills/woc-image-to-glb/SKILL.md
.agents/skills/woc-qa/SKILL.md
.agents/skills/woc-release-malware-audit/SKILL.md
.agents/skills/woc-release-merge-audit/SKILL.md
.agents/skills/woc-review-pr/SKILL.md
.agents/skills/woc-write-game-tooltips/SKILL.md
.claude/skills/blender-anim-pipeline/SKILL.md
.claude/skills/ci-triage/SKILL.md
.claude/skills/feature-plan/SKILL.md
.claude/skills/file-issue/SKILL.md
.claude/skills/image-to-glb/SKILL.md
.claude/skills/qa/SKILL.md
.claude/skills/write-game-tooltips/SKILL.md
.claude/skills/extract-and-test/SKILL.md
.claude/skills/i18n-locale-fill/SKILL.md
.claude/skills/release-malware-audit/SKILL.md
.claude/skills/review-pr/SKILL.md

Metadata

Files
0
Version
51b342b
Hash
6850e6dd
Indexed
2026-07-19 18:52

ホーム - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-13 13:42
浙ICP备14020137号-1 $お客様$