Распил пикселей. Телеграм-бот, который превратит любую картинку в эмодзи
Кастомные эмодзи в Telegram — штука крутая. Можно собрать набор из любимого мема, фото своего кота или скриншота из игры и потом раскидывать его по чатам как обычные эмодзи. Только вот все боты, которые умеют делать такие наборы автоматически, оказались платными. Кто-то просит подписку, кто-то прячет базовый функционал за пейволлом.
Меня это задело. Технически задача не выглядела заоблачной: взять картинку, нарезать на квадраты, упаковать в нужный формат и отдать Telegram Sticker API. Зачем за это платить?
Так появился мой бот, который делает ровно то же самое, но бесплатно. Я собирал его несколько дней — хотелось не просто чтобы работал, а чтобы всё было аккуратно. И анимация летала, и фон вырезался по-разному, и настройки были удобные.
Что умеет Распил пикселей (это название бота)
Главное — превратить фото или GIF в готовый набор кастомных эмодзи за пару секунд. Кидаешь боту картинку с подписью /emoji — получаешь ссылку на пак, который можно ставить в любой чат или канал.
Под капотом происходит вот что. Сначала Pixel вырезает фон. Можно использовать классический зелёный хромакей или включить автоматический режим — тогда бот сам определит фон по краям картинки через алгоритм flood fill. Если фон неоднородный, чувствительность регулируется параметром b_sim — выкручиваешь повыше, и бот прощает небольшие отклонения в цвете.
После этого изображение нарезается на квадратные тайлы 100×100 пикселей. Сетку можно настроить от 1 до 12 столбцов: миниатюрный пак из пары эмодзи или широкая панорама на полный ряд — выбор за тобой. Бот автоматически центрирует тайлы в 8-колоночном emoji-пикере, чтобы итоговый набор смотрелся ровно, а не съезжал в один край.
Анимация поддерживается из коробки. GIF-файлы кодируются в VP9 WebM — это формат, который Telegram использует для анимированных эмодзи. До 300 кадров на одну анимацию, чего хватает на любые мемы и зацикленные сценки.
Если в картинке есть лишние поля по краям, не нужно лезть в редактор — параметры ot, ob, ol, or обрежут изображение сверху, снизу, слева и справа прямо из подписи. А если у тебя уже есть пак и хочется докинуть туда новые эмодзи, параметр l=имя_пака добавит их в существующий набор без создания нового.
Отдельно сделана настройка паддинга — прозрачной рамки вокруг каждого эмодзи. Telegram по-разному отображает кастомные эмодзи на разных устройствах: где-то они слипаются, где-то стоят слишком далеко друг от друга. В меню «🎛 Настройки» можно подобрать значение от 0 до 5 px, и оно сохранится для всех будущих запросов автоматически.
После создания пака бот показывает превью прямо в чате, видно сразу, как эмодзи будут смотреться в реальной переписке.
Примеры команд
Несколько типичных сценариев, чтобы было понятно, как это выглядит на практике:
/emoji w=4 b=auto b_sim=0.2 — автоматическое удаление фона, сетка из 4 столбцов.
/emoji w=8 b=green p=0 — зелёный хромакей, без отступов между тайлами.
/emoji w=6 b=white name=MySet ot=20 — белый фон, кастомное название пака, обрезка 20 px сверху.
/emoji w=4 l=my_pack_by_mybot — добавить тайлы в существующий пак.
Что внутри технически
Я всё вайбкодил через Claude code и вот что по техничке.
Бот написан на Python 3.11 с aiogram 3 — это значит асинхронность, FSM с состояниями и middleware-слой для статистики и защиты от спама. Статичные изображения обрабатываются через Pillow и numpy: chroma key реализован как евклидово расстояние в RGB-пространстве, а автоматическое определение фона — это BFS flood fill, который запускается от краёв картинки и затекает внутрь, пока пиксели похожи на фоновые. Анимации перегоняются через PyAV и libvpx в VP9.
Данные пользователей и состояния FSM хранятся в SQLite в режиме WAL — две отдельные базы, никаких внешних зависимостей вроде Redis. Развернуть бота можно на любом VPS с Python и ffmpeg.
Лимиты подобраны так, чтобы и пользователю было комфортно, и сервер не падал: файл до 10 МБ, до 300 кадров в GIF, до 200 стикеров в паке, 15 секунд между запросами. Одновременно бот тянет 3 задачи — этого хватает, чтобы не зависать в очереди даже на пике.
Попробовать прямо сейчас
Открывай бот, кидай фото или GIF, пиши /emoji — и через несколько секунд у тебя свой кастомный пак, который можно расшарить друзьям и подписчикам канала.
Полностью бесплатно. Без премиум-подписок, без рекламы, без ограничений. Он только просит только подписку на мой классный телеграм-канал про контент-маркетинг.
Бот будет полезен всем, кто работает с контентом на площаде.