Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Records browser sessions via Playwright and converts video to GIF. Use when creating web UI tutorials or demos showing browser interactions.
.claude/skills/athola-browser-recording/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 46% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 114% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 16% | 0% |
Record browser sessions using Playwright to create video captures of web UI interactions for tutorials and documentation.
This skill uses Playwright's built-in video recording to capture browser interactions. The workflow:
> 💡 Note: Claude Code 2.0.72+ includes native Chrome integration for interactive browser control. This skill (Playwright) is designed for automated recording workflows, CI/CD, and cross-browser support. For interactive debugging and live testing, consider using native Chrome integration. Both approaches complement each other - develop interactively with Chrome, then automate with Playwright specs.
When invoking this skill, create todos for:
- [ ] Validate Playwright is installed and configured
- [ ] Check spec file exists at specified path
- [ ] Execute Playwright spec with video recording
- [ ] Locate and verify video output
- [ ] Convert video to GIF using gif-generation skillVerification: Run the command with --help flag to verify availability.
Check that Playwright is available:
bashnpx playwright --version
Verification: Run the command with --help flag to verify availability.
If not installed, the user should run:
bashnpm install -D @playwright/test npx playwright install chromium
Verification: Run pytest -v to verify tests pass.
Verify the Playwright spec file exists. Spec files should:
specs/ or tests/ directory.spec.ts or .spec.js extensionRun the spec with video enabled:
bashnpx playwright test <spec-file> --config=playwright.config.ts
Verification: Run pytest -v to verify tests pass.
The config must enable video recording. See the spec-execution module for configuration details.
After recording completes, use the gif-generation skill to convert the WebM video to an optimized GIF:
**Verification:** Run the command with `--help` flag to verify availability.
Invoke scry:gif-generation with:
- input: <path-to-webm>
- output: <desired-gif-path>
- fps: 10 (recommended for tutorials)
- width: 800 (adjust based on content)Verification: Run the command with --help flag to verify availability.
typescriptimport { test, expect } from '@playwright/test'; test('demo workflow', async ({ page }) => { // Navigate to the application await page.goto('http://localhost:3000'); // Wait for page to be ready await page.waitForLoadState('networkidle'); // Perform demo actions await page.click('button[data-testid="start"]'); await page.waitForTimeout(500); // Allow animation to complete await page.fill('input[name="query"]', 'example search'); await page.waitForTimeout(300); await page.click('button[type="submit"]'); await page.waitForSelector('.results'); // Final pause to show results await page.waitForTimeout(1000); });
Verification: Run pytest -v to verify tests pass.
Create or update playwright.config.ts:
typescriptimport { defineConfig } from '@playwright/test'; export default defineConfig({ use: { video: { mode: 'on', size: { width: 1280, height: 720 } }, viewport: { width: 1280, height: 720 }, launchOptions: { slowMo: 100 // Slow down actions for visibility } }, outputDir: './test-results', });
Verification: Run pytest -v to verify tests pass.
| Error | Resolution | |-------|------------| | Playwright not installed | Run npm install -D @playwright/test | | Browser not installed | Run npx playwright install chromium | | Spec file not found | Verify path and file extension | | Video not created | Check Playwright config has video enabled | | Empty video file | validate spec actions complete before test ends |
Default output paths:
./test-results/<test-name>/video.webm./test-results/<test-name>/screenshot.pngmodules/spec-execution.md for detailed Playwright execution optionsmodules/video-capture.md for video format and quality settings| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-07 | fail→pass | 12,463 | 6,073 | -51% | 1 | 1 | 0% | 2,003 | 2,497 | +25% | 0 | 0 | — |
case-21 | fail→pass | 10,394 | 3,077 | -70% | 1 | 1 | 0% | 1,572 | 1,908 | +21% | 0 | 0 | — |
case-01 | pass→pass | 8,100 | 4,863 | -40% | 1 | 1 | 0% | 1,487 | 2,254 | +52% | 0 | 0 | — |
case-02 | pass→pass | 12,604 | 6,604 | -48% | 1 | 1 | 0% | 1,966 | 2,542 | +29% | 0 | 0 | — |
case-16 | pass→pass | 5,226 | 2,075 | -60% | 1 | 1 | 0% | 727 | 1,697 | +133% | 0 | 0 | — |
case-03 | pass→pass | 14,524 | 4,696 | -68% | 1 | 1 | 0% | 2,181 | 2,155 | -1% | 0 | 0 | — |
case-04 | fail→fail | 3,611 | 6,836 | +89% | 1 | 1 | 0% | 319 | 1,742 | +446% | 0 | 0 | — |
case-05 | fail→fail | 10,875 | 3,322 | -69% | 1 | 1 | 0% | 1,987 | 2,028 | +2% | 0 | 0 | — |
case-06 | fail→fail | 5,282 | 3,214 | -39% | 1 | 1 | 0% | 163 | 1,782 | +993% | 0 | 0 | — |
case-08 | fail→pass | 8,084 | 3,849 | -52% | 1 | 1 | 0% | 1,399 | 2,047 | +46% | 0 | 0 | — |
case-09 | pass→pass | 3,868 | 2,455 | -37% | 1 | 1 | 0% | 547 | 1,892 | +246% | 0 | 0 | — |
case-10 | pass→pass | 11,617 | 4,468 | -62% | 1 | 1 | 0% | 1,788 | 2,100 | +17% | 0 | 0 | — |
case-11 | pass→pass | 8,371 | 1,976 | -76% | 1 | 1 | 0% | 1,205 | 1,677 | +39% | 0 | 0 | — |
case-12 | pass→pass | 3,476 | 1,588 | -54% | 1 | 1 | 0% | 449 | 1,695 | +278% | 0 | 0 | — |
case-13 | pass→pass | 8,236 | 1,918 | -77% | 1 | 1 | 0% | 1,356 | 1,726 | +27% | 0 | 0 | — |
case-14 | fail→pass | 5,299 | 1,881 | -65% | 1 | 1 | 0% | 814 | 1,740 | +114% | 0 | 0 | — |
case-15 | pass→pass | 2,987 | 1,383 | -54% | 1 | 1 | 0% | 432 | 1,623 | +276% | 0 | 0 | — |
case-17 | fail→pass | 11,621 | 4,918 | -58% | 1 | 1 | 0% | 1,859 | 2,158 | +16% | 0 | 0 | — |
case-18 | pass→pass | 9,673 | 2,176 | -78% | 1 | 1 | 0% | 1,609 | 1,805 | +12% | 0 | 0 | — |
case-19 | pass→pass | 7,367 | 1,628 | -78% | 1 | 1 | 0% | 1,241 | 1,686 | +36% | 0 | 0 | — |
case-20 | fail→pass | 13,943 | 2,362 | -83% | 1 | 1 | 0% | 1,998 | 1,758 | -12% | 0 | 0 | — |
case-22 | pass→pass | 5,397 | 2,425 | -55% | 1 | 1 | 0% | 890 | 1,793 | +101% | 0 | 0 | — |
case-23 | pass→pass | 15,634 | 6,400 | -59% | 1 | 1 | 0% | 2,542 | 2,501 | -2% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 21 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +26 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.