slack-gif-creator:讓 AI 幫你做符合 Slack 規範的動圖 GIF

前言

在 Slack 裏發一張動圖,往往比長篇文字更能表達情緒——慶祝上線、吐槽 Bug、回覆「收到」都可以來一張。但真到自己動手做 GIF,問題很快就來了:尺寸該設多少?幀率太高文件會不會太大?上傳後會不會被 Slack 壓縮得糊成一片?

網上能找到零散的 Slack GIF 規範,卻很少有人把它封裝成一套可複用的流程。Anthropic 在官方 Skills 倉庫裏提供了一個名爲 slack-gif-creator 的 Agent Skill:它把 Slack 的尺寸與幀率約束、Python 繪圖工具鏈,以及常見動畫思路寫進 SKILL.md,讓 AI 編程助手在你說「幫我做一個 Slack 用的動圖」時,能按同一套標準執行,而不是每次從零摸索。

本文基於官方倉庫覈實後的資料,介紹這個 Skill 是什麼、怎麼安裝、以及典型用法。

這是什麼

slack-gif-creator 是 Anthropic 維護的 Agent Skill,源碼位於 anthropics/skills 倉庫的 skills/slack-gif-creator/ 目錄。

它的定位很清晰:爲 Slack 場景提供創建動畫 GIF 的知識與工具,而不是一個「點一下就能出圖」的封閉模板庫。Skill 裏寫明瞭 Slack 對 GIF 的尺寸與參數建議,附帶 GIFBuilder 組裝幀、validators 校驗輸出、easing 緩動函數、frame_composer 幀輔助等 Python 模塊,並指導 Agent 用 PIL(Pillow)原語逐幀繪製動畫。

官方 SKILL.md 的 frontmatter 描述爲:「Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts.」——當用戶說「make me a GIF of X doing Y for Slack」這類需求時,Agent 應自動匹配並啓用此 Skill。

Slack 對 GIF 的關鍵約束

Skill 把 Slack 側的常見要求整理成可直接參照的參數表,這是它最核心的價值之一:

尺寸:
- 自定義 Emoji GIF:推薦 128×128 像素
- 消息區 GIF:推薦 480×480 像素

參數建議:
- 幀率(FPS):10–30(越低通常文件越小)
- 顏色數:48–128(越少體積越小)
- 時長:Emoji GIF 建議控制在 3 秒以內

倉庫裏的 core/validators.py 還實現了校驗邏輯:Emoji 模式會檢查是否爲正方形、邊長是否在 64–128 之間(128×128 爲 optimal);消息 GIF 模式則檢查寬高比與邊長範圍。文件超過約 5 MB 時會給出壓縮提示。

核心功能與亮點

1. GIFBuilder:按 Slack 規範組裝與優化

core/gif_builder.py 提供 GIFBuilder 類,負責逐幀收集、全局調色板量化、可選去重,以及最終寫出 GIF。典型初始化方式:

from core.gif_builder import GIFBuilder
from PIL import Image, ImageDraw

builder = GIFBuilder(width=128, height=128, fps=10)

for i in range(12):
    frame = Image.new('RGB', (128, 128), (240, 248, 255))
    draw = ImageDraw.Draw(frame)
    # 用 PIL 原語繪製每一幀
    builder.add_frame(frame)

builder.save('output.gif', num_colors=48, optimize_for_emoji=True)

save() 支持幾個實用開關:
- optimize_for_emoji=True:自動縮放到 128×128、限制顏色數、必要時抽幀
- remove_duplicates=True:去除幾乎相同的連續幀以減小體積
- num_colors:控制量化後的顏色數量

2. Validators:導出前自檢

from core.validators import validate_gif, is_slack_ready

passes, info = validate_gif('my.gif', is_emoji=True, verbose=True)

if is_slack_ready('my.gif'):
    print("Ready for Slack!")

校驗會輸出尺寸、文件大小、幀數、時長與 FPS 等信息,避免上傳後才發現不合規。

3. Easing 與 Frame Composer:讓動畫更自然

core/easing.py 提供 interpolate(),支持 linearease_inease_outease_in_outbounce_outelastic_outback_out 等緩動,用於位移、縮放等非線性變化。

core/frame_composer.py 則封裝了空白幀、漸變背景、圓形、文字、五角星等常用繪製輔助,減少重複樣板代碼。

4. 動畫概念指南

Skill 文檔裏系統整理了 Shake(抖動)、Pulse(脈衝)、Bounce(彈跳)、Spin(旋轉)、Fade(淡入淡出)、Slide(滑入)、Zoom(縮放)、Explode(粒子爆發)等常見動效的實現思路,並強調用較粗線條(width=2 及以上)、漸變背景、層次疊加等方式提升觀感。

5. 設計哲學:靈活而非模板化

官方明確說明,這個 Skill 不提供
- 固定的動畫模板或預製圖形庫
- 跨平臺不可靠的 Emoji 字體渲染
- 內置素材包

