Meme Generator
Generate SVG-based memes from text — classic templates (Drake, Stonks, This is Fine, Doge, etc.), batch generation, quote packs, animated effects. Pure Python stdlib, crisp at any resolution. Skill: Meme Generator Owner: voronindenis5 Summary: Generate SVG-based memes from text — classic templates (Drake, Stonks, This is Fine, Doge, etc.), batch generation, quote packs, animated effects. Pure Python stdlib, crisp at any resolution. Tags: latest:0.1.0 Version history: v0.1.0 | 2026-08-14T06:18:05.056Z | auto Initial public release of meme-generator: generate crisp SVG memes from text using classic template
Rank
62
Safety
84
Downloads
1.6k
Updated
Oct 10, 2026
Version
0.1.0
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 1.6K downloads reported by the source. Last updated 10/10/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 10, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 10, 2026
- Adoption signal
- 1.6K downloadsadoption · observed Oct 10, 2026
- Latest release
- 0.1.0release · observed Aug 14, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s17b6amkd3wzqgg640v03a9r1n83gxs1:meme-generator-2- Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
- Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-meme-generator-2/snapshot"
Documentation
CLAWHUB
22,077 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: meme-generator
description: Generate SVG-based memes from text — classic templates (Drake, Stonks, This is Fine, Doge, etc.), batch generation, quote packs, animated effects. Pure Python stdlib, crisp at any resolution.
author: Denis Voronin
license: MIT
version: 1.0.0
language: python
tags: [meme, svg, viral, social, fun]
categories:
- creative
---
# Meme Generator
Create shareable SVG memes from text input. Pure Python stdlib — no external dependencies.
## Quick Start
```bash
# Single meme
python scripts/meme_gen.py make 'Unit tests?' 'No tests.' --template drake --output meme.svg
# Batch across all templates
python scripts/meme_gen.py batch 'Coffee is debug code' --all-templates --output-dir memes/
# Get quote ideas
python scripts/meme_gen.py quote --category programming --count 5
# Pipe mode
echo 'When it works on production' | python scripts/meme_gen.py --template this_is_fine
# List all templates
python scripts/meme_gen.py list
```
## Templates
| Template | Key | Format |
|---|---|---|
| Drake | `drake` | Two-panel reject/approve |
| Distracted Boyfriend | `distracted_boyfriend` | Three-character scene |
| Two Buttons | `two_buttons` | Dilemma choice |
| Change My Mind | `change_my_mind` | Table + sign |
| Galaxy Brain | `galaxy_brain` | Ascending brain levels |
| Stonks | `stonks` | Suit guy + arrow |
| This is Fine | `this_is_fine` | Dog in fire |
| Doge | `doge` | Shiba + colorful text |
| Expanding Brain | `expanding_brain` | Four-stage brain glow |
| Panik Kalm | `panik_kalm` | Three-panel panic/calm |
Aliases: `cmm` → change_my_mind, `brain` → expanding_brain, `fine` → this_is_fine, `stocks` → stonks, etc.
## Quote Categories
- **programming** — dev life struggles (20 quotes)
- **startup** — hustle culture satire (15 quotes)
- **productivity** — procrastination humor (15 quotes)
- **student** — academic chaos (15 quotes)
## Options
- `--html` — Also export HTML (easy browser viewing)
- `--animate` — Add SVG text animations (fade-in)
- `--all-templates` — Batch with every template
- `--output / --output-dir` — Control output paths
## Custom Templates
Create an SVG file with `{{TOP}}` and `{{BOTTOM}}` placeholders, then:
```bash
python scripts/meme_gen.py custom 'Hello' 'World' --template-file my_template.svg
```
## Output
- **SVG**: Standalone, scalable, tiny file size (~3-5 KB each)
- **HTML**: Wraps SVG in a centered page for browser viewing
- Watermark-freeREADME.md
# Meme Generator 🎨
> Create shareable SVG memes from text. Pure Python stdlib. Crisp at any resolution.



