name: memegen-templates description: Generate classic meme images using 207+ templates from memegen.link. Use when creating memes with popular formats like Drake, Distracted Boyfriend, This is Fine, or any classic internet meme template. allowed-tools: Read, Bash(python:*) model: claude-sonnet-4-20250514
Memegen Templates
Generate classic internet memes using 207+ popular meme templates from memegen.link.
Overview
This Skill provides access to all classic meme formats:
- 207+ meme templates (Drake, Distracted Boyfriend, Expanding Brain, etc.)
- FREE API - No API key required
- URL-based generation - Simple and fast
- Custom text - Top/bottom or multi-line text
- Image overlays - Optional background images
Quick Start
Basic Usage
from src.memegen_api import MemegenAPI
api = MemegenAPI()
# Generate Drake meme
meme_url = api.generate_meme(
template="drake",
top_text="Manually creating memes",
bottom_text="Using memegen templates"
)
print(f"Meme URL: {meme_url}")
# https://api.memegen.link/images/drake/Manually_creating_memes/Using_memegen_templates.png
Download Meme
# Generate and download
image = api.generate_and_download(
template="drake",
top_text="Old way",
bottom_text="New way"
)
# Save to file
image.save("my_meme.png")
Popular Templates
Top 20 Most Used
| Template | Name | Format |
|---|---|---|
drake | Drake Hotline Bling | Top = No, Bottom = Yes |
distracted | Distracted Boyfriend | Left/Center/Right text |
iw | Inhaling Seagull | Top/Bottom |
ants | Do You Want Ants? | Top/Bottom |
afraid | Afraid to Ask Andy | Top/Bottom |
fine | This is Fine | Top/Bottom |
expanding | Expanding Brain | Multi-level |
buzz | Buzz and Woody | Left/Right |
both | Why Not Both? | Top/Bottom |
captain | Captain Phillips | Top/Bottom |
wonka | Condescending Wonka | Top/Bottom |
xy | X, X Everywhere | Top/Bottom |
awesome | Socially Awesome Penguin | Top/Bottom |
awkward | Socially Awkward Penguin | Top/Bottom |
ive | I Should Buy a Boat | Top/Bottom |
disastergirl | Disaster Girl | Top/Bottom |
odi | One Does Not Simply | Top/Bottom |
blb | Bad Luck Brian | Top/Bottom |
yuno | Y U No | Top/Bottom |
success | Success Kid | Top/Bottom |
Full list: See TEMPLATE_LIST.md for all 207 templates
Usage Examples
Example 1: Drake Meme
api = MemegenAPI()
# Classic Drake format
meme = api.generate_meme(
template="drake",
top_text="Complicated setup",
bottom_text="One-line API call"
)
Output:
Drake rejecting: "Complicated setup"
Drake approving: "One-line API call"
Example 2: Distracted Boyfriend
# Three-part meme
meme = api.generate_meme(
template="distracted",
texts=["Boyfriend", "Girlfriend", "Other Girl"]
)
# Texts: [Left (boyfriend), Center (girlfriend), Right (other girl)]
Example 3: Expanding Brain
# Multi-level intelligence meme
meme = api.generate_meme(
template="expanding",
texts=[
"Small brain idea",
"Medium brain idea",
"Big brain idea",
"Galaxy brain idea"
]
)
Example 4: This is Fine
# Classic "This is Fine" dog
meme = api.generate_meme(
template="fine",
top_text="Everything is fine",
bottom_text="*server is on fire*"
)
Example 5: Custom Styling
# With custom styling
meme = api.generate_meme(
template="drake",
top_text="Normal memes",
bottom_text="Customized memes",
style={
"font": "impact",
"color": "white",
"stroke": "black"
}
)
Advanced Features
1. Background Images
# Use custom background image
meme = api.generate_with_background(
template="drake",
top_text="Stock templates",
bottom_text="Custom backgrounds",
background_url="https://example.com/custom-bg.jpg"
)
2. Multi-Line Text
# Text with line breaks
meme = api.generate_meme(
template="drake",
top_text="Single_line_text",
bottom_text="Multi~nline~ntext" # ~n = newline
)
3. Special Characters
# Handle special characters
meme = api.generate_meme(
template="drake",
top_text="Text with spaces",
bottom_text="Text_with_underscores"
)
# Spaces → underscores in URL
# Use ~s for literal spaces
4. Batch Generation
# Generate multiple memes
templates = ["drake", "distracted", "fine"]
texts = [
("Option A", "Option B"),
("Thing 1", "Thing 2", "Thing 3"),
("Before", "After")
]
memes = []
for template, text in zip(templates, texts):
meme = api.generate_meme(template=template, texts=text)
memes.append(meme)
Template Categories
Advice Animals
insanity- Insanity Wolfsuccess- Success Kidawkward- Socially Awkward Penguinawesome- Socially Awesome Penguinblb- Bad Luck Brianfry- Futurama Fryscumbag- Scumbag Steve
Reaction Memes
drake- Drake Hotline Blingdistracted- Distracted Boyfriendbuzz- Buzz and Woodyboth- Why Not Both?ants- Do You Want Ants?fine- This is Fine
Text-Based
expanding- Expanding Brainjetpack- Jetpack Memetroll- Troll Faceyuno- Y U Nood- Overly Attached Girlfriend
Movie/TV
wonka- Condescending Wonkamorpheus- Matrix Morpheuscaptain- Captain Phillipstrek- Star Trekmini- Austin Powers Mini-Me
API Reference
MemegenAPI Class
class MemegenAPI:
def generate_meme(
self,
template: str,
top_text: str = "",
bottom_text: str = "",
texts: list = None,
style: dict = None
) -> str:
"""
Generate meme URL.
Args:
template: Template name (e.g., "drake")
top_text: Top text (optional)
bottom_text: Bottom text (optional)
texts: List of texts for multi-part memes
style: Custom styling options
Returns:
URL to generated meme image
"""
def generate_and_download(self, ...) -> PIL.Image:
"""Generate meme and download as PIL Image"""
def list_templates(self) -> list:
"""List all available templates"""
def get_template_info(self, template: str) -> dict:
"""Get template metadata"""
Common Use Cases
1. Social Media Posts
# Generate for Twitter/Instagram
meme = api.generate_and_download(
template="drake",
top_text="Boring posts",
bottom_text="Meme posts"
)
meme.save("social_media_post.png")
2. Presentation Slides
# Add humor to presentations
meme = api.generate_meme(
template="expanding",
texts=[
"Basic approach",
"Optimized approach",
"Over-engineered approach",
"Actually using memegen.link"
]
)
3. Team Communication
# Internal team memes
meme = api.generate_meme(
template="fine",
top_text="Production is down",
bottom_text="This is fine"
)
4. Content Creation
# Blog posts, videos, etc.
meme = api.generate_meme(
template="distracted",
texts=["Old method", "Current workflow", "New shiny tool"]
)
Text Formatting
Special Characters
| Character | Encoding | Example |
|---|---|---|
| Space | _ or ~s | Hello_World |
| Newline | ~n | Line1~nLine2 |
| Underscore | __ | Snake__case |
| Dash | - or ~- | Hyphen-ated |
| Question | ~q | Why~q |
| Percent | ~p | 100~p |
| Hash | ~h | ~htag |
| Slash | ~f | and~for |
Examples
# Multi-line text
api.generate_meme(
template="drake",
top_text="Single line",
bottom_text="Line 1~nLine 2~nLine 3"
)
# Special characters
api.generate_meme(
template="drake",
top_text="100~p normal",
bottom_text="200~p meme power"
)
Error Handling
try:
meme = api.generate_meme(
template="invalid_template",
top_text="Test"
)
except ValueError as e:
print(f"Invalid template: {e}")
try:
meme = api.generate_meme(
template="drake",
top_text="", # Empty text
bottom_text=""
)
except ValueError as e:
print(f"Invalid text: {e}")
Integration Examples
With Lark Bot
# In Lark bot command
def handle_memegen_command(template, top, bottom):
api = MemegenAPI()
image = api.generate_and_download(
template=template,
top_text=top,
bottom_text=bottom
)
upload_to_lark(image)
With Twitter Bot
# Generate and post to Twitter
api = MemegenAPI()
meme = api.generate_and_download("drake", "Old way", "New way")
twitter_client.post_with_image(
text="Choose wisely!",
image=meme
)
With Milady Generator
# Combine with Milady memes
from skills.milady_meme_generator.src.meme_generator_v2 import MemeGeneratorV2
# Generate Milady
milady_gen = MemeGeneratorV2()
milady_img = milady_gen.generate_meme(nft_id=5050)
# Generate classic meme
memegen_api = MemegenAPI()
classic_meme = memegen_api.generate_and_download("drake", "NFTs", "Milady NFTs")
# Combine or use separately
Tips & Best Practices
- Keep text short - Max 2-3 words per line works best
- Use appropriate templates - Match format to message
- Test special characters - Preview before sharing
- Cache downloads - Save bandwidth on repeated use
- Batch process - Generate multiple at once for efficiency
Troubleshooting
Template not found:
# Check available templates
templates = api.list_templates()
print(templates)
Image not loading:
# Use download instead of URL
image = api.generate_and_download(...) # More reliable
Text formatting issues:
# Use encoding helper
text = api.encode_text("Hello, World!") # Handles special chars
Related Skills
- milady-meme-generator - Milady NFT memes
- lark-bot-integration - Use in Lark bot
Cost: FREE (memegen.link is a free service)
API Docs: https://memegen.link/