HiAPI
Блог

Руководство

Kling 4.0 API генерации видео из изображения: справочник по запросам и один реальный запуск

Oct 24, 2026
Kling 4.0 API генерации видео из изображения: справочник по запросам и один реальный запуск

Kling 4.0 для генерации видео из изображения превращает одно стартовое изображение в клип длительностью 3–30 секунд со синхронизированным звуком. В этом руководстве приведены готовые к использованию примеры запросов в hiapi, поля, которые API принимает и отклоняет, а также результаты одного реального запуска. Вам нужно получить API-ключ в консоли hiapi; идентификатор модели — kling-4.0/image-to-video, актуальные характеристики перечислены на странице модели.

Если вы всё ещё используете Kling 3.0, обзор API Kling 4.0 был написан до релиза и описывает анонс; именно эта страница является актуальным справочником.

Минимальный запрос (curl)

curl -X POST https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling-4.0/image-to-video",
    "input": {
      "prompt": "Она слегка поворачивает голову к камере, волосы развеваются на ветру, камера медленно приближается, звук волн окружения",
      "image_urls": ["https://example.com/first-frame.jpg"],
      "duration": 3,
      "resolution": "720p"
    }
  }'

Ответ сразу возвращает идентификатор задачи:

{"code":200,"data":{"taskId":"tk-hiapi-..."},"message":"success"}

Опрашивайте GET /v1/tasks/<taskId>, пока data.status не станет success, затем прочитайте data.output[0].url.

Python: отправка и опрос

import os, time, requests

BASE = "https://api.hiapi.ai"
HEADERS = {"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"}

def kling4_i2v(image_url, prompt, duration=5, resolution="720p"):
    r = requests.post(f"{BASE}/v1/tasks", headers=HEADERS, json={
        "model": "kling-4.0/image-to-video",
        "input": {
            "prompt": prompt,
            "image_urls": [image_url],   # 恰好一张首帧图
            "duration": duration,        # 整数,3-30
            "resolution": resolution,    # "720p" 或 "1080p"
        },
    })
    body = r.json()
    if body["code"] != 200:
        raise RuntimeError(body["message"])
    task_id = body["data"]["taskId"]

    while True:
        d = requests.get(f"{BASE}/v1/tasks/{task_id}", headers=HEADERS).json()["data"]
        if d["status"] == "success":
            return d["output"][0]["url"]
        if d["status"] == "fail":
            raise RuntimeError(d)
        time.sleep(10)

Сразу скачайте возвращённый MP4-файл. URL результата содержит временную метку expireAt (в нашем запуске — примерно через семь дней) и размещён на временном домене, поэтому скопируйте его в собственное хранилище, а не используйте прямую ссылку.

Поля, которые принимает API

Мы протестировали эту конечную точку с намеренно недопустимыми значениями (они возвращают HTTP 400 INVALID_REQUEST и не создают задачу):

Поле Наблюдаемое правило
image_urls Обязательный массив, ровно один элемент (два → maxItems: got 2, want 1)
duration Целое число, минимум 3, максимум 30. Строка вроде "5" отклоняется (got string, want integer)
resolution 720p или 1080p
aspect_ratio Необязательно: 16:9, 9:16, 1:1, 21:9. На странице модели указано, что при пропуске композиция следует за исходным изображением
prompt Описание движения; в проверках валидатора мы отправляли запросы без этого поля, поэтому считайте его рекомендуемым полем

При переносе кода с других видеомоделей легко ошибиться в двух вещах:

  • Поле называется image_urls, а не image_url. Отправка image_url одновременно выдаёт «отсутствует обязательное поле image_urls» и «недопустимое дополнительное свойство image_url».
  • Нет переключателя аудио. audio, generate_audio и sound отклоняются как дополнительные свойства. Аудио всегда генерируется вместе с изображением; управляйте аудио через подсказку (в примере выше запрашивается звук волн окружения).

Неизвестные поля отклоняются, а не игнорируются, поэтому опечатки проявляются как ошибка 400, а не как молча проигнорированная настройка.

Замечания для продакшена

  • Предпочитайте обратные вызовы опросу. Генерация клипа занимает несколько минут, поэтому при создании задачи передавайте callback (содержащий url и when: "final") и обрабатывайте результат в webhook; опрос используйте только как резервный вариант.
  • Проверяйте до оплаты. Поскольку недопустимые входные данные возвращают 400 и не создают задачу, сначала проверяйте длительность и разрешение в своём коде; ошибочный запрос ничего не стоит, но корректный тарифицируется за каждую запрошенную секунду.
  • Тарификация по секундам и зависит от разрешения. Более длинные клипы и 1080p стоят дороже; актуальные тарифы смотрите в разделе цены, а не полагайтесь на цифры из статьи.
  • Сохраняйте идентификатор задачи. Если опрос завершился с временной сетевой ошибкой, повторно опрашивайте тот же ID, а не отправляйте заново, иначе будет создан и тарифицирован второй клип.

Фактический запуск

Мы отправили вышеуказанный запрос: вертикальное стартовое изображение, duration: 3, resolution: "720p", без aspect_ratio.

  • Наблюдаемая последовательность статусов при опросе примерно каждые 10 секунд: handling → archiving → success.
  • Общее фактическое время: около 274 секунд для 3-секундного клипа. handling занимает около 255 секунд; планируйте в минутах, а не в секундах, и проектируйте вокруг обратных вызовов.
  • Выходной файл (проверено с помощью ffprobe): видео H.264, 1280×720, 3,04 секунды, плюс звуковая дорожка AAC той же длительности. Таким образом, аудио действительно встроено в MP4, а композиция следует за исходным изображением 16:9.

Мы не тестировали: 1080p, длительность более 3 секунд и нестандартные значения aspect_ratio. Эти ограничения взяты из сообщений валидатора API и страницы модели, а не из сгенерированного результата.

Связанные страницы

Часто задаваемые вопросы

Можно ли отключить аудио в Kling 4.0 для генерации видео из изображения?

С помощью поля запроса — нет. audio, generate_audio и sound все отклоняются валидатором. Опишите желаемый звук (или его отсутствие) в подсказке.

Сколько входных изображений можно отправить?

Одно. image_urls должен содержать ровно одно стартовое изображение.

Сколько времени занимает один запрос?

Наш 3-секундный клип 720p занимает около 274 секунд от начала до конца. Для продакшен-нагрузки используйте обратные вызовы.

Какова максимальная длительность клипа?

API принимает duration не более 30 (целые секунды) и отклоняет более высокие значения; мы сами генерировали только 3-секундные клипы.

Похожие статьи

Все статьи →

Начните работать с постоянными артефактами ИИ

Получите API-ключ и вызывайте модели изображений, видео и аудио через один API на основе tasks.

Читать документацию API