{"id":"94ba4309-7361-4009-8ec6-e80fe0ce93ed","shortId":"ZJUyew","kind":"skill","title":"meme-factory","tagline":"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.","description":"# Meme Factory\n\nCreate memes using the free memegen.link API and textual meme formats.\n\n---\n\n## Triggers\n\n| Trigger | Description |\n|---------|-------------|\n| `/meme-factory` | Manual invocation |\n| `/meme-factory {template} {top} {bottom}` | Direct meme generation |\n| `meme-factory: create a meme about X` | Natural language request |\n\n---\n\n## Quick Reference\n\n| Action | Format |\n|--------|--------|\n| Basic meme | `https://api.memegen.link/images/{template}/{top}/{bottom}.png` |\n| With sizing | `?width=1200&height=630` |\n| Custom background | `?style=https://example.com/image.jpg` |\n| All templates | https://api.memegen.link/templates/ |\n| Interactive docs | https://api.memegen.link/docs/ |\n\n**Additional Resources:**\n- [Markdown Memes Guide](references/markdown-memes-guide.md) - 15+ textual meme formats\n- [Examples](references/examples.md) - Practical usage examples\n- [meme_generator.py](scripts/meme_generator.py) - Python helper script\n\n---\n\n## Quick Start\n\n### Basic Meme Structure\n\n```\nhttps://api.memegen.link/images/{template}/{top_text}/{bottom_text}.{extension}\n```\n\n**Example:**\n```\nhttps://api.memegen.link/images/buzz/memes/memes_everywhere.png\n```\n\nResult: Buzz Lightyear meme with \"memes\" at top and \"memes everywhere\" at bottom.\n\n### Text Formatting\n\n| Character | Encoding |\n|-----------|----------|\n| Space | `_` or `-` |\n| Newline | `~n` |\n| Question mark | `~q` |\n| Percent | `~p` |\n| Slash | `~s` |\n| Hash | `~h` |\n| Single quote | `''` |\n| Double quote | `\"\"` |\n\n---\n\n## Popular Templates\n\n| Template | Use Case | Example |\n|----------|----------|---------|\n| `buzz` | X, X everywhere | bugs/bugs_everywhere |\n| `drake` | Comparisons | manual_testing/automated_testing |\n| `success` | Victories | deployed/no_errors |\n| `fine` | Things going wrong | server_on_fire/this_is_fine |\n| `fry` | Uncertainty | not_sure_if_bug/or_feature |\n| `changemind` | Hot takes | tabs_are_better_than_spaces |\n| `distracted` | Priorities | my_code/new_framework/current_project |\n| `mordor` | One does not simply | one_does_not_simply/deploy_on_friday |\n\n---\n\n## Template Selection Guide\n\n| Context | Template | Why |\n|---------|----------|-----|\n| Comparing options | `drake` | Two-panel reject/approve format |\n| Celebrating wins | `success` | Positive outcome emphasis |\n| Problems ignored | `fine` | Ironic \"everything is fine\" |\n| Uncertainty | `fry` | \"Not sure if X or Y\" format |\n| Controversial opinion | `changemind` | Statement + challenge |\n| Ubiquitous things | `buzz` | \"X, X everywhere\" |\n| Bad ideas | `mordor` | \"One does not simply...\" |\n\n---\n\n## Validation\n\nAfter generating a meme:\n\n- [ ] URL returns valid image (test in browser)\n- [ ] Text is readable (not too long)\n- [ ] Template matches the message context\n- [ ] Special characters properly encoded\n- [ ] Dimensions appropriate for platform\n\n### Platform Dimensions\n\n| Platform | Dimensions |\n|----------|------------|\n| Social media (Open Graph) | 1200x630 |\n| Slack/Discord | 800x600 |\n| GitHub | Default |\n\n---\n\n## Anti-Patterns\n\n| Avoid | Why | Instead |\n|-------|-----|---------|\n| Spaces without encoding | URL breaks | Use `_` or `-` |\n| Too much text | Unreadable | 2-6 words per line |\n| Wrong template | Message mismatch | Match template to context |\n| Missing extension | Invalid URL | Always include `.png`, `.jpg`, etc. |\n| Unencoded special chars | URL breaks | Use `~q`, `~s`, `~p`, etc. |\n| Assuming template exists | 404 error | Check templates list first |\n\n---\n\n## Verification\n\nMeme generation is successful when:\n\n1. **URL is valid** - Returns HTTP 200\n2. **Image renders** - Displays correctly in markdown\n3. **Text is visible** - Properly formatted on image\n4. **Context matches** - Template fits the message\n\n**Test command:**\n```bash\ncurl -I \"https://api.memegen.link/images/buzz/test/test.png\"\n# Should return: HTTP/2 200\n```\n\n---\n\n<details>\n<summary><strong>Deep Dive: Advanced Features</strong></summary>\n\n### Image Formats\n\n| Extension | Use Case |\n|-----------|----------|\n| `.png` | Best quality, default |\n| `.jpg` | Smaller file size |\n| `.webp` | Modern, good compression |\n| `.gif` | Animated templates |\n\n### Dimensions\n\n```\n?width=800\n?height=600\n?width=800&height=600  (padded to exact)\n```\n\n### Layout Options\n\n```\n?layout=top     # Text at top only\n?layout=bottom  # Text at bottom only\n?layout=default # Standard top/bottom\n```\n\n### Custom Fonts\n\nView available: https://api.memegen.link/fonts/\n\n```\n?font=impact  (default)\n```\n\n### Custom Images\n\nUse any image as background:\n\n```\nhttps://api.memegen.link/images/custom/hello/world.png?style=https://example.com/image.jpg\n```\n\n</details>\n\n<details>\n<summary><strong>Deep Dive: Contextual Memes</strong></summary>\n\n### Code Reviews\n\n```\nTemplate: fry\nhttps://api.memegen.link/images/fry/not_sure_if_feature/or_bug.png\n```\n\n### Deployments\n\n```\nTemplate: interesting\nhttps://api.memegen.link/images/interesting/i_dont_always_test/but_when_i_do_i_do_it_in_production.png\n```\n\n### Documentation\n\n```\nTemplate: yodawg\nhttps://api.memegen.link/images/yodawg/yo_dawg_i_heard_you_like_docs/so_i_documented_the_documentation.png\n```\n\n### Performance Issues\n\n```\nTemplate: fine\nhttps://api.memegen.link/images/fine/memory_usage_at_99~/this_is_fine.png\n```\n\n### Successful Deploy\n\n```\nTemplate: success\nhttps://api.memegen.link/images/success/deployed_to_production/zero_downtime.png\n```\n\n</details>\n\n<details>\n<summary><strong>Deep Dive: Workflow Integration</strong></summary>\n\n### Generating Memes in Response\n\n```markdown\nHere's a relevant meme:\n\n![Meme](https://api.memegen.link/images/buzz/bugs/bugs_everywhere.png)\n```\n\n### Dynamic Generation (Python)\n\n```python\ndef generate_status_meme(status: str, message: str):\n    template_map = {\n        \"success\": \"success\",\n        \"failure\": \"fine\",\n        \"review\": \"fry\",\n        \"deploy\": \"interesting\"\n    }\n\n    template = template_map.get(status, \"buzz\")\n    words = message.split()\n    top = \"_\".join(words[0:3])\n    bottom = \"_\".join(words[3:6])\n\n    return f\"https://api.memegen.link/images/{template}/{top}/{bottom}.png\"\n```\n\n### Using the Helper Script\n\n```python\nfrom meme_generator import MemeGenerator\n\nmeme = MemeGenerator()\nurl = meme.generate(\"buzz\", \"features\", \"features everywhere\")\nprint(url)\n```\n\n</details>\n\n<details>\n<summary><strong>Deep Dive: API Reference</strong></summary>\n\n### Endpoints\n\n| Endpoint | Purpose |\n|----------|---------|\n| `/templates/` | List all templates |\n| `/templates/{id}` | Template details |\n| `/fonts/` | Available fonts |\n| `/images/{template}/{top}/{bottom}.{ext}` | Generate meme |\n\n### API Characteristics\n\n- Free and open-source\n- No API key required\n- No rate limiting (normal use)\n- Stateless (all info in URL)\n- Images generated on-demand\n\n### Error Handling\n\n1. Check template at https://api.memegen.link/templates/\n2. Verify text formatting (underscores for spaces)\n3. Check special character encoding\n4. Ensure valid extension\n5. Test URL in browser\n\n</details>\n\n---\n\n## References\n\n| Document | Content |\n|----------|---------|\n| [markdown-memes-guide.md](references/markdown-memes-guide.md) | 15+ textual meme formats (greentext, copypasta, ASCII, etc.) |\n| [examples.md](references/examples.md) | Practical usage examples |\n\n### Scripts\n\n| Script | Purpose |\n|--------|---------|\n| [meme_generator.py](scripts/meme_generator.py) | Python helper for meme generation |\n\n---\n\n## Summary\n\nGenerate contextual memes to:\n- Add humor to conversations\n- Create social media visuals\n- Make code reviews engaging\n- Celebrate successes\n\n**Golden rule:** Keep text concise, match template to context.","tags":["meme","factory","agent","toolkit","softaworks","agent-skills","automation","claude","claude-code","coding-agent","development"],"capabilities":["skill","source-softaworks","skill-meme-factory","topic-agent-skills","topic-automation","topic-claude","topic-claude-code","topic-coding-agent","topic-development"],"categories":["agent-toolkit"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/softaworks/agent-toolkit/meme-factory","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add softaworks/agent-toolkit","source_repo":"https://github.com/softaworks/agent-toolkit","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 1847 github stars · SKILL.md body (7,579 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:52:58.092Z","embedding":null,"createdAt":"2026-04-18T20:27:52.451Z","updatedAt":"2026-05-18T18:52:58.092Z","lastSeenAt":"2026-05-18T18:52:58.092Z","tsv":"'-6':349 '/docs/':108 '/fonts':647 '/fonts/':496 '/image.jpg':98 '/images':650 '/images/':82,136,607 '/images/buzz/bugs/bugs_everywhere.png)':564 '/images/buzz/memes/memes_everywhere.png':146 '/images/buzz/test/test.png':431 '/images/custom/hello/world.png?style=https://example.com/image.jpg':509 '/images/fine/memory_usage_at_99~/this_is_fine.png':539 '/images/fry/not_sure_if_feature/or_bug.png':520 '/images/interesting/i_dont_always_test/but_when_i_do_i_do_it_in_production.png':526 '/images/success/deployed_to_production/zero_downtime.png':546 '/images/yodawg/yo_dawg_i_heard_you_like_docs/so_i_documented_the_documentation.png':532 '/meme-factory':53,56 '/templates':639,643 '/templates/':103,691 '0':596 '1':395,685 '100':29 '1200':90 '1200x630':326 '15':115,718 '2':348,402,692 '200':401,435 '3':409,597,601,699 '4':417,704 '404':383 '5':708 '6':602 '600':464,468 '630':92 '800':462,466 '800x600':328 'action':76 'add':17,746 'addit':109 'advanc':438 'aid':24 'alway':365 'anim':458 'anti':332 'anti-pattern':331 'api':9,45,634,657,665 'api.memegen.link':81,102,107,135,145,430,495,508,519,525,531,538,545,563,606,690 'api.memegen.link/docs/':106 'api.memegen.link/fonts/':494 'api.memegen.link/images/':80,134,605 'api.memegen.link/images/buzz/bugs/bugs_everywhere.png)':562 'api.memegen.link/images/buzz/memes/memes_everywhere.png':144 'api.memegen.link/images/buzz/test/test.png':429 'api.memegen.link/images/custom/hello/world.png?style=https://example.com/image.jpg':507 'api.memegen.link/images/fine/memory_usage_at_99~/this_is_fine.png':537 'api.memegen.link/images/fry/not_sure_if_feature/or_bug.png':518 'api.memegen.link/images/interesting/i_dont_always_test/but_when_i_do_i_do_it_in_production.png':524 'api.memegen.link/images/success/deployed_to_production/zero_downtime.png':544 'api.memegen.link/images/yodawg/yo_dawg_i_heard_you_like_docs/so_i_documented_the_documentation.png':530 'api.memegen.link/templates/':101,689 'appropri':315 'ascii':724 'assum':380 'avail':493,648 'avoid':334 'background':94,506 'bad':280 'bash':426 'basic':78,131 'best':446 'better':217 'bottom':59,85,140,159,481,484,598,610,653 'break':341,374 'browser':298,712 'bug/or_feature':211 'bugs/bugs_everywhere':191 'buzz':148,187,276,590,626 'case':185,444 'celebr':247,758 'challeng':273 'changemind':212,271 'char':372 'charact':162,311,702 'characterist':658 'check':385,686,700 'code':514,755 'code/new_framework/current_project':223 'command':425 'compar':239 'comparison':193 'compress':456 'concis':764 'content':20,715 'context':236,309,360,418,768 'contextu':512,743 'controversi':269 'convers':749 'copypasta':723 'correct':406 'creat':39,66,750 'curl':427 'custom':33,93,490,500 'deep':436,510,547,632 'def':569 'default':330,448,487,499 'demand':682 'deploy':521,541,585 'deployed/no_errors':198 'descript':52 'detail':646 'dimens':314,319,321,460 'direct':60 'display':405 'distract':220 'dive':437,511,548,633 'doc':105 'document':527,714 'doubl':179 'drake':192,241 'dynam':565 'emphasi':252 'encod':163,313,339,703 'endpoint':636,637 'engag':757 'ensur':705 'error':384,683 'etc':369,379,725 'everyth':257 'everywher':157,190,279,629 'exact':471 'exampl':119,123,143,186,730 'example.com':97 'example.com/image.jpg':96 'examples.md':726 'exist':382 'ext':654 'extens':142,362,442,707 'f':604 'factori':3,38,65 'failur':581 'featur':439,627,628 'file':451 'fine':199,255,259,536,582 'fire/this_is_fine':205 'first':388 'fit':421 'font':491,497,649 'format':49,77,118,161,246,268,414,441,695,721 'free':43,659 'fri':206,261,517,584 'generat':4,62,289,391,551,566,570,619,655,679,740,742 'gif':457 'github':329 'go':201 'golden':760 'good':455 'graph':325 'greentext':722 'guid':113,235 'h':176 'handl':684 'hash':175 'height':91,463,467 'helper':127,614,737 'hot':213 'http':400 'http/2':434 'humor':18,747 'id':644 'idea':281 'ignor':254 'imag':295,403,416,440,501,504,678 'impact':498 'import':620 'includ':366 'info':675 'instead':336 'integr':550 'interact':104 'interest':523,586 'invalid':363 'invoc':55 'iron':256 'issu':534 'join':594,599 'jpg':368,449 'keep':762 'key':666 'languag':72 'layout':472,474,480,486 'lightyear':149 'limit':670 'line':352 'list':387,640 'long':304 'make':754 'manual':54,194 'map':578 'mark':169 'markdown':111,408,555 'markdown-memes-guide.md':716 'match':306,357,419,765 'media':27,323,752 'meme':2,5,14,37,40,48,61,64,68,79,112,117,132,150,152,156,291,390,513,552,560,561,572,618,622,656,720,739,744 'meme-factori':1,63 'meme.generate':625 'meme_generator.py':124,734 'memegen.link':8,44 'memegener':621,623 'messag':308,355,423,575 'message.split':592 'mismatch':356 'miss':361 'modern':454 'mordor':224,282 'much':345 'n':167 'natur':71 'need':22 'newlin':166 'normal':671 'on-demand':680 'one':225,229,283 'open':324,662 'open-sourc':661 'opinion':270 'option':240,473 'outcom':251 'p':172,378 'pad':469 'panel':244 'pattern':333 'per':351 'percent':171 'perform':533 'platform':317,318,320 'png':86,367,445,611 'popular':30,181 'posit':250 'practic':121,728 'print':630 'prioriti':221 'problem':253 'proper':312,413 'purpos':638,733 'python':126,567,568,616,736 'q':170,376 'qualiti':447 'question':168 'quick':74,129 'quot':178,180 'rate':669 'readabl':301 'refer':75,635,713 'references/examples.md':120,727 'references/markdown-memes-guide.md':114,717 'reject/approve':245 'relev':559 'render':404 'request':13,73 'requir':667 'resourc':110 'respons':554 'result':147 'return':293,399,433,603 'review':515,583,756 'rule':761 'script':128,615,731,732 'scripts/meme_generator.py':125,735 'select':234 'server':203 'simpli':228,286 'simply/deploy_on_friday':232 'singl':177 'size':88,452 'skill' 'skill-meme-factory' 'slack/discord':327 'slash':173 'smaller':450 'social':26,322,751 'sourc':663 'source-softaworks' 'space':164,219,337,698 'special':310,371,701 'standard':488 'start':130 'stateless':673 'statement':272 'status':571,573,589 'str':574,576 'structur':133 'style':36,95 'success':196,249,393,540,543,579,580,759 'summari':741 'support':28 'sure':209,263 'tab':215 'take':214 'templat':31,57,83,100,137,182,183,233,237,305,354,358,381,386,420,459,516,522,528,535,542,577,587,608,642,645,651,687,766 'template_map.get':588 'test':296,424,709 'testing/automated_testing':195 'text':34,139,141,160,299,346,410,476,482,694,763 'textual':47,116,719 'thing':200,275 'top':58,84,138,154,475,478,593,609,652 'top/bottom':489 'topic-agent-skills' 'topic-automation' 'topic-claude' 'topic-claude-code' 'topic-coding-agent' 'topic-development' 'trigger':50,51 'two':243 'two-panel':242 'ubiquit':274 'uncertainti':207,260 'underscor':696 'unencod':370 'unread':347 'url':292,340,364,373,396,624,631,677,710 'usag':122,729 'use':6,10,41,184,342,375,443,502,612,672 'user':12 'valid':287,294,398,706 'verif':389 'verifi':693 'victori':197 'view':492 'visibl':412 'visual':23,753 'want':15 'webp':453 'width':89,461,465 'win':248 'without':338 'word':350,591,595,600 'workflow':549 'wrong':202,353 'x':70,188,189,265,277,278 'y':267 'yodawg':529","prices":[{"id":"c1608ff3-c4d7-416b-a864-1800f88e26cf","listingId":"94ba4309-7361-4009-8ec6-e80fe0ce93ed","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"softaworks","category":"agent-toolkit","install_from":"skills.sh"},"createdAt":"2026-04-18T20:27:52.451Z"}],"sources":[{"listingId":"94ba4309-7361-4009-8ec6-e80fe0ce93ed","source":"github","sourceId":"softaworks/agent-toolkit/meme-factory","sourceUrl":"https://github.com/softaworks/agent-toolkit/tree/main/skills/meme-factory","isPrimary":false,"firstSeenAt":"2026-04-18T21:54:37.517Z","lastSeenAt":"2026-05-18T18:52:58.092Z"},{"listingId":"94ba4309-7361-4009-8ec6-e80fe0ce93ed","source":"skills_sh","sourceId":"softaworks/agent-toolkit/meme-factory","sourceUrl":"https://skills.sh/softaworks/agent-toolkit/meme-factory","isPrimary":true,"firstSeenAt":"2026-04-18T20:27:52.451Z","lastSeenAt":"2026-05-07T22:40:50.952Z"}],"details":{"listingId":"94ba4309-7361-4009-8ec6-e80fe0ce93ed","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"softaworks","slug":"meme-factory","github":{"repo":"softaworks/agent-toolkit","stars":1847,"topics":["agent-skills","ai","automation","claude","claude-code","coding-agent","development"],"license":"mit","html_url":"https://github.com/softaworks/agent-toolkit","pushed_at":"2026-03-05T16:46:24Z","description":"A curated collection of skills for AI coding agents. Skills are packaged instructions and scripts that extend agent capabilities across development, documentation, planning, and professional workflows.","skill_md_sha":"37163c61823c8bb405c5a9c9b746511c93985b14","skill_md_path":"skills/meme-factory/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/softaworks/agent-toolkit/tree/main/skills/meme-factory"},"layout":"multi","source":"github","category":"agent-toolkit","frontmatter":{"name":"meme-factory","description":"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."},"skills_sh_url":"https://skills.sh/softaworks/agent-toolkit/meme-factory"},"updatedAt":"2026-05-18T18:52:58.092Z"}}