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 проходит по одной и той же цепочке.

  1. Детектор SCRFD из InsightFace находит лицо на исходном изображении и возвращает bounding box и landmarks.
  2. Алгоритм выравнивания поворачивает и масштабирует найденную область так, чтобы глаза и нос оказались в каноническом положении.
  3. Распознаватель InsightFace считает эмбеддинг (вектор признаков) с референсного фото лица, которое нужно вставить.
  4. Модель inswapper_128 принимает выровненное целевое лицо и эмбеддинг донора и выдаёт новое лицо в разрешении 128x128.
  5. Опциональный upscaling (GFPGAN, CodeFormer) повышает детализацию до исходного размера.
  6. Блендинг возвращает обработанный участок обратно в кадр с учётом цветовой коррекции и границ.
Horizontal infographic-style diagram showing a face swap pipeline as six labeled stages flowing left to right. The first panel shows a portrait photograph with a green bounding box around the face. The second panel shows the same face cropped and rotated to a canonical upright position with five red landmark dots. The third panel shows a small reference portrait next to a blue 512-dimensional vector illustration. The fourth panel shows a pixelated 128 by 128 face square with the label "inswapper_128" beneath it. The fifth panel shows the same face restored to higher resolution with the label "GFPGAN". The final panel shows the finished portrait with the new face composited back into the original photo. Setting: clean white background with thin grey arrows between panels and small monospace captions under each stage. Lighting: even soft studio light, neutral cool temperature, no harsh shadows. Style: technical editorial diagram. Mood: precise, instructional.

Ключевой архитектурный момент: 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 пока никто не вытеснил.

Close-up screenshot composition of two side-by-side Stable Diffusion WebUI panels. The left panel shows the Roop extension tab with greyed-out controls and a small warning icon next to the version field. The right panel shows the ReActor extension tab with active controls, a face restoration dropdown set to GFPGAN, an upscale slider at 2x, and a small file picker labeled "models/reactor/faces" containing two saved safetensors entries. Setting: dark theme Gradio interface on a desktop monitor, faint window chrome at the top. Lighting: soft cool monitor glow, no external light, subtle blue cast on surrounding bezel. Style: realistic UI screenshot. Mood: technical, comparison-driven.

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 стоит держать в голове и согласие изображённого, и платформенные правила сервиса, куда уходит итоговое изображение.