🎨 创意设计 全难度 📦 Anthropic

slack-gif-creator

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

📄 相关文章

📊 评分明细

📦 打包完整度
2 2 / 2.5
🎯 实用性
2 2 / 2.5
📖 文档清晰度
1.6 1.6 / 2
👥 社区影响力
1.2 1.2 / 1.5
🔗 集成度
1.2 1.2 / 1.5

🎯 适用场景

免费设计Anthropic

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 文件。

参考链接

实战建议

上手后可按以下优先级推进,避免一次性投入过多精力:

  • 命名规范:团队 emoji 统一前缀(如 :team-ship: :team-deploy:),方便 Slack 自动补全和搜索
  • 批量产出:一次性生成 happy/sad/lol/celebrate 一套表情,保持画风统一
  • 预览检查:导出后在浅色/深色 Slack 主题下各看一遍,确保透明背景和对比度正常
  • 体积控制:目标 <100KB(而非 128KB 上限),预留 Slack 处理开销

本文基于官方文档和公开资料整理,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 沟通

📊 评分与标签

评分说明

总分 7.8/10 · S_入选

📊 可观测社区指标(数据核验日期:2026-07-23)

  • 官方仓库与维护入口:anthropics/skills。GitHub API 核验时触发限流,未记录无法再次确认的 Stars/Forks 精确快照,避免用估算值替代事实。

📦 可安装性 1.9/2.5

  • 官方来源提供可复制的 Skill、MCP 或 Markdown 目录;安装前仍需按 README 配置宿主客户端、运行时和最小权限凭据。
  • 与 Anthropic Skills、OpenCode Skills 对比,本项遵循开放目录思路,但插件命令、脚本依赖和更新方式并不完全统一。

🎯 实用性 2.0/2.5

  • 生成适配 Slack 尺寸与体积的动画 GIF;这里只确认官方材料明确描述的范围,未把未经实测的准确率、性能或生产收益计入评分。
  • 与 GitHub CLI、Zapier 等专用工具对比,Skill 更适合把操作步骤交给 Agent 复用,不能替代完整运行时、监控和人工验收。

📖 文档质量 1.5/2.0

  • README、技能目录或官方参考页可核对安装、能力和约束;未发现统一的端到端性能基准,因此采用保守文档分。
  • 与 Vercel Agent Skills、Obra Superpowers 对比,目标任务说明直接,但版本迁移、失败恢复和跨平台案例仍依赖上游维护。

👥 社区活跃 1.1/1.5

  • 仓库公开提交历史、Issue 与 Pull Request 入口可追踪维护;因 API 限流未写入易变精确计数,社区分不依据未经复核的热度数字。
  • 与 anthropics/skills、obra/superpowers 对比,具备公开协作入口,但不能据此推导响应时效、长期承诺或企业支持等级。

🔗 兼容性 1.3/1.5

  • 可在能够读取 Skills/MCP 指令并具备相应工具权限的 Agent 环境使用;API、Token、浏览器和本地工具链会形成额外约束。
  • 与 Claude Code、Codex、Cursor 的原生扩展对比,开放文件格式便于迁移,但触发、脚本执行和资源加载行为存在客户端差异。

评分依据可追溯至公开来源,每项分数均有明确理由和数据支撑。

🏷️ 标签说明

  • 免费: 公开来源可访问;外部服务费用不计入 Skill 本身。来源:官方来源
  • 设计: 核心能力与“生成适配 Slack 尺寸与体积的动画 GIF”直接对应。来源:官方来源
  • Anthropic: 官方材料显示其面向该使用方式。来源:官方来源

局限说明:本次为官方仓库与文档核验,未执行跨客户端、跨操作系统端到端基准测试;外部 API 配额、授权和价格可能变化,应以上游最新说明为准。

📋 来源与核验记录