> ## Documentation Index
> Fetch the complete documentation index at: https://dripart-willie-des-1087-router-migration-block.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Comfy Router로 Kling V2.6 사용하기

> Comfy Router를 통해 kling/kling-v2-6을 호출합니다: 엔드포인트, 요청 형태, Router가 반환하는 응답.

`kling/kling-v2-6`의 API 레퍼런스입니다. Kling에서 제공하며 Comfy Router가 서비스합니다.

## 빠른 시작

[Comfy 워크스페이스](https://platform.comfy.org/profile/api-keys)에서 키를 생성하고 `COMFY_API_KEY`로 내보내세요. Python 및 TypeScript 스니펫은 Comfy SDK(`pip install comfy-sdk`, `npm install @comfyorg/sdk`)를 사용하며, cURL 스니펫은 동일한 호출을 raw HTTP로 수행합니다.

**모델 ID:** `kling/kling-v2-6`

**엔드포인트:** `POST https://api.comfy.org/v2/models/kling/kling-v2-6`

<Tabs>
  <Tab title="Wait for the result">
    <CodeGroup>
      ```python Python theme={null}
      from comfy_sdk import Comfy

      # Reads COMFY_API_KEY from the environment.
      # The SDK automatically creates an idempotency key and reuses it for automatic retries.
      with Comfy() as client:
          result = client.models.run(
              "kling/kling-v2-6",
              {
                  "aspect_ratio": "16:9",
                  "duration": "5",
                  "mode": "std",
                  "prompt": "A red fox trotting through falling snow, cinematic lighting.",
              },
          )

      print(result)
      ```

      ```typescript TypeScript theme={null}
      import { comfy } from "@comfyorg/sdk";

      // Reads COMFY_API_KEY from the environment.
      // The SDK automatically creates an idempotency key and reuses it for automatic retries.
      const { data } = await comfy.models.run("kling/kling-v2-6", {
        aspect_ratio: "16:9",
        duration: "5",
        mode: "std",
        prompt: "A red fox trotting through falling snow, cinematic lighting.",
      });

      console.log(data);
      ```

      ```bash cURL theme={null}
      curl https://api.comfy.org/v2/models/kling/kling-v2-6 \
        -H "X-API-Key: $COMFY_API_KEY" \
        -H "Idempotency-Key: $(uuidgen)" \
        -H "Content-Type: application/json" \
        -d "{\"aspect_ratio\": \"16:9\", \"duration\": \"5\", \"mode\": \"std\", \"prompt\": \"A red fox trotting through falling snow, cinematic lighting.\"}"
      ```
    </CodeGroup>
  </Tab>

  <Tab title="Queue and collect later">
    동일한 본문을 `POST https://api.comfy.org/v2/models/kling/kling-v2-6/requests` 로 보냅니다. Router는 실행이 접수되는 즉시 `201` 과 `request_id` 를 응답하며, 결과는 준비가 되는 대로 이 프로세스나 다른 프로세스에서 수집할 수 있습니다. 상태, 취소, 수집 방법은 [Queued delivery](/ko/development/comfy-router/queue) 를 참고하세요.

    <CodeGroup>
      ```python Python theme={null}
      from comfy_sdk import Comfy

      # Reads COMFY_API_KEY from the environment.
      # Each submit() call mints its own Idempotency-Key and reuses it for automatic retries.
      with Comfy() as client:
          handle = client.models.submit(
              "kling/kling-v2-6",
              {
                  "aspect_ratio": "16:9",
                  "duration": "5",
                  "mode": "std",
                  "prompt": "A red fox trotting through falling snow, cinematic lighting.",
              },
          )
          print("request_id:", handle.request_id)  # with the model ID, all another process needs

          # Poll until the request completes, waiting the Retry-After the server names.
          for update in handle.iter_events():
              print(update.status, update.queue_position)

          # The provider's own payload, the same value models.run() returns.
          # A request that failed or was cancelled raises the typed Router error here.
          result = handle.get()

      print(result)
      ```

      ```typescript TypeScript theme={null}
      import { comfy } from "@comfyorg/sdk";

      // Reads COMFY_API_KEY from the environment.
      // Each submit() call mints its own Idempotency-Key and reuses it for automatic retries.
      const handle = await comfy.models.submit("kling/kling-v2-6", {
        aspect_ratio: "16:9",
        duration: "5",
        mode: "std",
        prompt: "A red fox trotting through falling snow, cinematic lighting.",
      });
      console.log("requestId:", handle.requestId); // with the model ID, all another process needs

      // Poll until the request completes, waiting the Retry-After the server names.
      for await (const update of handle.events()) {
        console.log(update.status, update.queuePosition);
      }

      // The same result models.run() returns. A request that failed or was cancelled rejects here.
      const result = await handle.get();

      console.log(result.data);
      ```

      ```bash cURL theme={null}
      # 1. Submit. Router answers 201 with request_id, status_url, response_url and cancel_url.
      curl https://api.comfy.org/v2/models/kling/kling-v2-6/requests \
        -H "X-API-Key: $COMFY_API_KEY" \
        -H "Idempotency-Key: $(uuidgen)" \
        -H "Content-Type: application/json" \
        -d "{\"aspect_ratio\": \"16:9\", \"duration\": \"5\", \"mode\": \"std\", \"prompt\": \"A red fox trotting through falling snow, cinematic lighting.\"}"

      # 2. Poll until status is COMPLETED, waiting the Retry-After seconds each response names.
      REQUEST_ID="<request_id from the 201 body>"
      curl -i https://api.comfy.org/v2/models/kling/kling-v2-6/requests/$REQUEST_ID/status \
        -H "X-API-Key: $COMFY_API_KEY"

      # 3. Collect. 200 with the model's native output, 202 with the status body while it is still running.
      curl https://api.comfy.org/v2/models/kling/kling-v2-6/requests/$REQUEST_ID \
        -H "X-API-Key: $COMFY_API_KEY"
      ```
    </CodeGroup>
  </Tab>
</Tabs>

## 스키마

### 입력

<ParamField body="aspect_ratio" type="string" default="&#x22;16:9&#x22;">
  비디오 화면 비율

  가능한 값: `16:9`, `9:16`, `1:1`
</ParamField>

<ParamField body="callback_url" type="string (uri)">
  콜백 알림 주소

  형식: `uri`
</ParamField>

<ParamField body="camera_control" type="object" />

<ParamField body="camera_control.config" type="object" />

<ParamField body="camera_control.config.horizontal" type="number">
  카메라의 수평 축(x축) 이동을 제어합니다. 음수는 왼쪽, 양수는 오른쪽을 나타냅니다.

  범위: `-10` \~ `10`
</ParamField>

<ParamField body="camera_control.config.pan" type="number">
  수직 평면에서의 카메라 회전(x축)을 제어합니다. 음수는 아래로 회전, 양수는 위로 회전을 나타냅니다.

  범위: `-10` \~ `10`
</ParamField>

<ParamField body="camera_control.config.roll" type="number">
  카메라의 롤링 정도(z축)를 제어합니다. 음수는 반시계 방향, 양수는 시계 방향을 나타냅니다.

  범위: `-10` \~ `10`
</ParamField>

<ParamField body="camera_control.config.tilt" type="number">
  수평 평면에서의 카메라 회전(y축)을 제어합니다. 음수는 왼쪽으로 회전, 양수는 오른쪽으로 회전을 나타냅니다.

  범위: `-10` \~ `10`
</ParamField>

<ParamField body="camera_control.config.vertical" type="number">
  카메라의 수직 축(y축) 이동을 제어합니다. 음수는 아래쪽, 양수는 위쪽을 나타냅니다.

  범위: `-10` \~ `10`
</ParamField>

<ParamField body="camera_control.config.zoom" type="number">
  카메라 초점 거리의 변화를 제어합니다. 음수는 좁은 화각, 양수는 넓은 화각을 나타냅니다.

  범위: `-10` \~ `10`
</ParamField>

<ParamField body="camera_control.type" type="string">
  미리 정의된 카메라 움직임 유형입니다. simple: 사용자 정의 가능한 카메라 움직임. down\_back: 카메라가 하강하며 뒤로 이동합니다. forward\_up: 카메라가 앞으로 이동하며 위로 기울어집니다. right\_turn\_forward: 오른쪽으로 회전하며 앞으로 이동합니다. left\_turn\_forward: 왼쪽으로 회전하며 앞으로 이동합니다.

  가능한 값: `simple`, `down_back`, `forward_up`, `right_turn_forward`, `left_turn_forward`
</ParamField>

<ParamField body="cfg_scale" type="number" default="0.5">
  비디오 생성의 유연성입니다. 값이 높을수록 모델의 유연성 정도가 낮아지고 사용자 프롬프트와의 관련성이 강해집니다.

  범위: `0` \~ `1`

  형식: `float`
</ParamField>

<ParamField body="duration" type="string" default="&#x22;5&#x22;">
  비디오 길이(초)

  가능한 값: `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12`, `13`, `14`, `15`
</ParamField>

<ParamField body="external_task_id" type="string">
  사용자 정의 작업 ID
</ParamField>

<ParamField body="mode" type="string" default="&#x22;std&#x22;">
  비디오 생성 모드입니다. std: 비용 효율적인 표준 모드. pro: 더 긴 재생 시간과 더 높은 품질의 출력을 생성하는 프로페셔널 모드.

  가능한 값: `std`, `pro`
</ParamField>

<ParamField body="model_name" type="string">
  모델 이름입니다. Comfy Router를 사용할 때는 생략하거나 null을 보내면 되며, 모델은 요청 경로에 따라 선택됩니다. 이름을 제공하는 경우 해당 경로와 일치해야 합니다.
</ParamField>

<ParamField body="multi_prompt" type="object[]">
  프롬프트와 재생 시간 등 각 스토리보드에 대한 정보입니다. 최대 6개의 스토리보드를 지원하며 최소 1개가 필요합니다. multi\_shot이 true이고 shot\_type이 customize일 때 필수입니다.
</ParamField>

<ParamField body="multi_prompt[].duration" type="string">
  이 스토리보드의 재생 시간(초)입니다. 전체 작업 재생 시간을 초과할 수 없으며 1보다 작을 수 없습니다. 모든 스토리보드 재생 시간의 합은 전체 작업 재생 시간과 같습니다.
</ParamField>

<ParamField body="multi_prompt[].index" type="integer">
  샷 순서 번호
</ParamField>

<ParamField body="multi_prompt[].prompt" type="string">
  이 스토리보드의 프롬프트 단어입니다. 최대 길이는 512자입니다.
</ParamField>

<ParamField body="multi_shot" type="boolean" default="false">
  멀티 샷 비디오를 생성할지 여부입니다. true이면 prompt 파라미터가 무효화됩니다. false이면 shot\_type 및 multi\_prompt 파라미터가 무효화됩니다.
</ParamField>

<ParamField body="negative_prompt" type="string">
  네거티브 텍스트 프롬프트입니다. 긍정 프롬프트 내에 부정 문장을 직접 포함하여 네거티브 프롬프트 정보를 보완하는 것을 권장합니다.
</ParamField>

<ParamField body="prompt" type="string">
  긍정 텍스트 프롬프트입니다. \<\<\<voice\_1>>>를 사용하여 voice\_list 파라미터 순서에 맞는 음성을 지정할 수 있습니다. 하나의 작업은 최대 2개의 톤을 참조할 수 있습니다. 톤을 지정할 때는 sound 파라미터 값이 on이어야 합니다.
</ParamField>

<ParamField body="shot_type" type="string">
  스토리보드 방법입니다. multi\_shot 파라미터가 true로 설정된 경우 필수입니다.

  가능한 값: `customize`, `intelligence`
</ParamField>

<ParamField body="sound" type="string" default="&#x22;off&#x22;">
  비디오 생성 시 사운드를 동시에 생성할지 여부입니다. V2.6 이상 버전의 모델만 이 파라미터를 지원합니다.

  가능한 값: `on`, `off`
</ParamField>

<ParamField body="watermark_info" type="object">
  워터마크가 적용된 결과물을 동시에 생성할지 여부입니다. 사용자 정의 워터마크는 현재 지원되지 않습니다.
</ParamField>

<ParamField body="watermark_info.enabled" type="boolean">
  true는 워터마크를 생성함을, false는 생성하지 않음을 의미합니다.
</ParamField>

Router가 `GET /v2/models/kling/kling-v2-6/openapi.json`에서 제공하는 스키마로부터 생성되었으며, 요청이 공급자에 도달하기 전에 호출을 검증하는 데 사용되는 것과 동일한 문서입니다.

### 출력

<ResponseField name="code" type="integer">
  오류 코드
</ResponseField>

<ResponseField name="data" type="object" />

<ResponseField name="data.created_at" type="integer">
  작업 생성 시간, Unix 타임스탬프(밀리초)
</ResponseField>

<ResponseField name="data.final_unit_deduction" type="string">
  작업의 차감 단위
</ResponseField>

<ResponseField name="data.task_id" type="string">
  작업 ID
</ResponseField>

<ResponseField name="data.task_info" type="object" />

<ResponseField name="data.task_info.external_task_id" type="string" />

<ResponseField name="data.task_result" type="object" />

<ResponseField name="data.task_result.videos" type="object[]" />

<ResponseField name="data.task_result.videos[].duration" type="string">
  비디오 총 재생 시간(초)
</ResponseField>

<ResponseField name="data.task_result.videos[].id" type="string">
  생성된 비디오 ID
</ResponseField>

<ResponseField name="data.task_result.videos[].url" type="string (uri)">
  생성된 비디오 URL

  형식: `uri`
</ResponseField>

<ResponseField name="data.task_result.videos[].watermark_url" type="string (uri)">
  워터마크가 포함된 생성된 비디오 URL, 핫링크 보호 형식

  형식: `uri`
</ResponseField>

<ResponseField name="data.task_status" type="string">
  작업 상태

  가능한 값: `submitted`, `processing`, `succeed`, `failed`
</ResponseField>

<ResponseField name="data.task_status_msg" type="string">
  작업 상태 정보, 작업 실패 시 실패 이유 표시
</ResponseField>

<ResponseField name="data.updated_at" type="integer">
  작업 업데이트 시간, Unix 타임스탬프(밀리초)
</ResponseField>

<ResponseField name="data.watermark_info" type="object" />

<ResponseField name="data.watermark_info.enabled" type="boolean" />

<ResponseField name="message" type="string">
  오류 메시지
</ResponseField>

<ResponseField name="request_id" type="string">
  요청 ID
</ResponseField>

## 예시

### 입력

```json theme={null}
{
  "aspect_ratio": "16:9",
  "duration": "5",
  "mode": "std",
  "prompt": "A red fox trotting through falling snow, cinematic lighting."
}
```

### 출력

```json theme={null}
{
  "code": 0,
  "data": {
    "created_at": 1798761600000,
    "task_id": "kling-task-1a2b3c4d5e6f",
    "task_result": {
      "videos": [
        {
          "duration": "5",
          "id": "kling-video-6f5e4d3c2b1a",
          "url": "https://example.invalid/kling/kling-v2-5-turbo/generated.mp4"
        }
      ]
    },
    "task_status": "succeed",
    "task_status_msg": "",
    "updated_at": 1798761840000
  },
  "message": "SUCCEED",
  "request_id": "9f2c1a04-7b6e-4d38-8a51-3c0e7d9b2f46"
}
```

## 배포 전 확인

SDK는 `Idempotency-Key`를 생성하고 자동 재시도에 재사용합니다. 수동으로 재시도할 때는 원본 키를 재사용하세요. Router는 연결을 최대 10분간 유지할 수 있습니다.

요청이 실패하면 Router는 그 이유를 설명하는 `X-Comfy-Error-Type` 응답 헤더를 보냅니다. `422`는 Router가 공급자를 호출하기 전에 입력을 거부했음을 의미하고, `413`은 요청 본문이 Router가 허용하는 크기보다 컸음을 의미합니다. [결과 URL이 만료](/ko/development/comfy-router/reference#결과-에셋)될 수 있으므로 생성된 에셋은 즉시 다운로드하세요.

위의 필드 설명에 명시된 크기 제한은 해당 필드에 대한 공급자 자체의 한도이며, 공급자 사양에서 인용한 것입니다. Router는 전체 요청 본문에 별도의 상한을 적용하며, base64로 인코딩된 미디어도 여기에 포함됩니다. [요청 본문 크기](/ko/development/comfy-router/limitations)를 참고하세요.

<CardGroup cols={3}>
  <Card title="헤더" icon="list" href="/ko/development/comfy-router/headers">
    인증, 멱등성, 요청 ID, 오류 분류, 재시도 간격, 지출 한도.
  </Card>

  <Card title="Router API 사용" icon="code" href="/ko/development/comfy-router/api">
    모델 검색, 검증 오류, 재시도, 과금.
  </Card>

  <Card title="제한 사항" icon="triangle-exclamation" href="/ko/development/comfy-router/limitations">
    Router가 현재 지원하지 않는 기능과 대신 사용할 방법.
  </Card>
</CardGroup>
