analyze-video
Internal sub-procedure (not a standalone entry point) — the shared footage-analysis pipeline that produces audio transcripts,…
Builds a contact sheet from a video clip — evenly spaced frames laid out in a single grid image, each with its hh:mm:ss timestamp burned in. Use when the user asks for a "contact sheet", "grid", "film strip", or wants a one-image overview of part of a clip.
$ npx -y skills add barefootford/buttercut --skill contact-sheet --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/contact-sheetContext preview
The summary Claude sees to decide when to auto-load this skill.
Builds a contact sheet from a video clip — evenly spaced frames laid out in a single grid image, each with its hh:mm:ss timestamp burned in. Use when the user asks for a "contact sheet", "grid", "film strip", or wants a one-image overview of part of a clip.
name: contact-sheet description: Builds a contact sheet from a video clip — evenly spaced frames laid out in a single grid image, each with its hh:mm:ss timestamp burned in. Use when the user asks for a "contact sheet", "grid", "film strip", or wants a one-image overview of part of a clip.
Builds a contact sheet from a slice of a video clip: 16 evenly spaced frames laid out in a 4x4 grid, each annotated with its hh:mm:ss timestamp.
This skill burns timestamps onto frames with ffmpeg's `drawtext` filter. ButterCut resolves ffmpeg from the repo's `dependencies/` directory first, then PATH, and raises a clear error when it's in neither place. If a run fails with that missing-ffmpeg error, or with `No such filter: 'drawtext'` (some PATH builds, notably the stock Homebrew formula, omit drawtext), run the `setup` skill to install a suitable ffmpeg, then retry the contact sheet.
When the clip belongs to a library, always pass `--library` so the output lands in the standard place:
# Whole clip ruby lib/buttercut/contact_sheet.rb <video-path> --library libraries/<lib> # From <start> to the end of the clip ruby lib/buttercut/contact_sheet.rb <video-path> <start> --library libraries/<lib> # Explicit range ruby lib/buttercut/contact_sheet.rb <video-path> <start> <end> --library libraries/<lib>
`<start>` and `<end>` accept seconds (e.g. `12.5`) or `HH:MM:SS` / `MM:SS`.
Options: `--library DIR`, `--output PATH` (exact path; overrides `--library`).
Frame count is chosen automatically: 16 frames in a 4x4 grid for clips longer than 10 seconds, 4 frames in a 2x2 grid for clips of 10 seconds or less (avoids duplicates).
Portrait clips (iPhone, etc.) are auto-rotated using the source's container rotation metadata so timestamps land right-side-up. Variable-frame-rate sources (screen recordings, some action cams) are detected and routed through the slower seek-and-grab path automatically.
Share the output path as a clickable link so the user can open it directly.
This is the source code for the core ButterCut XML generator and video editing agent. If you love or hate Docker, have opinions on types, and have a favorite text editor, this is the spot for you.
Internal sub-procedure (not a standalone entry point) — the shared footage-analysis pipeline that produces audio transcripts,…
Backs up user libraries and all their contents (external video excluded). This skill can also be useful when you need to restore…
The ButterCut home menu — welcome the user back, then ask what they'd like to do (start a new cut, add footage to a library, a…
The ButterCut home menu — welcome the user back, then ask what they'd like to do (start a new cut, add footage to a library, a…
Create a new ButterCut library. Gather library info (name, footage location, language, transcript proofreading) and scaffold the…
Build a cut from a library — scene, selects, roughcut, custom task, or an edit from a written script. Starts by asking what kind…