contact-sheet

Generates a timestamped 4x4 frame grid image from a video clip using ffmpeg.

589|97|Updated Nov 10, 2025
One-click install
npx skills add https://github.com/barefootford/buttercut --skill contact-sheet
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: contact-sheet
Source: https://github.com/barefootford/buttercut/tree/main/skills/contact-sheet
Command: npx skills add https://github.com/barefootford/buttercut --skill contact-sheet

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires ffmpeg.

What problem does it solve?

Reviewing long video clips frame by frame is slow, and scrubbing a timeline makes it hard to get a quick visual overview of a clip's content. This Skill condenses any clip or clip range into a single grid image with burned-in timestamps so you can see what happens and when at a glance.

Core Features & Use Cases

  • Timestamped Frame Grids: Extracts 16 evenly spaced frames into a 4x4 grid (or 4 frames in a 2x2 grid for clips of 10 seconds or less), each labeled with its hh:mm:ss timestamp via ffmpeg's drawtext filter.
  • Flexible Ranges and Output: Accepts whole clips, start-only, or explicit start/end ranges in seconds or HH:MM:SS, and saves output into a library's contact_sheets/ directory or a custom path.
  • Automatic Edge-Case Handling: Auto-rotates portrait iPhone footage using container rotation metadata and detects variable-frame-rate sources, routing them through a slower seek-and-grab path.
  • Use Case: While building a rough cut in ButterCut, ask for a contact sheet of the 30-to-60-second segment of a drone clip to quickly verify which moments are worth selecting without watching the whole take.

Quick Start

Ask the agent to make a contact sheet of a specific clip or time range in your library, for example: create a contact sheet for libraries/main/footage/DJI_0278.mp4 from 00:30 to 01:00.

Frequently Asked Questions about contact-sheet

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a contact sheet from a video clip?

Run the contact_sheet.rb script with the video path and optionally a start and end time in seconds or HH:MM:SS format. Pass --library with your library directory so the grid image is saved to the library's contact_sheets folder.

How many frames does a video contact sheet include?

Clips longer than 10 seconds produce 16 evenly spaced frames in a 4x4 grid. Clips of 10 seconds or less produce 4 frames in a 2x2 grid to avoid duplicate frames.

Why does ffmpeg fail with No such filter: drawtext?

Some ffmpeg builds, notably the stock Homebrew formula, omit the drawtext filter needed to burn timestamps onto frames. Run the setup skill to install a full ffmpeg build, then retry the contact sheet.

Does the contact sheet handle vertical iPhone videos?

Yes, portrait clips are auto-rotated using the source's container rotation metadata so frames and timestamps appear right-side-up. Variable-frame-rate sources like screen recordings are also detected and handled automatically.

Where is the contact sheet image saved?

With --library, output goes to <library>/contact_sheets/<clipname>_<descriptor>.jpg, where the descriptor is 'full' or a time range like 00-00-30_to_00-01-00. Without --library, it is saved next to the source video.