Telegram supports three sticker types — static, animated, and video — each with its own rules. Uploads that break any rule are rejected by @Stickers and the Bot API, usually with a terse error, so it pays to know the numbers.
Requirements by type
| Static | Animated (TGS) | Video (WEBM) | |
|---|---|---|---|
| Format | WEBP / PNG | TGS (gzipped Lottie) | WEBM (VP9) |
| Dimensions | one side = 512 px | exactly 512 × 512 | one side = 512 px |
| Max size | 512 KB | 64 KB | 256 KB |
| Duration | — | ≤ 3 s | ≤ 3 s |
| Frame rate | — | 30 / 60 FPS | ≤ 30 FPS |
| Transparency | yes | yes | yes |
Custom emoji
Custom emoji follow the same format rules at 100 × 100 px. TGS is the premium-feeling choice here: vector emoji stay crisp in the message line at any font size. svgtgs exports both canvases — flip the output toggle from Sticker 512 to Emoji 100.
The TGS fine print
- The Lottie JSON must be gzip-compressed; uncompressed JSON is rejected.
- No expressions, raster assets, text layers, 3D layers, or effects.
- Masks, trim paths, gradients, and shape layers are supported.
- The first pack sticker’s emoji list is required when creating packs via bot.
The easiest way to satisfy all of this is to let the tooling enforce it: the svgtgs converter validates size, duration, canvas, and feature subset while you edit, so what you download is what Telegram accepts.