Видео API · обновлено 20 октября 2026 г. · 17 минут

Как заменить человека или объект в видео через API: PixVerse Swap и Kling O1

Есть ролик с человеком, а нужен тот же сюжет с другим персонажем? Для такой задачи подготовьте исходное видео и фотографию замены. Ниже разберём весь путь: какую модель выбрать, куда положить файлы, что написать в JSON, как дождаться MP4 и где увидеть окончательное списание. Покажем и реальный тест Kling: человек в парке заменён женщиной в жёлтом платье.

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

Что получится: другое действующее лицо в существующем ролике

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

Такая обработка полезна для вариантов рекламного сюжета, примерки образа персонажа, замены реквизита и изменения окружения. Для первой попытки выберите один хорошо видимый объект. Несколько похожих людей, перекрытые руки и резкие монтажные склейки делают проверку сложнее: непонятно, какой именно элемент модель должна отслеживать.

Как это устроено
  1. 1. Исходное видео: Задаёт движение, время, работу камеры и окружение.
  2. 2. Фото замены: Показывает нового человека, предмет или фон.
  3. 3. Задание модели: Выбираем режим замены; для Kling добавляем понятную инструкцию.
  4. 4. Новый MP4: Проверяем целостность объекта, движение, фон, звук и списание.
Схема замены объекта: исходное видео плюс фото, обработка API, проверка результата и стоимости
Схема процесса. Это объяснение шагов, а не сравнительный тест качества моделей.

Какой режим нужен: замена объекта, оживление фото или перенос движения

Начните с того, откуда должен взяться фон. Если важна именно исходная видеосцена, ищите Swap, Replace или Video Edit. Если нужна анимация одной фотографии, выбирайте Image to Video. Если фотография задаёт сцену и героя, а отдельный ролик нужен как образец движений, подходит Motion Control. Названия похожи, но ожидаемый результат различается.

ЗадачаПодходящая операцияЧто проверить
Оставить парк и заменить идущего человекаPerson Swap / Animate Replace / Video EditЦелого ли человека заменили и сохранился ли парк
Заменить один предмет другимObject Swap или Video EditФорма, размер, контакт с руками и поверхностями
Оставить человека, изменить окружениеBackground Swap или Video EditКрая волос, тени и непрерывность фона
Оживить готовое фотоImage to VideoДвижение создаётся заново; исходного видеосюжета нет
Повторить танец на сцене с фотографииMotion ControlФон может прийти из фото, а не из видео с танцем

Сравнение моделей для замены персонажа: цены за короткий ролик

Условия ниже проверены 20 октября 2026 года. В колонке USD указана стоимость fal для исходника 5 секунд при 24 кадрах в секунду. Только строка Kling O1 Pro содержит наше фактическое списание за завершённую генерацию. Остальные строки — расчёт по опубликованным тарифам, без собственного сравнительного запуска.

Рублёвая цена Gate зависит от действующих условий маршрута. Сравнивайте её перед отправкой, а окончательную сумму берите из billing.cost_rub готового задания. Более дешёвая попытка выгодна, если она даёт подходящий результат: при нескольких неудачных повторах итоговая стоимость выбранного кадра увеличивается.

МодельЗамена и размер5 с при 24 fps, falЗвук и подтверждение
PixVerse SwapЧеловек / объект / фон; 540p или 720p$0,15 / $0,20Можно сохранить исходный звук; качество нами ещё не проверено
Wan 2.2 Animate ReplaceПерсонаж; 480p или 720p$0,30 / $0,60Сохранение звука в нашем тесте не проверено; счёт зависит от кадров
Kling O1 Edit StandardРедактирование существующего видео$0,63Параметр сохранения исходного звука; собственного теста Standard нет
Kling O3 Edit StandardРедактирование существующего видео$0,63Проверяйте текущую схему звука; собственного теста O3 нет
Kling O1 Edit ProВ нашем тесте: 720p на входе → 1080p на выходе$0,84Проверен немой результат; фактически списано 93,79 ₽ в Gate

