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