MR
Mayur Rathi
@github
⭐ 34.1k GitHub stars

Screen-Recording

Screen-Recording is an learning AI skill with a core value of Create annotated animated GIF demos and screen recordings for pull requests and documentation. It helps developers solve real-world problems in the learning domain, boosting efficiency, automating repetitive tasks, and optimizing workflows.

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-07-14

Quick Facts

Category learning
Works With Claude, GitHub Copilot
Source github/awesome-copilot
Stars ⭐ 34.1k
Last Verified 2026-07-14
Risk Level Low
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