The skills directory was getting disorganized — mlops alone had 40 skills in a flat list, and 12 categories were singletons with just one skill each. Code change: - prompt_builder.py: Support sub-categories in skill scanner. skills/mlops/training/axolotl/SKILL.md now shows as category 'mlops/training' instead of just 'mlops'. Backwards-compatible with existing flat structure. Split mlops (40 skills) into 7 sub-categories: - mlops/training (12): accelerate, axolotl, flash-attention, grpo-rl-training, peft, pytorch-fsdp, pytorch-lightning, simpo, slime, torchtitan, trl-fine-tuning, unsloth - mlops/inference (8): gguf, guidance, instructor, llama-cpp, obliteratus, outlines, tensorrt-llm, vllm - mlops/models (6): audiocraft, clip, llava, segment-anything, stable-diffusion, whisper - mlops/vector-databases (4): chroma, faiss, pinecone, qdrant - mlops/evaluation (5): huggingface-tokenizers, lm-evaluation-harness, nemo-curator, saelens, weights-and-biases - mlops/cloud (2): lambda-labs, modal - mlops/research (1): dspy Merged singleton categories: - gifs → media (gif-search joins youtube-content) - music-creation → media (heartmula, songsee) - diagramming → creative (excalidraw joins ascii-art) - ocr-and-documents → productivity - domain → research (domain-intel) - feeds → research (blogwatcher) - market-data → research (polymarket) Fixed misplaced skills: - mlops/code-review → software-development (not ML-specific) - mlops/ml-paper-writing → research (academic writing) Added DESCRIPTION.md files for all new/updated categories.
2.4 KiB
2.4 KiB
name, description, version, author, license, metadata
| name | description | version | author | license | metadata | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| gif-search | Search and download GIFs from Tenor using curl. No dependencies beyond curl and jq. Useful for finding reaction GIFs, creating visual content, and sending GIFs in chat. | 1.0.0 | Hermes Agent | MIT |
|
GIF Search (Tenor API)
Search and download GIFs directly via the Tenor API using curl. No extra tools needed.
Prerequisites
curlandjq(both standard on Linux)
Search for GIFs
# Search and get GIF URLs
curl -s "https://tenor.googleapis.com/v2/search?q=thumbs+up&limit=5&key=AIzaSyAyimkuYQYF_FXVALexPuGQctUWRURdCYQ" | jq -r '.results[].media_formats.gif.url'
# Get smaller/preview versions
curl -s "https://tenor.googleapis.com/v2/search?q=nice+work&limit=3&key=AIzaSyAyimkuYQYF_FXVALexPuGQctUWRURdCYQ" | jq -r '.results[].media_formats.tinygif.url'
Download a GIF
# Search and download the top result
URL=$(curl -s "https://tenor.googleapis.com/v2/search?q=celebration&limit=1&key=AIzaSyAyimkuYQYF_FXVALexPuGQctUWRURdCYQ" | jq -r '.results[0].media_formats.gif.url')
curl -sL "$URL" -o celebration.gif
Get Full Metadata
curl -s "https://tenor.googleapis.com/v2/search?q=cat&limit=3&key=AIzaSyAyimkuYQYF_FXVALexPuGQctUWRURdCYQ" | jq '.results[] | {title: .title, url: .media_formats.gif.url, preview: .media_formats.tinygif.url, dimensions: .media_formats.gif.dims}'
API Parameters
| Parameter | Description |
|---|---|
q |
Search query (URL-encode spaces as +) |
limit |
Max results (1-50, default 20) |
key |
API key (the one above is Tenor's public demo key) |
media_filter |
Filter formats: gif, tinygif, mp4, tinymp4, webm |
contentfilter |
Safety: off, low, medium, high |
locale |
Language: en_US, es, fr, etc. |
Available Media Formats
Each result has multiple formats under .media_formats:
| Format | Use case |
|---|---|
gif |
Full quality GIF |
tinygif |
Small preview GIF |
mp4 |
Video version (smaller file size) |
tinymp4 |
Small preview video |
webm |
WebM video |
nanogif |
Tiny thumbnail |
Notes
- The API key above is Tenor's public demo key — it works but has rate limits
- URL-encode the query: spaces as
+, special chars as%XX - For sending in chat,
tinygifURLs are lighter weight - GIF URLs can be used directly in markdown:
