Slack Gif Creator

作者 anthropics34040c9c5685Complete terms in LICENSE.txt178K 个星标收录于 2026年9月24日更新于 2026年9月24日仓库4天前更新

Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts. Use when users request animated GIFs for Slack like "make me a GIF of X doing Y for Slack."

精选包含脚本Design & Creative
AI 生成的概览

为 Slack 创建尺寸与体积经过优化的动画 GIF,提供 PIL 绘图辅助、缓动函数与校验工具。

功能
提供 Slack 对 GIF 的限制知识(表情 128x128、消息 480x480,10-30 FPS,48-128 色),以及用于合成帧、应用缓动并校验输出的 Python 工具。用户用 PIL 图元绘制动画帧,GIFBuilder 负责保存优化后的 GIF,可选表情模式。内容还包含弹跳、脉冲、旋转、粒子爆发等动画思路,以及减小文件体积的策略。
适用场景
当用户要求制作用于 Slack 的动画 GIF 时使用,例如把上传的图片做成动画,或从零绘制新动画。也适合在现有 GIF 需要校验或压缩以符合 Slack 尺寸与体积限制时使用。
运行要求
需要安装 pillow、imageio 和 numpy 的 Python 环境(pip install pillow imageio numpy)。随附 core/ 下的可执行脚本(gif_builder、validators、easing、frame_composer)。无需凭据或网络访问。

Slack GIF Creator

A toolkit providing utilities and knowledge for creating animated GIFs optimized for Slack.

Slack Requirements

Dimensions:

  • Emoji GIFs: 128x128 (recommended)
  • Message GIFs: 480x480

Parameters:

  • FPS: 10-30 (lower is smaller file size)
  • Colors: 48-128 (fewer = smaller file size)
  • Duration: Keep under 3 seconds for emoji GIFs

Core Workflow

python
from core.gif_builder import GIFBuilderfrom PIL import Image, ImageDraw
# 1. Create builderbuilder = GIFBuilder(width=128, height=128, fps=10)
# 2. Generate framesfor i in range(12):    frame = Image.new('RGB', (128, 128), (240, 248, 255))    draw = ImageDraw.Draw(frame)
    # Draw your animation using PIL primitives    # (circles, polygons, lines, etc.)
    builder.add_frame(frame)
# 3. Save with optimizationbuilder.save('output.gif', num_colors=48, optimize_for_emoji=True)

Drawing Graphics

Working with User-Uploaded Images

If a user uploads an image, consider whether they want to:

  • Use it directly (e.g., "animate this", "split this into frames")
  • Use it as inspiration (e.g., "make something like this")

Load and work with images using PIL:

python
from PIL import Image
uploaded = Image.open('file.png')# Use directly, or just as reference for colors/style

Drawing from Scratch

When drawing graphics from scratch, use PIL ImageDraw primitives:

python
from PIL import ImageDraw
draw = ImageDraw.Draw(frame)
# Circles/ovalsdraw.ellipse([x1, y1, x2, y2], fill=(r, g, b), outline=(r, g, b), width=3)
# Stars, triangles, any polygonpoints = [(x1, y1), (x2, y2), (x3, y3), ...]draw.polygon(points, fill=(r, g, b), outline=(r, g, b), width=3)
# Linesdraw.line([(x1, y1), (x2, y2)], fill=(r, g, b), width=5)
# Rectanglesdraw.rectangle([x1, y1, x2, y2], fill=(r, g, b), outline=(r, g, b), width=3)

Don't use: Emoji fonts (unreliable across platforms) or assume pre-packaged graphics exist in this skill.

Making Graphics Look Good

Graphics should look polished and creative, not basic. Here's how:

Use thicker lines - Always set width=2 or higher for outlines and lines. Thin lines (width=1) look choppy and amateurish.

Add visual depth:

  • Use gradients for backgrounds (create_gradient_background)
  • Layer multiple shapes for complexity (e.g., a star with a smaller star inside)

Make shapes more interesting:

  • Don't just draw a plain circle - add highlights, rings, or patterns
  • Stars can have glows (draw larger, semi-transparent versions behind)
  • Combine multiple shapes (stars + sparkles, circles + rings)

Pay attention to colors:

  • Use vibrant, complementary colors
  • Add contrast (dark outlines on light shapes, light outlines on dark shapes)
  • Consider the overall composition

For complex shapes (hearts, snowflakes, etc.):

  • Use combinations of polygons and ellipses
  • Calculate points carefully for symmetry
  • Add details (a heart can have a highlight curve, snowflakes have intricate branches)

Be creative and detailed! A good Slack GIF should look polished, not like placeholder graphics.

Available Utilities

GIFBuilder (core.gif_builder)

Assembles frames and optimizes for Slack:

python
builder = GIFBuilder(width=128, height=128, fps=10)builder.add_frame(frame)  # Add PIL Imagebuilder.add_frames(frames)  # Add list of framesbuilder.save('out.gif', num_colors=48, optimize_for_emoji=True, remove_duplicates=True)

Validators (core.validators)

Check if GIF meets Slack requirements:

python
from core.validators import validate_gif, is_slack_ready
# Detailed validationpasses, info = validate_gif('my.gif', is_emoji=True, verbose=True)
# Quick checkif is_slack_ready('my.gif'):    print("Ready!")

Easing Functions (core.easing)

Smooth motion instead of linear:

python
from core.easing import interpolate
# Progress from 0.0 to 1.0t = i / (num_frames - 1)
# Apply easingy = interpolate(start=0, end=400, t=t, easing='ease_out')
# Available: linear, ease_in, ease_out, ease_in_out,#           bounce_out, elastic_out, back_out

Frame Helpers (core.frame_composer)

Convenience functions for common needs:

python
from core.frame_composer import (    create_blank_frame,         # Solid color background    create_gradient_background,  # Vertical gradient    draw_circle,                # Helper for circles    draw_text,                  # Simple text rendering    draw_star                   # 5-pointed star)

Animation Concepts

Shake/Vibrate

Offset object position with oscillation:

  • Use math.sin() or math.cos() with frame index
  • Add small random variations for natural feel
  • Apply to x and/or y position

Pulse/Heartbeat

Scale object size rhythmically:

  • Use math.sin(t * frequency * 2 * math.pi) for smooth pulse
  • For heartbeat: two quick pulses then pause (adjust sine wave)
  • Scale between 0.8 and 1.2 of base size

Bounce

Object falls and bounces:

  • Use interpolate() with easing='bounce_out' for landing
  • Use easing='ease_in' for falling (accelerating)
  • Apply gravity by increasing y velocity each frame

Spin/Rotate

Rotate object around center:

  • PIL: image.rotate(angle, resample=Image.BICUBIC)
  • For wobble: use sine wave for angle instead of linear

Fade In/Out

Gradually appear or disappear:

  • Create RGBA image, adjust alpha channel
  • Or use Image.blend(image1, image2, alpha)
  • Fade in: alpha from 0 to 1
  • Fade out: alpha from 1 to 0

Slide

Move object from off-screen to position:

  • Start position: outside frame bounds
  • End position: target location
  • Use interpolate() with easing='ease_out' for smooth stop
  • For overshoot: use easing='back_out'

Zoom

Scale and position for zoom effect:

  • Zoom in: scale from 0.1 to 2.0, crop center
  • Zoom out: scale from 2.0 to 1.0
  • Can add motion blur for drama (PIL filter)

Explode/Particle Burst

Create particles radiating outward:

  • Generate particles with random angles and velocities
  • Update each particle: x += vx, y += vy
  • Add gravity: vy += gravity_constant
  • Fade out particles over time (reduce alpha)

Optimization Strategies

Only when asked to make the file size smaller, implement a few of the following methods:

  1. Fewer frames - Lower FPS (10 instead of 20) or shorter duration
  2. Fewer colors - num_colors=48 instead of 128
  3. Smaller dimensions - 128x128 instead of 480x480
  4. Remove duplicates - remove_duplicates=True in save()
  5. Emoji mode - optimize_for_emoji=True auto-optimizes
python
# Maximum optimization for emojibuilder.save(    'emoji.gif',    num_colors=48,    optimize_for_emoji=True,    remove_duplicates=True)

Philosophy

This skill provides:

  • Knowledge: Slack's requirements and animation concepts
  • Utilities: GIFBuilder, validators, easing functions
  • Flexibility: Create the animation logic using PIL primitives

It does NOT provide:

  • Rigid animation templates or pre-made functions
  • Emoji font rendering (unreliable across platforms)
  • A library of pre-packaged graphics built into the skill

Note on user uploads: This skill doesn't include pre-built graphics, but if a user uploads an image, use PIL to load and work with it - interpret based on their request whether they want it used directly or just as inspiration.

Be creative! Combine concepts (bouncing + rotating, pulsing + sliding, etc.) and use PIL's full capabilities.

Dependencies

bash
pip install pillow imageio numpy

来源与署名

来源:anthropics/skills位于skills/slack-gif-creator提交34040c9

许可证: Complete terms in LICENSE.txt

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架

更多来自 anthropics/skills 的技能

Theme Factory

anthropics

精选

提供 10 套预设配色与字体主题,并可即时生成新主题,用于为幻灯片、文档、报告和 HTML 页面统一风格。

Design & Creative178K4天前更新

Internal Comms

anthropics

精选

按公司惯用格式撰写内部沟通文稿,如 3P 更新、公司通讯、FAQ、状态报告与事故报告。

Communication178K4天前更新

Frontend Design

anthropics

精选

在构建或改造用户界面时,提供打造独特、有意图的视觉设计的指导。

Design & Creative178K4天前更新

Doc Coauthoring

anthropics

精选

引导用户通过三阶段工作流协作撰写文档、提案、技术规格与决策文档。

Writing & Content178K4天前更新

Discernment Nudge

anthropics

精选

After you give a substantive answer or draft that the user may act on — advice or recommendations, drafted artifacts such as goals, plans, pitches, proposals, or emails, estimates or projections, analysis or interpretation of data, factual claims they may rely on, or a multi-step argument — invoke this skill BEFORE finalizing your reply and then, if it applies, append 2-3 short follow-up questions, each tied to something specific in what you just produced, that help the user check key facts, probe the reasoning or assumptions, and notice missing context. Do this at most once per conversation. Skip it when the user asked a trivial how-to or simple lookup, wants a purely educational explanation, asked you only to format, convert, or assemble a file from content they provided, is writing code they will run, is doing creative writing or casual chat, or already asked you to double-check, cite, or review — the skill file explains these boundaries and the exact output format.

待分类178K4天前更新

Canvas Design

anthropics

精选

依据写好的设计理念创作原创视觉艺术,输出 PNG 或 PDF,适用于海报、艺术作品等静态成品。

Design & Creative178K4天前更新