GifHorse
Search video dialogue and create reaction GIFs with timed subtitles. Perfect for creating meme-worthy clips from movies and TV shows.
Search video dialogue and create reaction GIFs with timed subtitles. Perfect for creating meme-worthy clips from movies and TV shows.
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Create reaction GIFs from your video library by searching dialogue and adding timed subtitles.
cd ~/gifhorse && source venv/bin/activate gifhorse transcribe ~/Movies
The gifhorse command must be run from within its virtual environment. You can activate it with:
cd ~/gifhorse && source venv/bin/activate
Or use the activation helper:
source ~/gifhorse/activate.sh
Extract dialogue from your videos (one-time per video):
# Default: downloads subtitles from online providers (fast, recommended) gifhorse transcribe /path/to/videosUse 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 --force
Download .srt files without storing in the database:
gifhorse fetch-subtitles /path/to/videos gifhorse fetch-subtitles /path/to/videos --skip-existing
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 50
See exactly what will be captured:
gifhorse preview "memorable quote" 1 gifhorse preview "quote" 1 --include-before 1 --include-after 1
Generate the GIF with subtitles:
# Basic GIF (auto-named from dialogue, saved to exports/) gifhorse create "memorable quote" 1Explicit 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"
# Remove videos by path pattern (SQL LIKE wildcards) gifhorse remove "%Adventure Time%" gifhorse remove "%S01%" --yesCheck subtitle status for a directory
gifhorse subtitle-status ~/Videos gifhorse subtitle-status ~/Videos --missing-only
# See transcription stats gifhorse statsList all transcribed videos
gifhorse list
# Set phone number for iMessage sending gifhorse config --set-phone "+15551234567"Show current configuration
gifhorse config --show
Control exactly what gets captured:
--include-before N - Include N dialogue segments before the match--include-after N - Include N dialogue segments after the match--padding-before SECS - Add buffer seconds before dialogue starts (default: 1.0)--padding-after SECS - Add buffer seconds after dialogue ends (default: 1.0)--start-offset SECS - Manual adjustment to start time (can be negative)--end-offset SECS - Manual adjustment to end time (can be negative)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 low|medium|high - Color palette quality (affects file size)--fps N - Frames per second (default: 15, use 24 for smooth)--width N - Width in pixels (default: 480, use 720 for HD)-s, --sub NUM OLD NEW - Substitute words in a segment (repeatable). Replaced words render struck through in red, replacements in red. Segment numbers shown by preview.-r, --replace NUM OLD NEW - Replace words cleanly (no strikethrough). Repeatable.--no-subtitles - Create GIF without subtitle overlayi_dont_think_so.gif) and saved to exports/-o PATH to override. Collision handling appends _2, _3, etc.--send - Send created GIF to configured phone number via iMessage (macOS only)--send-to NUMBER - Send to a specific phone number (overrides config)Note: All GIFs automatically include a subtle "gifhorse" watermark in the bottom-right corner.
gifhorse search "perfect" gifhorse create "perfect" 1 --padding-after 2.0
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 1
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"
gifhorse create "quote" 1 --width 720 --fps 24 --quality high -o tweet.gif
gifhorse create "memorable line" 1 --padding-after 3.0
gifhorse config --set-phone "+15551234567" gifhorse create "quote" 1 --send
preview to verify timing before creatinggifhorse transcribe and subtitles are fetched automatically--padding-after not --include-after--context 2 to see surrounding dialogue--force to update transcriptions after getting better subtitlessubtitle-status to see which videos need subtitlesActivate the virtual environment:
cd ~/gifhorse && source venv/bin/activate
Make sure FFmpeg-full is installed:
brew install ffmpeg-full
The database stores absolute paths. If you moved videos after transcription, re-transcribe in the new location.
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"
Invoke gifhorse when the user wants to:
MIT
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.