МиксМедиа API
RUEN
API-ключи ВойтиПопробовать
Открыть как Markdown
← Попробовать на сайте

Higgsfield Genjutsu

Higgsfield · ~3 мин
от $0.414за секунду

Один ролик, три режима: перенос движения, замена объекта и новый стиль. От 4 до 30 секунд, до 1080p.

Higgsfield Genjutsu берёт готовый ролик и меняет в нём реальность, не переснимая движение.

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

Замена объекта меняет выбранного человека, одежду, товар или предмет. Остальной кадр остаётся как снят.

Новый стиль накладывает выбранный визуальный стиль и сохраняет движение и звук ролика. Фото можно не прикладывать: стиль применится к тем, кто уже в кадре.

Видео от 4 секунд, длиннее 30 секунд обрежется до 30. Разрешение 480p, 720p или 1080p. Описание можно не писать. Цена одна для всех режимов — за каждую секунду вашего ролика.

Одна модель higgsfield-genjutsu · ~3 мин. Режим — поле input.mode.

Режимы

Один ID higgsfield-genjutsu. Что сделать с роликом, задаёт input.mode. Если поле не передать, это перенос движения. Те же официальные id тоже работают: higgsfield/genjutsu/object-swap/v1.0 и higgsfield/genjutsu/restyle/v1.0 сами выбирают режим, mode тогда можно не писать.

modeЧто делаетЧто передать
motion-transferДвижение, камера и тайминг берутся из видео, внешность — с фотоvideo_url + image_urls (1–8)
object-swapВ ролике меняется человек, одежда или предмет. Остальное кадр старается сохранитьvideo_url + image_urls (1–8)
restyleТот же ролик в выбранном стиле. Движение и звук исходного видео остаютсяvideo_url + preset_id. image_urls — по желанию, до 5

Общее для всех трёх: видео от 4 секунд, длиннее 30 секунд обрежется до 30, длина результата такая же. prompt можно не писать. resolution: 480p, 720p (по умолчанию) или 1080p. Цена не зависит от режима.

Для замены объекта исходный кадр должен быть не меньше 409 600 пикселей (ширина × высота). Обычное HD подходит, мелкое превью — нет.

Стили для restyle

Список стилей: GET https://mixmedia.tech/api/v1/genjutsu/presets. Ключ не нужен. В preset_id передаётся id пункта, не название и не картинка превью.

{
  "code": 200,
  "msg": "success",
  "data": {
    "items": [
      {
        "id": "c2143317-f28d-4c3c-a0b8-39bd547e08a7",
        "name": "Cel-Shaded CG Anime",
        "preview_url": "https://…/style.webp"
      }
    ]
  }
}

Список меняется. Если сохранённый preset_id перестал приниматься, запросите список заново и возьмите актуальный id.

Цена

РазрешениеЦена за секунду вашего видео
480p$0.414
720p$0.886
1080p$2.122
  • Цена = цена секунды × длина ролика, округляется вверх до $0.001. Списывается при создании задачи и полностью возвращается, если задача не удалась.
  • Цена — за каждую секунду вашего видео (от 4 до 30 с). Ролик длиннее 30 с обрезается до 30, длина результата такая же. prompt можно не передавать.

Лимиты медиа

ТипОграничения
Фото1–8 для переноса движения и замены объекта; 0–5 для нового стиля. JPG / PNG / WebP; публичная https-ссылка или files/upload — до 30 МБ на файл
Видеоодно, video_url; от 4 с до 30 с (длиннее обрезается до 30); MP4 / MOV → на сервере в MP4; загрузка ≤ 200 МБ

Фото — публичные https или upload; видео и звук — только через files/upload.

Параметры (поле input)

ПараметрОписаниеЗначения (по умолчанию — жирным)
modeРежим: motion-transfer — перенос движения на фото, object-swap — замена человека или предмета, restyle — тот же ролик в выбранном стиле. Можно не передавать вместе с официальным id модели: …/object-swap/v1.0 и …/restyle/v1.0 сами выбирают режимmotion-transfer · object-swap · restyle
promptЧто происходит в ролике: сцена, движение, камера, свет, стильтекст, до 10000 символов (необязательно, по умолчанию пусто)
video_urlВидео с движением (MP4): одно, от 4 с. Длиннее 30 с обрезается до 30. Сначала загрузите через files/upload"https://…"
image_urlsФото персонажа (https): внешность, лицо, одежда["https://…"], до 8
preset_idСтиль для restyle: UUID из GET /api/v1/genjutsu/presets. Для других режимов не нуженUUID стиля, обязательно при mode: "restyle"
resolutionРазрешение видео480p · 720p · 1080p

