# План проекта 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` — зависимости и сборка.