Распил пикселей. Телеграм-бот, который превратит любую картинку в эмодзи

Кастомные эмодзи в 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 — и через несколько секунд у тебя свой кастомный пак, который можно расшарить друзьям и подписчикам канала.

Распил пикселей. Телеграм-бот, который превратит любую картинку в эмодзи

Полностью бесплатно. Без премиум-подписок, без рекламы, без ограничений. Он только просит только подписку на мой классный телеграм-канал про контент-маркетинг.

Бот будет полезен всем, кто работает с контентом на площаде.

1
1 комментарий