Шаг 1. Подготовьте видео и фото, которые легко сопоставить

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

На фотографии замены должны быть различимы нужные признаки. Для полной замены персонажа полезно видеть одежду и фигуру; для предмета — силуэт и поверхности без сильных перекрытий. Желательно приблизить ракурс к исходному видео. Снимок лица крупным планом плохо объясняет, какие брюки, обувь и пропорции нужны в кадре с человеком во весь рост.

Положите оба файла в хранилище и получите прямые HTTPS-ссылки. Каждая ссылка должна открывать сам MP4 или изображение без входа в аккаунт. Адрес страницы облачного диска, локальный путь на вашем компьютере и временный адрес blob: из браузера для серверной загрузки не подходят. Срок жизни подписанной ссылки должен покрывать ожидание очереди и обработку.

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

Шаг 2. Возьмите ключ Gate и проверьте схему PixVerse

Создайте ключ в личном кабинете Celestria Gate и сохраните его на сервере своего приложения. В примерах CELESTRIA_API_KEY — переменная окружения с этим ключом. Ключ fal получать и передавать не нужно: соединением с провайдером управляет Gate. Для команд ниже понадобятся curl и jq; jq читает отдельные поля из JSON.

Первый запрос только получает описание полей и не создаёт видео. Во всех примерах используется единый контракт /v1/media: модель выбирается по ID из каталога, а operation задаёт задачу. Для PixVerse указываем pixverse/swap и video-to-video. Входные файлы и общие настройки лежат в input, специальные переключатели конкретной модели — в input.parameters.

curl --fail-with-body --get \
  'https://api.celestriagate.com/v1/media/models/schema' \
  -H "Authorization: Bearer $CELESTRIA_API_KEY" \
  --data-urlencode 'model=pixverse/swap' \
  --data-urlencode 'operation=video-to-video'

Ответ содержит input_schema, output_schema и openapi. Дополнительно посмотрите GET /v1/media/models: там находятся ID моделей и описания доступных операций. Схема и оценка проверяют готовность конкретного запроса. Карточка в каталоге ещё не гарантирует коммерческий запуск: могут требоваться актуальный тариф, схема или разрешение использования. Сначала исправьте указанную причину, затем создавайте задание.

Шаг 3. Составьте JSON для PixVerse Swap

Сохраните пример как swap.json. Замените оба адреса example.com своими прямыми ссылками: это места для ваших файлов. Видео — то, что меняем. Фото в image_urls — то, чем заменяем; даже для одного изображения используется массив. В parameters.mode значение person выбирает человека, object — предмет, background — окружение. Текстовый prompt для PixVerse Swap не требуется.

Параметр parameters.keyframe_id задаёт опорный кадр. PixVerse приводит вход к 24 fps: 1 означает первый кадр, 24 — примерно одну секунду от начала. Выберите момент, где цель хорошо видна. В текущей схеме допустимы 360p, 540p и 720p. keep_audio сохраняет звук исходника; параметры поставщика Gate подготавливает самостоятельно. Новую речь этот переключатель не создаёт.

{
  "model": "pixverse/swap",
  "input": {
    "video_url": "https://example.com/your-source-5s.mp4",
    "resolution": "720p",
    "operation": "video-to-video",
    "image_urls": [
      "https://example.com/your-new-character.jpg"
    ],
    "keep_audio": true,
    "parameters": {
      "mode": "person",
      "keyframe_id": 1,
      "enable_safety_checker": true
    }
  }
}

Шаг 4. Отправьте одно задание и сохраните его ID

Перед платной отправкой можно оценить тот же swap.json через POST /v1/media/estimate с ключом Gate. В ответе проверяются совместимость, выбранный provider и причина routing; неизвестная цена не равна нулю. POST /v1/media/generations создаёт потенциально платное задание. Authorization связывает запрос с вашим кошельком, Content-Type указывает JSON, Idempotency-Key обозначает одну конкретную попытку.