它提供的是知識 + 工具 + PIL 繪製自由度。若用戶上傳了圖片,Agent 應判斷是直接用於動畫,還是僅作風格參考,再用 PIL 加載處理。

安裝與啓用

slack-gif-creator 遵循通用 Agent Skills 格式(SKILL.md + 資源目錄),可在多種 AI 編程工具中使用。以下方式均來自官方文檔,按你所用的工具選擇其一即可。

依賴安裝

Skill 目錄下有 requirements.txt,主要依賴爲:

pip install pillow imageio numpy
# 或進入 skill 目錄:
pip install -r requirements.txt

requirements.txt 中還列出了 imageio-ffmpeg>=0.4.9,供 imageio 處理相關媒體格式時使用。

在 Cursor 中使用

Cursor 會在項目或用戶目錄下自動發現 Skills。將官方目錄複製到項目中即可:

git clone https://github.com/anthropics/skills.git
cp -r skills/skills/slack-gif-creator .cursor/skills/slack-gif-creator

也可放到 ~/.cursor/skills/ 做全局 Skill。確保目錄名與 SKILL.md frontmatter 中的 name: slack-gif-creator 一致。之後在 Agent 對話裏描述 Slack GIF 需求,或顯式調用 /slack-gif-creator,Agent 會加載對應指令與 core/ 工具代碼。

在 Claude Code 中使用

Anthropic 官方 README 提供了 Plugin 方式安裝示例 Skills 集合:

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

slack-gif-creator 位於 example-skills 插件所涵蓋的示例 Skill 集合中。安裝後,在 Claude Code 裏直接描述需求即可,例如:「Use the slack-gif-creator skill to make a bouncing checkmark GIF for Slack emoji.」

在 Claude.ai 與 Claude API 中

根據 anthropics/skills 倉庫說明,部分示例 Skill 已對 Claude.ai 付費計劃開放;自定義 Skill 的上傳與啓用方式見 Using skills in Claude。通過 Claude API 使用時,可參考 Skills API Quickstart 上傳或引用 Skill。

典型用法示例

場景一:用自然語言讓 Agent 生成 Emoji 動圖

啓用 Skill 後,可以直接給出類似提示:

幫我做一個 128×128 的 Slack Emoji GIF:一個綠色對勾從上方彈入並輕微抖動,時長約 1.5 秒,導出前用 validators 檢查是否符合 Slack 要求。

Agent 會按 Skill 中的約束選擇尺寸與 FPS,用 PIL 逐幀繪製,調用 GIFBuilder.save(..., optimize_for_emoji=True),最後用 validate_gif() 輸出校驗報告。

場景二:基於用戶上傳的圖片做幀動畫

Skill 指導 Agent 先用 PIL 加載用戶圖片:

from PIL import Image

uploaded = Image.open('file.png')
# 直接用於動畫,或提取配色/風格作參考

再根據用戶意圖決定是「把這張圖拆成幀動畫」還是「參考其風格重新繪製」。

場景三:需要壓縮體積時的優化策略

當用戶明確要求減小文件大小時,Skill 建議依次嘗試:

  1. 降低 FPS 或縮短時長
  2. 減少顏色數(如 num_colors=48
  3. 縮小尺寸(Emoji 優先 128×128)
  4. 開啓 remove_duplicates=True
  5. Emoji 場景使用 optimize_for_emoji=True
builder.save(
    'emoji.gif',
    num_colors=48,
    optimize_for_emoji=True,
    remove_duplicates=True
)

適用場景與注意事項

適合誰用:
- 日常在 Slack 溝通、需要快速產出團隊 Emoji 或反應 GIF 的開發者
- 希望把「Slack GIF 規範 + Python 繪圖流程」固化到 AI 工作流裏的團隊
- 需要在 CI 或腳本里批量生成、校驗 GIF 後再上傳 Slack 的場景

需要注意:
- 這是 Skill(指令 + 工具),不是獨立的 GUI 應用;實際繪圖邏輯仍由 Agent 編寫 PIL 代碼完成,效果取決於提示詞清晰度
- 官方 README 註明倉庫中的 Skill 僅供演示與教育,生產環境使用前請自行充分測試
- Skill 不含預製素材,複雜美術效果需要更詳細的視覺描述或參考圖
- 校驗器主要檢查尺寸與基本元信息;實際上傳 Slack 時仍可能受工作區策略或網絡環境影響,建議導出後在目標 Slack 工作區試發一次

小結

slack-gif-creator 是一個小衆但極其實用的 Agent Skill:它把 Slack GIF 的尺寸、幀率、顏色與時長約束,連同 Python 工具鏈和動畫思路,打包成 AI 助手可重複執行的 playbook。你不必再每次翻文檔查「128 還是 480」,也不必手動試錯文件體積——讓 Agent 按 Skill 生成、校驗、優化即可。

官方地址:https://github.com/anthropics/skills/tree/main/skills/slack-gif-creator

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