## Features
- ✅ **10 classic meme templates** — Drake, Distracted Boyfriend, Two Buttons, Change My Mind, Galaxy Brain, Stonks, This is Fine, Doge, Expanding Brain, Panik Kalm
- ✅ **Pure Python stdlib** — no pip install needed, no Pillow, no requests
- ✅ **SVG output** — crisp at any resolution, 3-5 KB per meme
- ✅ **Batch generation** — one quote → all templates instantly
- ✅ **Quote packs** — programming, startup, productivity, student life
- ✅ **Animated effects** — SVG-native animations
- ✅ **Custom templates** — use your own SVG with `{{TOP}}`/`{{BOTTOM}}` placeholders
- ✅ **Watermark-free**
## Quick Start
```bash
# Make a single meme
python scripts/meme_gen.py make 'Unit tests?' 'No tests.' --template drake --output meme.svg
# Batch: same text across ALL templates
python scripts/meme_gen.py batch 'Coffee is debug code' --all-templates --output-dir memes/
# Get random quotes
python scripts/meme_gen.py quote --category programming --count 5
# Pipe mode (stdin as top text)
echo 'When it works on production' | python scripts/meme_gen.py --template this_is_fine
```
## Templates
| Template | Key | Description |
|---|---|---|
| 🎤 Drake | `drake` | Reject / approve two-panel |
| 👀 Distracted Boyfriend | `distracted_boyfriend` | Three-character attention split |
| 🔘 Two Buttons | `two_buttons` | Impossible dilemma |
| 🪧 Change My Mind | `change_my_mind` | Guy at table with sign |
| 🧠 Galaxy Brain | `galaxy_brain` | Five ascending brain stages |
| 📈 Stonks | `stonks` | Suit guy + upward arrow |
| 🔥 This is Fine | `this_is_fine` | Dog in burning room |
| 🐕 Doge | `doge` | Shiba Inu + colorful text |
| ✨ Expanding Brain | `expanding_brain` | Four glowing brain levels |
| 😰 Panik Kalm | `panik_kalm` | Panic → calm → panic |
### Aliases
`cmm` → change_my_mind · `brain` → expanding_brain · `fine` → this_is_fine · `stocks` → stonks · `kalm`/`panik` → panik_kalm
## Quote Packs
```bash
python scripts/meme_gen.py quote --category programming --count 5 --generate --template drake
```
| Category | Count | Vibe |
|---|---|---|
| `programming` | 20 | Dev life struggles |
| `startup` | 15 | Hustle culture satire |
| `productivity` | 15 | Procrastination humor |
| `student` | 15 | Academic chaos |
## Output Formats
### SVG (default)
Standalone SVG file. Opens in any browser, scales infinitely.
```bash
python scripts/meme_gen.py make 'Top' 'Bottom' --template stonks --output meme.svg
```
### HTML (optional)
SVG wrapped in a styled HTML page for easy sharing/viewing.
```bash
python scripts/meme_gen.py make 'Top' 'Bottom' --template stonks --html
```
## Custom Templates
Create an SVG with `{{TOP}}` and `{{BOTTOM}}` placeholders:
_meta.json
{
"ownerId": "kn75wwn4x6djaf28jbykeamazd81gtdp",
"slug": "meme-generator-2",
"version": "0.1.0",
"publishedAt": 1786688285056
}references/svg-text.md
# SVG Text Rendering Guide
How text is rendered in meme SVGs — styling, wrapping, and animation tricks.
## Impact Font Stack
The classic meme look uses **Impact** font. Since Impact may not be available on all systems, we use a font stack:
```css
font-family: Impact, 'Arial Black', Haettenschweiler, sans-serif
```
This cascades: if Impact isn't installed, the browser tries Arial Black, then Haettenschweiler, then a generic sans-serif. On most Windows systems Impact is pre-installed; on Linux/macOS, Arial Black is the common fallback.
## Text Styling
### White Fill + Black Stroke (Classic Meme Look)
```xml
<text x="400" y="65"
font-family="Impact, 'Arial Black', sans-serif"
font-size="60"
font-weight="bold"
fill="white"
stroke="black"
stroke-width="4"
stroke-linejoin="round"
stroke-linecap="round"
paint-order="stroke fill"
text-anchor="middle"
letter-spacing="1.5">
TOP TEXT
</text>
```
### Key Attributes
| Attribute | Value | Purpose |
|---|---|---|
| `fill` | `white` | Interior text color |
| `stroke` | `black` | Outline color |
| `stroke-width` | `3–5` | Outline thickness (scales with font size) |
| `paint-order` | `stroke fill` | Draw outline BEHIND fill (critical!) |
| `stroke-linejoin` | `round` | Rounded corners on outline |
| `font-weight` | `bold` | Extra thickness |
| `letter-spacing` | `1.5` | Slight spacing for readability |
| `text-anchor` | `middle` | Horizontal centering |
### Why `paint-order="stroke fill"`?
Without this, the stroke is drawn ON TOP of the fill, making text look thin/hollow. With `stroke fill` order, the stroke renders first (as a fat outline), then the white fill paints over its center, leaving a clean black border.
This is the single most important attribute for authentic meme text.
## Text Wrapping
SVG `<text>` doesn't auto-wrap. We manually split long text into multiple `<text>` elements with calculated Y positions.
### Wrapping Algorithm
```python
def wrap_text(text, max_chars=22):
"""Split text into lines of at most max_chars."""
lines = []
for word in text.split():
if not lines or len(lines[-1]) + 1 + len(word) > max_chars:
lines.append(word)
else:
lines[-1] += " " + word
return lines
```
### Line Height
Each line is offset by `font_size * 1.05` vertically:
```python
line_height = font_size * 1.05
for i, line in enumerate(lines):
y = base_y + i * line_height
```
### Auto-sizing
The generator shrinks font size until the longest line fits within the canvas width:
```python
def optimal_font_size(lines, max_width_ratio=0.92, base_size=60, min_size=22):
longest = max(len(line) for line in lines)
while base_size > min_size:
char_width = base_size * 0.52 # Impact avg char width ratio
if longest * char_width <= WIDTH * max_width_ratio:
return base_size
base_size -= 2
return min_size
```
The `0.52` ratio approximates the references/templates.md
# Template Reference Guide This document describes how each meme template works, what the visual layout looks like, and when to use it. ## Template Overview All templates render at **800×800** SVG units and are drawn entirely with SVG shapes (rects, circles, paths, gradients). No raster images are embedded. --- ## 1. Drake (`drake`) **Layout**: Two horizontal panels stacked vertically. Left side has a stylized figure (rejecting on top, approving on bottom). Right side has text. **Text positions**: Top text on right of upper panel, bottom text on right of lower panel. **When to use**: Comparing two options where one is clearly better. The "reject then approve" pattern. **Example**: - Top: "WRITING TESTS" (rejected) - Bottom: "COPY-PASTING FROM STACK OVERFLOW" (approved) --- ## 2. Distracted Boyfriend (`distracted_boyfriend`) **Layout**: Three character silhouettes — boyfriend in center turning head, girlfriend on left, distraction on right. Labels float above each character. **Text positions**: Top text over the scene, labels on each character area. **When to use**: Showing divided attention, temptation, or choosing one thing over another. **Example**: - Top: "DEADLINES" (girlfriend) - Bottom: "NEW SIDE PROJECT" (distraction) - Center: "ME" --- ## 3. Two Buttons (`two_buttons`) **Layout**: A figure with hand extended toward two large buttons. Left button = top text, right button = bottom text. Sweat drop indicates anxiety. **Text positions**: Text inside each button. **When to use**: An impossible dilemma, two equally tempting/terrifying options. **Example**: - Left: "SHIP IT NOW" - Right: "WRITE TESTS FIRST" --- ## 4. Change My Mind (`change_my_mind`) **Layout**: A figure sitting at a folding table with a sign. The sign contains the main text. **Text positions**: Top text at top of image, text repeated on the sign. **When to use**: Stating a controversial opinion you're daring others to challenge. **Example**: - "PYTHON IS THE BEST LANGUAGE" --- ## 5. Galaxy Brain (`galaxy_brain`) **Layout**: Five brain shapes arranged vertically, each progressively brighter/glowing, set against a starry space background. **Text positions**: Labels beside the first (dumbest) and last (smartest) brain. **When to use**: Showing an escalation of ideas from basic to mind-blowing. **Example**: - Bottom (dumb): "USE TABS" - Top (genius): "NEITHER — WRITE BINARY" --- ## 6. Stonks (`stonks`) **Layout**: Suit-wearing figure on the left, with a green upward-pointing line graph and "STONKS" text on the right. Dark blue financial background. **Text positions**: Top text at top, bottom text at bottom. **When to use**: Ironic celebration of something going up that shouldn't, or financial humor. **Example**: - Top: "BUY HIGH" - Bottom: "SELL LOW" --- ## 7. This is Fine (`this_is_fine`) **Layout**: Cartoon dog sitting at a table with a coffee mug, surrounded by orange/yellow flames. Warm orange background. **Text positions**: Standard
AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/voronindenis5/skills/meme-generator-2",
"sourceUrl": "https://clawhub.ai/voronindenis5/skills/meme-generator-2",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-10T06:56:45.373Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-meme-generator-2/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-meme-generator-2/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-10T06:56:45.373Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1.6K downloads",
"href": "https://clawhub.ai/voronindenis5/meme-generator-2",
"sourceUrl": "https://clawhub.ai/voronindenis5/meme-generator-2",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-10T06:56:45.373Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "0.1.0",
"href": "https://clawhub.ai/voronindenis5/meme-generator-2",
"sourceUrl": "https://clawhub.ai/voronindenis5/meme-generator-2",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-08-14T06:18:05.056Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-meme-generator-2/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-meme-generator-2/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 0.1.0",
"description": "Initial public release of meme-generator: generate crisp SVG memes from text using classic templates. - Supports popular meme templates (Drake, Stonks, Doge, This is Fine, etc.) - Generate single or batch memes from the command line - Includes quote packs for programming, startup, productivity, and student humor - Animated SVG text effects and HTML export options available - Pure Python standard library; no external dependencies required - Easily extendable with custom SVG templates",
"href": "https://clawhub.ai/voronindenis5/meme-generator-2",
"sourceUrl": "https://clawhub.ai/voronindenis5/meme-generator-2",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-08-14T06:18:05.056Z",
"isPublic": true
}
]
}Record generated Oct 10, 2026.
