> ## Documentation Index
> Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Kling 고급 립싱크 작업 생성

> CometAPI Kling POST /kling/v1/videos/advanced-lip-sync를 통해 고급 립싱크 비디오 작업을 생성하고, 오디오와 counterpart 설정을 제출해 동기화된 결과를 생성합니다.

소스 비디오에서 얼굴을 이미 식별한 후 이 엔드포인트를 사용해 고급 립싱크 작업을 생성합니다.

## 호출 전에 준비할 것

* [Lip-Sync](./lip-sync)로 시작해 `session_id`와 사용 가능한 `face_id` 값을 가져옵니다
* 각 얼굴을 오디오 세그먼트에 매핑하는 하나 이상의 `face_choose` 항목을 구성합니다
* 이전 작업에서 생성된 오디오에는 `audio_id`를 사용하고, 호스팅된 오디오 파일에는 `sound_file`을 사용합니다
* 타이밍 필드는 밀리초 단위로 전송합니다. 예를 들어 `sound_start_time: "0"` 및 `sound_end_time: "2000"`은 처음 2초를 선택합니다.
* 잘라낸 오디오 세그먼트는 최소 2000ms 이상이어야 하며 소스 오디오 길이를 초과하면 안 됩니다
* 웹훅 전달이나 자체 추적 id가 필요할 때만 `callback_url` 또는 `external_task_id`를 설정합니다

## 작업 흐름

<Steps>
  <Step title="먼저 얼굴 식별">
    소스 비디오에서 [Lip-Sync](./lip-sync)를 실행하고 반환된 `session_id`와 대상 `face_id` 값을 보관합니다.
  </Step>

  <Step title="고급 립싱크 작업 생성">
    이 엔드포인트를 통해 `session_id`와 `face_choose` 배열을 제출합니다.
  </Step>

  <Step title="생성된 작업 추적">
    상태 확인 및 최종 결과 조회를 위해 반환된 작업 id를 저장합니다.
  </Step>
</Steps>

<Tip>
  전체 파라미터 참조는 [Kling 공식 문서](https://kling.ai/document-api/apiReference/model/lipSync)를 확인하세요.
</Tip>


## OpenAPI

````yaml api/openapi/video/kling/post-counterpart-creating-tasks.openapi.json POST /kling/v1/videos/advanced-lip-sync
openapi: 3.1.0
info:
  title: Counterpart Creating Tasks API
  version: 1.0.0
  description: >-
    Create an advanced Kling lip-sync task after face identification has
    produced a session id and face ids.
servers:
  - url: https://api.cometapi.com
security:
  - bearerAuth: []
paths:
  /kling/v1/videos/advanced-lip-sync:
    post:
      summary: Create an advanced Kling lip-sync task
      description: >-
        Submit the `session_id` returned by face identification plus one or more
        `face_choose` mappings that connect target faces to audio segments.
      operationId: counterpart_creating_tasks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - session_id
                - face_choose
              properties:
                session_id:
                  type: string
                  description: Session id returned by identify-face.
                face_choose:
                  type: array
                  description: One or more face/audio mappings to synthesize.
                  minItems: 1
                  items:
                    type: object
                    required:
                      - face_id
                    properties:
                      face_id:
                        type: string
                        description: Face id returned by identify-face.
                      audio_id:
                        type: string
                        description: Audio id from a prior audio task.
                      sound_file:
                        type: string
                        description: Public audio URL when you provide your own audio.
                      sound_start_time:
                        type: string
                        description: Start time within the audio source, in milliseconds.
                      sound_end_time:
                        type: string
                        description: >-
                          End time within the audio source, in milliseconds. The
                          clipped segment must be at least 2000 ms and must not
                          exceed the source audio duration.
                      sound_insert_time:
                        type: string
                        description: Insertion time in the target video, in milliseconds.
                      sound_volume:
                        type: number
                        description: Volume for the inserted audio.
                      original_sound_volume:
                        type: number
                        description: Volume for the original video audio.
                callback_url:
                  type: string
                  description: Webhook URL to receive task status updates.
                external_task_id:
                  type: string
                  description: >-
                    Custom task id for your own tracking. Must be unique per
                    account.
              default:
                session_id: <session_id>
                face_choose:
                  - face_id: <face_id>
                    sound_file: https://your-audio-host/speech.wav
                    sound_start_time: '0'
                    sound_end_time: '2000'
                    sound_insert_time: '0'
                    sound_volume: 1
                    original_sound_volume: 0
            examples:
              Default:
                summary: Advanced lip-sync request
                value:
                  session_id: <session_id>
                  face_choose:
                    - face_id: <face_id>
                      sound_file: https://your-audio-host/speech.wav
                      sound_start_time: '0'
                      sound_end_time: '2000'
                      sound_insert_time: '0'
                      sound_volume: 1
                      original_sound_volume: 0
      responses:
        '200':
          description: Task accepted.
          content:
            application/json:
              schema:
                type: object
                required:
                  - code
                  - message
                  - data
                properties:
                  code:
                    type: integer
                  message:
                    type: string
                  data:
                    type: object
                    properties:
                      task_id:
                        type: string
                      task_status:
                        type: string
                      created_at:
                        type: integer
                      updated_at:
                        type: integer
                    additionalProperties: true
      x-codeSamples:
        - lang: Shell
          label: Default
          source: |
            curl https://api.cometapi.com/kling/v1/videos/advanced-lip-sync \
              -H "Authorization: Bearer $COMETAPI_KEY" \
              -H "Content-Type: application/json" \
              -d '{
                  "session_id": "<session_id>",
                  "face_choose": [
                    {
                      "face_id": "<face_id>",
                      "sound_file": "https://your-audio-host/speech.wav",
                      "sound_start_time": "0",
                      "sound_end_time": "2000",
                      "sound_insert_time": "0",
                      "sound_volume": 1,
                      "original_sound_volume": 0
                    }
                  ]
                }'
        - lang: Python
          label: Default
          source: |
            import os
            import requests

            response = requests.post(
                "https://api.cometapi.com/kling/v1/videos/advanced-lip-sync",
                headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
                json={
                  "session_id": "<session_id>",
                  "face_choose": [
                    {
                      "face_id": "<face_id>",
                      "sound_file": "https://your-audio-host/speech.wav",
                      "sound_start_time": "0",
                      "sound_end_time": "2000",
                      "sound_insert_time": "0",
                      "sound_volume": 1,
                      "original_sound_volume": 0
                    }
                  ]
                },
            )

            result = response.json()
            print(result.get("code"), result.get("data", {}).get("task_id"))
        - lang: JavaScript
          label: Default
          source: >
            const response = await
            fetch("https://api.cometapi.com/kling/v1/videos/advanced-lip-sync",
            {
              method: "POST",
              headers: {
                Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
                "Content-Type": "application/json",
              },
              body: JSON.stringify({
                "session_id": "<session_id>",
                "face_choose": [
                  {
                    "face_id": "<face_id>",
                    "sound_file": "https://your-audio-host/speech.wav",
                    "sound_start_time": "0",
                    "sound_end_time": "2000",
                    "sound_insert_time": "0",
                    "sound_volume": 1,
                    "original_sound_volume": 0
                  }
                ]
              }),
            });


            const result = await response.json();

            console.log(result.code, result.data?.task_id);
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token authentication. Use your CometAPI key.

````