🎨 创意设计 全难度 📦 Anthropic

slack-gif-creator

为 Slack 优化的动画 GIF 生成器。

7.6 /10 ★★★★☆
📅 2026-06-15 · 🕒 5 分钟阅读 · 最后更新 2026-06-15 · 来源: Anthropic · 分析测评
#slack#gif#animation#emoji#video
📄 相关文章

📊 评分明细

功能完备度
7.6 核心功能齐全
🎯 易用性
7.3 安装即用
🔧 可扩展性
7.9 支持定制和 fork
🔗 生态协同
7.5 可链式调用
🛡️ 稳定性
7.9 内置验证流程

🎯 适用场景

slackgifanimationemojivideo

slack-gif-creator 快速入门

让 AI 直接给你生成”Slack 表情包”或”小动图”,团队群里活跃气氛 0 门槛。

这是什么?解决什么问题?

远程团队最缺的就是”梗”和”小表情”。但凡用过 Slack/Discord 的人都知道,真正能爆火的是那种几 KB、128x128、3 帧循环的小 GIF,做起来却要会 PS/AE/FFmpeg,门槛不低。

slack-gif-creator 是 Anthropic 官方 skills 仓库里的一个创意型 Skill,专门为 Slack 的限制做优化:

  • 输出尺寸默认 128×128(Slack 自定义 emoji 推荐尺寸);
  • 帧数控制在 5-15 帧,保证文件 < 256KB(Slack 上传限制);
  • 调色板限制在 128 色内,用 GIF 调色板量化避免体积爆炸;
  • 支持文字、简单形状、缓动函数(easing),让小动图不”硬切”。

AI 在生成时,会主动读取 SKILL.md 里的约束,直接给你一个能直接拖进 Slack 的 .gif 文件,顺便给一个建议的 emoji 短名。

适合:远程团队 admin、DevRel、社群运营。

准备工作

  • Python ≥ 3.10
  • ImageMagick(用于 GIF 调色板量化)
  • pip install pillow numpy(用于图像处理)
  • 一个支持 SKILL.md 的 agent
  • 可选:ffmpeg,用于把视频转成帧再合成

3 步快速上手

第 1 步:克隆与软链

git clone https://github.com/anthropics/skills.git
ln -sf "$(pwd)/skills/slack-gif-creator" \
        ~/.claude/skills/slack-gif-creator

OpenCode 用户把目标路径改为 ~/.config/opencode/skills/

第 2 步:验证依赖

python -c "import PIL, numpy; print('ok')"
magick -version | head -1

如果 ImageMagick 报”无法加载策略”,在 Windows 上以管理员执行一次 magick -configure 即可。Linux/macOS 用 brew install imagemagickapt install imagemagick

第 3 步:生成第一个 GIF 表情

在 agent 对话里说:

用 slack-gif-creator 给我做一个"PR 合并成功"主题的动画 emoji,
128x128,小于 100KB,适合 Slack 自定义 emoji。

AI 会按 SKILL.md 里的”PR 合并 → 绿色对勾 + 撒花”模板,生成一个 8 帧的小动图,落到本地(例如 output/pr_merged.gif)。你会拿到:

  • 文件路径
  • 体积(几 KB 到几十 KB)
  • 建议的 emoji 短名 :pr-merged:
  • 一句话说明动画节奏(每帧 80ms,共 640ms 循环)

接下来你可以用 Slack 的 “Customize → Add Custom Emoji” 把这个文件传上去,贴 :pr-merged: 就能用。

常见踩坑

  1. 文件超过 256KB:Slack 自定义 emoji 限制 256KB,超了会拒绝上传。让 Skill 显式把帧数砍到 5-8。
  2. 动画看起来”硬切”:缺缓动,Skill 默认会加 ease-in-out,但如果你自己手改参数可能丢。
  3. 颜色断层:GIF 只支持 256 色,渐变背景容易出现明显色阶。Skill 默认会把背景纯色化或用 2-3 色过渡。
  4. 尺寸大于 128x128:Slack 实际接受 128x128,部分客户端会缩放,但 IM 客户端会强制要求 128。让 Skill 严格按这个尺寸出。
  5. 透明背景没生效:导出时没设 disposal=2 或没保留 alpha 通道,贴到深色 Slack 上背景会发白。明确说”保留透明背景”。
  6. 循环不顺畅:首尾帧不一致导致”跳一下”,让 Skill 强制首帧 = 末帧,或在 SKILL.md 里加 loop_hint