Команда запишет ответ в created.json, а заголовки — в created-headers.txt. Успешное принятие возвращает HTTP 202, object: media_generation и id. Сохраните этот идентификатор: он нужен для проверки уже созданной задачи. MP4 в этот момент ещё может отсутствовать. Если соединение оборвалось, повторите исходный JSON с прежним ключом; новый ключ может создать ещё одну оплачиваемую генерацию.

curl --fail-with-body -X POST \
  'https://api.celestriagate.com/v1/media/generations' \
  -H "Authorization: Bearer $CELESTRIA_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: my-character-swap-001' \
  --data-binary @swap.json \
  --dump-header created-headers.txt \
  --output created.json

jq '{id, status, billing}' created.json
GENERATION_ID=$(jq -r '.id' created.json)

Для нового фото или другого режима создайте новое тело и новый ключ. Если изменить JSON и оставить прежний Idempotency-Key, Gate вернёт 409 idempotency_key_conflict. Такое поведение помогает не перепутать повтор доставки с новой творческой попыткой.

Шаг 5. Дождитесь completed и скачайте MP4

Проверяйте сохранённый ID раз в несколько секунд. queued, submitting и pending относятся к подготовке и очереди; in_progress означает обработку. В awaiting_billing результат уже получен, но Gate ещё ожидает подтверждение стоимости. Продолжайте опрос того же задания. Новую генерацию для ускорения ожидания создавать не нужно.

В completed поле result содержит ответ выполненной модели, а files — найденные файлы результата. Для этих видеосценариев используйте result.video.url или соответствующую ссылку из files. failed и cancelled — конечные состояния; при failed читайте error.code и error.message. Команды сохраняют последний ответ и скачивают видео только при completed. Провайдера и причину выбора смотрите в provider и routing.

curl --fail-with-body \
  "https://api.celestriagate.com/v1/media/generations/$GENERATION_ID" \
  -H "Authorization: Bearer $CELESTRIA_API_KEY" \
  --output job.json

jq '{id, status, error, billing, files}' job.json

if [ "$(jq -r '.status' job.json)" = 'completed' ]; then
  VIDEO_URL=$(jq -r '.result.video.url' job.json)
  curl --fail --location "$VIDEO_URL" --output replacement.mp4
else
  echo 'Видео ещё не готово: проверьте status и error в job.json'
fi

Как сделать ту же замену в Kling O1 Edit

Kling позволяет описать правку словами. Инструкция должна ответить на три вопроса: кого меняем, откуда берём замену и что сохраняем. Для полной замены человека прямо назовите внешность и одежду. Если нужно оставить парк, перечислите фон, освещение, ходьбу и движение камеры. @Image1 обозначает первую фотографию из массива image_urls.

Ниже тот же единый API Gate для Kling O1 Pro: model — kwaivgi/kling-video-o1, operation — video-to-video. Сохраните JSON как kling-edit.json, подставьте ссылки и выполните предыдущий POST с --data-binary @kling-edit.json и новым Idempotency-Key. Проверка статуса остаётся в /v1/media/generations/:id. duration и resolution не добавляем: используем реальную схему редактирования, а нужную длину готовим в исходнике.

{
  "model": "kwaivgi/kling-video-o1",
  "input": {
    "video_url": "https://example.com/your-source-5s.mp4",
    "image_urls": [
      "https://example.com/your-new-character.jpg"
    ],
    "prompt": "Replace the main person walking in @Video1 with the woman in the yellow dress from @Image1. Replace the whole character, including her appearance and clothes. Preserve the original walking movement, timing, camera motion, park background, lighting and framing. Do not transfer the background or the dance pose from @Image1.",
    "keep_audio": false,
    "operation": "video-to-video",
    "parameters": {
      "enable_safety_checker": true
    }
  }
}

По текущей схеме Kling вход — MP4 или MOV примерно 3–10 секунд, 24–60 fps, до 200 МБ; стороны в диапазоне 720–2160 пикселей. Эти ограничения относятся к выбранной операции Pro Edit. Перед запуском перечитайте её схему в Gate: другая версия Kling может отличаться. Специальная проверка содержимого находится в parameters.enable_safety_checker. У каждого маршрута должны поддерживаться все переданные настройки.