Примеры

Перенос движения

curl -X POST https://mixmedia.tech/api/v1/jobs/createTask \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"higgsfield-genjutsu","input":{"mode":"motion-transfer","prompt":"Сохрани лицо с фото, движение возьми из видео","video_url":"https://mixmedia.tech/files/<id>.mp4","image_urls":["https://mixmedia.tech/static/img/previews/gpt-t2i.jpg"],"resolution":"720p"}}'
import os, requests

r = requests.post(
    "https://mixmedia.tech/api/v1/jobs/createTask",
    headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
    json={
      "model": "higgsfield-genjutsu",
      "input": {
        "mode": "motion-transfer",
        "prompt": "Сохрани лицо с фото, движение возьми из видео",
        "video_url": "https://mixmedia.tech/files/<id>.mp4",
        "image_urls": [
          "https://mixmedia.tech/static/img/previews/gpt-t2i.jpg"
        ],
        "resolution": "720p"
      }
    },
)
print(r.json())  # {"code": 200, "data": {"taskId": "..."}}
const r = await fetch("https://mixmedia.tech/api/v1/jobs/createTask", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "model": "higgsfield-genjutsu",
    "input": {
      "mode": "motion-transfer",
      "prompt": "Сохрани лицо с фото, движение возьми из видео",
      "video_url": "https://mixmedia.tech/files/<id>.mp4",
      "image_urls": [
        "https://mixmedia.tech/static/img/previews/gpt-t2i.jpg"
      ],
      "resolution": "720p"
    }
  }),
});
console.log(await r.json()); // { code: 200, data: { taskId: "..." } }

Замена объекта

curl -X POST https://mixmedia.tech/api/v1/jobs/createTask \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"higgsfield-genjutsu","input":{"mode":"object-swap","prompt":"Замени человека на персонажа с фото","video_url":"https://mixmedia.tech/files/<id>.mp4","image_urls":["https://mixmedia.tech/static/img/previews/gpt-t2i.jpg"],"resolution":"720p"}}'
import os, requests

r = requests.post(
    "https://mixmedia.tech/api/v1/jobs/createTask",
    headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
    json={
      "model": "higgsfield-genjutsu",
      "input": {
        "mode": "object-swap",
        "prompt": "Замени человека на персонажа с фото",
        "video_url": "https://mixmedia.tech/files/<id>.mp4",
        "image_urls": [
          "https://mixmedia.tech/static/img/previews/gpt-t2i.jpg"
        ],
        "resolution": "720p"
      }
    },
)
print(r.json())  # {"code": 200, "data": {"taskId": "..."}}
const r = await fetch("https://mixmedia.tech/api/v1/jobs/createTask", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "model": "higgsfield-genjutsu",
    "input": {
      "mode": "object-swap",
      "prompt": "Замени человека на персонажа с фото",
      "video_url": "https://mixmedia.tech/files/<id>.mp4",
      "image_urls": [
        "https://mixmedia.tech/static/img/previews/gpt-t2i.jpg"
      ],
      "resolution": "720p"
    }
  }),
});
console.log(await r.json()); // { code: 200, data: { taskId: "..." } }

Новый стиль

curl -X POST https://mixmedia.tech/api/v1/jobs/createTask \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"higgsfield-genjutsu","input":{"mode":"restyle","video_url":"https://mixmedia.tech/files/<id>.mp4","preset_id":"<preset_id>","resolution":"720p"}}'
import os, requests

