Meme Generator logo

Meme Generator

OrganizationPopular
vellum-ai
meme-generator

Generate memes from 170+ classic templates using the free Memegen.link API. Search templates, generate captioned images, and download them for posting. No API key required.

Overview

Publishervellum-ai
Repositoryvellum-assistant
Skill namememe-generator
Stars
1.3K
Forks
186
Bundled files
1
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by vellum-ai on GitHub. Read the source before you install it.

Installation

Install the Meme Generator AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/vellum-ai/vellum-assistant.git /tmp/vellum-assistant
mkdir -p .claude/skills
cp -r /tmp/vellum-assistant/skills/meme-generator .claude/skills/meme-generator
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Meme Generator in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Meme Generator on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Meme Generator is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Overview

Generate classic memes using the 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:

IDNameLinesBest For
drakeDrakeposting2"This not that" comparisons
dbDistracted Boyfriend3Three-way tension (boyfriend, girlfriend, other)
fineThis is Fine2Denial of obvious problems
cmmChange My Mind1Hot takes, controversial opinions
astronautAlways Has Been4"Wait it was X?" / "Always has been"
pigeonIs This a Pigeon?2Misidentifying something obvious
exitLeft Exit 12 Off Ramp3Choosing the wrong/chaotic option
gruGru's Plan4Plan that backfires in step 3-4
poohTuxedo Winnie the Pooh2Basic vs. sophisticated version
rollsafeRoll Safe2Galaxy-brain "logic"
chairAmerican Chopper Argument6Multi-panel heated debate
dsDaily Struggle3Two-button dilemma
sameThey're The Same Picture3Two things that are identical
midwitMidwit3Beginner and expert agree, midwit overthinks
gbGalaxy Brain4Escalating "big brain" ideas
rightAnakin and Padme3"Right...?" meme — dawning realization
haroldHide the Pain Harold2Suffering in silence
vinceVince McMahon Reaction4Escalating excitement
homeWe Have Food at Home2Wanting X, getting budget X
panik-kalm-panikPanik Kalm Panik3Emotional rollercoaster
woman-catWoman Yelling at a Cat2Accusation vs. unbothered response
spidermanSpider-Man Pointing2Two 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):

CharacterEncodingExample
Space_ or -hello_world
Literal underscore__my__variable
Literal dash--mind--blowing
Question mark~qis_this_real~q
Exclamation~ewow~e
Hashtag~h~hAI
Ampersand~athis_~a_that
Percent~p100~p
Slash~seither~sor
Newline~nline_one~nline_two
Double quote'' (two single quotes)he_said_''hi''
EmojiDirect 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/meme.png

Fonts:

FontIDAlias
Titillium Web Blacktitilliumwebthick
Kalam Regularkalamcomic
Impactimpact
Noto Sans Boldnotosans
bash
curl -sL "https://api.memegen.link/images/cmm/hot_take.png?font=impact" \
  -o /workspace/scratch/meme.png

Text colors (comma-separated for multiple lines):

bash
curl -sL "https://api.memegen.link/images/drake/top/bottom.png?color=red,blue" \
  -o /workspace/scratch/meme.png

Layout — move text to top only:

bash
curl -sL "https://api.memegen.link/images/rollsafe/big_brain_move.png?layout=top" \
  -o /workspace/scratch/meme.png

Animated formats (GIF/WebP — text animates onto static backgrounds, or animated templates play):

bash
curl -sL "https://api.memegen.link/images/oprah/you_get_a_meme/and_you_get_a_meme.gif" \
  -o /workspace/scratch/meme.gif

Custom Background

Use any image URL as the meme background:

bash
curl -sL "https://api.memegen.link/images/custom/top_text/bottom_text.png?background=https://example.com/photo.jpg" \
  -o /workspace/scratch/meme_custom.png

Image Overlays

Layer an image on top of a template using the style parameter:

bash
curl -sL "https://api.memegen.link/images/pigeon/Engineer/_/Is_this_AI~q.png?style=https://i.imgur.com/example.png" \
  -o /workspace/scratch/meme_overlay.png

Overlay position and scale can be tuned with center=<x>,<y> and scale=<float>.

Workflow: Generating Memes for Tweets

  1. Start with the take. What's the observation, hot take, or joke?
  2. Pick the template. Match the joke structure to the meme format:
    • Comparison/preference → Drake, Pooh
    • Hot take → Change My Mind
    • Misidentification → Pigeon
    • Denial → This is Fine
    • Realization → Always Has Been, Anakin and Padme
    • Escalation → Galaxy Brain, Vince McMahon
    • Dilemma → Daily Struggle, Left Exit
  3. Write tight copy. Meme text should be short — 3-8 words per line max. If you need a sentence, the joke isn't tight enough.
  4. Generate and preview. Download the image, review it visually.
  5. Pair with tweet text. The meme is the hook; the tweet text adds context or lands the punchline.

Workflow: Using the Helper Script

The meme script in scripts/ wraps the API for quick CLI usage:

bash
# Search for templates
meme search dragon

# Generate a meme
meme gen drake "Building from scratch" "Using the free API"

# Generate with custom width
meme gen --width 1200 cmm "Most hot takes are lukewarm"

# List popular templates
meme list

Install it:

bash
cp <skill-dir>/scripts/meme ~/.local/bin/meme && chmod +x ~/.local/bin/meme

Tips

  • Keep text short. The best memes have 3-8 words per line. Long text gets tiny and unreadable.
  • Test encoding. Special characters are the main failure mode. When in doubt, preview the image before sending.
  • Use .png for Twitter. JPG works but PNG is crisper for text. Twitter accepts both.
  • Width 1200 is a good default for Twitter image cards.
  • Blank panels: Use _ for lines you want empty. E.g., images/pigeon/Engineer/_/Is_this_AI~q.png leaves the middle line blank.
  • The API is stateless and free. No caching needed, no API keys, no rate limits to worry about. Generate freely.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Meme Generator AI skill do?

Generate memes from 170+ classic templates using the free Memegen.link API. Search templates, generate captioned images, and download them for posting. No API key required.

Why use Meme Generator on TypingMind?

Because you install it once and use it with any model. Meme Generator is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Meme Generator in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/vellum-ai/vellum-assistant/tree/main/skills/meme-generator. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Meme Generator?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Meme Generator?

As many as you like. As long as a model supports skills, you can use Meme Generator with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Meme Generator AI skill free?

Yes. It is published on GitHub by vellum-ai under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