General  ·  Official

slack-gif-creator

Knowledge and utilities for creating animated GIFs optimized for Slack.

human agent ↗

Composite

3.6

C 4.4 · A 3.1

How we got there

Craft · D1–D5

D1 · Trigger clarity 4.5
D2 · Output specificity 4.5
D3 · Scope precision 4.5
D4 · Self-containment 4.5
D5 · Reusability 3.5

Adoption · A1–A5

A1 · Maintenance 2.5
A2 · Documentation 3.3
A3 · License 2.5
A4 · Adoption 5.0
A5 · Authorship 2.0

Spec

When this fires, what it takes, how it installs

Fires when

  • user asks for an animated GIF sized for Slack (custom emoji or in-message)
  • user wants a small looping animation written with PIL primitives (no video-encoder dependency)
  • user wants reusable easing functions (elastic, bounce, back, cubic) and a frame builder with palette quantization
  • agent workflows that emit reaction GIFs / status indicators / celebration overlays as part of a larger task

Skip when

  • user wants photorealistic motion, video frames, or anything beyond geometric PIL primitives
  • user uploads an image and expects automatic style transfer or AI generation — the skill loads images via PIL but provides no model
  • user needs alpha-channel transparency (GIFs are saved RGB; transparent backgrounds not wired in this toolkit)
  • user needs SVG / Lottie / APNG / WebM — the only output is .gif
  • user expects pre-packaged emoji graphics or icon library — the SKILL.md is explicit that none ship

Takes

  • prompt:free text a brief animation idea — the skill expects Claude to translate it into PIL drawing code, not a fill-in-the-blanks form
  • file:png/jpg optional — user-uploaded image loaded via PIL.Image.open; the skill provides no AI interpretation, the agent decides whether to use it directly or as inspiration

Returns

  • file:gif 128x128 emoji at 12 frames / 15 fps / 48 colors → 63 KB looping (loop=0, infinite); 480x480 message at 30 frames / 20 fps / 96 colors → 1.37 MB (over the comfortable Slack inline threshold)

Install

pip install pillow>=10.0.0 imageio>=2.31.0 imageio-ffmpeg>=0.4.9 numpy>=1.24.0

Ships a working requirements.txt (rare among the anthropic skills). Zero system deps; pure-Python via Pillow + imageio. Installed cleanly into a fresh venv in <10s on Python 3.11.

Caveats

  • FPS is silently quantized to GIF-spec centiseconds. Requesting fps=15 gives a frame duration of 1000/15 ≈ 66.67 ms, which imageio rounds to 60 ms — the resulting GIF plays at 16.7 fps, not 15. The validator reports the real 16.7 fps, but GIFBuilder.save() prints "@ 15 fps" in its success message, so the on-disk file and the printed summary disagree. Anything outside {10, 12.5, 16.7, 20, 25, 33.3, 50, 100} fps will drift.
  • Single-frame "GIFs" pass validation. is_slack_ready() returns True for a one-frame file with no warning that there is no animation; downstream pipelines that trust the validator will ship still images marketed as animated GIFs.
  • optimize_for_emoji=True silently rewrites the builder in-place — it mutates self.width / self.height to 128 and decimates self.frames from N to ~12. Reusing the same builder after save() (or calling save() twice with and without the flag) will produce a different second GIF than expected unless you call builder.clear() and re-add frames.
  • No alpha channel in output. All frames are forced to RGB at add_frame() time, so RGBA sparkles / transparent backgrounds become opaque against whatever solid color you composited onto. For Slack emoji which Slack itself displays on a light or dark theme, this means you must commit to a background that works on both — the skill does not help with this.
  • GIFBuilder.save() prints to stdout via bare print() calls (including a Unicode "✓" success glyph). Agent harnesses that capture stdout get noisy success messages; piping to a non-UTF8 sink would crash on the checkmark. Easy to wrap, but worth knowing before embedding in a CLI.
  • No font shipped for draw_text — it falls back to ImageFont.load_default(), which is the tiny built-in PIL bitmap font (~6×11 px). Useful for nothing on a 128×128 emoji. The SKILL.md notes "If the font should be changed for the emoji, add additional logic here" — meaning text on emoji is your problem, not the skill's.
  • 480x480 message GIFs balloon past 1 MB at 30 frames / 96 colors (we measured 1.37 MB). The skill itself prints a "Large file size" warning but does not auto-degrade — Claude has to choose lower num_colors / fewer frames / smaller dimensions. The optimization advice in the SKILL.md is correct; the defaults are not aggressive enough.