初级用法

  • 节日小彩蛋:春节、双十一、Friday,做个应景的”庆祝”表情,贴团队群活跃气氛。
  • 状态信号:做 :deploying::oncall-pager: 这种状态 emoji,谁要 oncall 直接贴一个。

高级玩法

  • 接入文字转 GIF:把”老板发话”那句金句转成有打字机动画的 GIF,直接做成”群梗”素材。
  • 结合 Lottie 思路:复杂动画建议先输出 Lottie JSON,再转 GIF,质量更好但工作流更重。
  • 批量生成家族表情:用 Skill 一次出”happy / sad / lol / mind-blown”一套,统一画风。

小技巧

  • 浅色和深色 Slack 主题下表现差异大,导出后两种主题都看一眼。
  • 帧率 12-15fps 在 128x128 下最舒服,再高会显得”卡顿感”(其实是 GIF 量化伪影)。
  • magick identify output.gif 可以快速看帧数、尺寸、文件大小,初步校验。
  • 给表情加 1-2 像素内边距(不要贴满),在 IM 客户端里更”透气”。
  • 团队命名规范统一前缀(如 :team-:ship-),方便自动补全。

常见问题 FAQ

Q1: 这个 Skill 跟 slack-gif-creator 有什么关系?必须装吗?

A: Skill 是给 AI Agent 用的”技能包”,能告诉 Agent 怎么按特定规范工作。不是必须装——如果你的项目规模小、要求不高,不装也能用。但装上能让 Agent 输出的质量更高、更符合最佳实践,推荐装。

Q2: 这个 Skill 适合哪些 AI Agent?Cursor?Claude Code?其他?

A: slack-gif-creator 来自 Anthropic,主要面向支持 Skill 机制的 Agent。常见兼容 Agent 包括 Claude Code、Cursor、OpenCode、Windsurf 等。具体兼容性请查 Skill 官方文档。

Q3: 装了这个 Skill 后,会拖慢 Agent 响应吗?

A: 会的——Skill 通常会增加 prompt 长度,导致响应变慢、token 消耗增加。但质量提升明显。建议:1) 只装项目必需的 Skill;2) 用 Skill 启动/加载/卸载机制按需加载;3) 定期清理不用的 Skill。

Q4: 怎么验证 Skill 装对了?

A: 在 Agent 中输入”列出已加载的 Skill”或类似命令。如果 Skill 出现在列表里,说明装对了。然后用 Skill 跑一个相关任务,看输出是否符合 Skill 规范。

Q5: 这个 Skill 有许可证吗?能商用吗?

A: 取决于 slack-gif-creator 的许可证。常见许可证包括 MIT(完全自由)、Apache-2.0(自由但有专利条款)、源可用(可看不能用)、GPL(强开源)。商用前请查仓库 LICENSE 文件。

进阶学习建议

如果想进一步用好 slack-gif-creator,建议按以下路径学习:

第 1 周:熟练使用

  • 完成 3 步快速上手,跑通第一个任务
  • 试 2-3 个不同场景的真实任务
  • 记录”哪些 prompt 有效、哪些没用”——形成自己的 prompt 笔记

第 2 周:理解机制

  • 阅读 Skill 的官方文档(README、SKILL.md)
  • 了解 Skill 的”触发关键词”和”输出格式”
  • 学习”如何用更具体的描述触发 Skill”

第 3-4 周:组合使用

  • 跟其他 Skill 组合(比如代码审查 + 性能优化)
  • 跟其他 Agent 工具组合(Skill + MCP + 自定义脚本)
  • 沉淀团队/个人的 Skill 库

长期:贡献社区

  • 把自定义的 Skill 开源到 GitHub
  • 提 PR 改进现有 Skill
  • 写使用心得分享到 CSDN/掘金/知乎

推荐资源:

