Skill: athola/nm-scry-vhs-recording (version 1.0.2)

--- name: vhs-recording description: Generate terminal recordings using VHS tape files, produces GIF outputs version: 1.9.5 triggers: - vhs - terminal - recording - gif - demo - tutorial metadata: {"openclaw": {"homepage": "https://github.com/athola/claude-night-market/tree/master/plugins/scry", "emoji": "\ud83e\udd9e"}} source: claude-night-market source_plugin: scry --- > **Night Market Skill** — ported from [claude-night-market/scry](https://github.com/athola/claude-night-market/tree/master/plugins/scry). For the full experience with agents, hooks, and commands, install the Claude Code plugin. # VHS Recording Skill Generate professional terminal recordings from VHS tape files. ## When To Use - Recording terminal sessions with VHS tape scripts - Creating terminal demo recordings for documentation ## When NOT To Use - Browser-based workflows - use scry:browser-recording instead - Non-terminal demos or GUI applications ## Overview VHS converts declarative tape files into animated GIFs of terminal sessions. Tape files define commands, timing, and terminal appearance. ## Required TodoWrite Items ``` - Locate and validate tape file - Check VHS installation status - Execute VHS recording - Verify output GIF creation ``` ## Module Reference - See `modules/tape-syntax.md` for VHS tape file directives - See `modules/execution.md` for recording workflow details ## Workflow ### Phase 1: Validate Tape File 1. Confirm tape file exists at specified path 2. Read tape file contents 3. Verify required directives: - `Output` directive specifies GIF destination - At least one action command (Type, Enter, etc.) ### Phase 2: Check VHS Installation ```bash which vhs && vhs --version ``` If not installed: ```bash # Linux/WSL go install github.com/charmbracelet/vhs@latest # macOS brew install charmbracelet/tap/vhs # Also requires ttyd and ffmpeg ``` ### Phase 3: Execute Recording ```bash vhs <tape-file.tape> ``` VHS will: 1. Parse tape file directives 2. Launch virtual terminal (ttyd) 3. Execute commands with timing 4. Capture frames 5. Encode to GIF using ffmpeg ### Phase 4: Verify Output 1. Check GIF file exists at Output path 2. Verify file size is non-zero 3. Report success with output location ## Exit Criteria - GIF file created at specified Output path - File size indicates successful recording (typically >50KB) - No error messages from VHS execution ## Troubleshooting ### Common Issues If `vhs` is not found, verify that your Go bin directory is in your `PATH` (typically `~/go/bin`). If the recording fails to start, ensure `ttyd` and `ffmpeg` are installed, as VHS depends on them for terminal emulation and video encoding. For "permission denied" errors when writing the GIF, check that the output directory exists and is writable.

path: modules/execution.md
content: # VHS Execution Guide

## Pre-flight Checks

### VHS Installation

```bash
# Check if installed
which vhs

# Check version
vhs --version
```

### Dependencies

VHS requires:
- **ttyd**: Terminal emulator for web
- **ffmpeg**: Video/image encoding

```bash
# Verify dependencies
which ttyd ffmpeg
```

### Installation

```bash
# Go (recommended)
go install github.com/charmbracelet/vhs@latest

# macOS
brew install charmbracelet/tap/vhs

# Arch Linux
yay -S vhs

# Nix
nix-env -iA nixpkgs.vhs
```

### Tape File Validation

Check tape file before execution:

```bash
# Verify file exists
test -f tape-file.tape && echo "Found" || echo "Missing"

# Check for Output directive
rg -q "^Output" tape-file.tape && echo "Has output" || echo "No output directive"
# fallback: grep -q "^Output" tape-file.tape

# Validate syntax (dry run)
vhs validate tape-file.tape
```

## Environment Setup

### Terminal Environment

VHS creates an isolated terminal. Set environment variables in the tape:

```tape
Set Env "HOME" "/home/user"
Set Env "PATH" "/usr/local/bin:/usr/bin:/bin"
Set Env "TERM" "xterm-256color"
```

### Working Directory

VHS runs from the directory containing the tape file. For different directories:

```tape
Hide
Type "cd /path/to/project"
Enter
Sleep 500ms
Show
```

## Running VHS

### Basic Execution

```bash
vhs tape-file.tape
```

### With Options

```bash
# Publish to vhs.charm.sh (public)
vhs tape-file.tape --publish

# Output to specific location
vhs tape-file.tape -o custom-output.gif
```

### Batch Recording

```bash
# Record all tape files
for tape in *.tape; do
  vhs "$tape"
done
```

## Error Handling

### Common Issues

**ttyd not found**
```bash
# Install ttyd
go install github.com/aspect-build/aspect-cli/pkg/ttyd@latest
# Or via package manager
```

**ffmpeg errors**
```bash
# validate ffmpeg is installed with required codecs
ffmpeg -version
```

**Permission denied**
```bash
# Check write permissions for output directory
ls -la "$(dirname output.gif)"
```

**Empty output**
- Verify commands produce visible output
- Increase Sleep times after commands
- Check terminal dimensions fit content

### Debug Mode

```bash
# Verbose output
VHS_DEBUG=1 vhs tape-file.tape
```

## WSL2 Considerations

### Graphics Support

VHS in WSL2 may require:
- WSLg enabled (Windows 11+)
- X server for older Windows 10

### Path Handling

Use Linux-style paths in tape files:
```tape
# Correct
Output /home/user/output.gif

# Avoid Windows paths
# Output C:\Users\...
```

### Performance

WSL2 disk I/O to Windows filesystem is slow. Keep tapes and outputs on Linux filesystem:

```bash
# Good: Linux filesystem
/home/user/recordings/

# Slow: Windows mount
/mnt/c/Users/...
```

### Font Availability

Install fonts in WSL2:
```bash
sudo apt install fonts-jetbrains-mono
fc-cache -fv
```

## Output Verification

After recording:

```bash
# Check file exists and has content
ls -la output.gif

# Verify file type
file output.gif

# Check dimensions (requires ImageMagick)
identify output.gif | head -1
```

## Integration with Documentation

Move outputs to documentation directories:

```bash
# Move to docs
mv output.gif docs/images/

# Update markdown references
# ![Demo](images/output.gif)
```


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)