Kling O1 performs precise image edits under strong reference control. Supply up to 10 reference images and character elements, then address them directly in the prompt as @Image1 or @Element1 to transform subjects, styles, and local details while preserving visual consistency.
Test this model instantly in the Console Playground โ no code required
Copy usage instructions for Claude, ChatGPT, or other AI
curl -X POST "https://api.core.today/v1/predictions" \
-H "Content-Type: application/json" \
-H "X-API-Key: cdt_your_api_key" \
-d '{
"model": "fal-ai/kling-image/o1",
"input": {
"prompt": "Place @Image1 on the marble counter in @Image2, matching the warm window light and keeping the product label fully legible",
"image_urls": [
"https://storage.googleapis.com/falserverless/example_inputs/kling-image-o1/input.png",
"https://storage.googleapis.com/falserverless/example_inputs/kling-image-o1/input-2.png"
],
"resolution": "1K",
"aspect_ratio": "auto",
"num_images": 1
}
}'| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
prompt | string | Yes | - | Text prompt, up to 2500 characters. Reference the supplied images as @Image1, @Image2, ... (1-indexed; use @Image when there is only one) and character elements as @Element1, @Element2, ... |
image_urls | array | Yes | - | Reference images, 1-indexed in the prompt as @Image1, @Image2, ... Maximum 10 including elements. |
elements | array | No | - | Characters or objects to include, referenced as @Element1, @Element2, ... Each element takes a frontal_image_url plus optional reference_image_urls. Maximum 10 including reference images. |
resolution | string | No | 1K | Output resolution. 1K is standard, 2K is high-res. Both cost the same. 1K2K |
num_images | integer | No | 1 | Number of images to generate (1-9). Charged per image. |
aspect_ratio | string | No | auto | Aspect ratio of the generated images. 'auto' picks one based on the input content. auto21:916:93:24:31:13:42:39:16 |
output_format | string | No | png | The format of the generated image. jpegpngwebp |
There are 3 ways to provide files for the image_urls parameter:
Pass a publicly accessible URL directly. With the Storage API (POST /v1/files/upload-url) the file uploads straight to S3 (50MB per file) and you pass the returned file_url.
{
"model": "fal-ai/kling-image/o1",
"input": {
"prompt": "your prompt here",
"image_urls": ["https://example.com/image.jpg"]
}
}Attach files directly to POST /v1/predictions/upload. No separate upload step, but the bytes pass through the API server so the whole request is capped at 10MB.
curl -X POST "https://api.core.today/v1/predictions/upload" \
-H "X-API-Key: cdt_your_api_key" \
-F "model=fal-ai/kling-image/o1" \
-F 'input={"prompt":"your prompt here"}' \
-F "file:image_urls=@your_file.png"Common parameters used when calling POST /v1/predictions.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
model | string | Yes | - | Model identifier |
input | object | Yes | - | Object containing the model-specific parameters from the table above |
output_folder | string | No | - | Folder path for output files (max 256 chars, '..' not allowed) |
webhook_url | string | No | - | Webhook URL to call on completion |
is_public | boolean | No | false | If true, output files are also available via permanent public URLs |
@Image1 is the product, @Image2 is the scene. Naming both in one sentence tells the model exactly what goes where.
curl -X POST "https://api.core.today/v1/predictions" \
-H "Content-Type: application/json" \
-H "X-API-Key: cdt_your_api_key" \
-d '{
"model": "fal-ai/kling-image/o1",
"input": {
"prompt": "Place @Image1 on the marble counter in @Image2, matching the warm window light and keeping the product label fully legible",
"image_urls": [
"https://storage.googleapis.com/falserverless/example_inputs/kling-image-o1/input.png",
"https://storage.googleapis.com/falserverless/example_inputs/kling-image-o1/input-2.png"
],
"resolution": "1K",
"aspect_ratio": "auto",
"num_images": 1
}
}'An element carries a frontal view plus extra angles, which holds the character steady across generations better than a single flat reference.
curl -X POST "https://api.core.today/v1/predictions" \
-H "Content-Type: application/json" \
-H "X-API-Key: cdt_your_api_key" \
-d '{
"model": "fal-ai/kling-image/o1",
"input": {
"prompt": "Put @Element1 in the driver's seat of the car in @Image1, keep the face and outfit identical, evening city lights outside",
"image_urls": [
"https://storage.googleapis.com/falserverless/example_inputs/kling-image-o1/input.png"
],
"elements": [
{
"frontal_image_url": "https://storage.googleapis.com/falserverless/example_inputs/kling-image-o1/element-1-front.png",
"reference_image_urls": [
"https://storage.googleapis.com/falserverless/example_inputs/kling-image-o1/element-1-reference.png"
]
}
],
"resolution": "2K",
"num_images": 1
}
}'POST /v1/predictions