Home
cd ../playbooks
creative-contentIntermediate

Slack GIF Creator

Create animated GIFs optimized for Slack's technical requirements with composable animation primitives and size validators.

10 minutes
By ComposioSource
#gif#slack#animation#emoji#creative#messaging

Custom Slack emojis and reaction GIFs need specific dimensions, frame rates, and file sizes to display properly — and getting them wrong means blurry, oversized animations. This playbook creates animated GIFs optimized for Slack's exact technical requirements with composable animation primitives.

Who it's for: team culture champions creating custom animated emojis and reaction GIFs for Slack workspaces, marketing teams building branded animated assets for internal communications, community managers creating engaging GIF content for team Slack channels, designers producing lightweight animations that meet Slack's file size constraints, developer advocates making animated demos and tutorials for Slack-based communities

Example

"Create a custom animated celebration GIF for our team Slack" → GIF creator pipeline: animation design with composable primitives (text, shapes, transitions), frame-by-frame rendering at Slack-optimized dimensions, file size validation against Slack's upload limits, color palette optimization for small file sizes, and export in both emoji size (128x128) and full reaction GIF format

CLAUDE.md Template

New here? 3-minute setup guide → | Already set up? Copy the template below.

# Slack GIF Creator

Flexible toolkit for producing animated GIFs optimized for Slack's specific technical requirements. Emphasizes creative freedom while respecting platform constraints.

## Dependencies

```bash
pip install Pillow imageio numpy
```

## Slack Requirements

### Message GIFs
- **Maximum size**: ~2MB
- **Optimal dimensions**: 480x480 pixels
- **Frame rate**: 15-20 FPS
- **Color palette**: 128-256 colors
- **Duration**: 2-5 seconds

### Emoji GIFs
- **Maximum size**: 64KB (strict)
- **Optimal dimensions**: 128x128 pixels
- **Frame rate**: 10-12 FPS
- **Color palette**: 32-48 colors
- **Duration**: 1-2 seconds

Note: Emoji GIFs present particular challenges due to strict file size restrictions.

## Three Tool Categories

### 1. Validators

Verify GIFs meet Slack's constraints:

```python
def validate_message_gif(filepath):
    """Check if GIF meets message requirements"""
    # Returns: size_ok, dimensions_ok, details

def validate_emoji_gif(filepath):
    """Check if GIF meets emoji requirements"""
    # Returns: size_ok, dimensions_ok, details

def comprehensive_check(filepath, gif_type="message"):
    """Full validation with recommendations"""
    # Returns: all checks with suggestions
```

### 2. Animation Primitives

Composable motion building blocks:

| Primitive | Effect | Parameters |
|-----------|--------|------------|
| shake | Vibration | intensity, duration |
| bounce | Up-down | height, speed |
| spin | Rotation | direction, speed |
| pulse | Size oscillation | min_scale, max_scale |
| fade | Opacity change | start, end, duration |
| zoom | Scale in/out | from_scale, to_scale |
| explode | Burst outward | particle_count |
| wiggle | Side-to-side | amplitude, frequency |
| slide | Directional move | direction, distance |
| flip | Mirror transform | axis, duration |
| morph | Shape transition | start_shape, end_shape |
| move | Path animation | path_points |
| kaleidoscope | Symmetry effect | segments |

### 3. Helper Utilities

Optional functions for enhancement:

- **Assembly**: Combine frames, set timing
- **Text rendering**: Add animated text
- **Color management**: Palette optimization
- **Effects**: Filters, overlays
- **Easing**: Smooth motion curves

## Animation Primitive Examples

### Emoji Reactions
```python
# Bouncing thumbs up
create_gif(
    base_image="thumbs_up.png",
    animation=bounce(height=10, speed=2),
    output="thumbs_bounce.gif",
    type="emoji"
)
```

### Physics-Based Motion
```python
# Ball with gravity
create_gif(
    base_image="ball.png",
    animation=bounce(height=50, decay=0.8),
    output="bouncing_ball.gif"
)
```

### Transformations
```python
# Spinning logo
create_gif(
    base_image="logo.png",
    animation=spin(direction="clockwise", speed=1),
    output="spinning_logo.gif"
)
```

### Combined Effects
```python
# Pulsing and shaking alert
create_gif(
    base_image="alert.png",
    animations=[
        pulse(min_scale=0.9, max_scale=1.1),
        shake(intensity=3)
    ],
    output="alert_attention.gif"
)
```

## Optimization Strategies

When file exceeds limits, progressively reduce:

