Содержание
  1. Установка ReActor 0.7.x по официальному README
  2. Граф: два LoadImage → ReActorFaceSwap → SaveImage
  3. Индексы лиц: как ReActor нумерует найденные лица
  4. Учебный пример: крупное лицо слева, меньшее справа
  5. Карточка параметров и сверка с README
  6. Ошибки: не тот человек, шов, сбой модели
  7. Сохранение, проверка и права на использование
  8. Частые вопросы
Гайды

Как заменить лицо на изображении в ComfyUI

31 октября 2026 · 9 минут чтения

Заменить лицо на изображении в ComfyUI можно графом из четырёх узлов: два LoadImage подают портрет-источник и целевой кадр в ReActorFaceSwap, результат уходит в SaveImage. Дальше важна только правильная пара индексов: какое лицо берём и какое меняем. Ниже — установка по текущему README, точные имена полей и учебный разбор с двумя лицами в кадре.

Установка ReActor 0.7.x по официальному README

Для установки ReActor 0.7.x используйте официальный README проекта Gourieff. В README проекта на GitHub указана версия узла 0.7.2 beta2, а в разделе обновлений 0.7.0 отмечено ключевое изменение ядра: отдельный InsightFace больше не требуется, как и C++ Build Tools, а установка стала проще. Там же сказано, что результат свопа немного отличается от прежнего, а по косинусной близости эмбеддингов точность чуть выше, чем с InsightFace. Это и есть причина, по которой старые туториалы с обязательной отдельной установкой InsightFace не стоит переносить в текущий путь.

Порядок установки по README: открыть ComfyUI Manager, нажать «Install Custom Nodes», ввести в поиске ReActor и нажать «Install», после чего перезапустить сервер. Ручной вариант — перейти в ComfyUI\custom_nodes, открыть консоль и склонировать репозиторий, затем зайти в папку ComfyUI\custom_nodes\ComfyUI-ReActor и запустить install.bat. После этого скачиваются модели из раздела Models, запускается ComfyUI, и узлы находятся в меню ReActor или через поиск по слову ReActor.

Модели README раскладывает по разным папкам. buffalo_l скачивается при первом запуске в ComfyUI\models\insightface\models\buffalo_l, inswapper_128 — при установке в ComfyUI\models\insightface. Модели reswapper_128/256 кладутся в ComfyUI\models\reswapper, hyperswap_256 — в ComfyUI\models\hyperswap, модели восстановления лиц — в ComfyUI\models\facerestore_models. Для маскирования нужны Ultralytics-модель face_yolov8m.pt в ComfyUI\models\ultralytics\bbox и SAM-модели в ComfyUI\models\sams.

Если при запуске возникает ошибка вида AttributeError: 'NoneType' object has no attribute 'get', README связывает её с файлом модели inswapper_128.onnx и советует скачать его вручную и заменить существующий. Ошибка про неожиданный аргумент reference_image означает, что входы узла изменились с обновлением: узел удаляют из графа и добавляют заново. Отдельная рекомендация README — при любых ошибках сначала пересобрать узел ReActor в рабочем графе, поскольку старый экземпляр может работать некорректно после обновления.

Граф: два LoadImage → ReActorFaceSwap → SaveImage

Базовый граф содержит четыре узла: два LoadImage, ReActorFaceSwap и SaveImage. Первый LoadImage отдаёт целевое изображение, второй LoadImage — портрет-источник, ReActorFaceSwap меняет лицо, SaveImage сохраняет результат на диск. README описывает входы главного узла так: input_image — изображение, которое обрабатывается, то есть целевая картинка; source_image — изображение с лицом или лицами, которые подставляются в input_image. Оба входа принимают узлы «Load Image» или любые другие, отдающие изображения на выходе.

Выходы главного узла: IMAGE — результирующее изображение, FACE_MODEL — модель лица источника, построенная в процессе свопа, ORIGINAL_IMAGE — обход исходного input_image. Для сохранения результата IMAGE соединяется с SaveImage. В README отмечено, что с версии 0.4.0 вход input_image идёт первым: это даёт корректный обход и логичный порядок, где главный вход стоит впереди.

