Интеграция Kling для генерации видео

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Интеграция Kling для генерации видео
Простая
~2-3 рабочих дня
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    854
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Интеграция Kling для генерации видео

Kling от Kuaishou — одна из сильнейших коммерческих платформ видеогенерации с открытым API. Поддерживает text-to-video и image-to-video, до 30 секунд, 1080p. Текущий выбор для production-интеграций в рекламе и контент-продакшне.

REST API интеграция

import httpx
import asyncio
import jwt
import time

class KlingClient:
    def __init__(self, access_key: str, secret_key: str):
        self.access_key = access_key
        self.secret_key = secret_key
        self.base_url = "https://api.klingai.com"

    def _get_jwt_token(self) -> str:
        payload = {
            "iss": self.access_key,
            "exp": int(time.time()) + 1800,
            "nbf": int(time.time()) - 5
        }
        return jwt.encode(payload, self.secret_key, algorithm="HS256")

    async def create_text_to_video(
        self,
        prompt: str,
        negative_prompt: str = "",
        model: str = "kling-v1-5",  # kling-v1, kling-v1-5
        mode: str = "std",          # std, pro
        duration: str = "5",        # "5" или "10"
        aspect_ratio: str = "16:9", # 16:9, 9:16, 1:1
        cfg_scale: float = 0.5
    ) -> str:
        async with httpx.AsyncClient() as client:
            resp = await client.post(
                f"{self.base_url}/v1/videos/text2video",
                headers={"Authorization": f"Bearer {self._get_jwt_token()}"},
                json={
                    "model_name": model,
                    "prompt": prompt,
                    "negative_prompt": negative_prompt,
                    "cfg_scale": cfg_scale,
                    "mode": mode,
                    "aspect_ratio": aspect_ratio,
                    "duration": duration
                }
            )
            resp.raise_for_status()
            return resp.json()["data"]["task_id"]

    async def create_image_to_video(
        self,
        image_url: str,
        prompt: str = "",
        duration: str = "5",
        cfg_scale: float = 0.5
    ) -> str:
        async with httpx.AsyncClient() as client:
            resp = await client.post(
                f"{self.base_url}/v1/videos/image2video",
                headers={"Authorization": f"Bearer {self._get_jwt_token()}"},
                json={
                    "model_name": "kling-v1-5",
                    "image": image_url,
                    "prompt": prompt,
                    "cfg_scale": cfg_scale,
                    "duration": duration
                }
            )
            resp.raise_for_status()
            return resp.json()["data"]["task_id"]

    async def get_task_result(self, task_id: str) -> dict:
        async with httpx.AsyncClient() as client:
            resp = await client.get(
                f"{self.base_url}/v1/videos/text2video/{task_id}",
                headers={"Authorization": f"Bearer {self._get_jwt_token()}"}
            )
            return resp.json()["data"]

    async def wait_and_download(self, task_id: str, timeout: int = 300) -> bytes:
        for _ in range(timeout // 5):
            await asyncio.sleep(5)
            data = await self.get_task_result(task_id)

            if data["task_status"] == "succeed":
                video_url = data["task_result"]["videos"][0]["url"]
                async with httpx.AsyncClient() as client:
                    video_resp = await client.get(video_url, follow_redirects=True)
                    return video_resp.content

            elif data["task_status"] == "failed":
                raise RuntimeError(f"Kling generation failed")

        raise TimeoutError("Kling generation timeout")

FastAPI обёртка

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()
kling = KlingClient(KLING_ACCESS_KEY, KLING_SECRET_KEY)

class VideoRequest(BaseModel):
    prompt: str
    negative_prompt: str = ""
    duration: str = "5"
    mode: str = "std"

@app.post("/generate/text-to-video")
async def generate_video(req: VideoRequest):
    task_id = await kling.create_text_to_video(
        prompt=req.prompt,
        negative_prompt=req.negative_prompt,
        duration=req.duration,
        mode=req.mode
    )
    return {"task_id": task_id}

@app.get("/task/{task_id}")
async def check_task(task_id: str):
    return await kling.get_task_result(task_id)

Kling v1.5 std: ~$0.07 за 5-сек видео, pro: ~$0.14. В режиме std среднее время генерации — 1–3 минуты для 5 сек. Pro — 3–5 минут с значительно лучшим качеством движений. Сроки интеграции — 1–2 дня.