3.0 KiB
3.0 KiB
Ты — senior Python-разработчик. Нужно написать Telegram-бота для генерации изображений через удалённый ComfyUI API.
Стек
- Python 3.10+
- python-telegram-bot (v21+, async) [citation:3]
- SQLite (через aiosqlite или стандартный sqlite3 с осторожностью)
- requests / httpx для вызова ComfyUI API
- Docker для финальной упаковки
Функционал (два режима)
- Text-to-Image: пользователь отправляет текст → бот шлёт POST на ComfyUI
/promptс подставленным промптом [citation:14]. - 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=....
Что сделать сейчас
- Создай структуру проекта:
bot.py,comfy_client.py,db.py,queue_manager.py. - Напиши
comfy_client.pyс функциями submit_workflow (POST /prompt) и get_result (скачивание). - Напиши
db.pyс init_db() и CRUD для requests. - Напиши
bot.pyс хендлерами для текста и фото, но очередь пока сделай простейшей (asyncio.Queue). - Добавь
requirements.txtиDockerfile.