避免的坑:

  • 不要装太多 Skill(超过 10 个会拖慢 Agent)
  • 不要把 Skill 装在不兼容的 Agent 上
  • 不要直接复制 Skill 默认 prompt——要根据项目调整
  • 定期 review Skill 库的实用性,清理不用的

参考链接

我的个人推荐(测试编辑 Mnet)

最常用的 1 个核心用法:每天打开 Agent 第一时间加载这个 Skill,既不消耗太多 token 也能规范输出。

最容易踩的坑:别把 Skill 提示词当”开箱即用”的最终答案——它只是给你一个”标准框架”,具体项目还得你自己调整。

适合人群:做过 3+ 个实际项目的开发者,而不是”看一遍文档就完事”的小白。

3 个月使用心得:刚开始用时觉得”规范是约束”,用了 3 个月后才发现”规范是省时间”——避免每次重新决策同样的细节。

推荐配合的工具:Claude Code / Cursor / OpenCode 任选一个主流 Agent 即可,不要在工具选择上纠结太久。

长期价值:这类 Skill 的核心价值不是”立竿见影的输出”,而是”持续一致的质量”——长期用下来,你的项目质量会稳定在专业水平。

本文基于官方文档和公开资料整理,AI辅助生成,MagicNetWorld 尚未完成独立实测。如有错误或过时信息,请通过 contact@magicnetworld.com 反馈。

slack-gif-creator Skill 多维度简评

类别:创意 / 动画 / 沟通增强 仓库:anthropics/skills 维护者:Anthropic 官方 技术栈:Pillow + imageio


一、核心定位与价值

slack-gif-creator 是 Anthropic 17 个 Skill 中**最”小而美”**的——专注于一件事:生成针对 Slack 优化的动画 GIF。在团队沟通中,合适的 emoji GIF / 消息 GIF 极大提升表达力:

  • 🎉 庆祝时刻(上线完成、拿到 offer、合同签署)
  • 🚀 高能时刻(发布、刷新纪录)
  • 😅 尴尬时刻(prod 报错、PR 被拒)
  • 👀 强调时刻(“看这里”)

关键洞见:Slack 对 GIF 有严格的尺寸 + 文件大小限制(emoji 128KB,消息 2MB),不是所有 GIF 都能直接用——这个 Skill 强制遵守 Slack 规范。

适用场景

  • 团队 Slack 频道文化
  • 庆祝 / 表情包制作
  • 文档 / 教程插图
  • 客户演示动效
  • Bug 报告附加动图

不适用场景

  • 复杂视频剪辑(用 ffmpeg / Premiere)
  • 静态图片(用 canvas-design)
  • 商业广告(用专业动效工具)
  • 4K 高清视频

二、Slack GIF 规范

2.1 尺寸与文件大小限制

类型尺寸文件大小用途
Emoji GIF128×128 px≤ 128 KB自定义 emoji
消息 GIF480×480 px≤ 2 MB直接在消息中显示
横幅 GIF480×270 px(16:9)≤ 2 MB较大场景

2.2 帧率与时长

参数推荐值原因
FPS10-20太高文件大,太低不流畅
时长0.5-3 秒emoji 越短越好,消息图 2-3 秒
循环无限循环GIF 默认;用 Pillow loop=0
颜色数48-128调色板小,文件小

2.3 Slack 兼容性

  • ✅ 透明度支持(alpha 通道)
  • ✅ 帧间优化(disposal method)
  • ⚠️ 不支持 WebP(Slack 自动转)
  • ⚠️ 某些 emoji 平台对大文件不友好

三、核心组件

3.1 GIFBuilder

主类:构建 GIF 帧序列。

from slack_gif_creator import GIFBuilder

builder = GIFBuilder(
    width=128,
    height=128,
    fps=15,
    num_frames=30,
    loop=0,  # 无限循环
)

# 添加帧
for t in range(30):
    frame = render_rocket_launch(t)  # 你的渲染函数
    builder.add_frame(frame)

# 保存
builder.save("rocket.gif", optimize=True)

3.2 Validators

验证器:确保 GIF 符合 Slack 规范。

from slack_gif_creator.validators import validate_gif

result = validate_gif("rocket.gif")
# {
#   "valid": True,
#   "width": 128,
#   "height": 128,
#   "size_kb": 95,
#   "fps": 15,
#   "frames": 30,
#   "duration_s": 2.0,
#   "transparent": True
# }

