# Telegram Bot для генерации изображений через Stable Diffusion (Automatic1111) Бот для генерации изображений через API Stable Diffusion WebUI (Automatic1111) с поддержкой профилей, управления хранением изображений и удобным интерфейсом. ## Возможности - 🎨 **Генерация изображений (txt2img)** — создание изображений по текстовому описанию - ⚙️ **Система профилей** — сохранение настроек (размер, модель, LoRA, сэмплер и т.д.) - 🗃️ **Управление хранением** — настройка времени хранения изображений (автоочистка) - 📊 **Мониторинг** — проверка статуса подключения к SD API - 🐳 **Docker** — простая установка и запуск в контейнере - 🛡️ **Админ-панель** — управление пользователями, лимитами и доступом --- ## Содержание 1. [Что умеет бот](#что-умеет-бот) 2. [Требования](#требования) 3. [Настройка Stable Diffusion WebUI](#настройка-stable-diffusion-webui) 4. [Создание Telegram бота](#создание-telegram-бота) 5. [Установка бота](#установка-бота) 6. [Настройка конфигурации](#настройка-конфигурации) 7. [Запуск бота](#запуск-бота) 8. [Использование бота](#использование-бота) 9. [Примеры промптов](#примеры-промптов) 10. [Структура проекта](#структура-проекта) 11. [FAQ](#faq) 12. [Устранение неполадок](#устранение-неполадок) --- ## Что умеет бот ### 🎨 Генерация изображений Бот позволяет создавать изображения двумя способами: **txt2img (текст → изображение)** — опишите словами, что хотите увидеть, и бот сгенерирует изображение. Вы вводите промпт (описание) и необязательный негативный промпт (чего НЕ должно быть на картинке), а бот передаёт запрос в Stable Diffusion и возвращает готовое изображение. После генерации бот покажет все параметры: промпт, размер, количество шагов, CFG Scale, сэмплер, шедулер, seed, модель и время хранения изображения. ### ⚙️ Система профилей Создавайте и сохраняйте профили с предустановленными настройками, чтобы не вводить их каждый раз заново: | Параметр | Описание | |----------|----------| | **Размер изображения** | Предустановленные (512×512, 768×768, 512×768, 768×512, 1024×1024) или произвольный (64–2048 px) | | **Количество шагов** | От 10 до 150. Больше шагов = выше качество, но дольше генерация | | **CFG Scale** | От 1.0 до 30.0. Определяет, насколько строго модель следует промпту (стандарт: 7.0) | | **Сэмплер** | Euler a, Euler, DPM++ 2M Karras, DPM++ SDE Karras, DDIM и другие — загружаются из SD API | | **Шедулер** | Автоматически подбирается к сэмплеру | | **Модель** | Выбор из всех доступных моделей в вашем SD WebUI | | **LoRA** | Подключение LoRA с настраиваемой силой (0.0–1.0) | | **Негативный промпт** | Описание того, чего НЕ должно быть на изображении | Вы можете установить один профиль как **профиль по умолчанию** (⭐) — тогда при генерации будут автоматически применяться его настройки. ### 🛡️ Админ-панель Администратор (указанный в `ADMIN_ID`) имеет доступ к панели управления: - **Добавление пользователей** — выдача доступа по Telegram User ID - **Типы доступа:** - ♾️ **Без ограничений** — полный доступ навсегда - ⏰ **По времени** — доступ на заданное количество дней (1–3650) - 🎨 **По количеству генераций** — лимит на число сгенерированных изображений - **Список пользователей** — просмотр, пагинация, управление - **Управление пользователями** — блокировка, разблокировка, обновление доступа, удаление - **Очистка истёкших доступов** — автоматическая деактивация пользователей с истёкшим сроком > **Как узнать свой User ID?** — Напишите боту [@userinfobot](https://t.me/userinfobot) в Telegram. ### 🗃️ Управление хранением Каждый пользователь может настроить время хранения своих сгенерированных изображений: - **Предустановленные варианты:** 12 ч, 24 ч (1 день), 48 ч (2 дня), 72 ч (3 дня), 168 ч (7 дней) - **Произвольное значение** — от 1 часа до максимума (`MAX_IMAGE_TTL_HOURS`) - **Автоматическая очистка** — фоновая задача удаляет просроченные изображения с заданным интервалом ### 📊 Мониторинг Команда `/status` или кнопка «Статус SD API» покажет: - Статус подключения к SD API - Адрес API - Текущую загруженную модель ### 🔐 Система доступа Бот по умолчанию **не допускает** новых пользователей — только те, кого добавил администратор, могут пользоваться ботом. Это защищает от несанкционированного использования ваших ресурсов. При попытке использования бота без доступа пользователь получит сообщение об ошибке. ### 📋 Команды бота | Команда | Описание | |---------|----------| | `/start` | Запуск бота, приветствие и главное меню | | `/menu` | Показать главное меню | | `/status` | Проверка статуса SD API | | `/cancel` | Отмена текущей операции | | `/admin` | Админ-панель (только для администратора) | --- ## Требования ### Для сервера с ботом (Docker) - **Операционная система:** Linux (Ubuntu 20.04+), Windows 10/11 с WSL2, macOS 12+ - **Docker:** версии 20.10+ - **Docker Compose:** версии 2.0+ - **Свободное место:** ~500 МБ для бота + место для изображений - **Оперативная память:** минимум 256 МБ для контейнера бота - **Сеть:** доступ к серверу Stable Diffusion по локальной сети ### Для сервера со Stable Diffusion - **Stable Diffusion WebUI (Automatic1111)** — запущенный и доступный по сети - **API режим** — включён флагом `--api` - **Сетевой доступ** — слушает не только localhost (флаг `--listen`) --- ## Настройка Stable Diffusion WebUI ### 1. Запуск с поддержкой API На сервере, где установлен Stable Diffusion WebUI, запустите его со следующими флагами: ```bash # Для Linux ./webui.sh --api --listen # Для Windows webui.bat --api --listen ``` **Обязательные флаги:** | Флаг | Описание | |------|----------| | `--api` | Включает программный API для бота | | `--listen` | Позволяет подключаться не только с localhost | **Опциональные флаги:** | Флаг | Описание | |------|----------| | `--port 7860` | Указать порт (по умолчанию 7860) | | `--nowatchdog` | Отключить watchdog (рекомендуется для серверов) | | `--xformers` | Использовать xformers для ускорения (если поддерживается) | **Пример полной команды:** ```bash ./webui.sh --api --listen --port 7860 --nowatchdog ``` ### 2. Проверка доступности API После запуска проверьте, что API доступен: ```bash # С сервера с ботом (замените IP на ваш) curl http://192.168.1.120:7860/sdapi/v1/options ``` Вы должны получить JSON-ответ с настройками API. ### 3. Настройка firewall (если необходимо) Убедитесь, что порт 7860 открыт для подключения с сервера бота: ```bash # Для Ubuntu/Debian (UFW) sudo ufw allow 7860/tcp # Для CentOS/RHEL (firewalld) sudo firewall-cmd --permanent --add-port=7860/tcp sudo firewall-cmd --reload ``` --- ## Создание Telegram бота ### 1. Получение токена бота 1. Откройте Telegram и найдите бота **@BotFather** 2. Отправьте команду `/newbot` 3. Следуйте инструкциям: - Введите **отображаемое имя** бота (например, `SD Generator`) - Введите **username** бота (должен заканчиваться на `bot`, например `sd_gen_bot`) 4. BotFather отправит вам **токен** вида `123456789:ABCdefGHIjklMNOpqrsTUVwxyz` ### 2. Настройка описания бота (опционально) В BotFather: ``` /setdescription — описание, которое видит пользователь до начала общения /setabouttext — короткое описание для поиска ботов /setuserpic — аватар бота ``` --- ## Установка бота ### Способ 1: С помощью Docker Compose (рекомендуется) #### 1. Клонирование или копирование файлов Скопируйте все файлы проекта на сервер, где будет работать бот: ``` tg-sd/ ├── main.py ├── config.py ├── requirements.txt ├── Dockerfile ├── docker-compose.yml ├── .env ├── bot/ │ ├── __init__.py │ ├── handlers_start.py │ ├── handlers_generation.py │ ├── handlers_profiles.py │ └── handlers_settings.py ├── sd/ │ ├── __init__.py │ └── sd_client.py ├── database/ │ ├── __init__.py │ └── database.py └── utils/ ├── __init__.py └── image_manager.py ``` #### 2. Настройка переменных окружения Откройте файл `.env` и укажите ваши значения: ```bash nano .env ``` **Обязательные параметры:** ```env # Токен вашего бота (получите у @BotFather) BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz # Адрес Stable Diffusion API SD_API_URL=http://192.168.1.120:7860 ``` **Опциональные параметры:** ```env # Время хранения изображений по умолчанию (часы) DEFAULT_IMAGE_TTL_HOURS=48 # Максимальное время хранения (часы) MAX_IMAGE_TTL_HOURS=168 # Период автоматической очистки (минуты) CLEANUP_INTERVAL_MINUTES=30 ``` #### 3. Создание необходимых директорий ```bash mkdir -p images data ``` #### 4. Запуск бота ```bash # Сборка и запуск docker compose up -d --build # Проверка логов docker compose logs -f tg-sd-bot ``` #### 5. Остановка бота ```bash # Остановка docker compose down # Остановка с удалением контейнера и volumes docker compose down -v ``` ### Способ 2: Без Docker (прямой запуск) #### 1. Установка Python Убедитесь, что установлен Python 3.10+: ```bash python3 --version ``` #### 2. Создание виртуального окружения ```bash python3 -m venv venv source venv/bin/activate # Linux/macOS # или venv\Scripts\activate # Windows ``` #### 3. Установка зависимостей ```bash pip install -r requirements.txt ``` #### 4. Настройка окружения ```bash cp .env.example .env nano .env # Укажите ваши значения ``` #### 5. Запуск бота ```bash python main.py ``` --- ## Настройка конфигурации ### Файл .env | Параметр | Описание | По умолчанию | Обязательно | |----------|----------|--------------|-------------| | `BOT_TOKEN` | Токен Telegram бота | — | ✅ Да | | `SD_API_URL` | URL Stable Diffusion API | `http://192.168.1.120:7860` | ✅ Да | | `IMAGES_DIR` | Путь к папке изображений | `/app/images` | Нет | | `DEFAULT_IMAGE_TTL_HOURS` | Время хранения по умолчанию | `48` | Нет | | `MAX_IMAGE_TTL_HOURS` | Максимальное время хранения | `168` | Нет | | `CLEANUP_INTERVAL_MINUTES` | Интервал очистки | `30` | Нет | | `DB_PATH` | Путь к базе данных | `/app/data/bot.db` | Нет | --- ## Запуск бота ### Docker Compose ```bash # Запуск docker compose up -d # Просмотр логов docker compose logs -f # Перезапуск docker compose restart # Остановка docker compose down # Обновление (после изменений в коде) docker compose up -d --build ``` ### Прямой запуск ```bash # Активация окружения source venv/bin/activate # Запуск python main.py # Остановка: Ctrl+C ``` ### Запуск как сервис (systemd, Linux) Создайте файл сервиса: ```bash sudo nano /etc/systemd/system/tg-sd-bot.service ``` Содержимое: ```ini [Unit] Description=Telegram SD Bot After=network.target [Service] Type=simple User=your_user WorkingDirectory=/path/to/tg-sd ExecStart=/path/to/tg-sd/venv/bin/python main.py Restart=always RestartSec=10 [Install] WantedBy=multi-user.target ``` Активация: ```bash sudo systemctl daemon-reload sudo systemctl enable tg-sd-bot sudo systemctl start tg-sd-bot # Проверка статуса sudo systemctl status tg-sd-bot # Просмотр логов sudo journalctl -u tg-sd-bot -f ``` --- ## Использование бота ### Команды | Команда | Описание | |---------|----------| | `/start` | Запуск бота, главное меню | | `/menu` | Показать главное меню | | `/status` | Проверка статуса SD API | | `/cancel` | Отмена текущей операции | ### Генерация изображения (txt2img) 1. Нажмите **"🎨 Генерация (txt2img)"** 2. Введите описание изображения (промпт) 3. Введите негативный промпт (или `-` для пропуска) 4. Дождитесь результата **Пример промпта:** ``` a beautiful sunset over mountains, golden hour, dramatic clouds, 4k, highly detailed ``` **Пример негативного промпта:** ``` blurry, low quality, watermark, text, deformed ``` ### Генерация на основе изображения (img2img) 1. Нажмите **"🖼️ Генерация (img2img)"** 2. Отправьте изображение 3. Введите промпт 4. Выберите силу изменений ### Управление профилями 1. Нажмите **"⚙️ Профили"** 2. Создайте новый профиль 3. Настройте параметры: - Размер изображения (512x512, 768x768, и т.д.) - Количество шагов - CFG Scale - Сэмплер - Модель - LoRA и его сила - Негативный промпт 4. Установите профиль по умолчанию (⭐) ### Настройки хранения 1. Нажмите **"🗑️ Настройки хранения"** 2. Выберите время хранения: - 12 часов - 24 часа (1 день) - 48 часов (2 дня) - 72 часа (3 дня) - 168 часов (7 дней) - Пользовательское значение --- ## Примеры промптов ### 📸 Фотореализм и портреты ``` professional portrait photograph of a young woman, natural lighting, soft focus, shallow depth of field, 85mm lens, film grain, highly detailed skin texture ``` ``` elderly fisherman on a wooden boat at dawn, misty lake, warm golden light, cinematic composition, photorealistic, 4k ``` **Негативный промпт:** ``` blurry, low quality, watermark, text, deformed, extra fingers, bad anatomy, cartoon, illustration ``` ### 🌄 Пейзажи и природа ``` majestic mountain range at sunset, snow-capped peaks, golden hour lighting, dramatic clouds reflected in a crystal clear alpine lake, wide angle, national geographic style ``` ``` enchanted forest with bioluminescent mushrooms, fireflies, moonlight filtering through ancient trees, magical atmosphere, fantasy landscape, highly detailed ``` **Негативный промпт:** ``` urban, buildings, people, watermark, text, blurry, oversaturated ``` ### 🏙️ Архитектура и города ``` futuristic cyberpunk city at night, neon lights, flying cars, towering skyscrapers with holographic advertisements, rain-soaked streets, cinematic lighting, blade runner style ``` ``` ancient Greek temple ruins at sunrise, marble columns, overgrown with vines, peaceful atmosphere, warm morning light, archaeological photography style ``` **Негативный промпт:** ``` modern cars, people, watermark, text, low quality, distorted perspective ``` ### 🐉 Фэнтези и фантастика ``` epic dragon perched on a volcanic cliff, iridescent scales, wings spread wide, stormy sky with lightning bolts, fantasy art, highly detailed, dramatic lighting, artstation trending ``` ``` astronaut floating in a nebula, surrounded by cosmic dust and stars, surreal space scene, vivid colors, cinematic composition, digital art ``` **Негативный промпт:** ``` realistic, photograph, blurry, low resolution, watermark, text, bad anatomy ``` ### 🎨 Художественные стили ``` oil painting of a Japanese garden in autumn, red maple trees, stone lantern, koi pond, impressionist style, visible brushstrokes, Monet inspired ``` ``` watercolor illustration of a cozy cafe on a rainy day, warm interior light visible through windows, soft pastel colors, lo-fi aesthetic ``` ``` pixel art of a medieval castle, 16-bit style, game sprite, clean pixels, side view ``` **Негативный промпт:** ``` photorealistic, 3d render, blurry, watermark, text ``` ### 🍱 Аниме стили ``` anime girl with silver hair and blue eyes, wearing a school uniform, cherry blossom petals falling, soft lighting, Makoto Shinkai style, highly detailed anime art ``` ``` anime scene of a samurai standing on a bridge at sunset, dramatic pose, katana drawn, wind blowing cloak, Studio Ghibli style, beautiful background art ``` **Негативный промпт:** ``` realistic, photograph, 3d, bad anatomy, extra limbs, watermark, text, low quality ``` ### 🍔 Предметы и еда ``` professional food photography of a gourmet burger, melted cheese dripping, fresh ingredients, dark background, studio lighting, commercial photography style, 4k ``` ``` luxury Swiss watch on a velvet cushion, macro photography, intricate details, dramatic side lighting, product photography, bokeh background ``` **Негативный промпт:** ``` amateur, blurry, watermark, text, bad lighting, distorted ``` ### 💡 Советы по составлению промптов 1. **Используйте английский язык** — модели лучше понимают английские описания 2. **Будьте конкретны** — «sunset over mountains» лучше, чем просто «landscape» 3. **Добавляйте стиль** — укажите «oil painting», «photograph», «anime style» и т.д. 4. **Описывайте освещение** — «golden hour», «dramatic lighting», «soft morning light» 5. **Указывайте качество** — «4k», «highly detailed», «professional photography» 6. **Добавляйте композицию** — «close-up», «wide angle», «macro», «portrait» 7. **Используйте негативный промпт** — это убирает нежелательные элементы ### 🔗 Полезные ресурсы для промптов - [PromptHero](https://prompthero.com/) — база промптов с примерами изображений - [Lexica](https://lexica.art/) — поиск по Stable Diffusion изображениям и промптам - [OpenArt](https://openart.ai/) — галерея с промптами - [Civitai](https://civitai.com/) — модели, LoRA и примеры промптов --- ## FAQ ### Общие вопросы #### ❓ Что нужно для работы бота? Вам понадобятся: 1. **Telegram Bot Token** — получите у [@BotFather](https://t.me/BotFather) 2. **Запущенный Stable Diffusion WebUI (Automatic1111)** с флагами `--api --listen` 3. **Сервер** для запуска бота (Docker или Python) Бот и SD WebUI могут работать на разных машинах — главное, чтобы бот имел сетевой доступ к SD API. #### ❓ Можно ли использовать бота без своего GPU? Да! Бот может работать на слабом сервере (даже на VPS с 256 МБ RAM), а Stable Diffusion — на мощной машине с GPU в вашей локальной сети. Бот лишь передаёт запросы и возвращает изображения. #### ❓ Какие модели поддерживаются? Любые модели, загруженные в ваш SD WebUI: - **Stable Diffusion 1.5 / 2.1** - **SDXL** - **Кастомные модели** (ckpt/safetensors) — любые, которые вы загрузили Бот автоматически подтягивает список доступных моделей из API. #### ❓ Поддерживаются ли LoRA? Да! При создании профиля вы можете выбрать LoRA из списка доступных и настроить его силу (0.0–1.0). Список LoRA загружается автоматически из SD WebUI. #### ❓ Бот поддерживает ControlNet? В текущей версии ControlNet не поддерживается. Если вам нужна эта функция — вы можете реализовать её, расширив `sd_client.py`. --- ### Генерация #### ❓ Сколько времени занимает генерация? Зависит от: - **Количества шагов** — 20 шагов ≈ 5–15 секунд на GPU среднего уровня - **Размера изображения** — 512×512 быстрее, чем 1024×1024 - **Модели** — SDXL медленнее, чем SD 1.5 - **Нагрузки на GPU** — если кто-то ещё использует GPU Обычно генерация занимает **от 10 секунд до 2 минут**. #### ❓ Почему генерация занимает слишком долго? Возможные причины: 1. Слишком много шагов (попробуйте 20–30 вместо 50+) 2. Большой размер изображения (попробуйте 512×512 вместо 1024×1024) 3. Медленная модель (SDXL тяжелее, чем SD 1.5) 4. GPU загружен другими задачами #### ❓ Что такое CFG Scale? **CFG Scale** (Classifier-Free Guidance) определяет, насколько строго модель следует вашему промпту: - **5.0** — модель более свободна, может добавлять свои детали - **7.0** — стандарт, хороший баланс - **9.0+** — модель строго следует промпту, но может стать «перегруженной» #### ❓ Что такое сэмплер? **Сэмплер** — алгоритм, который определяет, как модель «шаг за шагом» создаёт изображение из шума: - **Euler a** — быстрый, хорошие результаты - **DPM++ 2M Karras** — высокое качество, рекомендуемый - **DPM++ SDE Karras** — ещё выше качество, но медленнее - **DDIM** — быстрый, но менее детализированный #### ❓ Можно ли использовать seed из предыдущей генерации? После генерации бот показывает использованный seed. Вы можете создать профиль с конкретным seed (в текущей версии seed генерируется автоматически). Для точного воспроизведения используйте SD WebUI напрямую. --- ### Профили #### ❓ Зачем нужны профили? Профили сохраняют ваши любимые настройки. Вместо того чтобы каждый раз выбирать размер, модель, сэмплер и т.д., вы создаёте профиль один раз и используете его в один клик. #### ❓ Сколько профилей можно создать? Ограничений нет — создавайте столько, сколько нужно. #### ❓ Что делает «профиль по умолчанию»? Если профиль установлен как **по умолчанию** (⭐), его настройки будут автоматически применяться при генерации. Вы можете быстро генерировать, вводя только промпт. --- ### Доступ и администрирование #### ❓ Почему бот не отвечает мне? Бот работает в **закрытом режиме** — только пользователи, добавленные администратором, могут его использовать. Обратитесь к администратору, чтобы он добавил вас через админ-панель. #### ❓ Как добавить пользователя? 1. Узнайте Telegram User ID пользователя (через [@userinfobot](https://t.me/userinfobot)) 2. В админ-панели нажмите **«➕ Добавить пользователя»** 3. Введите User ID 4. Выберите тип доступа (без ограничений, по времени, по количеству генераций) #### ❓ Как заблокировать пользователя? В админ-панели: **Список пользователей** → выберите пользователя → **🚫 Заблокировать**. #### ❓ Можно ли дать доступ всем? В текущей версии бот работает только в закрытом режиме. Если вы хотите открыть доступ для всех, необходимо изменить код мидлвари `AccessCheckMiddleware`. --- ### Хранение изображений #### ❓ Что происходит с изображениями по истечении срока? Изображения **автоматически удаляются** с диска фоновой задачей. Записи в базе данных также очищаются. #### ❓ Можно ли увеличить время хранения? Да! В настройках хранения выберите нужное время или введите своё значение (до `MAX_IMAGE_TTL_HOURS`). #### ❓ Где хранятся изображения? В папке `images/` проекта. При использовании Docker эта папка примонтирована как volume: `./images:/app/images`. #### ❓ Как скачать изображение? Просто нажмите на изображение в Telegram и сохраните его. Все изображения отправляются как файлы. --- ### Технические вопросы #### ❓ Можно ли запустить несколько экземпляров бота? Теоретически да, но они будут использовать одну базу данных и одну папку изображений, что может привести к конфликтам. Рекомендуется запускать **один экземпляр**. #### ❓ Как обновить бот? ```bash docker compose down # Скопируйте новые файлы docker compose up -d --build ``` #### ❓ Как сделать резервную копию? ```bash # База данных cp data/bot.db backup_$(date +%Y%m%d).db # Изображения tar -czf images_backup_$(date +%Y%m%d).tar.gz images/ ``` #### ❓ Как перенести бота на другой сервер? 1. Скопируйте все файлы проекта 2. Скопируйте `data/bot.db` (база данных) 3. Скопируйте `images/` (если нужны старые изображения) 4. Настройте `.env` на новом сервере 5. Запустите бот #### ❓ Как ограничить доступ к SD API? Используйте firewall, чтобы разрешить подключения только с IP сервера бота: ```bash sudo ufw allow from to any port 7860 ``` --- ## Структура проекта ``` tg-sd/ ├── main.py # Точка входа, запуск бота ├── config.py # Настройки и конфигурация ├── requirements.txt # Зависимости Python ├── Dockerfile # Образ Docker ├── docker-compose.yml # Docker Compose конфигурация ├── .env # Переменные окружения (не в Git!) ├── .env.example # Пример переменных окружения ├── .gitignore # Игнорирование файлов Git │ ├── bot/ # Обработчики команд бота │ ├── __init__.py │ ├── handlers_start.py # /start, главное меню │ ├── handlers_generation.py # Генерация изображений │ ├── handlers_profiles.py # Управление профилями │ └── handlers_settings.py # Настройки хранения │ ├── sd/ # Модуль Stable Diffusion │ ├── __init__.py │ └── sd_client.py # Клиент для SD API │ ├── database/ # Модуль базы данных │ ├── __init__.py │ └── database.py # SQLite операции │ ├── utils/ # Утилиты │ ├── __init__.py │ └── image_manager.py # Управление изображениями │ ├── images/ # Сгенерированные изображения (создаётся автоматически) └── data/ # База данных (создаётся автоматически) ``` --- ## Устранение неполадок ### Бот не запускается **Проблема:** `BOT_TOKEN не установлен` **Решение:** Убедитесь, что в файле `.env` указан корректный токен: ```env BOT_TOKEN=ваш_реальный_токен_от_BotFather ``` ### Ошибка подключения к SD API **Проблема:** `SD API недоступно` **Возможные причины и решения:** 1. **SD WebUI не запущен** - Запустите WebUI с флагами `--api --listen` 2. **Неправильный адрес** - Проверьте `SD_API_URL` в `.env` - Убедитесь, что IP-адрес корректный 3. **Firewall блокирует порт** ```bash # Проверьте доступность curl http://192.168.1.120:7860/sdapi/v1/options # Откройте порт на сервере SD sudo ufw allow 7860/tcp ``` 4. **WebUI слушает только localhost** - Убедитесь, что используется флаг `--listen` ### Таймаут генерации **Проблема:** Генерация занимает более 10 минут **Решения:** 1. Уменьшите количество шагов в профиле 2. Уменьшите размер изображения 3. Используйте более быструю модель 4. Увеличьте таймаут в `sd_client.py` (параметр `timeout`) ### Изображения не сохраняются **Проблема:** Ошибка сохранения файлов **Решение:** Проверьте права доступа к директории: ```bash # Для Docker docker compose exec tg-sd-bot ls -la /app/ # Для прямого запуска chmod 755 images/ chmod 755 data/ ``` ### Проблемы с базой данных **Проблема:** Ошибки записи в БД **Решение:** Убедитесь, что директория `data/` существует и доступна для записи: ```bash mkdir -p data chmod 755 data ``` ### Логи бота **Docker:** ```bash docker compose logs -f tg-sd-bot ``` **Прямой запуск:** Логи выводятся в консоль. Для записи в файл: ```bash python main.py 2>&1 | tee bot.log ``` --- ## Безопасность 1. **Никогда не коммитьте `.env` файл в Git** — он содержит токен бота 2. **Используйте firewall** — ограничьте доступ к порту SD API только для сервера бота 3. **Регулярно обновляйте зависимости** — проверяйте обновления пакетов 4. **Ограничьте доступ к боту** — при необходимости добавьте проверку `user_id` в обработчиках --- ## Обновление бота ```bash # Остановка docker compose down # Копирование новых файлов # Пересборка и запуск docker compose up -d --build ``` --- ## Резервное копирование Для резервного копирования сохраните: ```bash # База данных (профили и настройки) cp data/bot.db backup_$(date +%Y%m%d).db # Изображения (если нужно) tar -czf images_backup_$(date +%Y%m%d).tar.gz images/ ``` --- ## Лицензия Этот проект предоставляется "как есть" без каких-либо гарантий. --- ## Поддержка При возникновении проблем: 1. Проверьте логи бота 2. Убедитесь, что SD API доступен 3. Проверьте корректность `.env` файла 4. Обратитесь к разделу [Устранение неполадок](#устранение-неполадок)