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

> ## Agent Instructions
> Keep the API key in an env var (RENDOBAR_API_KEY), never in chat or committed code.
> Job types change, so fetch the live catalog from GET https://api.rendobar.com/jobs/types rather than relying on memory.
> The full integration prompt for coding agents is at https://rendobar.com/prompts/integrate.md.

# Output, size and validation

> Set the frame size, format, frame rate and quality of a render, and check a timeline for free before you pay for it.

`output` controls the size, frame rate, format and encoder. Give it an explicit `resolution`, or a named `size` preset like `"1080p"`, `"tiktok"` or `"reels"`.

```json theme={null}
"output": { "format": "mp4", "resolution": { "width": 1080, "height": 1920 }, "fps": 30 }
```

A 9:16 canvas with `"fit": "cover"` or a `crop` on the clip turns landscape footage into a vertical Reel that fills the frame, with no black bars. `"fit": "blur"` keeps all of the picture instead, over a blurred copy of itself.

`background` fills whatever the clips do not cover. It takes a hex colour, or `"transparent"`, which png and webm keep as real alpha. mp4 has no transparency, so it refuses that rather than rendering black.

```json theme={null}
{
  "schemaVersion": 1,
  "output": { "format": "webm", "size": "1080p" },
  "timeline": {
    "background": "transparent",
    "tracks": [{ "clips": [{ "asset": { "type": "image", "src": "https://cdn.rendobar.com/assets/brand/logo-mark.png" } }] }]
  }
}
```

`range` renders part of the timeline instead of all of it, and on `jpg` and `png` its `start` is the frame you get.

```json theme={null}
"output": { "format": "png", "size": "1080p", "range": { "start": 4.5 } }
```

## How a picture fills its box

A wide photograph in a phone-shaped box. `contain` shows all of it and leaves bars, `cover` fills the box and cuts what overflows.

<video src="https://cdn.rendobar.com/compose/showcase/fit/before.mp4" poster="https://cdn.rendobar.com/compose/showcase/fit/before.jpg" autoPlay loop muted playsInline controls />

<video src="https://cdn.rendobar.com/compose/showcase/fit/after.mp4" poster="https://cdn.rendobar.com/compose/showcase/fit/after.jpg" autoPlay loop muted playsInline controls />

A compose job renders exactly one file. Two sizes of the same edit are two jobs, which is also how you get them rendered at the same time. `gif` carries no audio, `mp3` is audio only and needs no frame size, and `jpg` and `png` are a single frame.

## Check it before you render

`validate` parses a timeline exactly as a render would and costs nothing. It returns the params as the engine reads them, anything it had to upgrade from an older shape, and warnings for settings the render will ignore.

```ts SDK theme={null}
const check = await client.compose.validate(params);
if (!check.valid) console.error(check.problems);
```

```bash cURL theme={null}
curl -X POST https://api.rendobar.com/compose/validate \
  -H "Authorization: Bearer rb_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "params": { "schemaVersion": 1, "output": { "format": "mp4", "size": "1080p" }, "timeline": { "tracks": [{ "clips": [{ "asset": { "type": "video", "src": "https://example.com/a.mp4" } }] }] } } }'
```

Every output field is in the [output reference](/docs/docs/jobs/compose/reference/output).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.