Как проверить оценку и выбранного провайдера

Для PixVerse и Kling схема работы одна: ID модели, явная operation, проверка /v1/media/estimate и создание /v1/media/generations. Клиент не выбирает поставщика отдельным адресом. Gate автоматически рассматривает совместимые маршруты для переданных параметров. Если модель доступна только у одного поставщика, используется тот же API; это отражается в причине выбора.

Перед созданием отправьте kling-edit.json в POST /v1/media/estimate с ключом Gate. Этот вызов не создаёт платную генерацию. Поля provider, reason и compared объясняют предварительное решение, estimate содержит оценку. При создании актуальное решение сохраняется в задании; отдельная оценка не фиксирует цену и маршрут будущего заказа. Следующий GET читает созданный media_generation и его окончательный billing.

curl --fail-with-body -X POST \
  'https://api.celestriagate.com/v1/media/estimate' \
  -H "Authorization: Bearer $CELESTRIA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-binary @kling-edit.json

Gate сравнивает маршруты, поддерживающие операцию и каждый параметр. only_compatible_route означает один подходящий вариант; lowest_comparable_price — меньшую из сравнимых оценок; price_comparison_incomplete — что минимум доказать нельзя. Неизвестную цену не считают нулевой. Standard не подменяет Pro ради экономии. В нашем реальном тесте подходящим поставщиком оказался fal; это факт конкретного задания.

Реальный пример: человек в парке → женщина в жёлтом платье

20 октября 2026 года мы отправили видео и фотографию через обычный чат Gate. Исходник: 5,000 секунды, 1280×720, 24 fps. Kling O1 Edit Pro через fal вернул MP4 длительностью 5,0417 секунды, 1920×1080, 24 fps. Звук был отключён намеренно. Окончательный расход fal составил $0,84, списание Gate — 93,79 ₽.

На результате персонаж заменён женщиной в жёлтом платье; парк, направление ходьбы и общий ракурс сохранены. Герой идёт спиной, поэтому этот тест не подтверждает точность лица. Мы также не делаем из одного ролика вывод о качестве замены животных, сложных поворотов и предметов в руках. Ниже настоящие материалы этого испытания.

Настоящий исходный кадр теста Kling: человек идёт по дорожке в парке
До обработки: видеосцена, из которой нужно сохранить ходьбу и окружение. Открыть полный снимок
Настоящая фотография для замены персонажа: женщина в жёлтом платье
Фото замены: от него требуется внешность и одежда; позу и фон переносить не просили. Открыть полный снимок
Настоящий результат Kling O1 Edit: женщина в жёлтом платье идёт по исходной дорожке
После обработки: персонаж заменён, сцена парка сохранена. Кадр подтверждает этот пример, а не качество любого будущего запроса. Открыть полный снимок

Как принять результат: три кадра, весь ролик, звук и счёт

Сначала сравните начало, середину и конец с исходником. Новый персонаж должен оставаться одним и тем же: одежда не перескакивает, руки и ноги не исчезают. Затем посмотрите ролик целиком на обычной скорости. Мерцание, сдвиги фона и необычные шаги легче заметить в движении, чем на удачном стоп-кадре.

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

В JSON готового задания billing.cost_rub — окончательное списание клиента, а billing.upstream_cost_usd — подтверждённый расход поставщика. billing.reserved_rub показывает резерв, estimated_cost_rub — оценку. Резерв может быть заметно выше цены короткого ролика и не является лимитом расходов. Для отчёта клиенту сохраняйте ID, выбранный маршрут, итоговые суммы и файлы.

Пример записи для отчёта после проверки
Задача: заменить персонажа, сохранить парк и ходьбу
Модель и операция: Kling O1 Pro Edit, video-to-video
Провайдер: fal; вход 5 секунд, 1280×720, 24 fps
Итог теста 20.10.2026: $0,84 у fal / 93,79 ₽ в Gate
Ограничение проверки: лицо со спины, сходство лица не оценено

Для PixVerse и других новых тестов заполните эту запись своими фактическими значениями после completed.

