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.
Install with Tessl CLI
npx tessl i github:softaworks/agent-toolkit --skill meme-factoryOverall
score
92%
Does it follow best practices?
Validation for skill structure
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.pngResult: 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| 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/bottomView 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.jpgTemplate: fry
https://api.memegen.link/images/fry/not_sure_if_feature/or_bug.pngTemplate: interesting
https://api.memegen.link/images/interesting/i_dont_always_test/but_when_i_do_i_do_it_in_production.pngTemplate: yodawg
https://api.memegen.link/images/yodawg/yo_dawg_i_heard_you_like_docs/so_i_documented_the_documentation.pngTemplate: fine
https://api.memegen.link/images/fine/memory_usage_at_99~/this_is_fine.pngTemplate: success
https://api.memegen.link/images/success/deployed_to_production/zero_downtime.pngHere'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)| Endpoint | Purpose |
|---|---|
/templates/ | List all templates |
/templates/{id} | Template details |
/fonts/ | Available fonts |
/images/{template}/{top}/{bottom}.{ext} | Generate meme |
| 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.
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.