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/scratch>
>
>
>
Check Vellum Assistant architecture and package boundaries. Use when editing imports, moving code, adding endpoints, touching assistant/gateway/client/skill boundaries, or reviewing architecture-sensitive changes.
Review Vellum Assistant code changes for correctness, repo-specific quality rules, security risks, and missing validation. Use when reviewing diffs, preparing a PR, finishing implementation work, or when the user asks for a code review, quality pass, or pre-merge check in this repository.
Guide Vellum Assistant feature flag changes and rollout hygiene. Use when adding, editing, reviewing, or documenting assistant feature flags, rollout-gated behavior, or platform flag follow-up work.
Validate Vellum Assistant database and workspace migrations. Use when adding, editing, reviewing, or testing migrations, release-note migrations, persisted schemas, workspace file formats, or data backfills.