# Boreal

> Create product, UGC, and presenter videos with synchronized native audio from text, with optional image and audio inputs.


## Overview

- **Endpoint**: `https://fal.run/creatify/boreal`
- **Model ID**: `creatify/boreal`
- **Category**: text-to-video
- **Kind**: inference
**Description**: ## Boreal by Creatify

Boreal generates short-form video and audio together for advertising, product storytelling, UGC-style creative, and presenter content. Start with a text prompt and optionally add a reference image, driving audio, or both. The model returns a single MP4 with visuals and synchronized dialogue, ambience, music, and sound effects.

### Four ways to create

- **Text to video with audio:** describe the scene, action, speech, and sounds.
- **Image to video with audio:** animate a product photo, campaign visual, or character reference.
- **Audio-driven video:** build visuals around supplied narration, dialogue, or a soundtrack.
- **Image and audio to video:** combine a visual reference with a supplied audio track.

### Output options

Generate clips up to approximately 20 seconds at 24 FPS. Choose 720p, 1080p, or 2K, with supported landscape, portrait, square, 4:3, and 3:4 formats. Image-conditioned output can follow the reference image or use a selected aspect ratio. Output is MP4 with H.264 video and AAC audio. Supplied driving audio is preserved in audio-conditioned workflows.

### Prompting

Use **[VISUAL]**, **[SPEECH]**, **[SOUNDS]**, and **[TEXT]** sections to separate direction. Describe a clear action, camera movement, and sound cue. English is the validated language.

### Things to know

Boreal works best with short clips and clear, focused scenes. Reference images guide appearance and composition; exact identity, logos, small text, hands, and complex interactions can vary. Review generated dialogue and lip sync before publishing. Outputs include C2PA provenance metadata and an imperceptible watermark; a visible AI-generated label is optional.

**Tags**: native-audio, text-to-video, image-to-video, audio-to-video, advertising, product-video, ugc, presenter



## Pricing

Your video costs **$0.01 per second at 720p**, **$0.03 per second at 1080p**, or **$0.12 per second at 2K**. For example, a 10-second video costs $0.10, $0.30, or $1.20, respectively.