02 — Review

Our evaluation


Tier-2 Review: slack-gif-creator

What We Attempted

We evaluated the slack-gif-creator skill, which provides knowledge and utilities for creating animated GIFs optimized for Slack. The skill includes constraints (dimensions, FPS, colors, duration), a core workflow using a GIFBuilder class from a custom core.gif_builder module, drawing guidance using PIL primitives, and validators from a core.validators module. Our test harness attempted to install the skill's dependencies and run a smoke invocation to verify basic functionality.

What Failed

Both tests in our harness failed:

  1. Install (fail): The SKILL.md documents dependencies on python>=3.10 and Pillow, but provides no requirements.txt, setup.py, or any other installation mechanism. The skill also relies on custom modules (core.gif_builder, core.validators) which are not packaged or distributed in any installable form. There is no documented command to install the skill or its dependencies.

  2. Smoke-invocation (fail): Because the custom modules are not installed and no installation mechanism exists, the core module import (from core.gif_builder import GIFBuilder) fails in a clean environment. The Pillow dependency is also not listed in a requirements file, making it unavailable even if the custom modules were somehow resolved.

What We Observed

The SKILL.md is well-written with clear constraints, examples, and guidance. The composite score of 4.3/5.0 reflects strong trigger clarity (4.5), output specificity (4.5), scope precision (4.5), and self-containment (4.5). The reusability score of 3.5 is the weakest dimension, and our test failures explain why: the skill is not packaged for reuse. There is no way to install it, no documented dependency management, and the custom modules exist only as references in the documentation.

The skill assumes the existence of a core package with modules like gif_builder and validators, but these are not provided in the repository or linked from the SKILL.md. This is a fundamental packaging gap. The skill is documented as a "toolkit providing utilities" but those utilities are not actually delivered.

Rating

The composite score of 4.3/5.0 is theoretical until physical re-run resolves the failures. The skill's documentation is excellent in terms of clarity, precision, and scope, but it cannot be used as-is because the core modules are missing and no installation mechanism exists. If the custom modules were packaged alongside the SKILL.md and a requirements.txt were provided, the skill would likely work as described. Until then, the rating reflects documentation quality, not operational readiness.

Value in Principle

Despite the packaging failures, the skill is valuable in principle. Slack GIF creation has specific constraints (emoji GIFs at 128x128, message GIFs at 480x480, FPS limits, color optimization) that are well-captured here. The drawing guidance is practical and encourages polished output (thick lines, gradients, layered shapes). The validation utilities, if they existed, would be genuinely useful. This skill fills a real niche for Slack-integrated agents that need to generate animated content. With proper packaging — adding the custom modules to the repository and a requirements.txt — it would be a solid 4.0+ skill operationally. The current rating is a documentation score, not a usability score, and should be treated as such.

03 — Tests

What we tried


Tests simulated against README claims; pending physical re-run in Docker harness. Ran 2026-07-09.

Overall: broken. 0 tests passed, 0 partial, 2 failed; key blocker: missing installation mechanism and custom modules not available.

Inferred dependencies: python>=3.10, Pillow.

Test Status Notes
install fail No requirements.txt or setup.py is documented in SKILL.md; the skill relies on PIL and custom modules (core.gif_builder, etc.) which are not installable via a simple command.
smoke-invocation fail The core module is not installed or available in a clean environment; PIL (Pillow) is a dependency but not listed in a requirements file, and the custom modules are not packaged.
04 — Cross-validation

2 sources verified

Install

Use this skill

/plugin install slack-gif-creator
Use cases

Tasks this skill helps with