Slack Gif Creator

작성자: Anthropic

Slack에 최적화된 애니메이션 GIF를 생성하는 도구 키트로, 크기 제약 조건 검증기와 조합 가능한 애니메이션 프리미티브를 포함합니다. 사용자가 "X가 Y를 하는 Slack용 GIF를 만들어 줘"와 같은 설명으로 Slack용 애니메이션 GIF나 이모지 애니메이션을 요청할 때 이 스킬이 적용됩니다. 라이선스: 전체 약관은 LICENSE.txt에 있습니다.

npx skills add https://github.com/anthropics/skills --skill slack-gif-creator

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

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

# 1. Create builder
builder = GIFBuilder(width=128, height=128, fps=10)

# 2. Generate frames
for 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 optimization
builder.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:

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:

from PIL import ImageDraw

draw = ImageDraw.Draw(frame)

# Circles/ovals
draw.ellipse([x1, y1, x2, y2], fill=(r, g, b), outline=(r, g, b), width=3)

# Stars, triangles, any polygon
points = [(x1, y1), (x2, y2), (x3, y3), ...]
draw.polygon(points, fill=(r, g, b), outline=(r, g, b), width=3)

# Lines
draw.line([(x1, y1), (x2, y2)], fill=(r, g, b), width=5)

# Rectangles
draw.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:

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

Validators (core.validators)

Check if GIF meets Slack requirements:

from core.validators import validate_gif, is_slack_ready

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

# Quick check
if is_slack_ready('my.gif'):
    print("Ready!")

Easing Functions (core.easing)

Smooth motion instead of linear:

from core.easing import interpolate

# Progress from 0.0 to 1.0
t = i / (num_frames - 1)

# Apply easing
y = 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:

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
# Maximum optimization for emoji
builder.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

pip install pillow imageio numpy

Anthropic의 다른 스킬

Algorithmic Art
Anthropic
p5.js와 시드 기반 무작위성 및 대화형 매개변수 탐색을 사용하여 알고리즘 아트를 생성합니다. 사용자가 코드를 사용한 아트 생성, 제너레이티브 아트, 알고리즘 아트, 플로우 필드 또는 파티클 시스템을 요청할 때 사용하세요. 저작권 침해를 피하기 위해 기존 아티스트의 작품을 복사하지 않고 독창적인 알고리즘 아트를 만드세요. 라이선스: 전체 약관은 LICENSE.txt에 있습니다.
creative
Internal Comms
Anthropic
회사가 선호하는 형식을 사용하여 모든 종류의 내부 커뮤니케이션을 작성하는 데 도움이 되는 리소스 세트입니다. Claude는 상태 보고서, 리더십 업데이트, 3P 업데이트, 회사 뉴스레터, FAQ, 사고 보고서, 프로젝트 업데이트 등 내부 커뮤니케이션 작성을 요청받을 때마다 이 스킬을 사용해야 합니다. 라이선스: LICENSE.txt에 전체 약관이 명시되어 있습니다.
Artifacts Builder
Anthropic
현대 프론트엔드 웹 기술(React, Tailwind CSS, shadcn/ui)을 사용하여 정교한 다중 구성 요소 claude.ai HTML 아티팩트를 생성하기 위한 도구 모음입니다. 상태 관리, 라우팅 또는 shadcn/ui 구성 요소가 필요한 복잡한 아티팩트에 사용하십시오. 단순한 단일 파일 HTML/JSX 아티팩트에는 적합하지 않습니다. 라이선스: LICENSE.txt에 전체 약관이 명시되어 있습니다.
development
Webapp Testing
Anthropic
Playwright를 사용하여 로컬 웹 애플리케이션과 상호작용하고 테스트하기 위한 툴킷입니다. 프론트엔드 기능 확인, UI 동작 디버깅, 브라우저 스크린샷 캡처, 브라우저 로그 보기를 지원합니다. 라이선스: LICENSE.txt에 전체 약관이 명시되어 있습니다.
development
XLSX
Anthropic
포괄적인 스프레드시트 생성, 편집 및 분석 기능을 제공하며 수식, 서식, 데이터 분석 및 시각화를 지원합니다. Claude가 스프레드시트(.xlsx, .xlsm, .csv, .tsv 등) 작업이 필요할 때: (1) 수식과 서식을 포함한 새 스프레드시트 생성, (2) 데이터 읽기 또는 분석, (3) 수식을 유지하면서 기존 스프레드시트 수정, (4) 스프레드시트 내 데이터 분석 및 시각화, 또는 (5) 수식 재계산 라이선스: 독점. LICENSE.txt에 전체 조건이 명시되어 있습니다.
document
Skill Creator
Anthropic
효과적인 스킬 생성을 위한 가이드입니다. 사용자가 Claude의 기능을 특화된 지식, 워크플로우 또는 도구 통합으로 확장하는 새 스킬을 만들거나 기존 스킬을 업데이트하려 할 때 사용해야 합니다. 라이선스: LICENSE.txt에 전체 약관이 명시되어 있습니다.
Theme Factory
Anthropic
아티팩트에 테마를 적용하여 스타일링하는 툴킷입니다. 이러한 아티팩트는 슬라이드, 문서, 보고서, HTML 랜딩 페이지 등이 될 수 있습니다. 생성된 모든 아티팩트에 적용할 수 있는 색상/글꼴이 포함된 10개의 사전 설정 테마가 있으며, 즉석에서 새 테마를 생성할 수도 있습니다. 라이선스: LICENSE.txt에 전체 약관이 명시되어 있습니다.
creative
Brand Guidelines
Anthropic
Anthropic의 공식 브랜드 색상과 타이포그래피를 적용하여 Anthropic의 느낌을 살리는 데 도움이 되는 모든 아티팩트에 사용합니다. 브랜드 색상이나 스타일 가이드, 시각적 서식, 회사 디자인 표준이 적용될 때 사용하세요. 라이선스: LICENSE.txt에 전체 약관이 명시되어 있습니다.
creative