For more details, see [fal.ai pricing](https://fal.ai/pricing).

## API Information

This model can be used via our HTTP API or more conveniently via our client libraries.
See the input and output schema below, as well as the usage examples.


### Input Schema

The API accepts the following input parameters:


- **`prompt`** (`string`, _required_):
  Direction for the visuals, spoken dialogue, sounds, and on-screen text. Structure it with `[VISUAL]`, `[SPEECH]`, `[SOUNDS]`, and `[TEXT]` sections for best results. English is the validated language.
  - Examples: "[VISUAL]\nA cinematic product close-up of a sparkling-water can on wet black stone.\nCondensation rolls down the can as the camera makes a slow half-orbit.\n\n[SPEECH]\n\"Clean flavor. Bright finish. Nothing extra.\"\n\n[SOUNDS]\nA crisp can opening, gentle fizz, and restrained electronic music.\n\n[TEXT]\nNone."

- **`image_url`** (`string`, _optional_):
  Optional reference image to animate. Guides identity, composition, and appearance; the output follows this image's aspect ratio.
  - Examples: "https://storage.googleapis.com/falserverless/example_inputs/creatify/aurora/input_.png"

- **`audio_url`** (`string`, _optional_):
  Optional driving audio (narration, dialogue, or a soundtrack). When provided it is preserved in the output instead of generated speech.
  - Examples: "https://storage.googleapis.com/falserverless/example_inputs/creatify/aurora/input.wav"

- **`negative_prompt`** (`string`, _optional_):
  Content or artifacts to avoid in the generated video. Default value: `""`
  - Default: `""`

- **`resolution`** (`ResolutionEnum`, _optional_):
  Delivery tier. `2k` is 2016 px on the long edge for 16:9 and 9:16, and the 1440p row for 1:1, 4:3 and 3:4. Default value: `"720p"`
  - Default: `"720p"`
  - Options: `"720p"`, `"1080p"`, `"2k"`

- **`aspect_ratio`** (`AspectRatioEnum`, _optional_):
  Frame ratio. `auto` follows the reference image's own ratio, and is landscape (16:9) when there is no image. A named ratio renders that ratio; with an image it centre-crops the image to it. Default value: `"auto"`
  - Default: `"auto"`
  - Options: `"auto"`, `"16:9"`, `"9:16"`, `"1:1"`, `"4:3"`, `"3:4"`

- **`duration`** (`float`, _optional_):
  Length of the generated video in seconds at 24 FPS, rounded by the model to the nearest legal frame count (5 s -> 121 frames, 10 s -> 241, 15 s -> 361). With `audio_url`, the first `duration` seconds of the audio are used; shorter audio is padded with silence. Default value: `10`
  - Default: `10`
  - Range: `1` to `20`

- **`manifest_disclosure`** (`boolean`, _optional_):
  Add a visible `AI-generated` disclosure label to the video. Invisible C2PA metadata and watermarking are always applied.
  - Default: `false`



**Required Parameters Example**:

```json
{
  "prompt": "[VISUAL]\nA cinematic product close-up of a sparkling-water can on wet black stone.\nCondensation rolls down the can as the camera makes a slow half-orbit.\n\n[SPEECH]\n\"Clean flavor. Bright finish. Nothing extra.\"\n\n[SOUNDS]\nA crisp can opening, gentle fizz, and restrained electronic music.\n\n[TEXT]\nNone."
}
```

**Full Example**:

```json
{
  "prompt": "[VISUAL]\nA cinematic product close-up of a sparkling-water can on wet black stone.\nCondensation rolls down the can as the camera makes a slow half-orbit.\n\n[SPEECH]\n\"Clean flavor. Bright finish. Nothing extra.\"\n\n[SOUNDS]\nA crisp can opening, gentle fizz, and restrained electronic music.\n\n[TEXT]\nNone.",
  "image_url": "https://storage.googleapis.com/falserverless/example_inputs/creatify/aurora/input_.png",
  "audio_url": "https://storage.googleapis.com/falserverless/example_inputs/creatify/aurora/input.wav",
  "resolution": "720p",
  "aspect_ratio": "auto",
  "duration": 10
}
```


### Output Schema

The API returns the following output format:

- **`video`** (`VideoFile`, _required_):
  The generated video with synchronized native audio.
  - Examples: {"content_type":"video/mp4","file_name":"output.mp4","url":"https://storage.googleapis.com/falserverless/example_outputs/creatify/aurora/output.mp4"}



**Example Response**:

```json
{
  "video": {
    "content_type": "video/mp4",
    "file_name": "output.mp4",
    "url": "https://storage.googleapis.com/falserverless/example_outputs/creatify/aurora/output.mp4"
  }
}
```


## Usage Examples

### cURL

```bash
curl --request POST \
  --url https://fal.run/creatify/boreal \
  --header "Authorization: Key $FAL_KEY" \
  --header "Content-Type: application/json" \
  --data '{
     "prompt": "[VISUAL]\nA cinematic product close-up of a sparkling-water can on wet black stone.\nCondensation rolls down the can as the camera makes a slow half-orbit.\n\n[SPEECH]\n\"Clean flavor. Bright finish. Nothing extra.\"\n\n[SOUNDS]\nA crisp can opening, gentle fizz, and restrained electronic music.\n\n[TEXT]\nNone."
   }'
```

### Python

Ensure you have the Python client installed:

```bash
pip install fal-client
```

Then use the API client to make requests:

```python
import fal_client

def on_queue_update(update):
    if isinstance(update, fal_client.InProgress):
        for log in update.logs:
           print(log["message"])

result = fal_client.subscribe(
    "creatify/boreal",
    arguments={
        "prompt": "[VISUAL]
    A cinematic product close-up of a sparkling-water can on wet black stone.
    Condensation rolls down the can as the camera makes a slow half-orbit.

    [SPEECH]
    \"Clean flavor. Bright finish. Nothing extra.\"

    [SOUNDS]
    A crisp can opening, gentle fizz, and restrained electronic music.

    [TEXT]
    None."
    },
    with_logs=True,
    on_queue_update=on_queue_update,
)
print(result)
```

### JavaScript

Ensure you have the JavaScript client installed:

```bash
npm install --save @fal-ai/client
```

Then use the API client to make requests:

```javascript
import { fal } from "@fal-ai/client";

const result = await fal.subscribe("creatify/boreal", {
  input: {
    prompt: "[VISUAL]
  A cinematic product close-up of a sparkling-water can on wet black stone.
  Condensation rolls down the can as the camera makes a slow half-orbit.

  [SPEECH]
  \"Clean flavor. Bright finish. Nothing extra.\"

  [SOUNDS]
  A crisp can opening, gentle fizz, and restrained electronic music.

  [TEXT]
  None."
  },
  logs: true,
  onQueueUpdate: (update) => {
    if (update.status === "IN_PROGRESS") {
      update.logs.map((log) => log.message).forEach(console.log);
    }
  },
});
console.log(result.data);
console.log(result.requestId);
```


## Additional Resources

### Documentation

- [Model Playground](https://fal.ai/models/creatify/boreal)
- [API Documentation](https://fal.ai/models/creatify/boreal/api)
- [OpenAPI Schema](https://fal.ai/api/openapi/queue/openapi.json?endpoint_id=creatify/boreal)

### fal.ai Platform

- [Platform Documentation](https://fal.ai/docs/documentation)
- [Python Client](https://fal.ai/docs/api-reference/client-libraries/python)
- [JavaScript Client](https://fal.ai/docs/api-reference/client-libraries/javascript)

### Other agent-readable surfaces

This file covers one model. To find anything else:

- [Platform overview](https://fal.ai/llms.txt): Entry points and representative endpoint IDs
- [Documentation index](https://fal.ai/docs/llms.txt): Every documentation page
- [Full documentation text](https://fal.ai/docs/llms-full.txt): The whole documentation inlined
- Any other model: `https://fal.ai/models/<endpoint-id>/llms.txt`
