TypeFormatResolutionTransparentMax DurationMax FileStaticPNG or WebP512×512Required—512 KBVideoWebM VP9 (yuva420p)512×512Required3 sec256 KBAnimatedTGS (Lottie)512×512Required3 sec64 KB
TGS = vector only. Never attempt TGS from raster/PNG — impossible under 64KB compressed. Requires original layered vector artwork in After Effects. For NFT/photo art → use WebM video stickers.
For most requests, use sticker.py which handles the full pipeline in one command:
bash
# Static PNG sticker
python3 scripts/sticker.py <image>
# Animated WebM sticker
python3 scripts/sticker.py <image> --animate sway # gentle side-to-side
python3 scripts/sticker.py <image> --animate bounce # energetic bounce
python3 scripts/sticker.py <image> --animate shake # fast hype jitter
# Skip upload (local file only)
python3 scripts/sticker.py <image> --animate sway --no-upload
Output: <name>_sticker.png (static) or <name>_<motion>.webm + tmpfiles.org download URL (animated).
Use these when you need fine-grained control or are processing in bulk.
bash
python3 scripts/make_sticker.py <input_image> [output.png]
~/.u2net/u2net.onnx after first run — ~170MB download)bash
python3 scripts/animate_sway.py <sticker.png> [--fps 24] [--duration 2.0] [--shift 18] [--angle 4] [--outdir frames_sway]
python3 scripts/animate_bounce.py <sticker.png> [--fps 24] [--duration 1.5] [--height 20] [--outdir frames_bounce]
python3 scripts/animate_shake.py <sticker.png> [--fps 24] [--duration 1.0] [--intensity 10] [--outdir frames_shake]
Input must be a processed 512×512 transparent PNG (output of make_sticker.py).
bash
python3 scripts/make_webm.py <frames_dir> [output.webm] [--fps 24] [--duration 2.0] [--no-upload]
-loop 0 — GIF flag, breaks WebMAfter generating the file, upload via tmpfiles.org (already handled by make_webm.py / sticker.py):
bash
curl -s -F "file=@sticker.png" https://tmpfiles.org/api/v1/upload
# Returns JSON → insert /dl/ after tmpfiles.org/ in the URL for direct download
See references/stickers-bot-guide.md for full @Stickers bot step-by-step.
Key rule: always send sticker files to @Stickers bot as a Document, not a photo. Telegram compresses photos to JPEG and destroys transparency.
Pack typeBot commandFile formatStatic/newpackPNG sent as DocumentVideo stickers/newvideoWebM sent as Document
Static and video packs are separate — cannot mix types in one pack.
bash
pip install "rembg[cpu]" Pillow numpy
# ffmpeg with libvpx-vp9 (system-wide install)
sticker.py runs a dependency check on startup and prints install hints if anything is missing.