Receber por email
← Voltar para o catálogo

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.

314estrelas
Atualizado há 4 meses

Ver no GitHub ↗ Licença: MIT

Como adicionar

/plugin marketplace add athola/claude-night-market

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Para o autor da skill

Cole no README do seu repo

Mostra que sua skill está catalogada na Skillteca, gera backlink e tráfego rastreável.

[![Skillteca](https://www.skillteca.com.br/api/badge/media-composition/svg)](https://www.skillteca.com.br/skills/media-composition)

Skills relacionadas

Ver todas de Pesquisa e Web →

Alerta por categoria

Receba novas skills de Pesquisa e Web toda segunda

1 email curto, só com as skills novas de Pesquisa e Web. 4 minutos de leitura, sem spam, cancela com 1 clique.

Você confirma o email no primeiro envio. Sem spam. Cancela com 1 clique.

Ler descrição completa

Table of Contents

  • [Overview](#overview)
  • [Required TodoWrite Items](#required-todowrite-items)
  • [Manifest Format](#manifest-format)
  • [Manifest Schema](#manifest-schema)
  • [Step-by-Step Process](#step-by-step-process)
  • [1. Parse Manifest File](#1-parse-manifest-file)
  • [2. Validate Component Outputs](#2-validate-component-outputs)
  • [3. Execute FFmpeg Composition](#3-execute-ffmpeg-composition)
  • [4. Verify Combined Output](#4-verify-combined-output)
  • [FFmpeg Composition Commands](#ffmpeg-composition-commands)
  • [Vertical Stacking](#vertical-stacking)
  • [Horizontal Stacking](#horizontal-stacking)
  • [Sequential Concatenation](#sequential-concatenation)
  • [Grid Layout (2x2)](#grid-layout-(2x2))
  • [With Background Color](#with-background-color)
  • [Layout Options](#layout-options)
  • [Layout Option Details](#layout-option-details)
  • [Example Compositions](#example-compositions)
  • [Terminal + Browser Tutorial](#terminal-+-browser-tutorial)
  • [Side-by-Side Comparison](#side-by-side-comparison)
  • [Picture-in-Picture](#picture-in-picture)
  • [Exit Criteria](#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 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"

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 avai

Compartilhar X LinkedIn