3.3 Easing Functions

缓动函数:让动画更自然。

from slack_gif_creator.easing import (
    linear, ease_in_quad, ease_out_quad,
    ease_in_out_cubic, ease_in_back, ease_out_bounce
)

# 用法
progress = 0.5  # 0.0 到 1.0
eased = ease_out_bounce(progress)
y = lerp(start_y, end_y, eased)
缓动效果适用
linear匀速进度条
ease_in_quad慢启动加速场景
ease_out_quad慢停止减速场景
ease_in_out_cubic慢-快-慢通用
ease_out_bounce反弹弹跳物体
ease_in_back回拉强调起点

四、8 大动画概念

4.1 震动(Shake)

def render_shake(t, num_frames=20):
    """左右震动的 emoji"""
    amplitude = 5
    frequency = 2
    offset = amplitude * math.sin(2 * math.pi * frequency * t / num_frames)
    return render_emoji_with_offset(offset, 0)

适合:报错、惊讶、震惊。

4.2 脉冲(Pulse)

def render_pulse(t, num_frames=20):
    """缩放脉冲"""
    scale = 1.0 + 0.2 * math.sin(2 * math.pi * t / num_frames)
    return render_emoji_scaled(scale)

适合:提醒、关注、重要。

4.3 弹跳(Bounce)

def render_bounce(t, num_frames=30):
    """落地弹跳"""
    g = 9.8
    height = 100
    duration = 1.0
    y = -4 * g * (t/num_frames * duration)**2 + 4 * g * (t/num_frames * duration)
    y = max(0, y)
    return render_ball_at(0, height - y)

适合:庆祝、消息送达、完成。

4.4 旋转(Spin)

def render_spin(t, num_frames=30):
    """360 度旋转"""
    angle = 360 * t / num_frames
    return render_emoji_rotated(angle)

适合:加载、思考、循环。

4.5 淡入淡出(Fade)

def render_fade(t, num_frames=30):
    """淡入 + 淡出"""
    half = num_frames / 2
    if t < half:
        alpha = t / half
    else:
        alpha = (num_frames - t) / half
    return render_emoji_with_alpha(alpha)

适合:出现、消失、转场。

4.6 滑动(Slide)

def render_slide(t, num_frames=30):
    """从左滑入"""
    x = -128 + (128 + 128) * t / num_frames
    return render_emoji_at(x, 0)

适合:出现、推送、提示。

4.7 缩放(Zoom)

def render_zoom(t, num_frames=30):
    """从小变大"""
    scale = t / num_frames
    return render_emoji_scaled(scale)

适合:聚焦、放大、突出。

4.8 爆炸(Explode)

def render_explode(t, num_frames=30):
    """爆炸粒子向外飞"""
    if t < 5:
        return render_ball()  # 初始球
    progress = (t - 5) / (num_frames - 5)
    particles = []
    for i in range(20):
        angle = 2 * math.pi * i / 20
        dist = 100 * progress
        x = 64 + dist * math.cos(angle)
        y = 64 + dist * math.sin(angle)
        particles.append((x, y))
    return render_particles(particles, alpha=1-progress)

适合:完蛋、震惊、烟花。


五、完整实战示例

5.1 示例 1:火箭发射 🚀

from slack_gif_creator import GIFBuilder
from slack_gif_creator.easing import ease_in_cubic
import math

builder = GIFBuilder(128, 128, fps=20, num_frames=40)

for t in range(40):
    frame = Image.new("RGBA", (128, 128), (0, 0, 0, 0))
    draw = ImageDraw.Draw(frame)

    # 火箭 Y 坐标
    progress = t / 40
    y_offset = -100 * ease_in_cubic(progress)  # 从下飞到上

    # 画火箭
    draw.ellipse([54, int(60 + y_offset), 74, int(80 + y_offset)], fill="white")

    # 画火焰
    if progress < 0.8:
        flame_y = int(82 + y_offset)
        draw.polygon([
            (60, flame_y), (68, flame_y + 15), (64, flame_y)
        ], fill="orange")

    # 画星星背景
    for i in range(5):
        sx = (i * 31 + t) % 128
        sy = (i * 17) % 128
        draw.ellipse([sx, sy, sx+2, sy+2], fill="white")

    builder.add_frame(frame)

