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에 있습니다.
creativeofficial
Brand Guidelines
Anthropic
Anthropic의 공식 브랜드 색상과 타이포그래피를 적용하여 Anthropic의 느낌을 살리는 데 도움이 되는 모든 아티팩트에 사용합니다. 브랜드 색상이나 스타일 가이드, 시각적 서식, 회사 디자인 표준이 적용될 때 사용하세요. 라이선스: LICENSE.txt에 전체 약관이 명시되어 있습니다.
creativeofficial
Canvas Design
Anthropic
디자인 철학을 사용하여 .png 및 .pdf 문서로 아름다운 시각 예술을 만듭니다. 사용자가 포스터, 예술 작품, 디자인 또는 기타 정적 작품을 요청할 때 이 스킬을 사용해야 합니다. 저작권 침해를 피하기 위해 기존 아티스트의 작품을 복사하지 않고 독창적인 시각 디자인을 만듭니다. 라이선스: LICENSE.txt에 전체 약관이 명시되어 있습니다.
creativeofficial
Docx
Anthropic
포괄적인 문서 생성, 편집 및 분석 기능을 제공하며, 변경 내용 추적, 주석, 서식 유지, 텍스트 추출을 지원합니다. Claude가 전문 문서(.docx 파일) 작업이 필요할 때: (1) 새 문서 생성, (2) 콘텐츠 수정 또는 편집, (3) 변경 내용 추적 작업, (4) 주석 추가 또는 기타 문서 작업에 사용됩니다. 라이선스: 독점 라이선스. LICENSE.txt에 전체 조건이 명시되어 있습니다.
documentofficial
Frontend Design
Anthropic
독창적이고 프로덕션 수준의 프론트엔드 인터페이스를 생성하여 일반적인 AI 미학을 피합니다.
developmentfeaturedofficial
Internal Comms
Anthropic
회사가 선호하는 형식을 사용하여 모든 종류의 내부 커뮤니케이션을 작성하는 데 도움이 되는 리소스 세트입니다. Claude는 상태 보고서, 리더십 업데이트, 3P 업데이트, 회사 뉴스레터, FAQ, 사고 보고서, 프로젝트 업데이트 등 내부 커뮤니케이션 작성을 요청받을 때마다 이 스킬을 사용해야 합니다. 라이선스: LICENSE.txt에 전체 약관이 명시되어 있습니다.
official
MCP Builder
Anthropic
고품질 MCP(Model Context Protocol) 서버를 생성하기 위한 가이드로, 잘 설계된 도구를 통해 LLM이 외부 서비스와 상호작용할 수 있도록 합니다. Python(FastMCP) 또는 Node/TypeScript(MCP SDK)로 외부 API나 서비스를 통합하는 MCP 서버를 구축할 때 사용하세요. 라이선스: LICENSE.txt에 전체 약관이 명시되어 있습니다.
developmentofficial
Artifacts Builder
Anthropic
현대 프론트엔드 웹 기술(React, Tailwind CSS, shadcn/ui)을 사용하여 정교한 다중 구성 요소 claude.ai HTML 아티팩트를 생성하기 위한 도구 모음입니다. 상태 관리, 라우팅 또는 shadcn/ui 구성 요소가 필요한 복잡한 아티팩트에 사용하십시오. 단순한 단일 파일 HTML/JSX 아티팩트에는 적합하지 않습니다. 라이선스: LICENSE.txt에 전체 약관이 명시되어 있습니다.
development