GifHorse - Dialogue Search & GIF Creator
name: gifhorse
by coyote-git · published 2026-03-22
$ claw add gh:coyote-git/coyote-git-gifhorse---
name: gifhorse
description: Search video dialogue and create reaction GIFs with timed subtitles. Perfect for creating meme-worthy clips from movies and TV shows.
homepage: https://github.com/Coyote-git/gifhorse
metadata: {"clawdbot":{"emoji":"🐴","requires":{"bins":["gifhorse","ffmpeg"]},"install":[{"id":"gifhorse-setup","kind":"shell","command":"git clone https://github.com/Coyote-git/gifhorse.git ~/gifhorse && cd ~/gifhorse && python3 -m venv venv && source venv/bin/activate && pip install -e .","bins":["gifhorse"],"label":"Install gifhorse CLI tool"},{"id":"ffmpeg-full","kind":"shell","command":"brew install ffmpeg-full","bins":["ffmpeg"],"label":"Install FFmpeg-full (macOS)"}],"config":{"examples":[{"GIFHORSE_DB":"~/gifhorse/transcriptions.db"}]}}}
---
# GifHorse - Dialogue Search & GIF Creator
Create reaction GIFs from your video library by searching dialogue and adding timed subtitles.
What GifHorse Does
1. **Transcribe videos** - Extract dialogue with timestamps by downloading subtitles, using local .srt files, or Whisper AI
2. **Search dialogue** - Find quotes across your entire video library instantly
3. **Preview clips** - See exactly what will be captured before creating the GIF
4. **Create GIFs** - Generate GIFs with perfectly timed subtitles and optional watermarks
Setup
First Time Setup
1. Install gifhorse (via install button above)
2. Install FFmpeg-full for subtitle rendering (via install button above)
3. Transcribe your video library (downloads subtitles automatically):
cd ~/gifhorse && source venv/bin/activate
gifhorse transcribe ~/MoviesThe gifhorse command must be run from within its virtual environment. You can activate it with:
cd ~/gifhorse && source venv/bin/activateOr use the activation helper:
source ~/gifhorse/activate.shAvailable Commands
Transcribe Videos
Extract dialogue from your videos (one-time per video):
# Default: downloads subtitles from online providers (fast, recommended)
gifhorse transcribe /path/to/videos
# Use only local .srt files (no downloading, no Whisper)
gifhorse transcribe /path/to/videos --use-subtitles
# Use Whisper AI (slow but works for any video)
gifhorse transcribe /path/to/video.mp4 --use-whisper
# Re-transcribe videos already in database
gifhorse transcribe /path/to/videos --forceDownload Subtitles Only
Download .srt files without storing in the database:
gifhorse fetch-subtitles /path/to/videos
gifhorse fetch-subtitles /path/to/videos --skip-existingSearch Dialogue
Find quotes across your entire library:
# Basic search
gifhorse search "memorable quote"
# Search with surrounding context
gifhorse search "memorable quote" --context 2
# Show all results (no limit)
gifhorse search "memorable quote" --all
# Custom result limit (default: 100)
gifhorse search "memorable quote" --limit 50Preview Before Creating
See exactly what will be captured:
gifhorse preview "memorable quote" 1
gifhorse preview "quote" 1 --include-before 1 --include-after 1Create GIF
Generate the GIF with subtitles:
# Basic GIF (auto-named from dialogue, saved to exports/)
gifhorse create "memorable quote" 1
# Explicit output path
gifhorse create "memorable quote" 1 -o reaction.gif
# High quality for social media
gifhorse create "quote" 1 --width 720 --fps 24 --quality high
# Include conversation context
gifhorse create "quote" 1 --include-before 2 --include-after 1
# Substitute words in subtitles (repeatable, target segments by number from preview)
gifhorse create "the age of men" 1 --include-after 1 \
-s 1 "men" "standardized software" \
-s 2 "orc" "custom applications"
# Clean replace (no strikethrough)
gifhorse create "quote" 1 -r 1 "old word" "new word"
# Create and send via iMessage
gifhorse create "quote" 1 --send
gifhorse create "quote" 1 --send-to "+15551234567"Manage Database
# Remove videos by path pattern (SQL LIKE wildcards)
gifhorse remove "%Adventure Time%"
gifhorse remove "%S01%" --yes
# Check subtitle status for a directory
gifhorse subtitle-status ~/Videos
gifhorse subtitle-status ~/Videos --missing-onlyCheck Status
# See transcription stats
gifhorse stats
# List all transcribed videos
gifhorse listConfiguration
# Set phone number for iMessage sending
gifhorse config --set-phone "+15551234567"
# Show current configuration
gifhorse config --showTiming Options
Control exactly what gets captured:
**Important:** For reactions after dialogue, use `--padding-after` instead of `--include-after`. The include-after option captures ALL time until the next dialogue segment (could be 30+ seconds!).
Quality Options
Subtitle Options
Output
iMessage
**Note:** All GIFs automatically include a subtle "gifhorse" watermark in the bottom-right corner.
Common Workflows
Quick Reaction GIF
gifhorse search "perfect"
gifhorse create "perfect" 1 --padding-after 2.0Full Conversation Exchange
gifhorse search "key phrase"
gifhorse preview "key phrase" 1 --include-before 2 --include-after 1
gifhorse create "key phrase" 1 --include-before 2 --include-after 1Meme with Word Substitution
gifhorse preview "the age of men" 1 --include-after 1
gifhorse create "the age of men" 1 --include-after 1 \
-s 1 "men" "standardized software" \
-s 2 "orc" "custom applications"High Quality for Twitter/X
gifhorse create "quote" 1 --width 720 --fps 24 --quality high -o tweet.gifScene with Reaction After Dialogue
gifhorse create "memorable line" 1 --padding-after 3.0Create and Send via iMessage
gifhorse config --set-phone "+15551234567"
gifhorse create "quote" 1 --sendTips & Tricks
1. **Always preview first** - Use `preview` to verify timing before creating
2. **Default downloads subtitles** - Just run `gifhorse transcribe` and subtitles are fetched automatically
3. **Watch file sizes** - High quality + long duration = large files (20s can be 20+ MB)
4. **Padding vs Include** - For reactions, use `--padding-after` not `--include-after`
5. **Search with context** - Add `--context 2` to see surrounding dialogue
6. **Re-transcribe with --force** - Use `--force` to update transcriptions after getting better subtitles
7. **Check subtitle coverage** - Use `subtitle-status` to see which videos need subtitles
File Size Guide
Troubleshooting
"command not found: gifhorse"
Activate the virtual environment:
cd ~/gifhorse && source venv/bin/activateSubtitle rendering errors
Make sure FFmpeg-full is installed:
brew install ffmpeg-fullVideo file not found
The database stores absolute paths. If you moved videos after transcription, re-transcribe in the new location.
Network Share Support
GifHorse works with network-mounted videos:
# Mount network share (macOS)
open "smb://server-ip/share-name"
# Transcribe from network
gifhorse transcribe "/Volumes/server-ip/Movies"When to Use This Skill
Invoke gifhorse when the user wants to:
Learn More
License
MIT
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...