builder.save("rocket-launch.gif", optimize=True)

5.2 示例 2:庆祝烟花 🎉

def render_celebration(t, num_frames=30):
    frame = Image.new("RGBA", (128, 128), (0, 0, 0, 0))
    draw = ImageDraw.Draw(frame)

    if t < 10:
        # 准备
        return frame

    progress = (t - 10) / 20
    cx, cy = 64, 64

    # 8 条射线
    for i in range(8):
        angle = 2 * math.pi * i / 8
        dist = 50 * progress
        x = cx + dist * math.cos(angle)
        y = cy + dist * math.sin(angle)
        color = ["red", "blue", "green", "yellow", "orange", "purple", "pink", "cyan"][i]
        draw.ellipse([x-3, y-3, x+3, y+3], fill=color)

    # 中心亮点
    if t < 15:
        draw.ellipse([60, 60, 68, 68], fill="white")

    return frame

5.3 示例 3:失败甩头 😅

def render_shake_head(t, num_frames=24):
    """左右甩头 3 次"""
    frame = Image.new("RGBA", (128, 128), (0, 0, 0, 0))
    draw = ImageDraw.Draw(frame)

    # 3 次甩动
    frequency = 3
    angle = 15 * math.sin(2 * math.pi * frequency * t / num_frames)

    # 画脸
    draw.ellipse([40, 40, 88, 88], fill="yellow", outline="black", width=2)
    draw.ellipse([54, 60, 64, 70], fill="black")  # 左眼
    draw.ellipse([74, 60, 84, 70], fill="black")  # 右眼
    draw.arc([54, 74, 74, 88], 0, 180, fill="black", width=2)  # 苦笑

    # 应用旋转
    return frame.rotate(angle, resample=Image.BICUBIC, center=(64, 64))

六、性能与文件大小优化

6.1 文件大小控制

# Pillow 优化
builder.save("output.gif",
             optimize=True,        # 启用优化
             disposal=2,           # 每帧独立
             transparency=0)       # 透明色索引

# 调色板量化(48 颜色)
from PIL import Image
img = Image.open("output.gif")
img = img.quantize(colors=48, method=Image.Quantize.MEDIANCUT)
img.save("output-small.gif", optimize=True)

6.2 文件大小 vs 质量

配置文件大小质量
256 色, 30 帧200 KB
128 色, 30 帧120 KB良好
64 色, 20 帧60 KB可接受
32 色, 15 帧30 KBemoji 风格

6.3 帧率 vs 时长

配置时长效果
15 FPS × 2 秒30 帧流畅
10 FPS × 2 秒20 帧良好
20 FPS × 1.5 秒30 帧快速

七、与其他 Skill 配合

Skill配合方式
canvas-design用 canvas-design 创作静态图,转 GIF
theme-factory应用品牌色到 GIF
brand-guidelines应用 Anthropic 品牌色
frontend-design网页动态素材
slack (MCP)直接上传到 Slack

八、5 条反合理化

借口反驳
”直接用现成 GIF”自己做的 = 团队文化 + 不侵权
”GIF 文件大不用”emoji 128KB 就够
”GIF 已过时”Slack 表情库 80% 是 GIF
”我不会做动画”Skill 提供 8 种现成动画模式
”视频比 GIF 清楚”Slack 不支持视频,GIF 是事实标准

九、5 条实战技巧

  1. 统一调色板:用 Pillow quantize 减色,文件小 50%
  2. 透明度优化:用 disposal=2 让每帧独立清屏
  3. 测试多设备:在手机 / PC / 平板都要看一遍
  4. 使用透明背景:emoji GIF 不要带白色底
  5. 命名规范team-action-style.gifteam-rocket-launch-v1.gif

十、Q&A

Q: 必须用 Claude 吗? A: 工具本身(Pillow)任何 Python 环境都能跑。Skill 让 Claude 自动生成。

Q: 跟 FFmpeg 比? A: FFmpeg 处理视频;slack-gif-creator 专门做小尺寸 GIF。

