GIF Multi — Cross-platform GIF reaction
Search Giphy and send animated GIFs optimized for your current messaging channel.
Initial setup
1. Get a Giphy API Key https://developers.giphy.com → "Create an App" → API (free, 1,000 req/day)
2. Configure it
- Via
openclaw.json(recommended):{ "skills": { "entries": { "gif-multi": { "env": { "GIPHY_API_KEY": "your_key" } } } } } - Or in
~/.openclaw/.env:echo 'GIPHY_API_KEY=your_key' >> ~/.openclaw/.env
3. Verify everything is ready
python3 {baseDir}/scripts/gif_multi.py --check
Daily workflow
- Detect channel from inbound metadata (
channelfield in session context). - Verify config: if missing or current channel not listed, run:
python3 {baseDir}/scripts/gif_multi.py --discover- First time ever (no config): after
--discover, briefly tell the user the skill is ready (one sentence). - New channel detected:
--discoveradds it silently. Casually mention it works here too if natural. - Missing API key:
--checkshows setup instructions; relay them to the user.
- First time ever (no config): after
- Search and convert:
python3 {baseDir}/scripts/gif_multi.py "<query>" --channel <channel> - Send the output file with
message(action=send, media=<path>). - Clean up:
exec(rm <path>)after sending.
The --discover only runs once per new channel — after that, the channel stays in config and discovery is skipped.
Each search gets a unique timestamp, so concurrent channels, topics, or threads never collide. Orphan files >10 min are cleaned automatically.
Usage mode
The config's "mode" field controls when GIFs are sent:
natural(default) — spontaneous, like emoji reactions. The agent uses its judgment to send GIFs when the conversation flows.on_request— only when the user explicitly asks ("send a gif of...", "reaction gif").
Change mode:
python3 {baseDir}/scripts/gif_multi.py --mode natural
python3 {baseDir}/scripts/gif_multi.py --mode on_request
The user can also say it in conversation: "stop sending GIFs without asking" → switches to on_request. "feel free to send GIFs naturally" → switches to natural.
Notes
- Output is JSON with
pathto the file in.gif_cache/. - Config is stored at
{baseDir}/config.json(inside the skill folder). - Rating defaults to
g; override with--rating pg|pg-13|r. - Giphy free limit: 1,000 requests/day.
- If the API key is missing, the script returns instructions in the
helpfield.