r = requests.post(
    "https://mixmedia.tech/api/v1/jobs/createTask",
    headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
    json={
      "model": "higgsfield-genjutsu",
      "input": {
        "mode": "restyle",
        "video_url": "https://mixmedia.tech/files/<id>.mp4",
        "preset_id": "<preset_id>",
        "resolution": "720p"
      }
    },
)
print(r.json())  # {"code": 200, "data": {"taskId": "..."}}
const r = await fetch("https://mixmedia.tech/api/v1/jobs/createTask", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "model": "higgsfield-genjutsu",
    "input": {
      "mode": "restyle",
      "video_url": "https://mixmedia.tech/files/<id>.mp4",
      "preset_id": "<preset_id>",
      "resolution": "720p"
    }
  }),
});
console.log(await r.json()); // { code: 200, data: { taskId: "..." } }

Создание и результат

  1. POST /api/v1/jobs/createTask с model и input.
  2. Поллите GET /api/v1/jobs/recordInfo?taskId=… каждые 3–5 с (или callback).

Успешный createTask (HTTP 200)

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "task_...",
    "task_id": "task_...",
    "status": "submitted"
  }
}

Готовая задача (recordInfo)

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "task_...",
    "task_id": "task_...",
    "state": "success",
    "status": "completed",
    "costUsd": "0.384",
    "refunded": false,
    "resultJson": {
      "videos": [
        {
          "url": "https://…/out.mp4"
        }
      ],
      "duration": 8
    }
  }
}

Алиасы: task_id = taskId; status: pending / processing / completed / failed рядом с state. Ссылка на ролик — в resultJson. size — синоним aspect_ratio в input.

Фото можно передать любыми публичными https-ссылками или загрузить через files/upload. Видео и звук — только через files/upload.

Обработка ошибок

Ответ API — JSON {"code", "msg", "data"}; при ошибке есть строковое поле error (тип). На /api/v1/* HTTP-статус совпадает с code в теле.

Примеры тел ответа

400

{
  "code": 400,
  "msg": "input.duration: must be between 4 and 30, or \"auto\" / -1",
  "data": null,
  "error": "invalid_request_error"
}

401

{
  "code": 401,
  "msg": "Authentication failed. Please check your API key",
  "data": null,
  "error": "authentication_error"
}

402

{
  "code": 402,
  "msg": "Insufficient balance. Please top up and try again. Available: $0.01, required: $0.015. Top up at https://mixmedia.tech/cabinet/billing",
  "data": {
    "balance": "0.0100",
    "required": "0.0150",
    "currency": "USD",
    "topUpUrl": "https://mixmedia.tech/cabinet/billing"
  },
  "error": "payment_required"
}

429

{
  "code": 429,
  "msg": "Rate limit exceeded: 10 createTask/upload requests per 10 s per key. Retry after 8s",
  "data": null,
  "error": "rate_limit_error"
}

500

{
  "code": 500,
  "msg": "Internal server error",
  "data": null,
  "error": "server_error"
}

Коды при createTask / upload

codeerrorЧто значитЧто делать
400invalid_request_errorНеверный параметр или телоСмотрите msg
400unsupported_modelНет такой моделиСписок моделей
400nsfw_content_detectedМодерация / content policy — в msg / failMsg текст upstream как естьСмотрите текст отказа, измените описание или файлы
401authentication_errorНет ключа или он неверныйПроверьте ключ
402payment_requiredНе хватает денегПополните баланс
403permission_errorНет доступаНапишите в поддержку
429rate_limit_errorСлишком много запросовПодождите Retry-After
505model_disabledМодель временно отключенаВыберите другую
500server_errorСбой у насПовторите позже

Примеры msg: Authentication failed. Please check your API key (401); Insufficient balance. Please top up and try again… (402).

Ошибки задачи (recordInfo)

Если задача уже создана и завершилась неудачей: state: "fail" (алиас status: "failed"), failCode / failMsg, объект error: { code, message, type }. Деньги возвращаются (refunded: true).

failCodeerror.typeЧто значит
400nsfw_content_detected / invalid_request_errorМодерация — failMsg = текст upstream как есть
422invalid_request_errorМодель не приняла параметры (длина, режим, разрешение, файл)
501server_errorМодель не смогла сгенерировать (failMsg)
504timeout_errorСлишком долго — повторите
500 / 503server_errorСервис временно недоступен

Лимиты запросов

ЧтоЛимит
createTask и upload20 за 10 с на ключ
recordInfo / list / balance100 за 10 с на ключ

Сверх лимита — HTTP 429 и Retry-After.

© 2026 МиксМедиа