# Концепция ## Проблема GPU в облаке дорогой. Веса для генерации картинок — десятки гигабайт. Поднимать сервер и заново качать модели на каждый сеанс долго и бессмысленно. Держать GPU включённым «на всякий случай» ещё дороже. ## Решение 1. Арендовать **прерываемый** облачный сервер Selectel с GPU (~70% дешевле обычного, без SLA). 2. Хранить ОС, бинарники SwarmUI, модели, ComfyUI и результаты на **сетевых дисках**. Они переживают удаление и остановку VM. 3. Локальный CLI создаёт (или восстанавливает) сервер и отдельно, когда нужно, пробрасывает SwarmUI на `localhost:17801`. 4. GPU гасится командой `stop`, idle-killer на VM, или (опционально) local-watchdog при unclean exit. Диски остаются. Без watchdog ноут можно закрыть — compute не умирает. Пользователь открывает браузер на `http://127.0.0.1:17801`, переключает Cursor MCP на этот URL или бьёт в HTTP API SwarmUI. Локальный SwarmUI на `7801` не трогаем. ## Что входит в продукт - Одна GPU-сессия на проект gpu-rent (тег), не «по экземпляру CLI». - Интерактивный запуск и запуск с флагами. Preemptible по умолчанию (`--no-spot` если нужна гарантия). - Автовосстановление после прерывания хостером (`EXPIRED` → `unshelve`). - Idle-killer на VM и `stop` с любой машины, где есть `.env` — даже без туннеля. - Первый seed моделей с Civitai по манифесту (если есть API-токен); иначе дефолт SwarmUI. - Push из `./Models`, `./Wildcards`, `./CustomWorkflows`, если папки не пустые; optional pull `./Output`. - Первый clone git-реп расширений SwarmUI и ComfyUI nodes из `extensions.yaml`. - Autocomplete: word-list в `Data/Autocompletions` до старта UI, на каждом `up` проверка новой версии. - `doctor` до create; фоллбек flavor; интерактивный выбор flavor/диска; `hold`; toast Idle; `open` на 17801. - Opt-in LLM (Ollama) через `setup` / флаги / `LLM_RUNTIME`; расширение swarm-assistent поверх Swarm+Ollama; `capture` ссылок с VM. - Debug sidecar на `127.0.0.1:17821` (агент / Assistent diagnose) на `up` / `tunnel` / `gpu-rent debug`. - Локальный scrape Civitai (метаданные Krea2, без картинок) → FTS Assistent на `up` ([datasets/README](../datasets/README.md)). - Опциональный local-watchdog: мёртвый туннель без `stop` → через grace удалить compute. - `status`: диск, окно preempt 24 ч, killer / LLM. - Snapshot boot после первого удачного bootstrap. ## Что не входит (пока) - Несколько одновременных GPU из этого CLI. - Мультипользовательский доступ и публичный URL SwarmUI. - Зеркало локального SwarmUI целиком, S3 как источник правды, команда `generate` в CLI. - Автопатч `mcp.json` в Cursor (только печать сниппета). - Облачный биллинг-дашборд Selectel: оценка ₽/час перед create (цифры с spike / панели, не отдельный биллинг API). ## Модель стоимости (как есть у Selectel) | Ресурс | Пока VM работает | После прерывания / удаления compute | | --- | --- | --- | | vCPU, RAM, GPU, локальные диски | тарифицируются | с следующего часа — нет | | Сетевые диски | тарифицируются | **тарифицируются всегда** | | Публичный IP / публичная подсеть | тарифицируются | **тарифицируются, пока не удалены** | Прерываемый сервер живёт **не больше 24 часов** с момента создания или restore и может быть остановлен в любой момент. Это не AWS-spot с «может повезти неделями»: суточный потолок — часть контракта. Сетевой диск тарифицируется всегда: даже 100 GB — постоянный месячный расход при нуле сессий. Перед первым запуском CLI должен сказать это вслух. Ориентир публичных цен (не договор): облачный сервер с 2×RTX 4090 у Selectel начинается примерно от 210 ₽/час за обычный тариф; preemptible в среднем на ~70% ниже. Точную цифру для выбранного flavor считать в калькуляторе/панели на этапе spike. ## Принципы - **Не оставлять GPU без хозяина.** Падение CLI и сон ноутбука не гасят compute сами — это делает idle-killer на VM и команда `stop`. State на диске + reconcile, если killer не сработал. - **Не ставить стек с нуля каждый раз.** Cloud-init «apt + dotnet + git clone SwarmUI» на каждый preempt съедает дешёвые часы. Первый bootstrap — на сетевой boot-диск, дальше `unshelve` или create from volume. - **Не форматировать диск дважды.** Маркер файловой системы, никогда `mkfs` «если blkid не ответил». - **SwarmUI не торчит в интернет.** На VM порт только на loopback, снаружи — SSH.