softaworks/agent-toolkit-meme-factory
Generate memes using the memegen.link API. Use when users request memes, want to add humor to content, or need visual aids for social media. Supports 100+ popular templates with custom text and styling.
This is a copy. The original lives at softaworks/meme-factory.
npx skills add https://github.com/softaworks/agent-toolkit --skill meme-factory
Create memes using the free memegen.link API and textual meme formats.
| Trigger | Description |
|---------|-------------|
| /meme-factory | Manual invocation |
| /meme-factory {template} {top} {bottom} | Direct meme generation |
| meme-factory: create a meme about X | Natural language request |
| Action | Format |
|--------|--------|
| Basic meme | https://api.memegen.link/images/{template}/{top}/{bottom}.png |
| With sizing | ?width=1200&height=630 |
| Custom background | ?style=https://example.com/image.jpg |
| All templates | https://api.memegen.link/templates/ |
| Interactive docs | https://api.memegen.link/docs/ |
Additional Resources:
https://api.memegen.link/images/{template}/{top_text}/{bottom_text}.{extension}
Example:
https://api.memegen.link/images/buzz/memes/memes_everywhere.png
Result: Buzz Lightyear meme with "memes" at top and "memes everywhere" at bottom.
| Character | Encoding |
|-----------|----------|
| Space | _ or - |
| Newline | ~n |
| Question mark | ~q |
| Percent | ~p |
| Slash | ~s |
| Hash | ~h |
| Single quote | '' |
| Double quote | "" |
| Template | Use Case | Example |
|----------|----------|---------|
| buzz | X, X everywhere | bugs/bugs_everywhere |
| drake | Comparisons | manual_testing/automated_testing |
| success | Victories | deployed/no_errors |
| fine | Things going wrong | server_on_fire/this_is_fine |
| fry | Uncertainty | not_sure_if_bug/or_feature |
| changemind | Hot takes | tabs_are_better_than_spaces |
| distracted | Priorities | my_code/new_framework/current_project |
| mordor | One does not simply | one_does_not_simply/deploy_on_friday |
| Context | Template | Why |
|---------|----------|-----|
| Comparing options | drake | Two-panel reject/approve format |
| Celebrating wins | success | Positive outcome emphasis |
| Problems ignored | fine | Ironic "everything is fine" |
| Uncertainty | fry | "Not sure if X or Y" format |
| Controversial opinion | changemind | Statement + challenge |
| Ubiquitous things | buzz | "X, X everywhere" |
| Bad ideas | mordor | "One does not simply..." |
After generating a meme:
| Platform | Dimensions |
|----------|------------|
| Social media (Open Graph) | 1200x630 |
| Slack/Discord | 800x600 |
| GitHub | Default |
| Avoid | Why | Instead |
|-------|-----|---------|
| Spaces without encoding | URL breaks | Use _ or - |
| Too much text | Unreadable | 2-6 words per line |
| Wrong template | Message mismatch | Match template to context |
| Missing extension | Invalid URL | Always include .png, .jpg, etc. |
| Unencoded special chars | URL breaks | Use ~q, ~s, ~p, etc. |
| Assuming template exists | 404 error | Check templates list first |
Meme generation is successful when:
Test command:
curl -I "https://api.memegen.link/images/buzz/test/test.png"
# Should return: HTTP/2 200
<details>
<summary><strong>Deep Dive: Advanced Features</strong></summary>
| Extension | Use Case |
|-----------|----------|
| .png | Best quality, default |
| .jpg | Smaller file size |
| .webp | Modern, good compression |
| .gif | Animated templates |
?width=800
?height=600
?width=800&height=600 (padded to exact)
?layout=top # Text at top only
?layout=bottom # Text at bottom only
?layout=default # Standard top/bottom
View available: https://api.memegen.link/fonts/
?font=impact (default)
Use any image as background:
https://api.memegen.link/images/custom/hello/world.png?style=https://example.com/image.jpg
</details>
<details>
<summary><strong>Deep Dive: Contextual Memes</strong></summary>
Template: fry
https://api.memegen.link/images/fry/not_sure_if_feature/or_bug.png
Template: interesting
https://api.memegen.link/images/interesting/i_dont_always_test/but_when_i_do_i_do_it_in_production.png
Template: yodawg
https://api.memegen.link/images/yodawg/yo_dawg_i_heard_you_like_docs/so_i_documented_the_documentation.png
Template: fine
https://api.memegen.link/images/fine/memory_usage_at_99~/this_is_fine.png
Template: success
https://api.memegen.link/images/success/deployed_to_production/zero_downtime.png
</details>
<details>
<summary><strong>Deep Dive: Workflow Integration</strong></summary>
Here's a relevant meme:

def generate_status_meme(status: str, message: str):
template_map = {
"success": "success",
"failure": "fine",
"review": "fry",
"deploy": "interesting"
}
template = template_map.get(status, "buzz")
words = message.split()
top = "_".join(words[0:3])
bottom = "_".join(words[3:6])
return f"https://api.memegen.link/images/{template}/{top}/{bottom}.png"
from meme_generator import MemeGenerator
meme = MemeGenerator()
url = meme.generate("buzz", "features", "features everywhere")
print(url)
</details>
<details>
<summary><strong>Deep Dive: API Reference</strong></summary>
| Endpoint | Purpose |
|----------|---------|
| /templates/ | List all templates |
| /templates/{id} | Template details |
| /fonts/ | Available fonts |
| /images/{template}/{top}/{bottom}.{ext} | Generate meme |
</details>
| Document | Content |
|----------|---------|
| markdown-memes-guide.md | 15+ textual meme formats (greentext, copypasta, ASCII, etc.) |
| examples.md | Practical usage examples |
| Script | Purpose |
|--------|---------|
| meme_generator.py | Python helper for meme generation |
Generate contextual memes to:
Golden rule: Keep text concise, match template to context.
Take softaworks/agent-toolkit-meme-factory from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.