meme-factory by softaworks/agent-toolkit
npx skills add https://github.com/softaworks/agent-toolkit --skill meme-factory使用免费的 memegen.link API 和文本表情包格式创建表情包。
| 触发器 | 描述 |
|---|---|
/meme-factory | 手动调用 |
/meme-factory {template} {top} {bottom} | 直接生成表情包 |
meme-factory: create a meme about X | 自然语言请求 |
| 操作 | 格式 |
|---|---|
| 基础表情包 | https://api.memegen.link/images/{template}/{top}/{bottom}.png |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 带尺寸调整 | ?width=1200&height=630 |
| 自定义背景 | ?style=https://example.com/image.jpg |
| 所有模板 | https://api.memegen.link/templates/ |
| 交互式文档 | https://api.memegen.link/docs/ |
附加资源:
https://api.memegen.link/images/{template}/{top_text}/{bottom_text}.{extension}
示例:
https://api.memegen.link/images/buzz/memes/memes_everywhere.png
结果:顶部为"memes",底部为"memes everywhere"的巴斯光年表情包。
| 字符 | 编码 |
|---|---|
| 空格 | _ 或 - |
| 换行 | ~n |
| 问号 | ~q |
| 百分号 | ~p |
| 斜杠 | ~s |
| 井号 | ~h |
| 单引号 | '' |
| 双引号 | "" |
| 模板 | 使用场景 | 示例 |
|---|---|---|
buzz | X,到处都是 X | bugs/bugs_everywhere |
drake | 比较 | manual_testing/automated_testing |
success | 胜利 | deployed/no_errors |
fine | 事情出错 | server_on_fire/this_is_fine |
fry | 不确定 | not_sure_if_bug/or_feature |
changemind | 热门观点 | tabs_are_better_than_spaces |
distracted | 优先级 | my_code/new_framework/current_project |
mordor | 不能简单地 | one_does_not_simply/deploy_on_friday |
| 上下文 | 模板 | 原因 |
|---|---|---|
| 比较选项 | drake | 两面板拒绝/批准格式 |
| 庆祝胜利 | success | 强调积极结果 |
| 忽略问题 | fine | 讽刺的"一切都好" |
| 不确定性 | fry | "不确定是 X 还是 Y" 格式 |
| 争议性观点 | changemind | 陈述 + 挑战 |
| 无处不在的事物 | buzz | "X,到处都是 X" |
| 糟糕的想法 | mordor | "不能简单地..." |
生成表情包后:
| 平台 | 尺寸 |
|---|---|
| 社交媒体(Open Graph) | 1200x630 |
| Slack/Discord | 800x600 |
| GitHub | 默认 |
| 避免 | 原因 | 替代方案 |
|---|---|---|
| 未编码的空格 | URL 中断 | 使用 _ 或 - |
| 文字过多 | 不可读 | 每行 2-6 个词 |
| 错误的模板 | 消息不匹配 | 使模板与上下文匹配 |
| 缺少扩展名 | 无效 URL | 始终包含 .png、.jpg 等 |
| 未编码的特殊字符 | URL 中断 | 使用 ~q、~s、~p 等 |
| 假设模板存在 | 404 错误 | 首先检查模板列表 |
表情包生成成功时:
测试命令:
curl -I "https://api.memegen.link/images/buzz/test/test.png"
# 应返回:HTTP/2 200
| 扩展名 | 使用场景 |
|---|---|
.png | 最佳质量,默认 |
.jpg | 文件更小 |
.webp | 现代,压缩效果好 |
.gif | 动画模板 |
?width=800
?height=600
?width=800&height=600 (填充至精确尺寸)
?layout=top # 仅顶部文字
?layout=bottom # 仅底部文字
?layout=default # 标准顶部/底部
?font=impact (默认)
使用任何图像作为背景:
https://api.memegen.link/images/custom/hello/world.png?style=https://example.com/image.jpg
Template: fry
https://api.memegen.link/images/fry/not_sure_if_feature/or_bug.png
Template: interesting
https://api.memegen.link/images/interesting/i_dont_always_test/but_when_i_do_i_do_it_in_production.png
Template: yodawg
https://api.memegen.link/images/yodawg/yo_dawg_i_heard_you_like_docs/so_i_documented_the_documentation.png
Template: fine
https://api.memegen.link/images/fine/memory_usage_at_99~/this_is_fine.png
Template: success
https://api.memegen.link/images/success/deployed_to_production/zero_downtime.png
这是一个相关的表情包:

def generate_status_meme(status: str, message: str):
template_map = {
"success": "success",
"failure": "fine",
"review": "fry",
"deploy": "interesting"
}
template = template_map.get(status, "buzz")
words = message.split()
top = "_".join(words[0:3])
bottom = "_".join(words[3:6])
return f"https://api.memegen.link/images/{template}/{top}/{bottom}.png"
from meme_generator import MemeGenerator
meme = MemeGenerator()
url = meme.generate("buzz", "features", "features everywhere")
print(url)
| 端点 | 用途 |
|---|---|
/templates/ | 列出所有模板 |
/templates/{id} | 模板详情 |
/fonts/ | 可用字体 |
/images/{template}/{top}/{bottom}.{ext} | 生成表情包 |
| 文档 | 内容 |
|---|---|
| markdown-memes-guide.md | 15+ 种文本表情包格式(greentext、copypasta、ASCII 等) |
| examples.md | 实际使用示例 |
| 脚本 | 用途 |
|---|---|
| meme_generator.py | 用于生成表情包的 Python 辅助工具 |
生成上下文相关的表情包以:
黄金法则: 保持文本简洁,使模板与上下文匹配。
每周安装数
571
仓库
GitHub 星标数
1.2K
首次出现
2026年1月20日
安全审计
安装于
codex416
gemini-cli416
cursor416
claude-code415
opencode398
cline397
Create memes using the free memegen.link API and textual meme formats.
| Trigger | Description |
|---|---|
/meme-factory | Manual invocation |
/meme-factory {template} {top} {bottom} | Direct meme generation |
meme-factory: create a meme about X | Natural language request |
| Action | Format |
|---|---|
| Basic meme | https://api.memegen.link/images/{template}/{top}/{bottom}.png |
| With sizing | ?width=1200&height=630 |
| Custom background | ?style=https://example.com/image.jpg |
| All templates | https://api.memegen.link/templates/ |
| Interactive docs | https://api.memegen.link/docs/ |
Additional Resources:
https://api.memegen.link/images/{template}/{top_text}/{bottom_text}.{extension}
Example:
https://api.memegen.link/images/buzz/memes/memes_everywhere.png
Result: Buzz Lightyear meme with "memes" at top and "memes everywhere" at bottom.
| Character | Encoding |
|---|---|
| Space | _ or - |
| Newline | ~n |
| Question mark | ~q |
| Percent | ~p |
| Slash | ~s |
| Hash | ~h |
| Template | Use Case | Example |
|---|---|---|
buzz | X, X everywhere | bugs/bugs_everywhere |
drake | Comparisons | manual_testing/automated_testing |
success | Victories | deployed/no_errors |
fine | Things going wrong | server_on_fire/this_is_fine |
fry | Uncertainty | not_sure_if_bug/or_feature |
| Context | Template | Why |
|---|---|---|
| Comparing options | drake | Two-panel reject/approve format |
| Celebrating wins | success | Positive outcome emphasis |
| Problems ignored | fine | Ironic "everything is fine" |
| Uncertainty | fry | "Not sure if X or Y" format |
| Controversial opinion | changemind | Statement + challenge |
After generating a meme:
| Platform | Dimensions |
|---|---|
| Social media (Open Graph) | 1200x630 |
| Slack/Discord | 800x600 |
| GitHub | Default |
| Avoid | Why | Instead |
|---|---|---|
| Spaces without encoding | URL breaks | Use _ or - |
| Too much text | Unreadable | 2-6 words per line |
| Wrong template | Message mismatch | Match template to context |
| Missing extension | Invalid URL | Always include .png, .jpg, etc. |
| Unencoded special chars | URL breaks | Use ~q, , , etc. |
Meme generation is successful when:
Test command:
curl -I "https://api.memegen.link/images/buzz/test/test.png"
# Should return: HTTP/2 200
| Extension | Use Case |
|---|---|
.png | Best quality, default |
.jpg | Smaller file size |
.webp | Modern, good compression |
.gif | Animated templates |
?width=800
?height=600
?width=800&height=600 (padded to exact)
?layout=top # Text at top only
?layout=bottom # Text at bottom only
?layout=default # Standard top/bottom
View available: https://api.memegen.link/fonts/
?font=impact (default)
Use any image as background:
https://api.memegen.link/images/custom/hello/world.png?style=https://example.com/image.jpg
Template: fry
https://api.memegen.link/images/fry/not_sure_if_feature/or_bug.png
Template: interesting
https://api.memegen.link/images/interesting/i_dont_always_test/but_when_i_do_i_do_it_in_production.png
Template: yodawg
https://api.memegen.link/images/yodawg/yo_dawg_i_heard_you_like_docs/so_i_documented_the_documentation.png
Template: fine
https://api.memegen.link/images/fine/memory_usage_at_99~/this_is_fine.png
Template: success
https://api.memegen.link/images/success/deployed_to_production/zero_downtime.png
Here's a relevant meme:

def generate_status_meme(status: str, message: str):
template_map = {
"success": "success",
"failure": "fine",
"review": "fry",
"deploy": "interesting"
}
template = template_map.get(status, "buzz")
words = message.split()
top = "_".join(words[0:3])
bottom = "_".join(words[3:6])
return f"https://api.memegen.link/images/{template}/{top}/{bottom}.png"
from meme_generator import MemeGenerator
meme = MemeGenerator()
url = meme.generate("buzz", "features", "features everywhere")
print(url)
| Endpoint | Purpose |
|---|---|
/templates/ | List all templates |
/templates/{id} | Template details |
/fonts/ | Available fonts |
/images/{template}/{top}/{bottom}.{ext} | Generate meme |
| Document | Content |
|---|---|
| markdown-memes-guide.md | 15+ textual meme formats (greentext, copypasta, ASCII, etc.) |
| examples.md | Practical usage examples |
| Script | Purpose |
|---|---|
| meme_generator.py | Python helper for meme generation |
Generate contextual memes to:
Golden rule: Keep text concise, match template to context.
Weekly Installs
571
Repository
GitHub Stars
1.2K
First Seen
Jan 20, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
codex416
gemini-cli416
cursor416
claude-code415
opencode398
cline397
| Single quote | '' |
| Double quote | "" |
changemind | Hot takes | tabs_are_better_than_spaces |
distracted | Priorities | my_code/new_framework/current_project |
mordor | One does not simply | one_does_not_simply/deploy_on_friday |
| Ubiquitous things | buzz | "X, X everywhere" |
| Bad ideas | mordor | "One does not simply..." |
~s~p| Assuming template exists | 404 error | Check templates list first |