### For Message GIFs (~2MB limit)
1. Reduce frame count (fewer frames)
2. Shrink color palette (128 → 64 colors)
3. Decrease dimensions (480 → 320)
4. Simplify design complexity

### For Emoji GIFs (64KB limit)
More aggressive optimization required:
1. Minimal frame count (8-12 frames)
2. Tiny color palette (32 colors max)
3. Small dimensions (64-128 pixels)
4. Very simple designs
5. Dithering to reduce colors

## Workflow

### Step 1: Understand Vision
- What emotion or action to convey?
- Message GIF or emoji?
- Simple or complex animation?

### Step 2: Design in Phases
- Start with static base image
- Add primary animation
- Layer secondary effects
- Refine timing

### Step 3: Apply Primitives
- Choose appropriate primitives
- Combine for desired effect
- Adjust parameters
- Preview result

### Step 4: Validate Constraints
- Check file size
- Verify dimensions
- Confirm frame rate
- Test in Slack

### Step 5: Iterate
- Optimize if needed
- Refine animation
- Final validation

## Common Patterns

### Celebration
```python
animations = [
    explode(particle_count=20),
    fade(start=0, end=1, duration=0.5)
]
```

### Error/Alert
```python
animations = [
    shake(intensity=5, duration=0.5),
    pulse(min_scale=0.95, max_scale=1.05)
]
```

### Loading
```python
animations = [
    spin(direction="clockwise", speed=1)
]
```

### Attention
```python
animations = [
    bounce(height=15, speed=2),
    wiggle(amplitude=5, frequency=3)
]
```

## Validation

The save method automatically warns if file exceeds limits:

```python
gif = create_gif(...)
result = gif.save("output.gif")
# Warning: File size 75KB exceeds emoji limit of 64KB
# Suggestion: Reduce colors to 32 or decrease dimensions
```

## Best Practices

1. **Start simple**: Basic animations first
2. **Validate early**: Check size before finalizing
3. **Layer carefully**: Too many effects = large files
4. **Test in Slack**: Preview before deploying
5. **Keep emoji minimal**: 64KB is very restrictive
6. **Use primitives**: Don't reinvent animation logic

## Philosophy

"This toolkit provides building blocks, not rigid recipes."

- Understand your vision first
- Design animations in phases
- Apply primitives flexibly
- Validate against constraints
- Iterate until satisfied
README.md

What This Does

Create animated GIFs optimized for Slack's specific technical requirements. Build message GIFs or custom emoji with composable animation primitives while staying within file size limits.


Quick Start

Step 1: Install Dependencies

pip install Pillow imageio numpy

Step 2: Create a GIF Project

mkdir -p ~/Projects/slack-gifs

Step 3: Download the Template

Click Download above, then:

mv ~/Downloads/CLAUDE.md ~/Projects/slack-gifs/

Step 4: Start Creating

cd ~/Projects/slack-gifs
claude

Then say: "Create a celebration GIF for Slack"


Two GIF Types

Type Max Size Dimensions FPS Duration
Message ~2MB 480x480 15-20 2-5 sec
Emoji 64KB 128x128 10-12 1-2 sec

Animation Primitives

Animation Effect
shake Vibration effect
bounce Up-down motion
spin Rotation
pulse Size oscillation
fade Opacity change
zoom Scale in/out
wiggle Side-to-side
slide Directional movement
flip Mirror transform
explode Burst outward

Tool Categories

Category Purpose
Validators Check Slack constraints
Primitives Composable animations
Helpers Text, color, effects

Example Prompts

  • "Create a thumbs-up emoji that bounces"
  • "Make a celebration GIF with confetti"
  • "Build a loading spinner for Slack"
  • "Create a pulsing heart emoji"
  • "Make a shake animation for error alerts"

Optimization Tips

If your GIF is too large:

  1. Reduce frame count
  2. Shrink color palette
  3. Decrease dimensions
  4. Simplify the design

Emoji GIFs (64KB limit) need aggressive optimization.


Validation

The toolkit automatically warns when:

  • File exceeds size limits
  • Dimensions are wrong
  • Frame rate is too high
  • Colors exceed palette limit

Philosophy

This toolkit provides building blocks, not rigid recipes:

  • Understand your vision
  • Design in phases
  • Apply primitives flexibly
  • Validate constraints
  • Iterate as needed

Tips

  • Start simple: Basic animations first
  • Check size early: Validate before finalizing
  • Emoji is hard: 64KB requires creativity
  • Combine primitives: Layer effects for richness

$Related Playbooks