File size: 9,929 Bytes
3717b68 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | ---
license: apache-2.0
tags:
- comfyui
- runpod
- faceswap
---
# ComfyUI FaceSwap — готовый темплейт для RunPod
Поднимает на RunPod полностью настроенный ComfyUI с пайплайном замены лица:
1. **Flux.2 Klein 9b** — переносит голову с одного фото на другое, сохраняя свет, ракурс и пропорции
2. **Z-Image Turbo + FaceDetailer** — заново отрисовывает лицо в высоком разрешении, сюда подключается персональная LoRA
Оба этапа работают в связке и оба обязательны. Flux хорошо ставит голову по свету и ракурсу, но лицо у него выходит лишь похожим. Z-Image затем вырезает это лицо и рисует его заново — уже с обученной на конкретном человеке LoRA. Отсюда и настоящее сходство.
Ничего устанавливать руками не нужно. Один раз создаёшь темплейт — дальше запуск в два клика.
**Железо:** рассчитано на L40S (48 ГБ VRAM). Минимум — 24 ГБ VRAM и 32 ГБ RAM.
---
## Что нужно иметь
- аккаунт на [RunPod](https://runpod.io) с пополненным балансом
- аккаунт на [HuggingFace](https://huggingface.co) — бесплатный
---
## Шаг 1. Токен HuggingFace
Нужен, чтобы скачать модель Flux. Свой, личный — чужие токены не используй.
1. Открой https://huggingface.co/settings/tokens
2. **Create new token**
3. Тип — **Read** (не Write)
4. Название любое, например `runpod`
5. **Create token** → скопируй и сохрани в блокнот
HuggingFace показывает токен только один раз. Потеряешь — сделаешь новый, ничего страшного.
---
## Шаг 2. Принять лицензию Flux
1. Открой https://huggingface.co/black-forest-labs/FLUX.2-klein-9b-fp8
2. Убедись, что залогинен
3. Нажми **Agree** на серой плашке
Выбирать там нечего, полей нет — просто кнопка.
> ⚠️ У FLUX.2 Klein **некоммерческая лицензия**. Использование результатов в коммерческих целях она не разрешает. Это твоя зона ответственности.
>
> Обойти этот шаг и всё равно пользоваться воркфлоу не получится: Flux здесь делает первый этап, без него замена лица не работает. Переключатель `WANT_FLUX=0` из таблицы настроек существует для тех, кто собирает что-то своё только на Z-Image — для этого воркфлоу его выключать нельзя.
---
## Шаг 3. Создать темплейт в RunPod
Консоль RunPod → левое меню **Templates** → **New Template**.
| Поле | Значение |
|---|---|
| Template Name | `ComfyUI-FaceSwap` |
| Template Type | `Pod` |
| Container Image | `runpod/pytorch:1.3.1-cu1300-torch291-ubuntu2404` |
| Container Disk | `20` GB |
| Volume Disk | `80` GB |
| Volume Mount Path | `/workspace` |
| Expose HTTP Ports | `8188,8888` |
| Expose TCP Ports | `22` |
**Container Start Command** (в некоторых версиях поле называется Docker Command):
```
bash -c "curl -sL https://huggingface.co/cocount21/comfy-faceswap-setup/resolve/main/provision.sh -o /provision.sh && bash /provision.sh 2>&1 | tee /workspace/provision.log"
```
**Environment Variables** — добавь одну переменную:
| Key | Value |
|---|---|
| `HF_TOKEN` | **оставь пустым** |
Пустым — потому что заполнять её ты будешь при запуске пода, своим токеном. Так она видна в форме деплоя и её не забудешь.
Нажми **Save Template**.
---
## Шаг 4. Запустить
1. **Pods** → **Deploy**
2. Выбери **L40S**
3. **Change Template** → свой `ComfyUI-FaceSwap`
4. В блоке Environment Variables впиши **свой** токен в `HF_TOKEN`
5. **Deploy On-Demand**
---
## Шаг 5. Подождать
Первый запуск — 10–20 минут, качается около 40 ГБ моделей. ComfyUI стартует последним, раньше времени его дёргать бесполезно.
Смотреть прогресс: карточка пода → **Logs** → **Container Logs**.
В конце скрипт печатает отчёт:
```
=========================== SUMMARY ===========================
OK Flux-2-Klein-9b-fp8.safetensors
OK qwen_3_8b_fp8mixed.safetensors
...
=================================================================
time: 812 s
ALL GOOD - ComfyUI is starting on port 8188
```
Зелёное `ALL GOOD` — всё готово. Красные строки — смотри раздел «Если что-то пошло не так».
---
## Шаг 6. Работать
1. Карточка пода → **Connect** → **HTTP Service → :8188**
2. Воркфлоу уже загружен — в левой панели ComfyUI, раздел Workflows
3. Загрузи две картинки:
- группа **Your-Image** — фото-основа: тело, поза, фон
- группа **Reference-Image** — лицо, которое переносим
4. **Run**
Результат — в ноде **SaveImage** с жёлтой рамкой. Вторая SaveImage показывает промежуточный результат Flux, до починки лица.
### Своя LoRA
Залей свою LoRA в любой публичный репозиторий на HuggingFace и при деплое добавь переменную:
```
EXTRA_LORAS = твой_ник/твой_репозиторий:имя_файла.safetensors
```
Несколько — через запятую. Файлы лягут в `models/loras/`, останется выбрать их в ноде.
---
## Настройки (Environment Variables)
| Переменная | По умолчанию | Что делает |
|---|---|---|
| `HF_TOKEN` | пусто | твой read-токен HuggingFace |
| `WANT_FLUX` | `1` | этап Flux.2 Klein, ~19 ГБ, gated, non-commercial. **Для этого воркфлоу выключать нельзя** |
| `WANT_ZIMAGE` | `1` | этап Z-Image Turbo, ~21 ГБ, Apache 2.0. **Для этого воркфлоу выключать нельзя** |
| `WANT_DETECTORS` | `1` | детекторы лица для FaceDetailer, ~0.4 ГБ. **Выключать нельзя** |
| `EXTRA_LORAS` | пусто | свои LoRA: `repo:file.safetensors`, через запятую |
| `GET_WORKFLOWS` | `1` | подтянуть воркфлоу автоматически |
| `START_JUPYTER` | `0` | поднять JupyterLab на порту 8888 |
| `SKIP_MODELS` | `0` | только ноды, без моделей — для быстрой проверки |
| `COMFY_PORT` | `8188` | порт ComfyUI |
| `COMFY_REF` | пусто | закрепить ComfyUI на конкретном коммите |
---
## Если что-то пошло не так
Скрипт проверяет доступ к Flux **до** скачивания и объясняет проблему прямо в логе.
| В логе | Причина | Решение |
|---|---|---|
| `HTTP 401` | токен неверный или пустой | сделать Read-токен, вписать в `HF_TOKEN` |
| `HTTP 403` | лицензия не принята | нажать Agree на странице модели |
| `BAD SIZE` | файл скачался битым | перезапустить под, скрипт перекачает сам |
| `TORCH CHANGED` | нода подменила torch | сообщи автору темплейта |
| `NODE MISSING` | не склонировалась нода | перезапустить под |
Полный лог лежит в поде: `/workspace/provision.log`
---
## Что внутри
**Ноды:** ComfyUI-Manager, Impact-Pack, Impact-Subpack, Easy-Use, rgthree-comfy, utils-nodes
**Модели:**
| Файл | Размер | Лицензия |
|---|---|---|
| Flux-2-Klein-9b-fp8 | 8.8 ГБ | FLUX Non-Commercial |
| qwen_3_8b_fp8mixed | 8.1 ГБ | — |
| flux2-vae | 0.3 ГБ | — |
| bfs_head_v1 (LoRA свапа) | 0.6 ГБ | не указана автором |
| z_image_turbo_bf16 | 11.5 ГБ | Apache 2.0 |
| qwen_3_4b | 7.5 ГБ | Apache 2.0 |
| ae (VAE) | 0.3 ГБ | Apache 2.0 |
| face_yolov8m + SAM | 0.4 ГБ | — |
Скрипт сверяет размер каждого скачанного файла с эталоном. Битый файл будет пойман сразу, а не через час непонятных ошибок.
---
## Безопасность
- Токен вписывай **свой**. Переменные окружения видны изнутри пода любому, у кого есть к нему доступ.
- Используй **Read**-токен, не Write. Read не даёт ничего испортить.
- Не вставляй токен в сам скрипт — только в переменную окружения.
|