Search GIF providers with CLI/TUI, download results, and extract stills/sheets.
gifgrep is a command-line tool that streamlines the workflow of searching, previewing, downloading, and extracting content from animated GIFs. It solves the common problem of finding and working with GIF assets by providing a unified interface to search multiple GIF providers (Tenor and Giphy), browse results in an interactive terminal UI, and efficiently extract still frames or contact sheets for documentation and sharing.
The tool offers both CLI and TUI modes for flexible workflows. Users can search providers with simple queries, preview results directly in compatible terminals (Kitty/Ghostty), download GIFs to their local system, and extract specific frames at precise timestamps or generate grid-based contact sheets. The contact sheet feature is particularly valuable for creating quick visual summaries of GIF content without requiring users to view the full animation, making it ideal for documentation, pull requests, and chat communications.
gifgrep targets developers, content creators, and technical writers who frequently work with GIF assets in their projects or documentation. It's especially useful for teams that need to verify GIF content, maintain attribution records, and ensure proper asset hygiene by downloading and hosting GIFs locally rather than hotlinking. The tool integrates seamlessly into shell pipelines with JSON output support and provides flexible formatting options for automation workflows.
The --thumbs flag for inline still frame previews is only supported in Kitty and Ghostty terminals. Other terminals can still use the TUI mode or download GIFs for viewing.
For Tenor, an API key is optional as gifgrep uses a demo key by default. For Giphy, you must set the GIPHY_API_KEY environment variable to use --source giphy.
Use the sheet command: gifgrep sheet ./clip.gif --frames 9 --cols 3 -o sheet.png. This samples frames from the GIF and arranges them in a grid (e.g., 9 frames in 3 columns). Adjust --frames, --cols, and --padding to customize the layout.
Yes, use the still command with the --at flag: gifgrep still ./clip.gif --at 1.5s -o still.png. This extracts a frame at the 1.5 second mark.
Use --json for structured output or --format with field names like 'url' for pipe-friendly text. Examples: gifgrep cats --format url | head -n 5 or gifgrep search --json cats | jq '.[0].url' for JSON processing.
Quick Setup:
.claude/skills/Repository
steipete/clawdis