Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
.claude/skills/davila7-meme-factory/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 119% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 121% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 117% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 225% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 114% | 0% |
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:
bashcurl -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/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.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.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.png</details>
<details> <summary><strong>Deep Dive: Workflow Integration</strong></summary>
markdownHere's a relevant meme: 
pythondef 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"
pythonfrom 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.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→pass | 6,952 | 2,522 | -64% | 1 | 1 | 0% | 1,226 | 2,690 | +119% | 0 | 0 | — |
case-01 | fail→pass | 8,082 | 3,847 | -52% | 1 | 1 | 0% | 1,358 | 3,002 | +121% | 0 | 0 | — |
case-02 | fail→pass | 7,563 | 3,460 | -54% | 1 | 1 | 0% | 1,362 | 2,956 | +117% | 0 | 0 | — |
case-04 | pass→pass | 6,283 | 4,049 | -36% | 1 | 1 | 0% | 1,220 | 3,096 | +154% | 0 | 0 | — |
case-05 | fail→pass | 4,434 | 2,927 | -34% | 1 | 1 | 0% | 865 | 2,814 | +225% | 0 | 0 | — |
case-06 | pass→pass | 5,043 | 3,852 | -24% | 1 | 1 | 0% | 964 | 3,003 | +212% | 0 | 0 | — |
case-07 | pass→pass | 5,434 | 4,288 | -21% | 1 | 1 | 0% | 1,013 | 3,055 | +202% | 0 | 0 | — |
case-08 | pass→pass | 5,246 | 2,612 | -50% | 1 | 1 | 0% | 1,041 | 2,660 | +156% | 0 | 0 | — |
case-09 | pass→pass | 5,426 | 3,101 | -43% | 1 | 1 | 0% | 1,037 | 2,855 | +175% | 0 | 0 | — |
case-10 | fail→pass | 6,821 | 2,830 | -59% | 1 | 1 | 0% | 1,322 | 2,831 | +114% | 0 | 0 | — |
case-11 | fail→pass | 6,461 | 4,250 | -34% | 1 | 1 | 0% | 1,254 | 3,119 | +149% | 0 | 0 | — |
case-12 | pass→pass | 4,673 | 4,189 | -10% | 1 | 1 | 0% | 871 | 3,104 | +256% | 0 | 0 | — |
case-13 | pass→pass | 5,529 | 3,628 | -34% | 1 | 1 | 0% | 970 | 2,902 | +199% | 0 | 0 | — |
case-14 | fail→pass | 5,428 | 5,421 | -0% | 1 | 1 | 0% | 978 | 3,236 | +231% | 0 | 0 | — |
case-15 | pass→pass | 4,870 | 3,442 | -29% | 1 | 1 | 0% | 932 | 2,889 | +210% | 0 | 0 | — |
case-16 | fail→pass | 5,977 | 3,842 | -36% | 1 | 1 | 0% | 1,106 | 2,974 | +169% | 0 | 0 | — |
case-17 | fail→pass | 3,545 | 2,502 | -29% | 1 | 1 | 0% | 705 | 2,758 | +291% | 0 | 0 | — |
case-18 | fail→fail | 7,323 | 3,946 | -46% | 1 | 1 | 0% | 1,376 | 2,920 | +112% | 0 | 0 | — |
case-19 | pass→pass | 8,966 | 8,628 | -4% | 1 | 1 | 0% | 1,937 | 4,267 | +120% | 0 | 0 | — |
case-20 | pass→pass | 5,038 | 2,370 | -53% | 1 | 1 | 0% | 874 | 2,637 | +202% | 0 | 0 | — |
case-21 | pass→pass | 9,091 | 6,059 | -33% | 1 | 1 | 0% | 1,869 | 3,452 | +85% | 0 | 0 | — |
case-22 | pass→pass | 10,058 | 6,120 | -39% | 1 | 1 | 0% | 2,203 | 3,503 | +59% | 0 | 0 | — |
case-23 | pass→pass | 6,604 | 7,860 | +19% | 1 | 1 | 0% | 1,397 | 3,775 | +170% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +39 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.