MpakoImageAIbot/plan.md

44 lines
3.0 KiB
Markdown
Raw 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.

Ты — 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`.