Как повторить в обычном чате и что делать при ошибке

В чате Gate выберите Kling: Video O1, откройте существующие настройки и укажите операцию редактирования видео. Добавьте исходный ролик и фото замены либо прямую ссылку на фото в соответствующем параметре. До отправки проверьте выбранные файлы и откройте прямые ссылки отдельно. После отправки сверяйте оба входа с параметрами скопированного запроса. Ниже сообщения доступно копирование запроса — удобно передать разработчику тот же набор параметров.

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

Сообщение или состояниеЧто это означаетСледующий шаг
400 media_input_invalidПоля не соответствуют общему контрактуПеречитать схему; image_urls — массив, mode и keyframe_id — в parameters
400 media_operation_unsupportedУ модели нет выбранной операцииПроверить operation в схеме модели
400 media_route_unavailableНет совместимого доступного маршрутаПроверить поддерживаемые параметры, тариф и причину ошибки
409 idempotency_key_conflictСтарый ключ применён к новому телуВернуть исходное тело либо дать новой попытке новый ключ
404 media_model_unknown / media_generation_not_foundМодель или задание не найденыПроверить ID, ключ Gate и организацию
awaiting_billingОжидается фактическая стоимостьПродолжить опрос того же задания
failedВыполнение закончилось ошибкойПрочитать error и billing; новый запуск — отдельное решение

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

Можно ли заменить человека в видео по одной фотографии?

Да, в приведённых примерах передаются исходное видео и одна фотография замены. Для первого опыта выбирайте отчётливо видимого человека и фото с нужной одеждой и фигурой. Точность результата необходимо проверить; один снимок не гарантирует сходство лица во всех ракурсах.

Какую модель сначала попробовать для дешёвой замены объекта?

PixVerse Swap — кандидат для первой бюджетной проверки: по тарифу на 20 октября 2026 года ролик до 5 секунд стоит $0,15 в 540p или $0,20 в 720p у fal. Мы пока не проводили его сравнительный тест качества. Окончательное рублёвое списание смотрите в задании Gate.

В PixVerse нужен промпт с описанием замены?

Нет. Для PixVerse Swap используются video_url, массив image_urls и параметры mode, keyframe_id в input.parameters. Модель задаётся как pixverse/swap, операция — video-to-video. У Kling O1 Edit текстовая инструкция, напротив, обязательна. Оба примера создаются через /v1/media/generations.

Можно ли оставить исходный звук?

В едином API используйте keep_audio: true, если его поддерживает схема выбранной операции. Gate подготовит параметры совместимого поставщика самостоятельно. Это сохранение существующей дорожки; для новой речи, музыки или эффектов нужна модель с соответствующими возможностями либо отдельный этап.

Чем замена персонажа отличается от Kling Motion Control?

При редактировании нужно сохранить конкретную видеосцену и изменить выбранный элемент. Motion Control переносит образец движения на персонажа из фотографии; сцена при этом может определяться фотографией. Для задачи с сохранением исходного парка выбирайте edit/replace и проверяйте фон результата.

Можно ли передать путь к фото на компьютере?

В показанном JSON нужна прямая доступная HTTPS-ссылка. Сервер провайдера не видит ваш локальный диск и браузерный blob: URL. В обычном чате можно загрузить файл через существующую кнопку вложений: приложение подготовит вход для модели.

Почему в кошельке зарезервировано больше, чем стоит видео?

Резерв удерживает средства на время выполнения и подтверждения цены. Он отличается от окончательного списания и не ограничивает расход сверху. После completed смотрите billing.cost_rub и billing.upstream_cost_usd, а не только первоначальный estimated_cost_rub.

Пропал ответ на POST. Нужно отправить ещё раз?

Сначала проверьте сохранённый ID. Если ID не успели получить, повторите ровно тот же JSON с прежним Idempotency-Key. Новый ключ может создать отдельную платную генерацию. Для творческой новой попытки с другим фото или инструкцией нужен новый ключ.

Источники

Канонический адрес материала · Получить API-ключ