Разделение сторон удобно держать в голове так: input_image — то, что меняем, source_image — то, чьё лицо подставляем. Если перепутать эти два входа местами, своп сработает, но результат окажется обратным ожидаемому: лицо с целевой картинки уйдёт на портрет. Поэтому перед запуском очереди полезно мысленно проговорить, какой из двух LoadImage выбран целевым, а какой — источником.

Дополнительные слоты главного узла подключаются по необходимости: face_model принимает выход узлов «Load Face Model» или «Build Blended Face Model», options — узел ReActorOptions, face_boost — узел ReActorFaceBoost. Для базовой замены лица они не обязательны: двух изображений и главного узла достаточно.

Индексы лиц: как ReActor нумерует найденные лица

README описывает сортировку прямо: по умолчанию ReActor обнаруживает лица в изображениях от «большого» к «малому». Индекс первого обнаруженного лица — 0. Изменить порядок можно, добавив узел ReActorFaceSwapOpt вместе с ReActorOptions, где доступна настройка порядка лиц в индексе, включая раздельный порядок для входа и источника. По умолчанию действует порядок «от большого к малому».

Индексы задаются отдельно для источника и для целевого изображения. Пример из README: 0,1,2 для Source и 1,0,2 для Input означают, что второе лицо целевого изображения (индекс 1) будет заменено первым лицом источника (индекс 0), и так далее. Это и есть механика сопоставления сторон: позиция в списке индексов источника связывается с позицией в списке индексов цели.

Поля в интерфейсе называются input_faces_index и source_faces_index. В интерфейсе используйте полные имена полей. Сокращения input_index и source_index встречаются в обсуждениях и могут затруднить поиск настройки. При работе с несколькими лицами стоит сверять подписи слотов по текущему README, поскольку расширение обновляется и набор входов меняется.

Ключевая проверка перед запуском: посмотреть на целевое изображение и определить, какое лицо в нём крупнее. При стандартной сортировке крупнейшее лицо получает индекс 0, следующее по размеру — индекс 1. Если в кадре два человека, индекс 0 указывает на большее лицо, индекс 1 — на меньшее. Положение в кадре (слева или справа) на индексацию не влияет: сортировка идёт по размеру обнаруженного лица.

Учебный пример: крупное лицо слева, меньшее справа

Возьмём условный кадр с двумя хорошо видимыми лицами: крупное слева, меньшее справа. Источник — один собственный портрет. Задача — заменить только меньшее лицо, сохранив крупное нетронутым. Пример учебный: редакция такой кадр не прогоняла. Ниже описаны ожидаемые признаки для самостоятельной проверки.

При стандартной сортировке «от большого к малому» крупное лицо слева получает индекс 0, меньшее справа — индекс 1. Чтобы заменить меньшее лицо, в поле input_faces_index ставим 1, а в source_faces_index — 0, поскольку портрет-источник один и его лицо имеет индекс 0. Такая карточка: input_faces_index=1, source_faces_index=0.

Порядок действий:

  1. Загрузить целевой кадр в первый LoadImage, портрет-источник — во второй.
  2. Соединить целевой выход с input_image, портретный — с source_image.
  3. В input_faces_index указать 1, в source_faces_index — 0.
  4. Соединить выход IMAGE с SaveImage и запустить очередь.
  5. Открыть сохранённый файл и сравнить оба лица с исходником.

Ожидаемый признак корректной работы: меньшее лицо справа изменилось, крупное слева осталось исходным. Если изменилось крупное, а меньшее нет — индексы перепутаны местами либо порядок сортировки отличается от ожидаемого. Откройте сохранённую картинку: так вы проверите файл, который будете использовать дальше.

Карточка параметров и сверка с README

Для описанного условия карточка выглядит так:

Параметр Значение Что означает
input_image целевой кадр изображение, которое меняем
source_image портрет-источник чьё лицо подставляем
input_faces_index 1 меньшее лицо справа при сортировке large-to-small
source_faces_index 0 единственное лицо источника
выход IMAGE → SaveImage сохранение результата

Имена полей сверяются по текущему README проекта. Там же указан режим сортировки по умолчанию — от большого лица к малому, и возможность изменить порядок через ReActorFaceSwapOpt с ReActorOptions. Если в вашем графе порядок сортировки изменён, индекс меньшего лица может оказаться другим: в этом случае сначала сверьте фактический порядок найденных лиц.