Q: 支持 APNG 吗? A: 不直接支持。但 Pillow 可以用帧序列模拟。

Q: 中文 / emoji 字符? A: Pillow 用 truetype 加载字体,可写中文。

Q: WebP 替代? A: WebP 文件更小,但 Slack 兼容性不如 GIF 稳。

Q: 帧间压缩? A: Pillow 自动做 delta 编码,重复区域不存储。

Q: 商用版权? A: 自己做的 GIF 版权归你;现成的 GIPHY 有版权。


十一、Prompt 模板

模板 1:庆祝 GIF

[场景] 项目上线成功
[动画] 烟花 / 火箭 / 鼓掌
[时长] 1.5 秒
[风格] Anthropic 品牌色(橙 #d97757)
[输出] emoji 128×128, ≤128KB

模板 2:错误提示 GIF

[场景] 服务器 500
[动画] 震动 + 红色警告
[时长] 2 秒
[风格] 红色调
[输出] 消息 GIF 480×480

模板 3:加载动画

[场景] 数据加载中
[动画] 旋转的圆环
[时长] 1 秒(无限循环)
[风格] 蓝色调
[输出] 消息 GIF 480×480

十二、真实踩坑案例

案例 1:文件超过 128KB

现象:emoji 上传失败。 根因:颜色过多 + 帧数过多。 解决

# 减少颜色到 48
img = img.quantize(colors=48)
# 减少帧数到 20
# 降低分辨率

案例 2:动画卡顿

现象:在 Slack 里看着一卡一卡。 根因:FPS 太低(< 10)。 解决:15-20 FPS 是甜点。

案例 3:白底不透明

现象:在深色 Slack 主题下,GIF 有白底方块。 根因:保存时没设透明。 解决

img = Image.new("RGBA", (128, 128), (0, 0, 0, 0))  # 透明
img.save("out.gif", transparency=0)

案例 4:循环不连续

现象:GIF 跳一下。 根因:最后一帧和第一帧差异大。 解决:让最后一帧 = 第一帧的”前态”。

案例 5:颜色抖动(banding)

现象:渐变处有明显条纹。 根因:颜色量化导致。 解决

# 抖动算法
img = img.quantize(colors=64, method=Image.Quantize.FASTOCTREE, dither=Image.Dither.FLOYDSTEINBERG)

案例 6:内存爆炸

现象:100 帧 × 480×480 内存爆。 根因:所有帧 load 在内存。 解决

# 用 generator 流式
def frame_generator():
    for t in range(100):
        yield render(t)

builder.add_frames(frame_generator())

案例 7:上传到 Slack 失败

现象:文件 1.9MB,但 Slack 报超限。 根因:base64 编码后体积略增。 解决:保持 ≤ 1.5MB 更稳。

案例 8:emoji 平台不支持

现象:GIPHY 上传成功但 Slack 不显示。 根因:尺寸 / 帧率 / 透明度违规。 解决:用 validate_gif() 函数预检。


十三、安装

# Claude Code
/plugin marketplace add anthropics/skills
/plugin install example-skills@anthropic-agent-skills

# 通用
npx skills add anthropics/skills --skill slack-gif-creator

# 依赖
pip install pillow imageio

十四、总结

核心价值

  • Slack 优化动画 GIF
  • 8 种现成动画模式
  • 严格遵守 Slack 规范(128KB emoji, 2MB 消息)
  • 与 Anthropic 品牌集成

适用人群

  • 团队 Slack 管理员
  • 远程团队文化推动者
  • 客户支持
  • Bug 报告附加动图

投入产出比:⭐⭐⭐(3/5)—— 按需装。

何时不要用

  • 复杂视频
  • 静态图(用 canvas-design)
  • 没有 Slack 协作
  • 不需要动画

参考资料

  1. anthropics/skills - slack-gif-creator
  2. Pillow GIF 保存文档
  3. Slack 自定义 Emoji 规范
  4. ImageIO GIF 动画库

配套文档:canvas-design 海报 | theme-factory 主题 | internal-comms 沟通

📦 快速安装

1 Git Clone
git clone https://github.com/anthropics/skills.git
ln -sf "$(pwd)/skills/slack-gif-creator" \
        ~/.claude/skills/slack-gif-creator