Skip to main content
media-composition Combines GIFs and videos into composite tutorials with vertical or grid layouts via ffmpeg. Use when assembling multi-part media into a single output.
설치로 이동 Skills Marketplace 커뮤니티가 만든 AI 스킬을 발견하고 탐색하세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/athola/claude-night-market --skill media-composition명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Zip 다운로드 다운로드 중... name media-composition description Combines GIFs and videos into composite tutorials with vertical or grid layouts via ffmpeg. Use when assembling multi-part media into a single output. alwaysApply false category media-generation tags ["composition","ffmpeg","media","combine","stitch","tutorial"] tools [] complexity medium model_hint standard estimated_tokens 450 progressive_loading false dependencies ["scry:gif-generation"]
Table of Contents
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.
Prerequisites
The following tools must be available on PATH before using this skill:
ffmpeg: media composition and encoding
yq: YAML manifest parsing
Run ffmpeg -version and yq --version to verify availability.
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)
Manifest Format
Manifests define the components to combine and how to arrange them:
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"
Manifest Schema Field Type Required Description namestring Yes Identifier for the composition titlestring No Human-readable title componentsarray Yes List of media components to combine components[].typestring Yes Source type: tape, playwright, static components[].sourcestring Yes Path to source file components[].outputstring Yes Path to generated output components[].requiresarray No Commands to run before generation combine.outputstring Yes Path for combined output combine.layoutstring Yes Layout mode (see table below) combine.optionsobject No Layout-specific options
Step-by-Step Process
1. Parse Manifest File
yq eval '.' manifest.yaml
yq eval '.components[].output' manifest.yaml
2. Validate Component Outputs
for output in $(yq eval '.components[].output' manifest.yaml); do
if [[ ! -f "$output " ]]; then
echo "ERROR: Missing component: $output "
exit 1
fi
done
3. Execute FFmpeg Composition Based on the layout specified in the manifest, execute the appropriate
FFmpeg command.
4. Verify Combined Output
if [[ -f "$output " && -s "$output " ]]; then
echo "Composition successful: $output "
ls -lh "$output "
else
echo "ERROR: Composition failed"
exit 1
fi
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
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
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
Sequential Concatenation Play GIFs/videos one after another:
cat > concat_list.txt << EOF
file 'first.gif'
file 'second.gif'
file 'third.gif'
EOF
ffmpeg -f concat -safe 0 -i concat_list.txt \
-y output.gif
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
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
Layout Options Layout Description Options verticalStack top to bottom padding, background, alignhorizontalStack left to right padding, background, alignsequentialPlay in order transition, durationgridN x M grid arrangement rows, cols, paddingoverlayLayer on top of each other position, opacitypipPicture-in-picture corner, scale, margin
Layout Option Details Option Type Default Description paddingint 0 Pixels between components backgroundstring "black" Background color (hex or name) alignstring "center" Alignment: left, center, right transitionstring "none" Transition type: fade, wipe, none scalefloat 0.25 Scale factor for PiP cornerstring "br" PiP corner: tl, tr, bl, br
Example Compositions
Terminal and 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"
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
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
Exit Criteria