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