Go to file
MpakobecEx ce9acabde5 feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
tests feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
workflows feat: adapt ComfyUI t2i and i2i workflows 2026-10-18 17:38:56 +05:00
.dockerignore feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
.env.example feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
.gitattributes feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
.gitignore feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
AGENT.md chore: initial project plan and agent rules 2026-10-18 17:03:50 +05:00
Dockerfile feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
README.md feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
bot.py feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
checklist.md feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
comfy_client.py feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
config.py feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
db.py feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
docker-compose.yml feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
plan.md chore: initial project plan and agent rules 2026-10-18 17:03:50 +05:00
pytest.ini feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
queue_manager.py feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
requirements-dev.txt feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
requirements.txt feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00
workflows.py feat: initial working bot with ComfyUI queue 2026-10-18 17:49:55 +05:00

README.md

MpakoImageAIbot

Telegram-бот для генерации и редактирования изображений через удалённый ComfyUI API.

Что умеет

  • Text-to-image: текст → изображение (Z-Image Turbo, 1024×1024).
  • Image-to-image: фото + подпись → редактирование (Krea2 edit).
  • Глобальная очередь с одной активной задачей на пользователя.
  • Позиция в очереди и прогресс генерации через WebSocket ComfyUI.
  • SQLite: запросы, статусы, seed, пути к файлам.

Требования

  • Python 3.10+ (проверено на 3.13).
  • ComfyUI с доступом по сети, например:
    python main.py --listen 0.0.0.0 --port 8188
    
  • Установленные кастомные ноды для текущих workflow: Krea2ModelLoader, TextEncodeQwenImageEdit, UnetLoaderGGUF, CLIPLoaderGGUF.
  • Модели, указанные в workflows/txt2img.json и workflows/img2img.json.

Настройка

Copy-Item .env.example .env

Заполнить .env:

  • BOT_TOKEN — токен от @BotFather.
  • COMFY_BASE_URL — например http://192.168.31.113:8188.
  • Остальные параметры можно оставить по умолчанию.

Запуск

py -3 -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python bot.py

Бот работает в приватных чатах. Пользователь отправляет текст или фото с подписью.

Docker

docker compose up -d --build

Каталоги ./storage и ./data монтируются как volume. Для ComfyUI на другой машине используйте её LAN-IP, а не localhost.

Workflow

  • workflows/txt2img.json — Z-Image Turbo: EmptySD3LatentImage → KSampler → VAEDecode → SaveImage.
  • workflows/img2img.json — Krea2 edit: LoadImage → TextEncodeQwenImageEdit → KSamplerAdvanced → VAEDecode → SaveImage.
  • workflows/mapping.json — ID узлов, в которые подставляются prompt, negative, seed и входное изображение.
  • workflows/Krea2.json и workflows/ZImage.json — исходные экспорты.

Если меняются workflow, обновите mapping.json. При старте бот проверяет, что все узлы и поля существуют.

Тесты

pip install -r requirements-dev.txt
pytest

Ограничения текущей версии

  • Один воркер и одна активная задача на пользователя.
  • Нет /cancel и удаления задачи из очереди.
  • Нет автоочистки storage/ и data/.
  • Прогресс в процентах зависит от WebSocket; при его недоступности используется polling без процентов.
  • При рестарте задача в статусе running помечается failed.