ReActor, Roop и InsightFace: три уровня одного стека замены лиц
Короткий ответ для тех, кто пришёл выбирать инструмент. InsightFace это не конкурент Roop и ReActor, а их фундамент: библиотека для детекции и распознавания лиц. Roop был первым массовым расширением face swap для Stable Diffusion, но с октября 2023 года практически не развивается. ReActor заменил его и остаётся основным выбором: работает в Automatic1111, SD.Next, Cagliostro Colab UI и ComfyUI, не требует мощной видеокарты, поддерживает upscaling и сохранение моделей лиц в safetensors. Если стоит вопрос «что ставить сегодня», ответ почти всегда ReActor.
Дальше идёт детальный разбор: что такое каждый компонент, как устроен pipeline замены лица, какую модель InsightFace выбрать под железо и в каких сценариях Roop, ReActor или standalone-библиотека лучше друг друга.
Что такое InsightFace, Roop и ReActor: три уровня одного стека
Главная путаница в этой теме звучит так: «что лучше, InsightFace или ReActor». Вопрос некорректный по определению. InsightFace это open-source библиотека для анализа 2D и 3D изображений лиц, реализованная на PyTorch и MXNet (с версии 0.2.0 счётом идёт onnxruntime). Она умеет находить лицо на фото, выравнивать его, считать эмбеддинг и распознавать. Сама замена лиц библиотекой не выполняется.
Roop и ReActor пользуются InsightFace как зависимостью. Внутри обоих расширений в качестве «ядра» замены работает одна и та же модель: inswapper_128.onnx. То есть на уровне нейросети, которая собственно меняет лицо, между Roop и ReActor разницы нет. Разница в обёртке: какие функции добавлены сверху, как устанавливается, в каких UI запускается, как обрабатываются артефакты.
Иерархия выглядит так.
- InsightFace: библиотека анализа лиц (детекция, выравнивание, распознавание).
- inswapper_128.onnx: модель one-shot face swap, использующая эмбеддинги от InsightFace.
- Roop, ReActor и ComfyUI-ReActor: расширения, склеивающие первые два слоя в готовый workflow.
Немного истории, чтобы понимать, почему ReActor вообще появился. Сам термин «Deepfakes» возник в конце 2017 года, когда пользователь Reddit с таким ником начал применять нейросетевую замену лиц на видео. К моменту появления Stable Diffusion технология уже была зрелой, и Roop стал одним из первых расширений, обернувших её в графический UI. Через пару лет код Roop стал отставать: фиксированная зависимость от старой версии InsightFace, отсутствие новых функций, медленная реакция на проблемы. В октябре 2023 года ReActor занял его место как основной face swapper для SD.
Как работает pipeline замены лица: от детекции до блендинга
Понимание внутреннего pipeline сразу объясняет, почему результат иногда выходит размытым или с артефактами. Замена лица в ReActor и Roop проходит по одной и той же цепочке.
- Детектор SCRFD из InsightFace находит лицо на исходном изображении и возвращает bounding box и landmarks.
- Алгоритм выравнивания поворачивает и масштабирует найденную область так, чтобы глаза и нос оказались в каноническом положении.
- Распознаватель InsightFace считает эмбеддинг (вектор признаков) с референсного фото лица, которое нужно вставить.
- Модель inswapper_128 принимает выровненное целевое лицо и эмбеддинг донора и выдаёт новое лицо в разрешении 128x128.
- Опциональный upscaling (GFPGAN, CodeFormer) повышает детализацию до исходного размера.
- Блендинг возвращает обработанный участок обратно в кадр с учётом цветовой коррекции и границ.
Ключевой архитектурный момент: inswapper_128 действительно работает на разрешении 128x128 пикселей. Это не баг и не недосмотр, а сознательное решение в пользу скорости one-shot inference. Модели достаточно одного референсного фото без дообучения, и вся замена выполняется за миллисекунды на GPU. Расплата за компактность: потеря деталей, которую затем компенсирует upscaling. Существует и fp16-вариант модели, использующий 16-битную точность вместо стандартной 32-битной: он снижает требования к памяти и ускоряет инференс ценой минимальной потери качества.
Скорость на железе различается радикально. По данным русскоязычного разбора InsightFace на Habr, GPU-инференс библиотеки может быть до 100 раз быстрее, чем CPU. Это объясняет, почему ReActor позиционируется как рабочий и без видеокарты, но на серьёзных батчах фотографий разница в часах. Переход на onnxruntime начиная с InsightFace 0.2.0 убрал зависимость от MXNet и снял часть проблем с установкой на Windows.
Таблица моделей InsightFace: какую выбрать для face swap
InsightFace раздаёт несколько готовых паков моделей. Они отличаются размером, детектором и распознавателем, и от выбора напрямую зависит и качество замены, и нагрузка на железо. На практике большинство пользователей трогают только два-три из них.
| Модель | Размер | Детектор | Распознаватель | Когда брать |
|---|---|---|---|---|
| antelopev2 | 407 МБ | SCRFD-10GF | ResNet100@Glint360k | Максимальное сходство, есть GPU |
| buffalo_l | 326 МБ | SCRFD-10GF | ResNet50@WebFace600k | Баланс качества и размера, дефолт |
| buffalo_m | 313 МБ | SCRFD-2.5GF | стандартный | Средняя сцена, компромисс |
| buffalo_s | 159 МБ | SCRFD-500MF | стандартный | Когда место на диске важно |
| buffalo_sc | 16 МБ | облегчённый | без атрибутов | Слабое железо, только CPU |
Практическая рекомендация простая. Если есть видеокарта и нужен максимум сходства, ставьте antelopev2: ResNet100, обученный на Glint360k, даёт самое плотное embedding-пространство. Если задача массовая, дефолтный buffalo_l остаётся золотой серединой. На совсем слабых машинах берите buffalo_sc: 16 МБ против 407, и он реально запускается на CPU без жалоб.
Нюанс, который ловится не сразу:
buffalo_scне включает атрибуты лица (возраст, пол). Функция «определять пол и возраст персонажей» в ReActor с этой моделью просто не работает. Если эта возможность нужна, минимумbuffalo_l.
Roop vs ReActor: сравнение по ключевым параметрам
Дальше идёт лобовое сравнение двух расширений. Каждая ось это реальное решение, которое пользователь принимает при выборе.
| Параметр | Roop | ReActor |
|---|---|---|
| Активность разработки | Практически заморожена | Активная, регулярные релизы |
| Совместимость с UI | В основном Automatic1111 | A1111, SD.Next, Cagliostro Colab UI, ComfyUI |
| Определение пола/возраста | Нет | Есть |
| Встроенный upscaling | Нет, нужен ручной workflow | Есть (GFPGAN, CodeFormer) |
| Сохранение моделей лиц | Нет | safetensors в models/reactor/faces |
| Требования к железу | GPU фактически обязателен | Работает на CPU, минимум 4 ГБ VRAM |
| Установка InsightFace | Жёстко insightface==0.7.3 | Современные версии, гибче |
| Поведение модели inswapper | Ручная докладка inswapper_128.onnx | Ставится вместе с расширением |
Самый болезненный пункт у Roop это pip install insightface==0.7.3. Версия зафиксирована намертво, и любой соседний проект, ожидающий другую, ломает окружение. ReActor этого требования не предъявляет и поэтому уживается с прочими расширениями куда мирнее.
Отдельный сюжет: конфликт при одновременной установке Roop и ReActor. Симптом: одно из расширений отказывается видеть свои модели или ругается на занятый путь. Причина не программная, а файловая: оба расширения пишут в каталоги с пересекающимися именами (models/insightface, models/roop). Решение задокументировано в гайдах NextDiffusion: деактивировать расширение Roop в WebUI и переименовать папку roop в insightface. После этого ReActor подхватывает модели и больше не спорит за путь.
Про альтернативы самой модели. В сообществе встречается ReSwapper, позиционируемый как замена Inswapper. На бумаге выглядит интересно, на практике сходство с оригиналом у inswapper_128 остаётся выше. Менять ядро ради эксперимента имеет смысл, но как production-решение Inswapper пока никто не вытеснил.
ComfyUI-ReActor: расширенные возможности и новые модели
ReActor для ComfyUI это уже не порт того же расширения, а отдельный продукт со своим темпом релизов. В версии 0.6.2 туда добавили поддержку HyperSwap моделей от FaceFusion Labs: hyperswap_1a_256.onnx, hyperswap_1b_256.onnx, hyperswap_1c_256.onnx. Главное отличие от классического inswapper в разрешении: 256 пикселей вместо 128. Это даёт заметно больше деталей на лице и снижает зависимость от внешнего апскейлера. Цена: модели тяжелее и требовательнее по VRAM.
Вторая особенность ComfyUI-версии: встроенный NSFW-детектор. Он блокирует обработку контента 18+ на уровне пайплайна, и обходить его авторы не предлагают. Для классического sd-webui-reactor фильтра нет, там ответственность переложена на пользователя в явном виде.
Косвенный, но информативный показатель: статистика репозитория. У ComfyUI-ReActor на GitHub 1.2k звёзд и 210 форков. Цифра не рекордная, но в категории face swap расширений говорит о живом сообществе и регулярных PR-ах.
Какой инструмент выбрать: матрица решений
Свести всё к одной таблице проще, чем кажется. Сценарий слева, выбор справа.
| Сценарий | Выбор |
|---|---|
| Новичок на Automatic1111 | ReActor: проще установка, активная поддержка |
| Продвинутый пользователь ComfyUI | ComfyUI-ReActor с HyperSwap 256 |
| Только CPU или 4 ГБ VRAM | ReActor + buffalo_sc или buffalo_l |
| Существующий рабочий workflow на Roop | Оставить Roop, не трогать |
| Своя обработка на Python без SD | InsightFace standalone через onnxruntime |
| Максимальное сходство, есть GPU | ReActor + antelopev2 |
Логика простая. Roop сегодня имеет смысл только если у вас уже есть production-цепочка, переписать которую дороже, чем терпеть устаревший код. Во всех остальных случаях входной точкой служит ReActor, в редакции для A1111 либо для ComfyUI. InsightFace напрямую без расширений нужен лишь разработчикам, которые строят свой собственный пайплайн face swap и пишут код вокруг библиотеки руками.
Этические и юридические ограничения
Технический выбор инструмента не отменяет правовой контекст. Создание дипфейков с лицами реальных людей без их согласия может привести к юридической ответственности. Это прямо отмечено в блоге InsightFace в разделе про privacy и identity fraud. Большинство сервисов и расширений в условиях использования прямо запрещают применять их к чужим лицам без разрешения владельца.
Сам ReActor формулирует это максимально прямо: «Расширение для быстрой и простой замены лиц на любых изображениях. Без фильтра цензуры, 18+, используйте под вашу собственную ответственность» (README sd-webui-reactor).
Практический вывод: технические возможности у ReActor и Roop шире, чем рамки, в которых эти расширения легально применять. Перед публикацией любых результатов face swap стоит держать в голове и согласие изображённого, и платформенные правила сервиса, куда уходит итоговое изображение.
короче кто мучается с конфликтом roop и reactor: вырубаете roop в webui и переименовываете папку roop в insightface, всё, оба видят свои модели. полгода назад случайно нашёл, до сих пор живёт
ну да, а после обновления reactor опять всё разъезжается. у меня так дважды было
а зачем вообще держать оба? reactor же делает всё что roop
@Scott legacy, переписывать дороже. у меня цепочка задеплоена на roop ещё с 2023, трогать страшно
roop мёртвый, забейте. сидел на нём пока insightface==0.7.3 не убил мне всё окружение
а кто-нибудь смотрел, reactor никуда не стучит при первом запуске? просто спрашиваю
нет, ничего он не шлёт, модели тянутся один раз и дальше всё локально. смотрел трафик
звучит мутно
@Mongraal модели лежат локально в models/insightface, оффлайн крутится нормально. сам без сети гоняю
а в чём разница roop и reactor если ядро одно inswapper_128? не понял этот кусок
@Bubu в обёртке всё. модель да одна, но reactor сам её ставит, апскейл встроен, в comfy пашет. roop голый
buffalo_sc на 16 мегабайт это просто спасение, у меня старый ноут без видяхи, завелось без танцев
правда определение возраста с ним не работает, ну мне и не надо
+
на cpu по скорости это конечно боль. батч на 312 фоток час с лишним молотил
час? у меня на gpu секунд 38 такой батч. cpu это для души
antelopev2 по сходству реально лучше, на сложных ракурсах разница видна
сходство antelopev2 даёт, но память жрёт будь здоров. на 4 гб vram отваливается на апскейле
кто щупал hyperswap 256 в комфи? оно того стоит или маркетинг
гонял 1b_256, деталей заметно больше, апскейлер почти не нужен. но vram кушает, на 8 гб впритык
опять comfy. почему всё вкусное уезжает в comfy, а a1111 застрял на 128
hyperswap это от тех же что reactor пилят или отдельные?
@Bubu модели от facefusion labs, reactor их подхватил в 0.6.2
хм, не знал
nsfw детектор в comfy версии отдельная радость, режет на уровне пайплайна и обходить не предлагают
@Saiyan в sd-webui-reactor фильтра нет совсем, там сразу написано под вашу ответственность
вот этот момент с ответственностью все радостно скипают, пока письмо не прилетит
год на roop сидел, перешёл на reactor и не жалею. только доку бы человеческую
reswapper кто-нибудь трогал? пишут замена inswapper
трогал. на бумаге интересно, по факту сходство у inswapper выше. как эксперимент ок, в прод не понёс
ну такое
fp16 вариант кстати память неплохо экономит, потеря качества почти не видна. на слабой карте советую
почти не видна пока на крупный план не глянешь. edge case с очками вообще жесть, артефакты по краям
а fp16 модель отдельно качать или как? где брать
100x быстрее на gpu это с хабра цифра, у меня раза в 30-40 выходило. но всё равно небо и земля
у нас на проде был случай с блендингом, границы лица светились как нимб. долго рассказывать, не сейчас
разрешение 128 это и есть корень всех бед. чего там апскейлом ни крути, исходных деталей нет
@Saiyan ну справедливости ради one-shot за миллисекунды это плата за скорость, не баг
слушайте, а scrfd это детектор или распознаватель? путаюсь
scrfd детектор, лицо находит. эмбеддинг уже resnet считает, это разные части insightface
тот что выше про 128 писал, в точку. апскейл это косметика
переименование roop в insightface у меня кстати не сработало. reactor всё равно ругался на путь
@DreamyU roop точно деактивировал в webui перед этим? без этого никак
деактивировал. может версия webui другая, хз
вообще дико что весь стек висит на одной inswapper_128 столько лет и никто не сдвинул
по сути монополия, да
buffalo_l как дефолт лучший баланс, resnet100 под капотом, потому и тянет. antelopev2 только когда сходство критично