> ## 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.

# Timer asset reference

> Add a clock that counts up or down over the length of its own clip, with every field the asset accepts listed.

Set `asset.type` to `"timer"`. These are its own fields, on top of the [clip fields](/docs/docs/jobs/compose/reference/timeline#clip) every clip takes.

| Field | Type | What it does | | |
| - | - | - | - | - |
| `direction` | `"up"` \| `"down"` | up counts from zero, down counts to zero from the clip's length. default `"up"`. | | |
| `format` | `"SS"` \| `"SS.S"` \| `"SS.SS"` \| `"MM:SS"` \| `"MM:SS.SS"` \| `"HH:MM:SS"` | What the clock shows. SS.SS is a race clock, MM:SS a countdown to a launch, HH:MM:SS a stream timer. default `"MM:SS"`. | | |
| `style` | object | default `{}`. | | |
| `style.font` | string | Font family, or a CSS fallback stack. Any Google Fonts family works by name. Bundled and instant: Inter, Bebas Neue, Anton, Montserrat, Poppins, Roboto, Oswald. Families declared in the `fonts` job input win over both. A stack falls through in CSS order, so "Display, Inter, sans-serif" tries each in turn. default `"Inter"`. | | |
| `style.size` | number | Font size in pixels of the output frame. \~64-96 for titles at 1080p, \~36-48 for lower thirds. Defaults to 64. default `64`, over 0. | | |
| `style.weight` | integer | Font weight 100..1000 (400 regular, 700 bold, 800+ display). Honoured exactly on variable fonts; snapped to the nearest available weight otherwise. default `400`, min 100, max 1000. | | |
| `style.italic` | boolean | Render the italic cut of the family, when it has one. default `false`. | | |
| `style.color` | string | Text fill color, hex like "#FFFFFF". default `"#FFFFFF"`, pattern \`^#(\[0-9A-Fa-f]3 | \[0-9A-Fa-f]6 | \[0-9A-Fa-f]8)\$\`. |
| `style.stroke` | object | Outline around the glyphs. A 2-4px black stroke keeps white text readable on bright footage. | | |
| `style.stroke.color` \* | string | Outline color, hex like "#000000". pattern \`^#(\[0-9A-Fa-f]3 | \[0-9A-Fa-f]6 | \[0-9A-Fa-f]8)\$\`. |
| `style.stroke.width` \* | number | Outline width in pixels. 2 to 4 keeps text readable over busy footage. min 0. | | |
| `style.background` | string | Solid box color behind the text, hex. Omit for no box. pattern \`^#(\[0-9A-Fa-f]3 | \[0-9A-Fa-f]6 | \[0-9A-Fa-f]8)\$\`. |
| `style.align` | `"left"` \| `"center"` \| `"right"` | How the lines line up, and which side of the text sits on the clip's transform.position x: left starts there, center is centred on it, right ends there. Place the text with the clip's transform, not here. default `"center"`. | | |
| `style.animate` | object | How the text enters: \{"type":"fade"} or one of the slides. A split (`by`), a blur or scale entrance and an exit (`out`) are not available here, because the text changes as it plays. | | |
| `style.animate.type` \* | `"fade"` \| `"slideUp"` \| `"slideDown"` \| `"slideLeft"` \| `"slideRight"` \| `"blur"` \| `"scale"` | How the text arrives: fade in place, slide in from the named direction while fading, blur comes into focus, scale grows from small. | | |
| `style.animate.duration` | number | Seconds the whole entrance takes. With `by`, the last unit lands at this time. 0.4 to 0.8 reads polished for one piece of text, 0.8 to 1.5 for a split title. default `0.5`, over 0. | | |
| `style.animate.by` | `"letter"` \| `"word"` \| `"line"` | Animate the text one letter, word or line at a time: kinetic titles and lower thirds. Omit it and the text moves as one piece. | | |
| `style.animate.stagger` | number | Seconds between one unit starting and the next. Omit it and the units spread evenly over the first 40% of `duration`. min 0. | | |
| `style.animate.order` | `"start"` \| `"end"` \| `"center"` \| `"edges"` \| `"random"` | Which unit starts first. center and edges start units at the same distance together. random is seeded by the clip, so a re-render is identical. default `"start"`. | | |
| `style.animate.out` | `"fade"` \| `"slideUp"` \| `"slideDown"` \| `"slideLeft"` \| `"slideRight"` \| `"blur"` \| `"scale"` | How the text leaves over the clip's last `duration` seconds, with the same split and order. Omit it to hold until the clip ends. | | |
| `style.shadow` | object | Drop shadow behind the text, adds depth and readability. | | |
| `style.shadow.color` | string | Shadow color, hex. default `"#000000"`, pattern \`^#(\[0-9A-Fa-f]3 | \[0-9A-Fa-f]6 | \[0-9A-Fa-f]8)\$\`. |
| `style.shadow.opacity` | number | Shadow opacity 0..1. default `0.6`, min 0, max 1. | | |
| `style.shadow.offsetX` | number | Horizontal shadow offset in pixels. default `4`. | | |
| `style.shadow.offsetY` | number | Vertical shadow offset in pixels. default `4`. | | |

Fields marked `*` are required. Every table on this page is generated from the schema the API validates with, so it cannot drift from what a render accepts.


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