
Meme Factory
- 3.8k installs
- 2.2k repo stars
- Updated March 5, 2026
- softaworks/agent-toolkit
meme-factory is an agent skill for generate memes via memegen.link api when users want humor or visual aids for content.
About
The meme-factory skill 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. 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: - Markdown Memes Guide - 15+ textual meme formats - Examples - Practical usage examples - meme_generator.py - Python helper script Additional Resources: - Markdown Memes Guide - 15+ textual meme formats - Examples - Practical usage examples - meme_generator.py - Python helper script https://api.memegen.link/images/{template}/{top_text}/{bottom_text}.{extension} Example: https://api.me.
- Markdown Memes Guide - 15+ textual meme formats
- Examples - Practical usage examples
- meme_generator.py - Python helper script
- [ ] URL returns valid image (test in browser)
- [ ] Text is readable (not too long)
Meme Factory by the numbers
- 3,800 all-time installs (skills.sh)
- +14 installs in the week ending Jul 28, 2026 (Skillselion tracking)
- Ranked #179 of 1,881 Marketing & SEO skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Jul 28, 2026 (Skillselion catalog sync)
meme-factory capabilities & compatibility
- Capabilities
- markdown memes guide 15+ textual meme formats · examples practical usage examples · meme_generator.py python helper script · [ ] url returns valid image (test in browser) · [ ] text is readable (not too long)
- Use cases
- marketing · copywriting
What meme-factory says it does
Create memes using the free memegen.link API and textual meme formats.
Result: Buzz Lightyear meme with "memes" at top and "memes everywhere" at bottom.
Meme generation is successful when:
npx skills add https://github.com/softaworks/agent-toolkit --skill meme-factoryAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 3.8k |
|---|---|
| repo stars | ★ 2.2k |
| Security audit | 3 / 3 scanners passed |
| Last updated | March 5, 2026 |
| Repository | softaworks/agent-toolkit ↗ |
How do I generate memes via memegen.link api when users want humor or visual aids for content with documented agent guidance?
Generate memes via memegen.link API when users want humor or visual aids for content.
Who is it for?
Developers who need marketing & seo help during launch work.
Skip if: Skip when the task falls outside Marketing & SEO scope described in SKILL.md.
When should I use this skill?
Generate memes via memegen.link API when users want humor or visual aids for content.
What you get
Completed marketing & seo workflow aligned with SKILL.md steps and validation.
- meme image URLs
- greentext blocks
- copypasta text
By the numbers
- Markdown Memes Guide - 15+ textual meme formats
- Examples - Practical usage examples
- meme_generator.py - Python helper script
Files
Meme Factory
Create memes using the free memegen.link API and textual meme formats.
---
Triggers
| Trigger | Description |
|---|---|
/meme-factory | Manual invocation |
/meme-factory {template} {top} {bottom} | Direct meme generation |
meme-factory: create a meme about X | Natural language request |
---
Quick Reference
| 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:
- Markdown Memes Guide - 15+ textual meme formats
- Examples - Practical usage examples
- meme_generator.py - Python helper script
---
Quick Start
Basic Meme Structure
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.
Text Formatting
| Character | Encoding |
|---|---|
| Space | _ or - |
| Newline | ~n |
| Question mark | ~q |
| Percent | ~p |
| Slash | ~s |
| Hash | ~h |
| Single quote | '' |
| Double quote | "" |
---
Popular Templates
| 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 |
---
Template Selection Guide
| 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..." |
---
Validation
After generating a meme:
- [ ] URL returns valid image (test in browser)
- [ ] Text is readable (not too long)
- [ ] Template matches the message context
- [ ] Special characters properly encoded
- [ ] Dimensions appropriate for platform
Platform Dimensions
| Platform | Dimensions |
|---|---|
| Social media (Open Graph) | 1200x630 |
| Slack/Discord | 800x600 |
| GitHub | Default |
---
Anti-Patterns
| 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 |
---
Verification
Meme generation is successful when:
1. URL is valid - Returns HTTP 200 2. Image renders - Displays correctly in markdown 3. Text is visible - Properly formatted on image 4. Context matches - Template fits the message
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>
Image Formats
| Extension | Use Case |
|---|---|
.png | Best quality, default |
.jpg | Smaller file size |
.webp | Modern, good compression |
.gif | Animated templates |
Dimensions
?width=800
?height=600
?width=800&height=600 (padded to exact)Layout Options
?layout=top # Text at top only
?layout=bottom # Text at bottom only
?layout=default # Standard top/bottomCustom Fonts
View available: https://api.memegen.link/fonts/
?font=impact (default)Custom Images
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>
Code Reviews
Template: fry
https://api.memegen.link/images/fry/not_sure_if_feature/or_bug.pngDeployments
Template: interesting
https://api.memegen.link/images/interesting/i_dont_always_test/but_when_i_do_i_do_it_in_production.pngDocumentation
Template: yodawg
https://api.memegen.link/images/yodawg/yo_dawg_i_heard_you_like_docs/so_i_documented_the_documentation.pngPerformance Issues
Template: fine
https://api.memegen.link/images/fine/memory_usage_at_99~/this_is_fine.pngSuccessful Deploy
Template: success
https://api.memegen.link/images/success/deployed_to_production/zero_downtime.png</details>
<details> <summary><strong>Deep Dive: Workflow Integration</strong></summary>
Generating Memes in Response
Here's a relevant meme:
Dynamic Generation (Python)
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"Using the Helper Script
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>
Endpoints
| Endpoint | Purpose |
|---|---|
/templates/ | List all templates |
/templates/{id} | Template details |
/fonts/ | Available fonts |
/images/{template}/{top}/{bottom}.{ext} | Generate meme |
API Characteristics
- Free and open-source
- No API key required
- No rate limiting (normal use)
- Stateless (all info in URL)
- Images generated on-demand
Error Handling
1. Check template at https://api.memegen.link/templates/ 2. Verify text formatting (underscores for spaces) 3. Check special character encoding 4. Ensure valid extension 5. Test URL in browser
</details>
---
References
| Document | Content |
|---|---|
| markdown-memes-guide.md | 15+ textual meme formats (greentext, copypasta, ASCII, etc.) |
| examples.md | Practical usage examples |
Scripts
| Script | Purpose |
|---|---|
| meme_generator.py | Python helper for meme generation |
---
Summary
Generate contextual memes to:
- Add humor to conversations
- Create social media visuals
- Make code reviews engaging
- Celebrate successes
Golden rule: Keep text concise, match template to context.
Meme Factory
A Claude Code skill for generating memes using the memegen.link API and textual meme formats.
Purpose
The Meme Factory skill enables you to quickly create visual memes for various contexts - from code reviews to deployment celebrations. It uses the free memegen.link API to generate memes with custom text on popular templates, and also supports textual meme formats like greentext and copypasta.
When to Use
Use this skill when you want to:
- Add humor to technical conversations
- Create visual content for social media
- Make code reviews more engaging
- Celebrate successful deployments
- Generate memes about bugs, features, or tech decisions
- Need quick visual aids without design tools
How It Works
The skill leverages the memegen.link API, which generates memes on-demand using URL parameters:
https://api.memegen.link/images/{template}/{top_text}/{bottom_text}.pngKey features:
- No API key required - Free and open-source
- 100+ templates - Popular meme formats built-in
- URL-based - All parameters in the URL (stateless)
- Custom styling - Control dimensions, fonts, and backgrounds
- Special character encoding - Handles spaces, symbols, newlines
Key Features
1. Popular Templates
buzz- "X, X everywhere" formatdrake- Two-panel comparisonsuccess- Celebrating winsfine- "This is fine" ironyfry- "Not sure if..." uncertaintychangemind- Controversial opinionsdistracted- Wrong prioritiesmordor- "One does not simply..."
2. Text Formatting
- Spaces: Use
_or- - Newlines: Use
~n - Special chars:
~q(question),~p(percent),~s(slash),~h(hash)
3. Customization Options
- Image formats: PNG, JPG, WebP, GIF
- Dimensions: Custom width/height
- Layout: Top, bottom, or default
- Fonts: Multiple options available
- Custom backgrounds: Use any image URL
4. Textual Memes
Includes 15+ text-based meme formats:
- Greentext stories
- Copypasta
- ASCII art
- Reaction emojis
- And more (see markdown-memes-guide.md)
Usage Examples
Basic Meme
/meme-factory buzz memes memes_everywhereGenerates: https://api.memegen.link/images/buzz/memes/memes_everywhere.png
Code Review Context
/meme-factory fry not_sure_if_feature or_bugGenerates: https://api.memegen.link/images/fry/not_sure_if_feature/or_bug.png
Deployment Success
/meme-factory success deployed_to_production zero_downtimeGenerates: https://api.memegen.link/images/success/deployed_to_production/zero_downtime.png
Comparing Options
/meme-factory drake manual_testing automated_testingGenerates: https://api.memegen.link/images/drake/manual_testing/automated_testing.png
Production Issues
/meme-factory fine memory_usage_at_99~ this_is_fineGenerates: https://api.memegen.link/images/fine/memory_usage_at_99~/this_is_fine.png
With Custom Dimensions
/meme-factory buzz features features_everywhereAdd query params: ?width=1200&height=630 for social media
Natural Language
meme-factory: create a meme about deploying on fridayClaude will select appropriate template (likely mordor) and generate the meme.
Quick Start
1. Invoke the skill:
/meme-factory2. Specify template and text:
/meme-factory {template} {top_text} {bottom_text}3. Or use natural language:
meme-factory: create a meme about {your topic}4. Browse templates: Visit https://api.memegen.link/templates/ to see all available templates
5. Test the URL:
curl -I "https://api.memegen.link/images/buzz/test/test.png"Template Selection Guide
| Context | Recommended Template | Why |
|---|---|---|
| Comparing two options | drake | Two-panel reject/approve |
| Celebrating wins | success | Positive emphasis |
| Things going wrong | fine | Ironic "everything is fine" |
| Uncertainty | fry | "Not sure if X or Y" |
| Controversial take | changemind | Statement + challenge |
| Something ubiquitous | buzz | "X, X everywhere" |
| Bad ideas | mordor | "One does not simply..." |
| Wrong priorities | distracted | Boyfriend looking at other girl |
Validation Checklist
After generating a meme, verify:
- [ ] URL returns valid image (HTTP 200)
- [ ] Text is readable (not too long - keep 2-6 words per line)
- [ ] Template matches the message context
- [ ] Special characters properly encoded
- [ ] Dimensions appropriate for platform
Platform Dimensions
| Platform | Recommended Size |
|---|---|
| Social media (Open Graph) | 1200x630 |
| Slack/Discord | 800x600 |
| GitHub | Default |
Common Pitfalls
| Mistake | Why It Fails | Solution |
|---|---|---|
| Spaces without encoding | URL breaks | Use _ or - |
| Too much text | Unreadable | Keep it short (2-6 words) |
| Wrong template | Message mismatch | Match template to context |
| Missing extension | Invalid URL | Always use .png, .jpg, etc. |
| Unencoded special chars | URL breaks | Use ~q, ~s, ~p |
| Assuming template exists | 404 error | Check templates list first |
Additional Resources
- [SKILL.md](SKILL.md) - Complete skill documentation
- [markdown-memes-guide.md](references/markdown-memes-guide.md) - 15+ textual meme formats
- [examples.md](references/examples.md) - Practical usage examples
- [meme_generator.py](scripts/meme_generator.py) - Python helper script
- memegen.link API docs - https://api.memegen.link/docs/
- Template list - https://api.memegen.link/templates/
Example Workflow
In Code Review
Great catch on that edge case!

