---
title: Elements — Kling VIDEO 4.0 | Runware Docs
url: https://runware.ai/docs/models/klingai-video-4-0/guides/elements
description: How to save a character in Kling VIDEO 4.0 as an element under your own id, build it from several angles or a short clip, and reuse it across a series of videos.
---
### [Introduction](https://runware.ai/docs/models/klingai-video-4-0/guides/elements#introduction)

An element is a character or an object that Kling VIDEO 4.0 **saves for reuse** under an `id` you choose. The first request builds it from a set of images or a short clip. Every later request names the same `id` and **gets the same person back** without sending the images again, which is what keeps a brand ambassador or a host recognizable across a whole series.

[Watch video](https://runware.ai/docs/assets/output-hero.BVE6i2tT.mp4)

*The element's first appearance, created in the same request*

> **Prompt**: <<<element_1>>> walks through the electronics store in <<<image_1>>>, stops at a table, picks up a laptop, and turns it toward the camera with a confident smile. She says in clear American English: "This one's my favorite for travel." Smooth handheld tracking shot, bright store light. Audio: her voice, footsteps, soft store ambience, no music, no subtitles.

**Front**:

![Front-facing full-length portrait of a woman with a silver pixie cut in a cobalt blazer, white t-shirt, black trousers, and white sneakers](https://runware.ai/docs/assets/source-ambassador.C2CilYfS_rPmhD.jpg)

> **Prompt**: Front-facing full-length portrait of a woman in her thirties with a short silver pixie cut, wearing a cobalt blue blazer over a white t-shirt, slim black trousers, and white sneakers, standing straight with her arms relaxed against a plain light gray studio backdrop. Even light, photoreal.

**Three-quarter**:

![The same woman in a three-quarter view turned to her left against a light gray backdrop](https://runware.ai/docs/assets/source-ambassador-side.BJH8g8q-_Z2nUn7H.jpg)

> **Prompt**: The same woman with the same silver pixie cut, cobalt blazer, white t-shirt, black trousers, and white sneakers, in a three-quarter view turned to her left, against the same light gray backdrop in the same light. Full length, photoreal.

**Back**:

![The same woman seen from behind, showing the back of her silver pixie cut and cobalt blazer](https://runware.ai/docs/assets/source-ambassador-back.Buv6wGid_Z1CMoWW.jpg)

> **Prompt**: The same woman with the same silver pixie cut, cobalt blazer, black trousers, and white sneakers, seen from directly behind, against the same light gray backdrop in the same light. Full length, photoreal.

**Location**:

![The interior of a bright electronics store with long light wood tables of laptops and phones and large windows](https://runware.ai/docs/assets/source-store.DQZmdJwm_1kLHbA.jpg)

> **Prompt**: The interior of a bright electronics store with long light wood tables of laptops and phones, white walls, and large windows. Photoreal, no people, no logos.

The three portraits **became the element**, and the store photo is an ordinary [reference image](https://runware.ai/docs/models/klingai-video-4-0/guides/reference-images) for the location. In the next request the store is gone, and **the ambassador is still available by name**.

### [Request shape](https://runware.ai/docs/models/klingai-video-4-0/guides/elements#request-shape)

Elements go in `inputs.elements`. An image element needs an `id`, a short `description`, a `frontalImage`, and **one to three more angles** in `images`. In the prompt it is `<<<element_1>>>`, numbered in array order and separately from the images:

**TypeScript**:

```typescript
import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'klingai:kling-video@4.0',
  positivePrompt: '<<<element_1>>> walks through the electronics store in <<<image_1>>>, stops at a table, picks up a laptop, and turns it toward the camera with a confident smile. She says in clear American English: "This one\'s my favorite for travel." Audio: her voice, footsteps, soft store ambience, no music, no subtitles.',
  width: 1920,
  height: 1080,
  duration: 8,
  inputs: {
    elements: [
      {
        id: 'k4-ambassador',
        description: 'Brand ambassador with a silver pixie cut in a cobalt blazer',
        frontalImage: 'https://im.runware.ai/image/os/a14d18/ws/2/ii/2f3a4b5c-6d7e-4f8a-9b0c-1d2e3f4a5b6c.jpg',
        images: [
          'https://im.runware.ai/image/os/a14d18/ws/2/ii/3a4b5c6d-7e8f-4a9b-8c0d-2e3f4a5b6c7d.jpg',
          'https://im.runware.ai/image/os/a14d18/ws/2/ii/4b5c6d7e-8f9a-4b0c-9d1e-3f4a5b6c7d8e.jpg'
        ],
        tags: [
          'Character'
        ]
      }
    ],
    referenceImages: [
      'https://im.runware.ai/image/os/a14d18/ws/2/ii/5c6d7e8f-9a0b-4c1d-8e2f-4a5b6c7d8e9f.jpg'
    ]
  }
})
```

**Python**:

```python
import asyncio
import os

from runware import Runware

async def main():
    async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
        results = await client.run({
            "model": "klingai:kling-video@4.0",
            "positivePrompt": "<<<element_1>>> walks through the electronics store in <<<image_1>>>, stops at a table, picks up a laptop, and turns it toward the camera with a confident smile. She says in clear American English: \"This one's my favorite for travel.\" Audio: her voice, footsteps, soft store ambience, no music, no subtitles.",
            "width": 1920,
            "height": 1080,
            "duration": 8,
            "inputs": {
                "elements": [
                    {
                        "id": "k4-ambassador",
                        "description": "Brand ambassador with a silver pixie cut in a cobalt blazer",
                        "frontalImage": "https://im.runware.ai/image/os/a14d18/ws/2/ii/2f3a4b5c-6d7e-4f8a-9b0c-1d2e3f4a5b6c.jpg",
                        "images": [
                            "https://im.runware.ai/image/os/a14d18/ws/2/ii/3a4b5c6d-7e8f-4a9b-8c0d-2e3f4a5b6c7d.jpg",
                            "https://im.runware.ai/image/os/a14d18/ws/2/ii/4b5c6d7e-8f9a-4b0c-9d1e-3f4a5b6c7d8e.jpg"
                        ],
                        "tags": [
                            "Character"
                        ]
                    }
                ],
                "referenceImages": [
                    "https://im.runware.ai/image/os/a14d18/ws/2/ii/5c6d7e8f-9a0b-4c1d-8e2f-4a5b6c7d8e9f.jpg"
                ]
            }
        })

asyncio.run(main())
```

**cURL**:

```bash
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "videoInference",
      "taskUUID": "1e2f3a4b-5c6d-4e7f-8a9b-0c1d2e3f4a5b",
      "model": "klingai:kling-video@4.0",
      "positivePrompt": "<<<element_1>>> walks through the electronics store in <<<image_1>>>, stops at a table, picks up a laptop, and turns it toward the camera with a confident smile. She says in clear American English: \"This one's my favorite for travel.\" Audio: her voice, footsteps, soft store ambience, no music, no subtitles.",
      "width": 1920,
      "height": 1080,
      "duration": 8,
      "inputs": {
        "elements": [
          {
            "id": "k4-ambassador",
            "description": "Brand ambassador with a silver pixie cut in a cobalt blazer",
            "frontalImage": "https://im.runware.ai/image/os/a14d18/ws/2/ii/2f3a4b5c-6d7e-4f8a-9b0c-1d2e3f4a5b6c.jpg",
            "images": [
              "https://im.runware.ai/image/os/a14d18/ws/2/ii/3a4b5c6d-7e8f-4a9b-8c0d-2e3f4a5b6c7d.jpg",
              "https://im.runware.ai/image/os/a14d18/ws/2/ii/4b5c6d7e-8f9a-4b0c-9d1e-3f4a5b6c7d8e.jpg"
            ],
            "tags": [
              "Character"
            ]
          }
        ],
        "referenceImages": [
          "https://im.runware.ai/image/os/a14d18/ws/2/ii/5c6d7e8f-9a0b-4c1d-8e2f-4a5b6c7d8e9f.jpg"
        ]
      }
    }
  ]'
```

**CLI**:

```bash
runware run klingai:kling-video@4.0 \
  positivePrompt="<<<element_1>>> walks through the electronics store in <<<image_1>>>, stops at a table, picks up a laptop, and turns it toward the camera with a confident smile. She says in clear American English: \"This one's my favorite for travel.\" Audio: her voice, footsteps, soft store ambience, no music, no subtitles." \
  width=1920 \
  height=1080 \
  duration=8 \
  inputs.elements.0.id=k4-ambassador \
  inputs.elements.0.description="Brand ambassador with a silver pixie cut in a cobalt blazer" \
  inputs.elements.0.frontalImage=https://im.runware.ai/image/os/a14d18/ws/2/ii/2f3a4b5c-6d7e-4f8a-9b0c-1d2e3f4a5b6c.jpg \
  inputs.elements.0.images.0=https://im.runware.ai/image/os/a14d18/ws/2/ii/3a4b5c6d-7e8f-4a9b-8c0d-2e3f4a5b6c7d.jpg \
  inputs.elements.0.images.1=https://im.runware.ai/image/os/a14d18/ws/2/ii/4b5c6d7e-8f9a-4b0c-9d1e-3f4a5b6c7d8e.jpg \
  inputs.elements.0.tags.0=Character \
  inputs.referenceImages.0=https://im.runware.ai/image/os/a14d18/ws/2/ii/5c6d7e8f-9a0b-4c1d-8e2f-4a5b6c7d8e9f.jpg
```

**JSON**:

```json
{
  "taskType": "videoInference",
  "taskUUID": "1e2f3a4b-5c6d-4e7f-8a9b-0c1d2e3f4a5b",
  "model": "klingai:kling-video@4.0",
  "positivePrompt": "<<<element_1>>> walks through the electronics store in <<<image_1>>>, stops at a table, picks up a laptop, and turns it toward the camera with a confident smile. She says in clear American English: \"This one's my favorite for travel.\" Audio: her voice, footsteps, soft store ambience, no music, no subtitles.",
  "width": 1920,
  "height": 1080,
  "duration": 8,
  "inputs": {
    "elements": [
      {
        "id": "k4-ambassador",
        "description": "Brand ambassador with a silver pixie cut in a cobalt blazer",
        "frontalImage": "https://im.runware.ai/image/os/a14d18/ws/2/ii/2f3a4b5c-6d7e-4f8a-9b0c-1d2e3f4a5b6c.jpg",
        "images": [
          "https://im.runware.ai/image/os/a14d18/ws/2/ii/3a4b5c6d-7e8f-4a9b-8c0d-2e3f4a5b6c7d.jpg",
          "https://im.runware.ai/image/os/a14d18/ws/2/ii/4b5c6d7e-8f9a-4b0c-9d1e-3f4a5b6c7d8e.jpg"
        ],
        "tags": [
          "Character"
        ]
      }
    ],
    "referenceImages": [
      "https://im.runware.ai/image/os/a14d18/ws/2/ii/5c6d7e8f-9a0b-4c1d-8e2f-4a5b6c7d8e9f.jpg"
    ]
  }
}
```

The `id` is yours to pick: **up to 20 letters, digits, hyphens or underscores**. Choose one you will recognize later, since it is the only handle you keep. `tags` is optional and classifies the element, with values such as `Character`, `Item`, `Costume` or `Scene`.

Angles are what an element adds over a single reference. The three-quarter and back views **show what a front view cannot**: the back of the blazer and the shape of the haircut when she turns. Shoot them against the same backdrop and in the same light, so the only thing that changes between them is the angle.

### [Reusing an element](https://runware.ai/docs/models/klingai-video-4-0/guides/elements#reusing-an-element)

To bring the ambassador back, send the element with its `id` and description and **no images at all**. The model looks the element up and places the saved character in the new scene:

**TypeScript**:

```typescript
import { createClient } from '@runware/sdk'

const client = await createClient({ apiKey: process.env.RUNWARE_API_KEY })
await client.connect()

const [result] = await client.run({
  model: 'klingai:kling-video@4.0',
  positivePrompt: '<<<element_1>>> stands on a sunny city sidewalk outside a train station and holds a phone up to the camera. She says in clear American English: "Same me, new city, and still on one charge." Vertical handheld creator style, bright daylight. Audio: her voice, street ambience, no music, no subtitles.',
  width: 1080,
  height: 1920,
  duration: 8,
  inputs: {
    elements: [
      {
        id: 'k4-ambassador',
        description: 'Brand ambassador with a silver pixie cut in a cobalt blazer'
      }
    ]
  }
})
```

**Python**:

```python
import asyncio
import os

from runware import Runware

async def main():
    async with Runware(api_key=os.environ["RUNWARE_API_KEY"]) as client:
        results = await client.run({
            "model": "klingai:kling-video@4.0",
            "positivePrompt": "<<<element_1>>> stands on a sunny city sidewalk outside a train station and holds a phone up to the camera. She says in clear American English: \"Same me, new city, and still on one charge.\" Vertical handheld creator style, bright daylight. Audio: her voice, street ambience, no music, no subtitles.",
            "width": 1080,
            "height": 1920,
            "duration": 8,
            "inputs": {
                "elements": [
                    {
                        "id": "k4-ambassador",
                        "description": "Brand ambassador with a silver pixie cut in a cobalt blazer"
                    }
                ]
            }
        })

asyncio.run(main())
```

**cURL**:

```bash
curl https://api.runware.ai/v1 \
  -H "Authorization: Bearer $RUNWARE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    {
      "taskType": "videoInference",
      "taskUUID": "7e8f9a0b-1c2d-4e3f-8a4b-6c7d8e9f0a1b",
      "model": "klingai:kling-video@4.0",
      "positivePrompt": "<<<element_1>>> stands on a sunny city sidewalk outside a train station and holds a phone up to the camera. She says in clear American English: \"Same me, new city, and still on one charge.\" Vertical handheld creator style, bright daylight. Audio: her voice, street ambience, no music, no subtitles.",
      "width": 1080,
      "height": 1920,
      "duration": 8,
      "inputs": {
        "elements": [
          {
            "id": "k4-ambassador",
            "description": "Brand ambassador with a silver pixie cut in a cobalt blazer"
          }
        ]
      }
    }
  ]'
```

**CLI**:

```bash
runware run klingai:kling-video@4.0 \
  positivePrompt="<<<element_1>>> stands on a sunny city sidewalk outside a train station and holds a phone up to the camera. She says in clear American English: \"Same me, new city, and still on one charge.\" Vertical handheld creator style, bright daylight. Audio: her voice, street ambience, no music, no subtitles." \
  width=1080 \
  height=1920 \
  duration=8 \
  inputs.elements.0.id=k4-ambassador \
  inputs.elements.0.description="Brand ambassador with a silver pixie cut in a cobalt blazer"
```

**JSON**:

```json
{
  "taskType": "videoInference",
  "taskUUID": "7e8f9a0b-1c2d-4e3f-8a4b-6c7d8e9f0a1b",
  "model": "klingai:kling-video@4.0",
  "positivePrompt": "<<<element_1>>> stands on a sunny city sidewalk outside a train station and holds a phone up to the camera. She says in clear American English: \"Same me, new city, and still on one charge.\" Vertical handheld creator style, bright daylight. Audio: her voice, street ambience, no music, no subtitles.",
  "width": 1080,
  "height": 1920,
  "duration": 8,
  "inputs": {
    "elements": [
      {
        "id": "k4-ambassador",
        "description": "Brand ambassador with a silver pixie cut in a cobalt blazer"
      }
    ]
  }
}
```

[Watch video](https://runware.ai/docs/assets/output-reuse.b4rq3AQd.mp4)

*A later request that sends only the element's id*

> **Prompt**: <<<element_1>>> stands on a sunny city sidewalk outside a train station and holds a phone up to the camera. She says in clear American English: "Same me, new city, and still on one charge." Vertical handheld creator style, bright daylight. Audio: her voice, street ambience, no music, no subtitles.

Nothing about her looks is in the prompt: it describes the scene and the action, and **the element supplies her appearance**.

> [!NOTE]
> An element belongs to the organization that created it. Its `id` only resolves in requests from that same organization, and an `id` that was never created there is rejected.

### [Video elements](https://runware.ai/docs/models/klingai-video-4-0/guides/elements#video-elements)

An element can also come from **a single clip of 3 to 8 seconds**, in `videos` instead of `frontalImage` and `images`. A clip shows how a person moves and gestures as well as how they look:

[Watch video](https://runware.ai/docs/assets/output-video-element.C2znp69i.mp4)

*A presenter created from a five-second clip*

> **Prompt**: <<<element_1>>> stands at a whiteboard in a modern meeting room and explains a simple bar chart to the camera, gesturing the same way he does in his source clip. He says in American English: "Three numbers, that's all you need to watch. When all three go up together, you had a good quarter." Static medium shot, natural office light. Audio: his voice, quiet office ambience, no music, no subtitles.

**Element clip**:

[Watch video](https://runware.ai/docs/assets/source-presenter.7qnjrm5c.mp4)

> **Prompt**: A medium shot of a man in his forties with a short gray beard and a denim shirt, talking with his hands in a bright office, turning slightly toward the camera and smiling. Static camera, natural daylight. He says in American English: "Here's the thing nobody tells you." Audio: his voice, quiet room tone, no music, no subtitles.

```json
{
  "id": "k4-presenter",
  "description": "Presenter with a short gray beard in a denim shirt",
  "videos": ["https://vm.runware.ai/video/os/a14d18/ws/2/vi/9a0b1c2d-3e4f-4a5b-8c6d-8e9f0a1b2c3d.mp4"]
}
```

A video element takes one clip and **cannot be mixed with images** in the same element. Its clip also counts toward the video budget of the request: five input videos and 30 seconds in total, shared with `inputs.video` and `inputs.referenceVideos`.

### [Several elements in one clip](https://runware.ai/docs/models/klingai-video-4-0/guides/elements#several-elements-in-one-clip)

A request takes **up to seven elements, at most three of them built from video**, and each one gets its own number in the prompt. Two saved hosts in one scene are `<<<element_1>>>` and `<<<element_2>>>`, placed and given lines the same way as people in [Dialogue and on-screen text](https://runware.ai/docs/models/klingai-video-4-0/guides/dialogue-and-on-screen-text).

### [Tips](https://runware.ai/docs/models/klingai-video-4-0/guides/elements#tips)

1. **Create once, reuse many times.** Later requests need the `id` and the description, not the images.
    
2. **Give an image element several angles.** A front view plus a three-quarter and a back view covers the turns a scene asks for.
    
3. **Keep the backdrop and light constant.** Across the angles, only the pose should change.
    
4. **Use a short clip when gestures matter.** A video element carries how someone moves, within 3 to 8 seconds.
    
5. **Describe the scene, not the element.** Its appearance comes from the saved images.
    
6. **Pick ids you will remember.** The `id` is the only handle you keep, and it works only inside your organization.