MpakoImageAIbot/README.md

111 lines
4.7 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.

# MpakoImageAIbot
Telegram-бот для генерации и редактирования изображений через удалённый ComfyUI API.
## Что умеет
- **Text-to-image**: текст → изображение (Z-Image Turbo, 1024×1024).
- **Image-to-image**: фото + подпись → редактирование (Krea2 edit).
- **Reply-to-image**: ответ текстом на готовую картинку бота → редактирование этой картинки.
- Глобальная очередь с одной активной задачей на пользователя.
- Позиция в очереди и прогресс генерации через WebSocket ComfyUI.
- SQLite: запросы, статусы, seed, пути к файлам.
## Требования
- Python 3.10+ (проверено на 3.13).
- ComfyUI с доступом по сети, например:
```text
python main.py --listen 0.0.0.0 --port 8188
```
- Установленные кастомные ноды для текущих workflow: `Krea2ModelLoader`, `TextEncodeQwenImageEdit`, `UnetLoaderGGUF`, `CLIPLoaderGGUF`.
- Модели, указанные в `workflows/txt2img.json` и `workflows/img2img.json`.
## Настройка
```powershell
Copy-Item .env.example .env
```
Заполнить `.env`:
- `BOT_TOKEN` — токен от `@BotFather`.
- `TELEGRAM_PROXY` — прокси для Telegram API (пусто — напрямую).
- `COMFY_BASE_URL` — например `http://192.168.31.113:8188`.
- Остальные параметры можно оставить по умолчанию.
### Прокси для Telegram
Если сервер не имеет прямого доступа к Telegram, укажи прокси V2RayA/HTTP/SOCKS5:
```dotenv
# Docker на Linux (V2RayA слушает на хосте)
TELEGRAM_PROXY=http://host.docker.internal:20171
# Запуск без Docker, на том же хосте
# TELEGRAM_PROXY=http://127.0.0.1:20171
```
Для SOCKS5 используй `socks5h://host.docker.internal:20170`; зависимость `socksio` уже включена в `requirements.txt`.
## Запуск
```powershell
py -3 -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python bot.py
```
Бот работает в приватных чатах. Пользователь отправляет текст или фото с подписью.
## Docker
```powershell
docker compose up -d --build
```
Каталоги `./storage` и `./data` монтируются как volume. Для ComfyUI на другой машине используйте её LAN-IP, а не `localhost`.
## CI
При push в `main` или `master` Gitea Actions собирает образ на сервере, где запущен runner, и пушит его в Gitea Registry:
- `git.mpakosrv.ru/mpakobecex/mpakoimageaibot:latest`
- `git.mpakosrv.ru/mpakobecex/mpakoimageaibot:<sha>`
- локально: `mpakoimageaibot:latest`
Workflow: `.gitea/workflows/docker-build.yml`. Runner использует label `ubuntu-latest` и смонтированный Docker socket. Для входа в registry нужны секреты `REGISTRY_USER` и `REGISTRY_TOKEN`.
После успешной сборки обновление контейнера:
```bash
docker compose up -d
```
Без `--build`: Compose возьмёт готовый образ `mpakoimageaibot:latest`.
## Workflow
- `workflows/txt2img.json` — Z-Image Turbo: `EmptySD3LatentImage → KSampler → VAEDecode → SaveImage`.
- `workflows/img2img.json` — Krea2 edit: `LoadImage → TextEncodeQwenImageEdit → KSamplerAdvanced → VAEDecode → SaveImage`.
- `workflows/mapping.json` — ID узлов, в которые подставляются prompt, negative, seed и входное изображение.
- `workflows/Krea2.json` и `workflows/ZImage.json` — исходные экспорты.
Если меняются workflow, обновите `mapping.json`. При старте бот проверяет, что все узлы и поля существуют.
## Тесты
```powershell
pip install -r requirements-dev.txt
pytest
```
## Ограничения текущей версии
- Один воркер и одна активная задача на пользователя.
- Нет `/cancel` и удаления задачи из очереди.
- Нет автоочистки `storage/` и `data/`.
- Прогресс в процентах зависит от WebSocket; при его недоступности используется polling без процентов.
- При рестарте задача в статусе `running` помечается `failed`.