Отдельно стоит помнить про восстановление лиц. С версии 0.3.0 у главного узла есть встроенное восстановление: скачиваются модели из раздела установки, выбирается одна из них, и она улучшает детализацию лица во время свопа. Узел ReActorRestoreFaceAdvanced с фильтром восстановления позволяет применить обработку только к нужным лицам. Восстановление меняет внешний вид результата, поэтому при отладке выбора лица его лучше не трогать: сначала убедиться, что заменено правильное лицо, потом подключать улучшение.

Ошибки: не тот человек, шов, сбой модели

Если изменился не тот человек, порядок диагностики такой: сначала проверить, какой LoadImage подан на input_image, а какой на source_image; затем — значения input_faces_index и source_faces_index; затем — режим сортировки лиц. Переключение параметров восстановления вместо проверки выбора цели задачу не решает: оно меняет вид лица, но не то, какое лицо выбрано.

Если заметен контур вклейки, сопоставьте освещение и ракурс исходников. Для учебного примера выберите чёткие изображения с хорошо видимыми лицами. Для маски лица через ReActorMaskHelper README указывает Ultralytics-модель face_yolov8m.pt и SAM-модели; у sam_vit_l_0b3195.pth отмечена улучшенная обработка перекрытий.

Ошибки моделей диагностируются по текущему README. Ошибка AttributeError: 'NoneType' object has no attribute 'get' связана с файлом inswapper_128.onnx — README предлагает скачать его вручную и заменить. Ошибка про аргумент reference_image означает смену входов узла: узел удаляется и добавляется заново. Общая рекомендация README — при любых сбоях сначала пересобрать узел ReActor в графе.

Сохранение, проверка и права на использование

Сохранение результата и проверка исходника — техническая часть. Результат записывается через SaveImage из выхода IMAGE. Проверка ведётся по сохранённому файлу: сравниваются оба лица с исходным кадром, чтобы убедиться, что заменено нужное лицо и второе осталось нетронутым. ComfyUI Templates рекомендует проверить область лица до апскейла и экспорта.

Права на использование — отдельный вопрос. README прямо указывает, что программное обеспечение использует предобученные модели buffalo_l и inswapper_128.onnx от InsightFace, а их предобученные модели доступны только для некоммерческих исследовательских целей. Для коммерческого применения README предлагает обучить собственные модели или найти модели с коммерческой лицензией. Пользователям рекомендуется получать согласие человека, если используется лицо реального человека, и явно указывать, что контент является дипфейком, при публикации.

Частые вопросы

Как заменить лицо на изображении в ComfyUI с двумя людьми в кадре?
Соберите граф из двух LoadImage, ReActorFaceSwap и SaveImage. Целевой кадр подайте на input_image, портрет-источник — на source_image. Задайте input_faces_index для нужного лица и source_faces_index для лица источника, затем проверьте результат по сохранённому файлу.

Что означают индексы лиц в ReActor?
По умолчанию ReActor обнаруживает лица от большого к малому, и индекс первого обнаруженного лица — 0. Поля input_faces_index и source_faces_index задают, какое лицо цели сопоставляется с каким лицом источника. Порядок можно изменить через ReActorFaceSwapOpt с ReActorOptions.

Почему заменилось не то лицо?
Проверьте, какой LoadImage подан на input_image, а какой на source_image, затем значения индексов и режим сортировки. При стандартном порядке крупнейшее лицо получает индекс 0. Положение в кадре на индексацию не влияет: сортировка идёт по размеру обнаруженного лица.

Нужен ли отдельный InsightFace для ReActor?
В README версии 0.7.0 отмечено, что отдельный InsightFace больше не требуется, как и C++ Build Tools. Модель buffalo_l скачивается при первом запуске в ComfyUI\models\insightface\models\buffalo_l, а inswapper_128 — в ComfyUI\models\insightface. Старые туториалы с обязательной отдельной установкой InsightFace относятся к прежним версиям.

Что такое HyperSwap в ReActor?
HyperSwap — семейство swap-моделей внутри ReActor, поддержка добавлена в версии 0.6.2. Файлы hyperswap_1a_256.onnx, hyperswap_1b_256.onnx и hyperswap_1c_256.onnx кладутся в ComfyUI\models\hyperswap. Модель выбирается внутри расширения.

Читайте также

3 материала