Let's add a test to clarify the expected behavior.In Deployment Notification
Production deployment complete!

All health checks passing.In Bug Report
Found an interesting issue in the payment flow:

Rolling back to previous version while we investigate.Summary
Meme Factory makes it easy to add humor and visual interest to technical communication. Whether you're celebrating a successful deploy, highlighting a code review comment, or just making your team laugh, this skill helps you quickly generate contextual memes without leaving Claude Code.
Golden rule: Keep text concise, match template to context, and have fun!
Meme Generation Examples
This document provides practical examples of using the meme generation skill in various contexts.
Basic Examples
Example 1: Simple Meme
Request: "Create a meme about bugs everywhere"
Response:
Here's a Buzz Lightyear meme about bugs:
Example 2: Drake Comparison Meme
Request: "Make a Drake meme comparing manual testing vs automated testing"
Response:
Here's a Drake meme comparing testing approaches:
Example 3: Success Meme
Request: "Generate a success kid meme about all tests passing"
Response:
Here's a success meme:
Programming Examples
Python Script Example
from meme_generator import MemeGenerator
# Initialize generator
meme = MemeGenerator()
# Generate a basic meme
url = meme.generate(
template="buzz",
top_text="features",
bottom_text="features everywhere"
)
print(f"Meme URL: {url}")
# Generate with custom dimensions for social media
url = meme.generate(
template="drake",
top_text="writing tests later",
bottom_text="writing tests first",
width=1200,
height=630
)
print(f"Social media meme: {url}")
# Get markdown for embedding
markdown = meme.get_markdown_image(url, alt_text="TDD Meme")
print(f"Markdown: {markdown}")CLI Example
# Generate a basic meme
python meme_generator.py generate buzz "features" "features everywhere"
# Generate with markdown output
python meme_generator.py generate success "deployed" "no errors" --markdown
# Generate with custom dimensions
python meme_generator.py generate drake "old way" "new way" --width 1200 --height 630
# List all available templates
python meme_generator.py list-templates
# Suggest template for context
python meme_generator.py suggest "deployment success"Context-Specific Examples
Code Review Context
Scenario: Reviewing pull request with many changes
# Not sure if improvements or over-engineering
url = meme.generate("fry", "not sure if improvements", "or over engineering")Result:
https://api.memegen.link/images/fry/not_sure_if_improvements/or_over_engineering.pngDeployment Context
Scenario: Successful production deployment
# Success kid meme
url = meme.generate("success", "deployed to production", "zero downtime")Result:
https://api.memegen.link/images/success/deployed_to_production/zero_downtime.pngIncident Response Context
Scenario: Production fire
# This is fine meme
url = meme.generate("fine", "production is down", "this is fine")Result:
https://api.memegen.link/images/fine/production_is_down/this_is_fine.pngDocumentation Context
Scenario: Documentation improvements
# Yo dawg meme
url = meme.generate(
"yodawg",
"yo dawg i heard you like docs",
"so i documented the documentation"
)Result:
https://api.memegen.link/images/yodawg/yo_dawg_i_heard_you_like_docs/so_i_documented_the_documentation.pngAdvanced Examples
Custom Dimensions for Social Media
Open Graph (1200x630)
url = meme.generate(
"buzz",
"features",
"features everywhere",
width=1200,
height=630
)Custom Layout
Top-only text
url = meme.generate(
"rollsafe",
"cant have bugs in production",
layout="top"
)Multiple Format Generation
formats = ["png", "jpg", "webp"]
for fmt in formats:
url = meme.generate(
"success",
"all tests passing",
"first try",
extension=fmt
)
print(f"{fmt.upper()}: {url}")Integration Examples
Slack Bot Integration
def send_deployment_meme(channel: str, status: str):
"""Send a meme to Slack based on deployment status."""
meme = MemeGenerator()
if status == "success":
url = meme.generate("success", "deployed", "no errors")
message = "Deployment successful!"
elif status == "failure":
url = meme.generate("fine", "deployment failed", "this is fine")
message = "Deployment needs attention"
else:
url = meme.generate("fry", "not sure if deployed", "or still deploying")
message = "Deployment status unclear"
# Send to Slack (pseudo-code)
slack_client.chat_postMessage(
channel=channel,
text=message,
attachments=[{"image_url": url}]
)GitHub PR Comments
def comment_pr_review(pr_number: int, review_type: str):
"""Add a meme to PR comments based on review."""
meme = MemeGenerator()
review_memes = {
"approved": meme.generate("success", "lgtm", "ship it"),
"changes_requested": meme.generate("yuno", "y u no", "write tests"),
"complex": meme.generate("fry", "not sure if feature", "or bug")
}
url = review_memes.get(review_type)
markdown = meme.get_markdown_image(url, alt_text="Code Review Meme")
# Post comment (pseudo-code)
github_client.issues.create_comment(
pr_number,
f"Code review complete!\n\n{markdown}"
)Discord Bot Integration
@bot.command()
async def deploy_meme(ctx, status: str):
"""Generate deployment meme for Discord."""
meme = MemeGenerator()
if status == "success":
url = meme.generate("success", "deployed", "zero downtime")
elif status == "fail":
url = meme.generate("fine", "servers on fire", "this is fine")
await ctx.send(f"Deployment Status: {status}")
await ctx.send(url)Batch Generation Examples
Generate Multiple Memes for a Topic
def generate_testing_memes():
"""Generate a collection of testing-related memes."""
meme = MemeGenerator()
memes = [
meme.generate("drake", "manual testing", "automated testing"),
meme.generate("success", "all tests passing", "on first try"),
meme.generate("fry", "not sure if bug", "or feature"),
meme.generate("interesting", "i dont always test", "but when i do i test in production"),
]
print("Testing Meme Collection:\n")
for i, url in enumerate(memes, 1):
print(f"{i}. {url}")
generate_testing_memes()Generate Memes for Documentation
def generate_docs_memes():
"""Generate documentation-related memes."""
meme = MemeGenerator()
topics = [
("yodawg", "yo dawg i heard you like docs", "so i documented your docs"),
("buzz", "documentation", "documentation everywhere"),
("wonka", "oh you write documentation", "tell me more about this fantasy"),
("ancient", "documentation", "documentation"),
]
for template, top, bottom in topics:
url = meme.generate(template, top, bottom)
markdown = meme.get_markdown_image(url)
print(markdown)
generate_docs_memes()Error Handling Examples
Check Template Validity
def generate_safe_meme(template: str, top: str, bottom: str):
"""Generate meme with error handling."""
meme = MemeGenerator()
# Check if template exists
if template not in meme.TEMPLATES:
print(f"Warning: '{template}' not in known templates")
print(f"Falling back to 'buzz'")
template = "buzz"
url = meme.generate(template, top, bottom)
return urlContext-Based Template Selection
def smart_meme_generation(context: str, top: str, bottom: str):
"""Generate meme with automatic template selection."""
meme = MemeGenerator()
# Suggest template based on context
suggested_template = meme.suggest_template_for_context(context)
print(f"Context: {context}")
print(f"Suggested template: {suggested_template}")
url = meme.generate(suggested_template, top, bottom)
return url
# Examples
url1 = smart_meme_generation("deployment success", "deployed", "no errors")
url2 = smart_meme_generation("debugging nightmare", "bugs", "bugs everywhere")
url3 = smart_meme_generation("code comparison", "old code", "new code")Tips for Effective Memes
Good Examples
# ✅ Concise text
meme.generate("buzz", "bugs", "bugs everywhere")
# ✅ Relevant template
meme.generate("drake", "manual work", "automation")
# ✅ Clear message
meme.generate("success", "deployed", "zero errors")Bad Examples
# ❌ Too much text
meme.generate(
"buzz",
"there are way too many bugs in this codebase",
"seriously there are bugs absolutely everywhere i look"
)
# ❌ Wrong template choice
meme.generate("success", "production is down", "servers crashed") # Should use 'fine'
# ❌ Unclear message
meme.generate("buzz", "stuff", "things")Testing Your Memes
def test_meme_generation():
"""Test meme generation with various inputs."""
meme = MemeGenerator()
test_cases = [
("buzz", "test", "test everywhere", "png"),
("drake", "bugs", "features", "jpg"),
("success", "deployed", "working", "webp"),
]
print("Testing meme generation:\n")
for template, top, bottom, ext in test_cases:
url = meme.generate(template, top, bottom, extension=ext)
print(f"✓ {template} ({ext}): {url}")
test_meme_generation()Real-World Workflow Example
def deployment_workflow_with_memes(deployment_result: dict):
"""Complete deployment workflow with contextual memes."""
meme = MemeGenerator()
# Pre-deployment
pre_deploy = meme.generate("buzz", "deployments", "deployments incoming")
print(f"Pre-deployment: {pre_deploy}")
# During deployment
if deployment_result["status"] == "in_progress":
during = meme.generate("fry", "not sure if deploying", "or already deployed")
print(f"During: {during}")
# Post-deployment
if deployment_result["success"]:
post = meme.generate(
"success",
"deployed to production",
"zero downtime",
width=1200,
height=630
)
slack_message = f"Deployment successful! {post}"
else:
post = meme.generate("fine", "deployment failed", "this is fine")
slack_message = f"Deployment needs attention: {post}"
print(f"Post-deployment: {slack_message}")
# Example usage
deployment_workflow_with_memes({
"status": "completed",
"success": True,
"duration": "5m 32s"
})Summary
These examples demonstrate:
- Basic meme generation
- Context-aware template selection
- Integration with popular platforms
- Error handling and validation
- Batch generation workflows
- Real-world use cases
For more examples and templates, visit:
- https://api.memegen.link/docs/
- https://api.memegen.link/templates/
The Complete Practical Guide to Memes in Markdown Blog Posts
A comprehensive toolbox for creating textual and image memes in Markdown-based blogs (MkDocs, Jekyll, Hugo, Astro, etc.)
---
📖 Table of Contents
1. Why Markdown for Memes? 2. Core Markdown Techniques 3. Layout Patterns for Text Memes 4. Textual Meme Formats 5. Image Memes via Pure URL 6. Mixing Text + Image Memes 7. Advanced Features 8. Production Tips 9. Complete Blog Example
---
🎯 Why Markdown for Memes?
Markdown is deceptively powerful for meme creation:
- Preserves formatting - Code blocks maintain spacing, ASCII art, and alignment
- Readable source - Plain text is portable and version-controllable
- Native structure - Blockquotes, emphasis, and spacing create rhythm naturally
- No uploads needed - Text memes live in your content, image memes via URL
- Accessible - Screen readers handle text better than image-text
- Fast - No external dependencies for textual memes
With a few tricks—code fences, blockquotes, emphasis, spacing—you can reproduce nearly any textual meme format inside a blog post.
---
🧱 Core Markdown Techniques
Master these building blocks first:
✅ Code Fences
Use triple backticks to preserve whitespace, arrows, emoji alignment, ASCII art, and raw text.
````markdown
>be me
>perfect spacing preserved
>mfw markdown just works````
Use for: Greentext, ASCII art, chat logs, anything needing exact spacing.
✅ Blockquotes
Use > for layered dialogue (Tumblr chains, ironic replies, greentext variants).
> Person A: this is fine
>> Person B: no it's not
>>> Person C: *concern intensifies*Use for: Tumblr chains, Twitter-style replies, nested irony.
✅ Hard Line Breaks
Two spaces at end of line or <br> for poetic timing.
roses are red
markdown is neat
two trailing spaces
make formatting sweetUse for: Poetry, dramatic pauses, controlled pacing.
✅ Horizontal Rules
Use --- to reset comedic pacing or transition between bits.
this joke is good
---
this joke is completely unrelatedUse for: Section breaks, punchline separation, tempo control.
✅ Emphasis
Use *italics* and **bold** to simulate tone, stage directions, or emotional beats.
**me:** i'm fine
*narrator:* he was not fineUse for: Stage directions, emphasis, emotional subtext.
---
🎨 Layout Patterns for Text Memes
✅ Choose a Meme Container
Each meme should have a clear "block" form for readability:
- Code block - Greentext, ASCII art, chat logs
- Blockquote - Tumblr chains, Twitter style
- Heading + narrative - Reddit AITA/TIFU, fake documentation
- List - Corporate satire, fake legal notices
- Plain paragraph - Emojicore, slang mutations
✅ Aim for Three Layers
Good textual memes read as:
1. Setup - Establish context 2. Pattern / Rhythm - Build expectation 3. Punchline or twist - Subvert or amplify
✅ Use Spacing as a Comedic Tool
Memes breathe through white space. Don't be afraid to isolate lines.
this is fine
this is also fine
*nothing is fine*---
📝 Textual Meme Formats
💚 1. Greentext
Requirements: Code fence with literal > characters
How to do it:
````markdown
>be me
>writing markdown memes
>turn blog into 4chan but cleaner
>mfw it actually works````
Renders as:
>be me
>writing markdown memes
>turn blog into 4chan but cleaner
>mfw it actually worksTips:
- Keep sentence fragments
- Use anticlimax for humor
- Monospace evokes "anon culture" immediately
- Works great for technical narratives
---
📦 2. Copypasta (Dramatic Walls of Text)
Requirements: Code fence for preservation
How to do it:
````markdown
What the fuck did you just fucking say about Markdown, you little bitch?
I'll have you know I graduated top of my class in the Navy Seals of Documentation,
and I've been involved in numerous secret raids on WordPress blogs...````
Tips:
- Let it be long - that's the point
- Overblown emotion is essential
- Preserve original formatting for authenticity
- Consider using collapsible sections for very long copypastas
---
✍️ 3. Shitpost Poetry & Micro-poems
Requirements: Hard line breaks (two spaces or <br>)
How to do it:
roses are red
markdown is sly
press two spaces
to force a new line
violets are blue
syntax highlighting is lit
code fences preserve
every last bitTips:
- Lean into minimalism
- Add
<br>if a theme strips trailing whitespace - Break expectations with sudden philosophical turns
- Lowercase adds casual authenticity
---
🅰️ 4. ASCII Art & ASCII Storytelling
Requirements: Monospaced code fence
How to do it:
````markdown
(╯°□°)╯︵ ┻━┻
┬─┬ノ( º _ ºノ)
___
/ \
| o o | <- me reading documentation
\___/
|||````
Tips:
- Use
textor no language to avoid syntax coloring - Test in multiple fonts
- Center using HTML
<div align="center">if needed - Keep it simple for broad compatibility
---
🌀 5. Surreal / Absurdist Text Memes
Requirements: Markdown + strategic spacing
How to do it:
you awaken in the hallway of beans
the moon whispers: *not again*
---
**OPTION 1:** accept the beans
**OPTION 2:** become the beans
you choose Option 3
*there was no Option 3*Tips:
- Use italics for dream-logic emphasis
- Insert
---to create uncanny jumps - Be playful with lowercase/capitalization
- Treat whitespace as tension
---
🗨️ 6. Tumblrisms (Multi-Speaker Chains)
Requirements: Nested blockquotes
How to do it:
> **Person A:** frogs are neat
>> **Person B:** frogs are powerful
>>> **Person C:** I aspire to frog
>>>> **Person D:** this post is making me lose my mind
>>>>> **Person A:** goodTips:
- Increase
>depth to show escalation - Add italics for emotional chaos
- Bold names for clarity
- Peak at 5 levels deep for readability
---
🐦 7. Twitter / X-style Micro-memes
Requirements: Blockquote or plain markdown
How to do it:
> me: i'm productive
> also me: alphabetizes rocks by emotional energy
---
**me at 3am:** what if bread could read
**bread:** *softly* "help"Tips:
- Keep it tight (2–4 lines)
- Use italics for "stage directions"
- Short exaggeration = comedy
- Em dash works great: "me: — also me:"
---
🧾 8. Reddit AITA / TIFU / Narrative Memes
Requirements: Markdown headings + paragraphs
How to do it:
### TIFU by enabling Markdown features too much
**Context:** I work in documentation.
**What Happened:** Today I formatted a shopping list with H3 headings,
bullet points, and citation links. My family staged an intervention.
**Update:** They've hidden the Markdown guide. I'm formatting this from memory.
**AITA?**Tips:
- Use headings for "post titles"
- Sincere tone + mild absurdity = gold
- Include typical Reddit formatting (bold labels)
- The more mundane the subject, the funnier
---
🗿 9. Wojak-style Dialogues (Text-Only)
Requirements: Bold names + minimal dialogue
How to do it:
**Doomer:** nothing matters
**Zoomer:** drink water bro
**Wojak:** *internal screaming*
**Chad:** have you tried not caring
**Doomer:** ...wait that's actually helpful
**Chad:** i knowTips:
- Keep dialogue short
- Rely on archetypes for instant recognition
- Tone = half-honest, half-ironic
- Works great in code blocks too
---
💬 10. Discord / Chat Log Memes
Requirements: Code fence with timestamp format
How to do it:
````markdown
[12:41] user123: you up?
[12:42] system: error: feelings.exe not found
[12:42] user123: same
[12:43] bot: did you try turning your emotions off and on again?
[12:44] user123: yes
[12:44] system: critical error: emotions.dll missing since 2019````
Tips:
- Timestamps add realism
- Use usernames to amplify the joke
- System messages = comedic gold
- Maintain deadpan delivery
---
😀 11. Emojicore Memes
Requirements: Just good spacing
How to do it:
🚶💨 leaving my responsibilities
😔👉👈 wondering if coffee counts as a personality
🎯 hitting the target (the target is rock bottom)
✨ manifesting ✨ (chaos)Tips:
- Use emojis as syntax, not decoration
- Vertical stacking works great
- Pair emoji with understated text
- Less is more
---
📚 12. Fake Wiki / Manual Pages
Requirements: Markdown headings + bold labels
How to do it:
## Bread.exe
**Category:** Deprecated Carbohydrate
**Status:** Unstable
**Introduced:** ~8000 BCE
**Last Update:** Never
### Known Issues
- Becomes stale without manual intervention
- Incompatible with lactose-intolerant systems
- Memory leak when toasted incorrectly
### Workarounds
See: `butter.dll` documentationTips:
- Keep the tone pseudo-academic
- Use definition-style formatting
- Technical jargon for mundane objects = peak comedy
- Cross-reference other fake docs
---
🐕 13. Slang-Mutation Text Memes
Requirements: Markdown paragraphs with stylized orthography
How to do it:
how 2 markdown:
1. make text smol
2. add sparklez ✨
3. u done it
**congrations** u did a format
no take backsiesTips:
- Lean into childlike spelling
- Use emoji to exaggerate tone
- Mix formal structure (lists) with informal language
- "Congrations" beats "congratulations" every time
---
👶 14. ELI5 But Wrong
Requirements: Heading + confident incorrect explanation
How to do it:
### ELI5: Why do volcanoes erupt?
Volcanoes are mountains that get too excited and sneeze the earth.
The rocks fly out because they want to be birds but forgot how.
This is called "geology."
**Follow-up:** Why is lava hot?
Because it's embarrassed about the whole situation.Tips:
- Confidence + incorrectness = humor
- Keep explanation "plausible" sounding
- Use actual ELI5 structure for authenticity
- Works great for tech concepts too
---
📄 15. Corporate / Legalese Satire
Requirements: Lists + bold labels
How to do it:
## Notice of Emotional Noncompliance
**Issued to:** You
**Date:** Whenever
**Reason:** Your vibe is irregular
### Required Actions
- [ ] Submit Form 42-B "Vibe Correction Protocol" within 5 business days
- [ ] Attend mandatory "Feeling Feelings Appropriately" training
- [ ] Provide written documentation of three (3) genuine smiles
**Failure to comply will result in:**
1. Passive-aggressive Slack messages
2. A pizza party (no pizza will be provided)
3. Being asked to "circle back" indefinitely
---
*This notice has been automatically generated by the Department of Vibes.*Tips:
- Official tone for trivial things
- Short, concise bullet points increase contrast
- Use checkboxes for "action items"
- Footer disclaimers are pure gold
---
🖼️ Image Memes via Pure URL
Sometimes you want a visual punchline next to your textual meme. With memegen.link, you can generate classic image memes just by crafting a URL—no uploads, no editors. Then embed it in your Markdown with standard image syntax.
🚀 Quick Start
That's it—your post renders the Drake format with top "using word art" and bottom "using markdown".
---
🔧 URL Anatomy
https://api.memegen.link/images/{template}/{top_text}/{bottom_text}.{ext}?{options}Components:
template: meme name (e.g.,drake,two-buttons,distracted-boyfriend)top_text/bottom_text: your captionsext:png(default),jpg, orwebp(good for lighter pages)options: query params (e.g.,font,width,watermark)
Example:
---
📝 Text Encoding Cheatsheet
Memegen uses compact encoding so URLs stay readable:
| Character | Encoding | Example |
|---|---|---|
| Space | _ | hello world → hello_world |
| Hyphen | -- | foo-bar → foo--bar |
| Underscore | __ | foo_bar → foo__bar |
| Question mark | ~q | why? → why~q |
| Percent | ~p | 50% → 50~p |
| Hash | ~h | #tag → ~htag |
| Slash (literal) | ~s | foo/bar → foo~sbar |
| Quotes | '' | he said "hi" → he_said_''hi'' |
Line breaks: Use %0A (URL-encoded newline) inside a caption.
Example:
top_line%0Asecond_line---
⚙️ Common Options (Query String)
Append with ? after the file extension:
?font=impact # Default is already impact; try notosans
?width=600&height=600 # Size control; height optional
?watermark=none # Remove tiny watermark
?background=URL # Custom template; URL-encode itExample:
---
🎭 Popular Templates
Quick reference for common meme formats:
| Template | Use Case |
|---|---|
drake | Rejecting one thing, approving another |
two-buttons | Difficult choice between two options |
distracted-boyfriend | Being distracted by something new |
gru-plan | Plan that goes wrong at the end |
change-my-mind | Stating an opinion confidently |
mocking-spongebob | Mocking someone's statement |
is-this-a-pigeon | Misidentifying something obvious |
surprised-pikachu | Shocked by predictable outcome |
success-kid | Celebrating small victories |
uno-draw-25 | Refusing to do something even if costly |
custom | Use with ?background= for any image |
---
🎯 Blank Sides & One-Sided Captions
Leave a side blank with _ (single underscore).
Top only:
Bottom only:
---
📏 Multiline Captions
Use %0A for line breaks inside a side:
---
🎨 Custom Backgrounds (Brand or Screenshot)
Use the custom template + background parameter. The background must be publicly reachable.
Tip: Pair a screenshot of your app/graph as background to comment on it memetically in the post.
---
♿ Accessibility & SEO
Always provide descriptive alt text:
Screen readers will read your alt text, making the joke accessible to everyone.
---
📦 Quick Copy-Paste Recipes
Drake (top/bottom):
Two Buttons (multiline with %0A):
Change My Mind (top only):
Surprised Pikachu (bottom only):
Custom background (brand screenshot):
---
🎭 Mixing Text + Image Memes
Blend text-only formats and image memes to pace a post effectively.
✅ Rhythm Pattern
1. Start with text to set up context:
````markdown
The Day I Realized Markdown Is Too Powerful
>be me
>ship blog revamp
>marketing wants "fun"
>accidentally create meme culture````
2. Follow with a visual to amplify the punchline:
3. Close with another text format for resolution:
**Status:** fun achieved
**Risk:** puns leaked to production
**Next Steps:** embrace chaos✅ Strategic Placement
Good patterns:
- Greentext → Image → Corporate satire
- Tumblr chain → ASCII art → Image
- Chat log → Image → Shitpost poetry
Avoid:
- 5 images in a row (visual fatigue)
- 3 long copypastas back-to-back (reader exhaustion)
- Image without context (confusing)
✅ Complementary Pairs
Match text and image memes thematically:
| Text Format | Image Format | Why It Works |
|---|---|---|
| Greentext | Drake | Both are format-specific classics |
| Corporate satire | Two buttons | Amplifies "decision paralysis" theme |
| Chat log | Surprised Pikachu | Both capture reactions |
| Reddit AITA | Distracted boyfriend | Narrative + visual work together |
| Wojak dialogue | Custom background | Text provides context for visual |
---
🔥 Advanced Features
🎨 Custom CSS for Greentext (MkDocs / Hugo)
Add custom styling for greentext blocks:
.greentext {
color: #789922;
font-family: 'Courier New', monospace;
background-color: #f0f0f0;
padding: 1rem;
border-left: 4px solid #789922;
}Then wrap greentext in HTML:
<div class="greentext">
>be you
>styling markdown like a pro
>mfw it actually looks good
</div>---
📢 Admonitions (MkDocs Material, Docusaurus)
Use admonition blocks for "official" memes or mock disclaimers:
!!! warning "System Alert"
Your snacks have been revoked pending performance review.
!!! danger "Critical Error"
`feelings.exe` has stopped responding.
Would you like to send an error report? [Yes] [Yes]---
🗂️ Collapsible Sections
Great for long copypastas and Tumblr chains:
<details>
<summary>Click to expand the legendary copypasta</summary>
What the fuck did you just fucking say about Markdown...
(rest of copypasta)
</details>---
🎯 Tabs (Docusaurus, MkDocs)
Show multiple meme variations side-by-side:
=== "Greentext"
>be me >tabs are cool
=== "Corporate"
**Notice:** Tabs have been deemed acceptable for meme deployment.
=== "Image"
---
🚀 Production Tips
⚡ Performance
For text memes:
- Already optimal (it's just text!)
- No external dependencies
- Fast rendering
For image memes:
- Prefer
webpformat for 30-50% smaller files - Set consistent
?width=640for predictable layout - Consider lazy loading:
loading="lazy"on<img>tags - Cache memegen.link URLs (they're stable)
♿ Accessibility
Text memes:
- Already screen-reader friendly
- Use semantic HTML where appropriate
- Avoid ASCII art for critical information
Image memes:
- Always provide descriptive alt text
- Describe the joke, not just "meme image"
- Good:
![Drake rejecting documentation, approving memes] - Bad:
![funny meme]
🔍 SEO
Text memes:
- Search engines index text content
- Use semantic HTML for structure
- Don't hide important information in ASCII art
Image memes:
- Alt text provides indexable content
- Descriptive filenames help (though memegen URLs are generated)
- Consider adding captions below images for context
---
📚 Complete Blog Example
Here's a full blog post example mixing multiple meme formats:
---
title: "The Deployment Chronicles"
date: 2025-01-11
tags: [devops, humor, deployments]
---
# The Deployment Chronicles
## Pre-Deployment Anxiety
>be me >friday afternoon >manager: "quick deploy?" >mfw "quick" and "deploy" in same sentence
**Narrator:** *It was not quick.*
---
## The Planning Phase
### Decision Matrix

**Status:** We chose poorly.
---
## During Deployment
[15:42] devops_bot: deployment started [15:43] engineer1: looks good [15:44] engineer2: why is prod slow [15:45] system: ERROR: connection timeout [15:46] engineer1: this is fine [15:47] system: CRITICAL: database locked [15:48] engineer1: THIS IS NOT FINE

---
## Post-Mortem
### Incident Report #2847
**Issued to:** Engineering Team
**Date:** 2025-01-11 18:30 UTC
**Reason:** Premature optimization of deployment strategy
#### Required Actions
- [ ] Never deploy on Friday again
- [ ] Actually read the deployment checklist
- [ ] Stop trusting "it works on my machine"
**Consequences:**
1. Mandatory attendance at "Why Friday Deploys Are Bad" training
2. Team pizza party (cancelled due to incident)
3. Existential dread
---
*This incident report has been automatically generated by the Department of Preventable Disasters.*
---
## Lessons Learned
**me:** let's deploy carefully next time
*also me next Friday:* what could go wrong
---
## Success Metrics
After fixing everything:

🎯 hitting targets (the target was "don't break prod permanently")
✨ manifesting ✨ (working deployments)
😅 lessons learned (until next time)
---
## ELI5: What is a deployment?
A deployment is when you tell the computer to use your new code.
Sometimes the computer listens.
Sometimes the computer decides chaos is more fun.
This is called "DevOps."
**Follow-up:** Why do deployments fail?
Because the computer has feelings and Friday afternoon hurts those feelings.
---
## Conclusion
roses are red
deploys cause pain
test in production
again and again
---
*Want more deployment horror stories? Subscribe to our RSS feed of suffering.*---
🎓 Summary
This guide covered:
1. Why Markdown - Preserves formatting, accessible, version-controllable 2. Core techniques - Code fences, blockquotes, spacing, emphasis 3. 15 textual formats - From greentext to corporate satire 4. Image memes - Using memegen.link URLs 5. Mixing formats - Strategic pacing and rhythm 6. Advanced features - CSS, admonitions, tabs 7. Production tips - Performance, accessibility, SEO 8. Complete example - Real-world blog post
Key takeaways:
- Text memes are fast, accessible, and version-controllable
- Image memes via URL require no uploads or storage
- Mix formats strategically for comedic pacing
- Always provide alt text for accessibility
- Use spacing and whitespace as a comedic tool
- Keep text concise for maximum impact
Resources:
- Memegen API: https://api.memegen.link/docs/
- Templates: https://api.memegen.link/templates/
- MkDocs Material: https://squidfunk.github.io/mkdocs-material/
---
This guide is a living document. Contributions welcome.
#!/usr/bin/env python3
"""Meme Generator Helper.
A Python interface for the memegen.link API to generate memes programmatically.
Usage:
python meme_generator.py generate buzz "memes" "memes everywhere"
python meme_generator.py list-templates
python meme_generator.py suggest "deployment success"
Or import as a module:
from meme_generator import MemeGenerator
meme = MemeGenerator()
url = meme.generate("buzz", "hello", "world")
"""
import argparse
import urllib.parse
class MemeGenerator:
"""Generate memes using the memegen.link API."""
BASE_URL = "https://api.memegen.link"
# Popular templates with their use cases
TEMPLATES = {
"buzz": "X, X everywhere (Buzz Lightyear)",
"drake": "Comparing two options (Drake Hotline Bling)",
"success": "Celebrating wins (Success Kid)",
"fine": "Things going wrong (This is Fine Dog)",
"fry": "Uncertainty (Futurama Fry)",
"changemind": "Controversial opinions (Change My Mind)",
"distracted": "Priorities/distractions (Distracted Boyfriend)",
"yodawg": "Yo dawg, I heard you like X (Xzibit)",
"interesting": "I don't always X (Most Interesting Man)",
"mordor": "One does not simply X (Boromir)",
"yuno": "Y U NO (Y U NO Guy)",
"doge": "Much X, very Y (Doge)",
"wonka": "Condescending statements (Wonka)",
"ancient": "Aliens/conspiracy (Ancient Aliens Guy)",
"skeptical": "Skeptical reactions (Third World Skeptical Kid)",
"awesome": "Good/bad situations (Awesome/Awkward Penguin)",
"rollsafe": "Can't X if Y (Roll Safe)",
"surprised": "Surprised reactions (Surprised Pikachu)",
"thinking": "Thinking/pondering (Thinking Guy)",
"boardroom": "Bad suggestions (Boardroom Meeting)",
}
# Context-based template suggestions
CONTEXT_MAP = {
"success": ["success", "awesome"],
"failure": ["fine", "yuno"],
"comparison": ["drake", "awesome", "distracted"],
"uncertainty": ["fry", "suspicious"],
"statement": ["buzz", "yodawg", "interesting", "mordor", "changemind"],
"reaction": ["success", "fine", "surprised", "thinking"],
"humor": ["doge", "wonka", "ancient", "rollsafe"],
"deployment": ["success", "fine", "interesting"],
"testing": ["success", "fry", "interesting"],
"debugging": ["fine", "fry", "buzz"],
"documentation": ["yodawg", "buzz", "wonka"],
}
def __init__(self) -> None:
"""Initialize the meme generator."""
def _format_text(self, text: str) -> str:
"""Format text for URL inclusion following memegen rules."""
replacements = {
" ": "_",
"-": "--",
"_": "__",
"?": "~q",
"%": "~p",
"#": "~h",
"/": "~s",
'"': "''",
}
escaped = "".join(replacements.get(char, char) for char in text)
# Percent-encode any remaining reserved characters while preserving
# memegen's escape sequences and allowed characters.
return urllib.parse.quote(escaped, safe="-_~")
def generate( # noqa: PLR0913
self,
template: str,
top_text: str = "",
bottom_text: str = "",
extension: str = "png",
width: int | None = None,
height: int | None = None,
layout: str | None = None,
style: str | None = None,
font: str | None = None,
) -> str:
"""Generate a meme URL.
Args:
template: Template name (e.g., 'buzz', 'drake')
top_text: Text for the top of the meme
bottom_text: Text for the bottom of the meme
extension: Image format ('png', 'jpg', 'webp', 'gif')
width: Optional width in pixels
height: Optional height in pixels
layout: Optional layout ('top', 'bottom', 'default')
style: Optional style or custom background URL
font: Optional font name
Returns:
URL to the generated meme
"""
# Format text
top = self._format_text(top_text) if top_text else "_"
bottom = self._format_text(bottom_text) if bottom_text else "_"
# Build base URL
url = f"{self.BASE_URL}/images/{template}/{top}/{bottom}.{extension}"
# Add query parameters
params = {}
if width:
params["width"] = str(width)
if height:
params["height"] = str(height)
if layout:
params["layout"] = layout
if style:
params["style"] = style
if font:
params["font"] = font
if params:
query_string = urllib.parse.urlencode(params)
url = f"{url}?{query_string}"
return url
def suggest_template_for_context(self, context: str) -> str:
"""Suggest a template based on context.
Args:
context: Description of the situation (e.g., 'deployment success')
Returns:
Suggested template name
"""
context_lower = context.lower()
# Check for keyword matches
for key, templates in self.CONTEXT_MAP.items():
if key in context_lower:
return templates[0]
# Default fallback
return "buzz"
def list_templates(self) -> dict[str, str]:
"""List all available templates with descriptions.
Returns:
Dictionary of template names and descriptions
"""
return self.TEMPLATES
def get_markdown_image(self, url: str, alt_text: str = "Meme", width: int | None = None) -> str:
"""Generate markdown for embedding the meme image.
Args:
url: The meme URL
alt_text: Alternative text for the image
width: Optional width specification
Returns:
Markdown image syntax
"""
if width:
return f'<img src="{url}" alt="{alt_text}" width="{width}"/>'
return f""
def main() -> None:
"""CLI interface for the meme generator."""
parser = argparse.ArgumentParser(description="Generate memes using memegen.link")
subparsers = parser.add_subparsers(dest="command", help="Command to run")
# Generate command
generate_parser = subparsers.add_parser("generate", help="Generate a meme")
generate_parser.add_argument("template", help="Template name (e.g., buzz, drake)")
generate_parser.add_argument("top", help="Top text")
generate_parser.add_argument("bottom", nargs="?", default="", help="Bottom text")
generate_parser.add_argument(
"--extension", "-e", default="png", help="Image format (png, jpg, webp, gif)"
)
generate_parser.add_argument("--width", "-w", type=int, help="Image width")
generate_parser.add_argument("--height", type=int, help="Image height")
generate_parser.add_argument("--layout", "-l", help="Layout (top, bottom, default)")
generate_parser.add_argument("--markdown", "-m", action="store_true", help="Output as markdown")
# List templates command
subparsers.add_parser("list-templates", help="List all available templates")
# Suggest template command
suggest_parser = subparsers.add_parser("suggest", help="Suggest template for context")
suggest_parser.add_argument("context", help="Context description")
args = parser.parse_args()
generator = MemeGenerator()
if args.command == "generate":
generator.generate(
template=args.template,
top_text=args.top,
bottom_text=args.bottom,
extension=args.extension,
width=args.width,
height=getattr(args, "height", None),
layout=args.layout,
)
if args.markdown:
pass
else:
pass
elif args.command == "list-templates":
templates = generator.list_templates()
for _name, _description in sorted(templates.items()):
pass
elif args.command == "suggest":
generator.suggest_template_for_context(args.context)
else:
parser.print_help()
if __name__ == "__main__":
main()
Related skills
Forks & variants (1)
Meme Factory has 1 known copy in the catalog totaling 13 installs. They canonicalize to this original listing.
- cachemoney - 13 installs
How it compares
meme-factory is an agent skill for generate memes via memegen.link api when users want humor or visual aids for content, not a generic alternative.
FAQ
Who is meme-factory for?
Developers using Marketing & SEO workflows with agent-guided SKILL.md steps.
When should I use meme-factory?
Generate memes via memegen.link API when users want humor or visual aids for content.
Is meme-factory safe to install?
Review the Security Audits panel on this page before installing in production.