MpakoImageAIbot/plan.md

53 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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