meme-generator
The meme-generator skill creates captioned images from 170+ classic meme templates using the free, open-source Memegen.link API. Users can search templates by keyword, select a template, add top and bottom text, and receive a downloadable meme image URL with no API key or authentication required. This skill works well for quickly generating shareable memes for social media, presentations, or casual content creation.
git clone --depth 1 https://github.com/vellum-ai/vellum-assistant /tmp/meme-generator && cp -r /tmp/meme-generator/skills/meme-generator ~/.claude/skills/meme-generatorSKILL.md
## Overview
Generate classic memes using the [Memegen.link](https://api.memegen.link) API — a free, open-source, stateless meme generator. No API key, no auth, no rate limits. Just URLs.
The API has **170+ templates** covering all the classics: Drake, Distracted Boyfriend, This is Fine, Change My Mind, Always Has Been, etc.
## How It Works
The API is entirely URL-based. Every meme is a deterministic URL:
```
https://api.memegen.link/images/{template_id}/{top_text}/{bottom_text}.{format}
```
No POST requests needed for basic generation — just construct the URL and fetch it.
## Tools
All operations use `bash` with `curl` and `python3`.
### Search Templates
Find a template by keyword:
```bash
curl -s "https://api.memegen.link/templates" | python3 - "SEARCH_TERM" <<'PYEOF'
import json, sys
templates = json.load(sys.stdin)
query = sys.argv[1].lower()
matches = [t for t in templates if query in t['name'].lower() or query in t['id'].lower() or any(query in k.lower() for k in t.get('keywords', []))]
for t in matches[:15]:
print(f"{t['id']:25s} | {t['name']:45s} | {t['lines']} lines | Keywords: {', '.join(t.get('keywords', []))}")
print(f'\n{len(matches)} matches')
PYEOF
```
### Browse Popular Templates
Quick reference for the most Twitter-worthy templates:
| ID | Name | Lines | Best For |
| ------------------ | ------------------------- | ----- | ------------------------------------------------ |
| `drake` | Drakeposting | 2 | "This not that" comparisons |
| `db` | Distracted Boyfriend | 3 | Three-way tension (boyfriend, girlfriend, other) |
| `fine` | This is Fine | 2 | Denial of obvious problems |
| `cmm` | Change My Mind | 1 | Hot takes, controversial opinions |
| `astronaut` | Always Has Been | 4 | "Wait it was X?" / "Always has been" |
| `pigeon` | Is This a Pigeon? | 2 | Misidentifying something obvious |
| `exit` | Left Exit 12 Off Ramp | 3 | Choosing the wrong/chaotic option |
| `gru` | Gru's Plan | 4 | Plan that backfires in step 3-4 |
| `pooh` | Tuxedo Winnie the Pooh | 2 | Basic vs. sophisticated version |
| `rollsafe` | Roll Safe | 2 | Galaxy-brain "logic" |
| `chair` | American Chopper Argument | 6 | Multi-panel heated debate |
| `ds` | Daily Struggle | 3 | Two-button dilemma |
| `same` | They're The Same Picture | 3 | Two things that are identical |
| `midwit` | Midwit | 3 | Beginner and expert agree, midwit overthinks |
| `gb` | Galaxy Brain | 4 | Escalating "big brain" ideas |
| `right` | Anakin and Padme | 3 | "Right...?" meme — dawning realization |
| `harold` | Hide the Pain Harold | 2 | Suffering in silence |
| `vince` | Vince McMahon Reaction | 4 | Escalating excitement |
| `home` | We Have Food at Home | 2 | Wanting X, getting budget X |
| `panik-kalm-panik` | Panik Kalm Panik | 3 | Emotional rollercoaster |
| `woman-cat` | Woman Yelling at a Cat | 2 | Accusation vs. unbothered response |
| `spiderman` | Spider-Man Pointing | 2 | Two identical things |
### Generate a Meme
Build the URL and download the image:
```bash
curl -sL "https://api.memegen.link/images/{template_id}/{line1}/{line2}.{format}" \
-o /workspace/scratch/meme_{descriptive_name}.png
```
**Text encoding rules** (critical — get these right):
| Character | Encoding | Example |
| ------------------ | ------------------------ | -------------------- |
| Space | `_` or `-` | `hello_world` |
| Literal underscore | `__` | `my__variable` |
| Literal dash | `--` | `mind--blowing` |
| Question mark | `~q` | `is_this_real~q` |
| Exclamation | `~e` | `wow~e` |
| Hashtag | `~h` | `~hAI` |
| Ampersand | `~a` | `this_~a_that` |
| Percent | `~p` | `100~p` |
| Slash | `~s` | `either~sor` |
| Newline | `~n` | `line_one~nline_two` |
| Double quote | `''` (two single quotes) | `he_said_''hi''` |
| Emoji | Direct or alias | `👍` or `:thumbsup:` |
**Multi-line templates:** Some templates support 3+ lines. Each line is a path segment:
```bash
# 3-line template (e.g., Distracted Boyfriend)
curl -sL "https://api.memegen.link/images/db/{label_on_guy}/{label_on_girlfriend}/{label_on_other_woman}.png" \
-o /workspace/scratch/meme_db.png
# 4-line template (e.g., Gru's Plan)
curl -sL "https://api.memegen.link/images/gru/{step1}/{step2}/{step3}/{step4}.png" \
-o /workspace/scratch/meme_gru.png
```
**Blank lines:** Use `_` (single underscore) for an empty text line. Useful for templates where you only want text on one panel.
### Customize Appearance
**Dimensions** (for Twitter, 1200x675 or similar works well):
```bash
curl -sL "https://api.memegen.link/images/drake/top/bottom.png?width=1200" \
-o /workspace/scratchSet up, authenticate, and run external coding agents (Claude Code, Codex) via the Agent Client Protocol
Shop on Amazon and Amazon Fresh through your browser
Record and analyze API surfaces of web services
Build and edit small, personal visual tools and artifacts — dashboards, trackers, calculators, data visualizations, charts, simple landing pages, and slide decks the user wants for THEMSELVES. This is the right skill whenever the user asks to "visualize this," "make a chart," or "build an artifact" for their own use, or to edit an app they already built here. Do NOT reach for a ui_show dynamic_page to fake an artifact — build a real persistent app here. A one-off diagram, chart, or explainer that just accompanies an answer belongs to the visualize skill (ui_show visual), not an app. NOT for complex, multi-user, or shippable products — those go to a real project folder with a coding agent (see Scope below).
Drive a specific named macOS app via raw input bypassing the Accessibility tree
Migrate from ChatGPT, Claude, OpenClaw, Hermes, Manus, and other AI assistants into Vellum by inspecting their data exports, conversation archives, files, prompts, custom instructions, memory, saved memories, tools, GPTs, workflows, integrations, and relationships, then mapping as much as safely possible into Vellum primitives. Handles single-source and multi-source migrations with a unified, deduplicated inventory.
Chat with and search your complex documents — ask questions, extract tables and fields, and get answers grounded in the source. Connects the hosted Unstructured Transform MCP server to parse, structure, and enrich PDFs, Word/Excel/PowerPoint, images, scanned files, emails, and 60+ other formats into clean, AI-ready text for search, Q&A, and summarization without building a custom parsing pipeline.
Import conversation history from ChatGPT into Vellum