MpakoImageAIbot/plan.md

3.0 KiB
Raw Blame History

Ты — senior Python-разработчик. Нужно написать Telegram-бота для генерации изображений через удалённый ComfyUI API.

Стек

  • Python 3.10+
  • python-telegram-bot (v21+, async) [citation:3]
  • SQLite (через aiosqlite или стандартный sqlite3 с осторожностью)
  • requests / httpx для вызова ComfyUI API
  • Docker для финальной упаковки

Функционал (два режима)

  1. Text-to-Image: пользователь отправляет текст → бот шлёт POST на ComfyUI /prompt с подставленным промптом [citation:14].
  2. Image-to-Image: пользователь отправляет фото + текст → бот скачивает фото, загружает его в ComfyUI (через /upload/image или временную папку), подставляет в воркфлоу как input image, шлёт POST.

Очередь (критично)

  • Один пользователь = одна активная задача. Если он пишет ещё раз, пока висит его задача — бот отвечает «ты уже в очереди».
  • Нужна глобальная очередь. Показывай:
    • Если в очереди: «Перед тобой X человек».
    • Если генерация идёт: «Генерация… Y%» (прогресс брать из WebSocket ComfyUI, события progress [citation:25][citation:35]).

Хранение (SQLite)

Таблица requests:

  • id (PK)
  • user_id (telegram id)
  • timestamp (ISO)
  • prompt_text
  • input_file_path (nullable)
  • output_file_path (nullable)
  • status (queued/running/done/failed)
  • comfy_prompt_id (для отслеживания)

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

Вызов ComfyUI

  • База: http://IP_WINDOWS:PORT
  • POST /prompt → получаешь prompt_id [citation:2][citation:14].
  • Опрос статуса: либо через GET /history/{prompt_id} (проще, но медленнее), либо через WebSocket на /ws (для прогресса в реальном времени) [citation:30][citation:35].
  • После завершения скачай изображение через /view?filename=....

Что сделать сейчас

  1. Создай структуру проекта: bot.py, comfy_client.py, db.py, queue_manager.py.
  2. Напиши comfy_client.py с функциями submit_workflow (POST /prompt) и get_result (скачивание).
  3. Напиши db.py с init_db() и CRUD для requests.
  4. Напиши bot.py с хендлерами для текста и фото, но очередь пока сделай простейшей (asyncio.Queue).
  5. Добавь requirements.txt и Dockerfile.