media-composition
Scannednpx machina-cli add skill athola/claude-night-market/media-composition --openclawTable of Contents
- Overview
- Required TodoWrite Items
- Manifest Format
- Manifest Schema
- Step-by-Step Process
- 1. Parse Manifest File
- 2. Validate Component Outputs
- 3. Execute FFmpeg Composition
- 4. Verify Combined Output
- FFmpeg Composition Commands
- Vertical Stacking
- Horizontal Stacking
- Sequential Concatenation
- Grid Layout (2x2)
- With Background Color
- Layout Options
- Layout Option Details
- Example Compositions
- Terminal + Browser Tutorial
- Side-by-Side Comparison
- Picture-in-Picture
- Exit Criteria
Media Composition Skill
Combine multiple media assets (GIFs, videos, images) into composite outputs for detailed tutorials and documentation.
When To Use
- Combining multiple media outputs into compositions
- Creating composite demos from terminal and browser recordings
When NOT To Use
- Single-format output that does not need composition
- Simple terminal recordings - use scry:vhs-recording directly
Overview
This skill orchestrates the combination of separately generated media assets into unified outputs. It reads manifest files that define components and their composition rules, validates all inputs exist, and executes FFmpeg commands to produce the final composite media.
Required TodoWrite Items
- Parse composition manifest file
- Validate all component outputs exist
- Determine composition layout and parameters
- Execute FFmpeg composition command
- Verify combined output file created
- Report composition metrics (file size, dimensions)
Verification: Run the command with --help flag to verify availability.
Manifest Format
Manifests define the components to combine and how to arrange them:
# Example manifest: tutorials/mcp.manifest.yaml
name: mcp
title: "MCP Server Integration"
components:
- type: tape
source: mcp.tape
output: assets/gifs/mcp-terminal.gif
- type: playwright
source: browser/mcp-browser.spec.ts
output: assets/gifs/mcp-browser.gif
requires:
- "skrills serve"
combine:
output: assets/gifs/mcp-combined.gif
layout: vertical
options:
padding: 10
background: "#1a1a2e"
Verification: Run the command with --help flag to verify availability.
Manifest Schema
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Identifier for the composition |
title | string | No | Human-readable title |
components | array | Yes | List of media components to combine |
components[].type | string | Yes | Source type: tape, playwright, static |
components[].source | string | Yes | Path to source file |
components[].output | string | Yes | Path to generated output |
components[].requires | array | No | Commands to run before generation |
combine.output | string | Yes | Path for combined output |
combine.layout | string | Yes | Layout mode (see table below) |
combine.options | object | No | Layout-specific options |
Step-by-Step Process
1. Parse Manifest File
# Read and validate manifest structure
yq eval '.' manifest.yaml
# Extract component outputs
yq eval '.components[].output' manifest.yaml
Verification: Run the command with --help flag to verify availability.
2. Validate Component Outputs
# Check all required files exist
for output in $(yq eval '.components[].output' manifest.yaml); do
if [[ ! -f "$output" ]]; then
echo "ERROR: Missing component: $output"
exit 1
fi
done
Verification: Run the command with --help flag to verify availability.
3. Execute FFmpeg Composition
Based on the layout specified in the manifest, execute the appropriate FFmpeg command.
4. Verify Combined Output
# Verify output exists and has content
if [[ -f "$output" && -s "$output" ]]; then
echo "Composition successful: $output"
ls -lh "$output"
else
echo "ERROR: Composition failed"
exit 1
fi
Verification: Run the command with --help flag to verify availability.
FFmpeg Composition Commands
Vertical Stacking
Stack GIFs/videos top to bottom:
ffmpeg -i top.gif -i bottom.gif \
-filter_complex "[0:v][1:v]vstack=inputs=2" \
-y output.gif
Verification: Run the command with --help flag to verify availability.
With padding between:
ffmpeg -i top.gif -i bottom.gif \
-filter_complex "[0:v]pad=iw:ih+10:0:0:color=black[top];[top][1:v]vstack=inputs=2" \
-y output.gif
Verification: Run the command with --help flag to verify availability.
Horizontal Stacking
Stack GIFs/videos side by side:
ffmpeg -i left.gif -i right.gif \
-filter_complex "[0:v][1:v]hstack=inputs=2" \
-y output.gif
Verification: Run the command with --help flag to verify availability.
Sequential Concatenation
Play GIFs/videos one after another:
# Create concat list file
cat > concat_list.txt << EOF
file 'first.gif'
file 'second.gif'
file 'third.gif'
EOF
# Concatenate
ffmpeg -f concat -safe 0 -i concat_list.txt \
-y output.gif
Verification: Run the command with --help flag to verify availability.
Grid Layout (2x2)
ffmpeg -i tl.gif -i tr.gif -i bl.gif -i br.gif \
-filter_complex "[0:v][1:v]hstack=inputs=2[top];[2:v][3:v]hstack=inputs=2[bottom];[top][bottom]vstack=inputs=2" \
-y output.gif
Verification: Run the command with --help flag to verify availability.
With Background Color
ffmpeg -i top.gif -i bottom.gif \
-filter_complex "color=c=#1a1a2e:s=800x600[bg];[bg][0:v]overlay=0:0[tmp];[tmp][1:v]overlay=0:300" \
-y output.gif
Verification: Run the command with --help flag to verify availability.
Layout Options
| Layout | Description | Options |
|---|---|---|
vertical | Stack top to bottom | padding, background, align |
horizontal | Stack left to right | padding, background, align |
sequential | Play in order | transition, duration |
grid | N x M grid arrangement | rows, cols, padding |
overlay | Layer on top of each other | position, opacity |
pip | Picture-in-picture | corner, scale, margin |
Layout Option Details
| Option | Type | Default | Description |
|---|---|---|---|
padding | int | 0 | Pixels between components |
background | string | "black" | Background color (hex or name) |
align | string | "center" | Alignment: left, center, right |
transition | string | "none" | Transition type: fade, wipe, none |
scale | float | 0.25 | Scale factor for PiP |
corner | string | "br" | PiP corner: tl, tr, bl, br |
Example Compositions
Terminal + Browser Tutorial
name: plugin-demo
components:
- type: tape
source: demo.tape
output: terminal.gif
- type: playwright
source: browser.spec.ts
output: browser.gif
combine:
output: demo-combined.gif
layout: vertical
options:
padding: 5
background: "#0d1117"
Verification: Run the command with --help flag to verify availability.
Side-by-Side Comparison
name: before-after
components:
- type: static
source: before.gif
output: before.gif
- type: static
source: after.gif
output: after.gif
combine:
output: comparison.gif
layout: horizontal
options:
padding: 10
Verification: Run the command with --help flag to verify availability.
Picture-in-Picture
name: pip-demo
components:
- type: tape
source: main.tape
output: main.gif
- type: playwright
source: overlay.spec.ts
output: overlay.gif
combine:
output: pip-demo.gif
layout: pip
options:
corner: br
scale: 0.3
margin: 20
Verification: Run the command with --help flag to verify availability.
Exit Criteria
- Manifest file parsed successfully
- All component outputs validated as existing
- FFmpeg composition command executed without errors
- Combined output file exists and has non-zero size
- Output dimensions and duration logged
- Temporary files cleaned up
Troubleshooting
Common Issues
Command not found Ensure all dependencies are installed and in PATH
Permission errors Check file permissions and run with appropriate privileges
Unexpected behavior
Enable verbose logging with --verbose flag
Source
git clone https://github.com/athola/claude-night-market/blob/master/plugins/scry/skills/media-composition/SKILL.mdView on GitHub Overview
Media Composition stitches GIFs, videos, and images into unified tutorial outputs. It reads a manifest to define components and layouts, validates inputs, and uses FFmpeg to produce vertical, horizontal, or grid-style composites for documentation and demonstrations.
How This Skill Works
The skill reads a manifest that lists media components and a desired layout, validates that each component output exists, then builds and executes FFmpeg commands to stitch, tile, or stack the assets into a final composite. It can handle vertical, horizontal, grid, and other layout options, optionally applying padding or background colors before outputting the final file.
When to Use It
- When you need to merge multiple media outputs into a single cohesive tutorial
- When creating composite demos that pair terminal recordings with browser interactions
- When arranging assets in vertical, horizontal, or grid layouts for clear demonstrations
- When you must validate component outputs exist before running the composition
- When you want to verify final output properties (size, dimensions) after generation
Quick Start
- Step 1: Create a manifest describing components and the desired layout
- Step 2: Run the FFmpeg-based composition tool with the manifest to produce the output
- Step 3: Verify the final file exists and review its dimensions and quality
Best Practices
- Define a clear manifest with all components, their sources, outputs, and the desired layout
- Validate that every component output exists before executing the FFmpeg command
- Start with a simple layout (e.g., 2x1) and iterate to more complex grids
- Use layout options like padding and background color to improve readability
- After generation, verify the final file’s dimensions and file size match expectations
Example Use Cases
- A 2x2 grid combining terminal recordings and a browser demo for a product walkthrough
- Side-by-side video and terminal transcript to document a CLI workflow
- Vertical stack of GIFs showing step-by-step instructions for a setup guide
- A mixed media tutorial with a colored background to separate components
- Sequential concatenation of tutorial clips into a single narrated guide
Frequently Asked Questions
Related Skills
browser-recording
athola/claude-night-market
Record browser sessions using Playwright for web UI tutorials, converts
vhs-recording
athola/claude-night-market
Generate terminal recordings using VHS tape files, produces GIF outputs.
gif-generation
athola/claude-night-market
Post-process video files and generate optimized GIFs. Converts webm/mp4