MR
Mayur Rathi
@github
⭐ 34.1k GitHub stars

Ui-Screenshots

Ui-Screenshots是一款design方向的AI技能,核心价值是Capture screenshots of web apps during development using Playwright and PIL,可用于解决开发者在design领域的实际问题,帮助用户提升效率、自动化重复任务或优化工作流。

Capture screenshots of web apps during development using Playwright and PIL. Supports full-page captures, interactive states, and an iterate-on-crop workflow that avoids slow re-screenshots.

Last verified on: 2026-05-30
mkdir -p ./skills/ui-screenshots && curl -sfL https://raw.githubusercontent.com/github/awesome-copilot/main/skills/ui-screenshots/SKILL.md -o ./skills/ui-screenshots/SKILL.md

Run in terminal / PowerShell. Requires curl (Unix) or PowerShell 5+ (Windows).

Skill Content

# UI Screenshots


Capture screenshots of web apps and graphical UIs during development to document visual changes.


When to Use This Skill


Use this skill when you need to:


- Capture the current state of a running web app

- Document a UI before and after a code change

- Screenshot interactive states (tooltips, hovers, selected elements)

- Capture specific sections of a page without re-screenshotting


Prerequisites


bash
pip install playwright Pillow -q
playwright install chromium

Core Workflow


1. Take a raw full-page screenshot


python
from playwright.async_api import async_playwright

async def capture(url="http://localhost:3000", out="screenshot-raw.png", width=1400, height=5000):
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page(viewport={"width": width, "height": height})
        await page.goto(url, wait_until="networkidle")
        await page.wait_for_timeout(4000)  # let charts/animations render
        await page.screenshot(path=out, full_page=True)
        await browser.close()

- Use a **tall viewport** (height=5000) so the page renders everything without scrolling

- `wait_until="networkidle"` + `wait_for_timeout(4000)` ensures async charts load

- `full_page=True` captures the entire scrollable content


2. View the raw image, then crop with PIL


**Do NOT try to get perfect crops via Playwright's `clip` parameter.** It's unreliable with full-page captures.


python
from PIL import Image

img = Image.open("screenshot-raw.png")
cropped = img.crop((left, top, right, bottom))  # adjust based on what you see
cropped.save("screenshot-final.png")

1. Take the raw screenshot

2. View it to see actual pixel positions

3. Crop with PIL based on what you see

4. View the result — if not right, re-crop (instant, no re-screenshot needed)


3. Iterate on crop, not on capture


- Re-screenshotting is slow (browser launch + page load + render wait)

- Re-cropping is instant (just PIL)

- Get one good raw capture, then slice it as many ways as needed


4. Interactive states


python
element = page.locator("selector").first
await element.hover()
await page.wait_for_timeout(1000)  # let tooltip appear
await page.screenshot(path="screenshot-hover.png", full_page=True)

For "selected" state without hover effect, move the mouse away after clicking:


python
await element.click()
await page.mouse.move(300, 300)  # move away so hover doesn't show
await page.wait_for_timeout(500)
await page.screenshot(path="screenshot-selected.png", full_page=True)

5. Section-specific captures


Crop different sections from a single full-page screenshot:


python
img.crop((0, 200, 920, 900)).save("screenshot-header.png")
img.crop((0, 900, 920, 1600)).save("screenshot-main.png")

Guidelines


1. **Always capture before state BEFORE making any changes** — if you forget, you have to revert code to get a before shot

2. **Before/after pairs must use the same viewport width and crop** — otherwise the comparison is useless

3. **To get a "before" after you already changed code**: use `git checkout HEAD~1 -- <files>` to revert, screenshot, then `git checkout HEAD -- <files>` to restore

4. **For interactive states**: capture before AND after for each state — don't assume the "normal" before covers all cases

5. **Use `device_scale_factor=1`** in Playwright to force 1x pixels so screenshots match what users see at 100% zoom

6. **Charts need extra wait time** — Plotly, D3, etc. render asynchronously; 4s minimum after networkidle

7. **Narrow viewport reveals rendering bugs** — some border/alignment issues only appear at specific widths


Non-Web App Screenshots


For desktop apps (VS, WPF, WinForms, console apps, terminals) where Playwright can't reach.


mss + ctypes (recommended for desktop windows)


Find a window by title via Win32 API, capture its region with `mss`. Tested at ~33ms per capture.


python
import ctypes
from ctypes 

🎯 Best For

  • UI designers
  • Product designers
  • Claude users
  • GitHub Copilot users
  • Designers

💡 Use Cases

  • Generating component mockups
  • Creating design system tokens
  • Design system documentation
  • Component specification creation

📖 How to Use This Skill

  1. 1

    Install the Skill

    Copy the install command from the Terminal tab and run it. The SKILL.md file downloads to your local skills directory.

  2. 2

    Load into Your AI Assistant

    Open Claude or GitHub Copilot and reference the skill. Paste the SKILL.md content or use the system prompt tab.

  3. 3

    Apply Ui-Screenshots to Your Work

    Provide context for your task — paste source material, describe your audience, or share existing work to guide the AI.

  4. 4

    Review and Refine

    Edit the AI output for accuracy, tone, and completeness. Add human insight where the AI lacks context.

❓ Frequently Asked Questions

Does this work with Figma?

Some design skills integrate with Figma plugins. Check the Works With section for supported tools.

Does Ui-Screenshots generate production-ready design specs?

It generates detailed specifications that developers can use directly. Review and adjust for your specific design system.

How do I install Ui-Screenshots?

Copy the install command from the Terminal tab and run it. The skill downloads to ./skills/ui-screenshots/SKILL.md, ready to use.

Can I customize this skill for my team?

Absolutely. Edit the SKILL.md file to add team-specific instructions, examples, or workflows.

⚠️ Common Mistakes to Avoid

Skipping usability testing

AI-generated designs should be validated with real users before development.

Not reading the full skill

Skills contain important context and edge cases beyond the quick start.

🔗 Related Skills