MR
Mayur Rathi
@github
⭐ 34.1k GitHub stars

Screen-Recording

Screen-Recording是一款learning方向的AI技能,核心价值是Create annotated animated GIF demos and screen recordings for pull requests and documentation,可用于解决开发者在learning领域的实际问题,帮助用户提升效率、自动化重复任务或优化工作流。

Create annotated animated GIF demos and screen recordings for pull requests and documentation. Covers frame capture, timing, imageio-based GIF creation, and per-frame annotation workflows.

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

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

Skill Content

# Screen Recording


Create animated GIF demos that show a feature or workflow in action — with annotations, variable timing, and proper pacing. Useful for PR descriptions, documentation, and release notes.


When to Use This Skill


Use this skill when you need to:


- Record a multi-step UI interaction as an animated GIF

- Create a demo showing before/after behavior

- Build annotated walkthroughs for documentation or release notes

- Show a bug reproduction or fix in action


Prerequisites


bash
pip install playwright Pillow imageio numpy scipy mss -q
playwright install chromium

Core Workflow


1. Capture frames


Use Playwright to step through the interaction and capture each frame:


python
from playwright.async_api import async_playwright

async def record_frames(url, steps, width=1400, height=900):
    """
    steps: list of dicts with 'action' (async callable taking page)
           and 'name' (frame filename)
    """
    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")

        for step in steps:
            if step.get("action"):
                await step["action"](page)
                await page.wait_for_timeout(step.get("wait", 500))
            await page.screenshot(path=step["name"])

        await browser.close()

2. Assemble GIF with imageio


**Use imageio, not PIL, for GIF writing** — PIL's GIF encoder merges visually similar frames, which kills animations.


python
import imageio.v3 as iio
from PIL import Image
import numpy as np

frames = []
durations = []

for frame_path, duration_ms in frame_list:
    img = Image.open(frame_path)
    frames.append(np.array(img))
    durations.append(duration_ms)

iio.imwrite("demo.gif", frames, duration=durations, loop=0)

3. Variable frame timing


Uniform timing makes everything feel either too fast or too slow. Use variable durations:


| Phase | Duration | Why |

|-------|----------|-----|

| Fast action (typing, clicking) | 100ms | Feels natural, keeps energy |

| Pause after action | 600-800ms | Let the viewer process what happened |

| Hero/final message | 500ms+ | Main takeaway needs time to land |


4. Annotate frames


Apply annotations to specific frames using the `image-annotations` skill:


python
from PIL import Image, ImageDraw, ImageFont

def annotate_frame(frame_path, annotations, out_path):
    img = Image.open(frame_path)
    draw = ImageDraw.Draw(img)

    for ann in annotations:
        # Apply annotation (rect, arrow, label, etc.)
        pass

    img.save(out_path)

5. Fade-in annotations


For smooth annotation appearance:


python
def apply_fade(base_frame, annotation_layer, alpha):
    """Blend annotation onto frame at given alpha (0.0 to 1.0)"""
    blended = Image.blend(
        base_frame.convert("RGBA"),
        annotation_layer.convert("RGBA"),
        alpha
    )
    return blended.convert("RGB")

# 2-frame pop-in at 10fps: 50% then 100%
faded_frames = [
    apply_fade(base, annotations, 0.5),  # frame 1: half opacity
    apply_fade(base, annotations, 1.0),  # frame 2: full opacity
]

At 10fps, use 2 fade frames (0.2s total). At 30fps, use 3-4 frames. Easing curves look bad at low FPS — simple pop-in is snappier and more readable.


Build as a Script


The annotation logic gets complex for anything beyond trivial demos. Write a dedicated script (e.g., `annotate_gif.py`) with functions instead of inline code. You'll iterate on timing and placement.


Testing Animations


**Always test in isolation first** — don't rebuild the full demo to test a fade tweak:


python
# Small test GIF: 10 bare frames → fade frames → 15 hold frames
# Add a frame counter overlay for debugging:
draw.text((10, height - 30), f"F{i}/{total} a={alpha:.0%} FADE",
          fill="white", font=small_font)

Desktop Screen Recording (mss)


For recordin

🎯 Best For

  • Technical writers
  • API documentation teams
  • Claude users
  • GitHub Copilot users
  • Students

💡 Use Cases

  • Generating JSDoc/TSDoc comments
  • Writing README files for new projects
  • Using Screen-Recording in daily workflow
  • Automating repetitive learning tasks

📖 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 Screen-Recording 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 it follow my documentation style?

Most documentation skills respect existing style. Provide a style guide or example in your prompt.

How do I install Screen-Recording?

Copy the install command from the Terminal tab and run it. The skill downloads to ./skills/screen-recording/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

Auto-generating without reviewing

AI documentation can contain inaccuracies. Always verify technical accuracy.

Not reading the full skill

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

🔗 Related Skills