Skip to content
Back to skills

1728 Validation 73f1cea2

ASecurity

**Date:** 2026-02-10 **System:** macOS Darwin 25.2.0, Apple Silicon (ARM64) **ffmpeg:** 8.0.1 (Homebrew, with libx264/libx265/videotoolbox/audiotoolbox) ---

  • 9 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added June 1, 2026
toolsgobashsecurity

Works with

  • claude code
  • cursor
  • terminal
  • cli
  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned June 1, 2026

npx -y skills add tools-only/X-Skills --skill 1728-validation_73f1cea2 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 1728 Validation 73f1cea2?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 1728 Validation 73f1cea2
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-1728-validation-73f1cea2/badge)](https://www.skillsdirectory.com/skills/tools-only-1728-validation-73f1cea2)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# Loom Capture Pipeline - Validation Report

**Date:** 2026-02-10
**System:** macOS Darwin 25.2.0, Apple Silicon (ARM64)
**ffmpeg:** 8.0.1 (Homebrew, with libx264/libx265/videotoolbox/audiotoolbox)

---

## Test Results Summary

| # | Test | Status | Notes |
|---|------|--------|-------|
| 1 | Dependencies (ffmpeg, osascript) | PASS | ffmpeg 8.0.1, osascript at /usr/bin/osascript |
| 2 | Chrome MCP Availability | FAIL | Requires `claude --chrome` flag. Extension not connected |
| 3 | Chrome Window Bounds (AppleScript) | PASS | Bounds: `0, 33, 1512, 915` (1512x882 usable) |
| 4 | ffmpeg avfoundation Screen Capture | PASS | 3024x1964 native, 30fps, h264, ~5s |
| 5 | macOS screencapture (fallback) | PASS | 3024x1964, 120fps native, h264, ~5s |
| 6 | Chrome Automation (MCP) | SKIP | Chrome MCP unavailable |
| 7 | Combined Capture + Automation | PASS | Background ffmpeg + osascript nav, 1280x720 scaled, 30fps |
| 8 | GIF Creator (MCP) | SKIP | Chrome MCP unavailable |
| 9 | FFmpeg Assembly Pipeline | PASS | Title card, silence, concat all work |

**Overall: 6/9 PASS, 0 FAIL (functional), 3 SKIP (Chrome MCP dependency)**

---

## Test Details

### Test 1: Dependencies

```bash
which ffmpeg && ffmpeg -version | head -1
# /opt/homebrew/bin/ffmpeg
# ffmpeg version 8.0.1 Copyright (c) 2000-2025 the FFmpeg developers

which osascript
# /usr/bin/osascript
```

Encoders confirmed: libx264, libx265, libmp3lame, libopus, libvpx, libwebp, videotoolbox, audiotoolbox.

### Test 2: Chrome MCP

```
mcp__claude-in-chrome__tabs_context_mcp -> "No Chrome extension connected."
```

Chrome MCP requires launching Claude Code with `claude --chrome` flag. The extension must be installed and Chrome running. This is an **environment requirement**, not a code issue.

### Test 3: Chrome Window Bounds

```bash
osascript -e 'tell application "Google Chrome" to get bounds of window 1'
# 0, 33, 1512, 915
```

- **Window position:** (0, 33) top-left
- **Window size:** 1512x882 (usable area)
- **Note:** Native Retina resolution is 3024x1964 (2x scaling)

### Test 4: ffmpeg avfoundation Screen Capture

```bash
ffmpeg -y -f avfoundation -framerate 30 \
  -capture_cursor 1 -capture_mouse_clicks 1 \
  -i "2:none" \
  -t 5 \
  -c:v libx264 -preset ultrafast -crf 18 \
  /tmp/loom-test/screen-test.mp4
```

**Output:**
- Resolution: 3024x1964 (native Retina)
- Frame rate: 30 fps
- Codec: h264 (libx264)
- Duration: 4.97s
- File size: 1.97 MB
- Bitrate: ~3226 kbps

**Key Notes:**
- Screen device index is `2` ("Capture screen 0")
- Audio device "none" disables audio capture
- `-capture_cursor 1 -capture_mouse_clicks 1` captures mouse interactions
- ffmpeg auto-overrides pixel format to uyvy422 (avfoundation limitation)
- `NSKVONotifying_AVCaptureScreenInput` warnings are cosmetic, non-fatal

### Test 5: macOS screencapture (Fallback)

```bash
screencapture -v -V 5 /tmp/loom-test/screencapture-test.mov
```

**Output:**
- Resolution: 3024x1964 (native Retina)
- Frame rate: 120 fps (!)
- Codec: h264
- Duration: 5.03s
- File size: 9.69 MB
- Container: MOV

**Comparison vs ffmpeg:**
- screencapture captures at 120fps (5x more than needed), producing 5x larger files
- ffmpeg gives precise control over fps, codec, CRF, and resolution
- **Recommendation: Use ffmpeg as primary, screencapture as emergency fallback**

### Test 7: Combined Background Capture + Automation

```bash
# Start recording in background
ffmpeg -y -f avfoundation -framerate 30 \
  -capture_cursor 1 -capture_mouse_clicks 1 \
  -i "2:none" -t 5 \
  -c:v libx264 -preset ultrafast -crf 18 \
  -pix_fmt yuv420p -s 1280x720 \
  /tmp/loom-test/combined-test.mp4 &
FFMPEG_PID=$!

# Perform actions during recording
sleep 1
osascript -e 'tell application "Google Chrome" to set URL of active tab of window 1 to "https://example.com"'
sleep 2
osascript -e 'tell application "System Events" to key code 125 using {command down}'
sleep 2

wait $FFMPEG_PID
```

**Output:**
- Resolution: 1280x720 (scaled from native)
- Frame rate: 30 fps
- Codec: h264 (libx264)
- Duration: 4.97s
- File size: 2.59 MB
- Bitrate: ~4369 kbps (more activity = slightly higher bitrate)

**Key Finding:** Background ffmpeg + foreground osascript automation works correctly. The pipeline can record while orchestrating Chrome navigation.

### Test 9: FFmpeg Assembly Pipeline

#### 9a: Title Card Generation
```bash
ffmpeg -y -f lavfi -i "color=c=0x1a1a2e:s=1280x720:d=3" \
  -vf "drawtext=text='Test Title':fontcolor=white:fontsize=48:x=(w-text_w)/2:y=(h-text_h)/2" \
  -c:v libx264 -crf 20 /tmp/loom-test/title-test.mp4
```
- Output: 7.4 KB, 1280x720, 3 seconds, 25fps
- drawtext filter works with default font

#### 9b: Silent Audio Track
```bash
ffmpeg -y -f lavfi -i "anullsrc=r=44100:cl=mono" -t 5 -c:a libmp3lame /tmp/loom-test/silence.mp3
```
- Output: 40 KB, 5 seconds, 44100 Hz mono

#### 9c: Video Concatenation
```bash
printf "file '/tmp/loom-test/title-test.mp4'\n" > /tmp/loom-test/concat.txt
echo "file '/tmp/loom-test/title-test.mp4'" >> /tmp/loom-test/concat.txt
ffmpeg -y -f concat -safe 0 -i /tmp/loom-test/concat.txt -c copy /tmp/loom-test/concat-test.mp4
```
- Output: 14 KB, 6.0 seconds (2 x 3s clips concatenated)
- Concat demuxer works with `-c copy` (no re-encoding)

---

## Video Specs Achieved

| Parameter | Native Capture | Scaled (720p) | Title Cards |
|-----------|---------------|---------------|-------------|
| Resolution | 3024x1964 | 1280x720 | 1280x720 |
| Frame Rate | 30 fps | 30 fps | 25 fps |
| Codec | h264 (libx264) | h264 (libx264) | h264 (libx264) |
| CRF | 18 | 18 | 20 |
| Preset | ultrafast | ultrafast | default |
| Bitrate | ~3226 kbps | ~4369 kbps | ~13 kbps |
| Profile | High 4:2:2 | Constrained Baseline | High |

---

## Recommended Capture Method

**Primary: ffmpeg avfoundation** (Test 4)

```bash
ffmpeg -y -f avfoundation -framerate 30 \
  -capture_cursor 1 -capture_mouse_clicks 1 \
  -i "2:none" \
  -t <DURATION> \
  -c:v libx264 -preset ultrafast -crf 18 \
  -pix_fmt yuv420p -s 1280x720 \
  <OUTPUT>.mp4
```

Advantages:
- Full control over resolution, fps, codec, quality
- Can scale on-the-fly (native 3024x1964 -> 1280x720)
- Smaller files than screencapture
- Can run in background while osascript drives Chrome
- `-t` flag provides reliable duration control

**Fallback: macOS screencapture** (Test 5)

```bash
screencapture -v -V <DURATION> <OUTPUT>.mov
```

Use only if ffmpeg avfoundation fails or Screen Recording permission is revoked.

---

## Issues and Workarounds

### 1. No `timeout` command on macOS
- macOS does not ship GNU `timeout`
- **Workaround:** Use ffmpeg's `-t` flag for duration control, or install `coreutils` (`brew install coreutils` for `gtimeout`)

### 2. Pixel format override warning
- ffmpeg warns: "Selected pixel format (yuv420p) is not supported by the input device"
- Automatically overrides to uyvy422 for capture, then converts to yuv420p for output
- **No action needed** — this is expected behavior

### 3. Chrome MCP requires --chrome flag
- `claude --chrome` must be used to enable Chrome browser tools
- Chrome extension must be installed and Chrome running
- **Impact:** Tests 6, 8 (Chrome automation, GIF creator) could not be validated
- **Workaround for automation:** osascript can drive Chrome navigation, scrolling, and window management as demonstrated in Test 7

### 4. NSKVONotifying warnings
- `objc: class 'NSKVONotifying_AVCaptureScreenInput' not linked into application`
- Cosmetic ObjC runtime warning, does not affect capture
- **No action needed**

---

## Screen Recording Permission Status

**GRANTED** — Both ffmpeg avfoundation and macOS screencapture successfully recorded the screen. This confirms that the terminal/Claude Code process has Screen Recording permission in System Settings > Privacy & Security > Screen Recording.

---

## Chrome MCP Status

| Component | Status |
|-----------|--------|
| Chrome installed | Yes (AppleScript can address it) |
| Chrome running | Yes (window bounds retrieved) |
| Chrome MCP extension | Not connected |
| `claude --chrome` flag | Not active in this session |

**To enable Chrome MCP:** Relaunch with `claude --chrome`

---

## Generated Test Artifacts

| File | Size | Description |
|------|------|-------------|
| `/tmp/loom-test/screen-test.mp4` | 1.97 MB | Native screen capture (3024x1964) |
| `/tmp/loom-test/screencapture-test.mov` | 9.69 MB | macOS screencapture fallback |
| `/tmp/loom-test/combined-test.mp4` | 2.59 MB | Background capture + automation (1280x720) |
| `/tmp/loom-test/title-test.mp4` | 7.4 KB | Generated title card |
| `/tmp/loom-test/silence.mp3` | 40 KB | Silent audio track |
| `/tmp/loom-test/concat-test.mp4` | 14 KB | Concatenated video test |

Files in this skill

  • README.md908 B
  • skill.md8.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.