MpakoImageAIbot/plan.md

2.7 KiB
Raw Permalink Blame History

План проекта

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

Стек

  • Python 3.10+
  • python-telegram-bot 21+ (async)
  • PostgreSQL (psycopg 3 + psycopg-pool)
  • httpx для вызова ComfyUI API
  • Docker для упаковки

Режимы

  1. Text-to-Image: пользователь отправляет текст, бот подставляет промпт в workflow и отправляет его в ComfyUI через /prompt.
  2. Image-to-Image: пользователь отправляет фото и подпись, бот загружает изображение в ComfyUI через /upload/image, подставляет его в workflow и отправляет запрос.

Очередь

  • Один пользователь — одна активная задача. Повторный запрос во время ожидания получает ответ «ты уже в очереди».
  • Глобальная очередь с отображением позиции: «Перед тобой X человек».
  • Во время генерации показывается прогресс из WebSocket ComfyUI (событие progress).

Хранение

PostgreSQL, таблица requests:

  • id — первичный ключ;
  • user_id — Telegram ID;
  • timestamp — время создания, TIMESTAMPTZ (UTC);
  • prompt_text — текст запроса;
  • input_file_path — входное изображение, может быть пустым;
  • output_file_path — результат, может быть пустым;
  • status — queued, running, done или failed;
  • comfy_prompt_id — идентификатор задачи в ComfyUI.

Входные файлы и результаты хранятся в ./storage/{user_id}/, в БД записываются только пути.

ComfyUI

  • Базовый адрес: http://IP_WINDOWS:PORT.
  • POST /prompt возвращает prompt_id.
  • Статус отслеживается через GET /history/{prompt_id} или WebSocket /ws для прогресса в реальном времени.
  • Готовое изображение скачивается через /view?filename=....

Структура проекта

  • bot.py — хендлеры текста и фото.
  • comfy_client.py — submit_workflow и get_result.
  • db.py — init_db() и CRUD для requests.
  • queue_manager.py — очередь на asyncio.Queue.
  • requirements.txt, Dockerfile — зависимости и сборка.