# Send GifHorse to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- Download the package from Yavira.
- Extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the extracted folder.
## Suggested prompts
### New install

```text
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
```
### Upgrade existing

```text
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "gifhorse",
    "name": "GifHorse",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Coyote-git/gifhorse",
    "canonicalUrl": "https://clawhub.ai/Coyote-git/gifhorse",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/gifhorse",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=gifhorse",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "_meta.json",
      "SKILL.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/gifhorse"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/gifhorse",
    "downloadUrl": "https://openagent3.xyz/downloads/gifhorse",
    "agentUrl": "https://openagent3.xyz/skills/gifhorse/agent",
    "manifestUrl": "https://openagent3.xyz/skills/gifhorse/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/gifhorse/agent.md"
  }
}
```
## Documentation

### GifHorse - Dialogue Search & GIF Creator

Create reaction GIFs from your video library by searching dialogue and adding timed subtitles.

### What GifHorse Does

Transcribe videos - Extract dialogue with timestamps by downloading subtitles, using local .srt files, or Whisper AI
Search dialogue - Find quotes across your entire video library instantly
Preview clips - See exactly what will be captured before creating the GIF
Create GIFs - Generate GIFs with perfectly timed subtitles and optional watermarks

### First Time Setup

Install gifhorse (via install button above)
Install FFmpeg-full for subtitle rendering (via install button above)
Transcribe your video library (downloads subtitles automatically):

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

### 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 --force

### Download Subtitles Only

Download .srt files without storing in the database:

gifhorse fetch-subtitles /path/to/videos
gifhorse fetch-subtitles /path/to/videos --skip-existing

### Search 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 50

### Preview Before Creating

See exactly what will be captured:

gifhorse preview "memorable quote" 1
gifhorse preview "quote" 1 --include-before 1 --include-after 1

### Create 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-only

### Check Status

# See transcription stats
gifhorse stats

# List all transcribed videos
gifhorse list

### Configuration

# Set phone number for iMessage sending
gifhorse config --set-phone "+15551234567"

# Show current configuration
gifhorse config --show

### Timing Options

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 Options

--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)

### Subtitle Options

-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 overlay

### Output

Default output filename is auto-derived from dialogue text (e.g., i_dont_think_so.gif) and saved to exports/
Use -o PATH to override. Collision handling appends _2, _3, etc.

### iMessage

--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.

### Quick Reaction GIF

gifhorse search "perfect"
gifhorse create "perfect" 1 --padding-after 2.0

### Full 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 1

### Meme 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.gif

### Scene with Reaction After Dialogue

gifhorse create "memorable line" 1 --padding-after 3.0

### Create and Send via iMessage

gifhorse config --set-phone "+15551234567"
gifhorse create "quote" 1 --send

### Tips & Tricks

Always preview first - Use preview to verify timing before creating
Default downloads subtitles - Just run gifhorse transcribe and subtitles are fetched automatically
Watch file sizes - High quality + long duration = large files (20s can be 20+ MB)
Padding vs Include - For reactions, use --padding-after not --include-after
Search with context - Add --context 2 to see surrounding dialogue
Re-transcribe with --force - Use --force to update transcriptions after getting better subtitles
Check subtitle coverage - Use subtitle-status to see which videos need subtitles

### File Size Guide

Low quality, 10s, 360p: ~1-2 MB
Medium quality, 10s, 480p: ~3-5 MB
High quality, 20s, 720p: ~20+ MB

### "command not found: gifhorse"

Activate the virtual environment:

cd ~/gifhorse && source venv/bin/activate

### Subtitle rendering errors

Make sure FFmpeg-full is installed:

brew install ffmpeg-full

### Video 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:

Search for dialogue or quotes in their video library
Create a reaction GIF from a movie or TV show
Make a meme GIF with substituted words
Add subtitles to a video clip
Transcribe videos for searchable dialogue
Preview what a GIF will look like before creating it
Send a GIF via iMessage
Remove videos from the database
Check subtitle status for their video collection

### Learn More

GitHub: https://github.com/Coyote-git/gifhorse
Usage Guide: https://github.com/Coyote-git/gifhorse/blob/main/USAGE_GUIDE.md
Roadmap: https://github.com/Coyote-git/gifhorse/blob/main/ROADMAP.md

### License

MIT
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: Coyote-git
- Version: 1.2.0
## Source health
- Status: healthy
- Source download looks usable.
- Yavira can redirect you to the upstream package for this source.
- Health scope: source
- Reason: direct_download_ok
- Checked at: 2026-04-30T16:55:25.780Z
- Expires at: 2026-05-07T16:55:25.780Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/gifhorse)
- [Send to Agent page](https://openagent3.xyz/skills/gifhorse/agent)
- [JSON manifest](https://openagent3.xyz/skills/gifhorse/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/gifhorse/agent.md)
- [Download page](https://openagent3.xyz/downloads/gifhorse)