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

# Subtitles and timers

> Add every subtitle of a video as one clip, written in the timeline or read from an .srt or .vtt file, and put a countdown or a stopwatch over a clip.

A `subtitles` clip shows every caption of a video, each at its time. A `timer` counts over its own length. Both take the same `style` as a [text clip](/docs/docs/jobs/compose/text): font, size, colour, stroke, shadow and background box.

## Subtitles

Each cue has a `start` and an `end`, in seconds from the clip's start, and its `text`.

```json theme={null}
{
  "asset": {
    "type": "subtitles",
    "cues": [
      { "start": 0, "end": 1.8, "text": "Subtitles live in the timeline." },
      { "start": 2, "end": 4, "text": "One clip, every line." }
    ],
    "style": { "font": "Inter", "size": 44, "color": "#FFFFFF", "background": "#000000B0" }
  },
  "transform": { "position": { "x": "50%", "y": "86%" } }
}
```

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

Keep captions low in the frame and clear of the buttons phone apps draw on top. On a vertical video, keep them between 13.5% and 83% of the height. See [editing conventions](/docs/docs/jobs/compose/craft#text-placement-and-size).

### From a file

Point `src` at an `.srt` or `.vtt` file instead of listing cues. The file sets the timing.

```json theme={null}
{ "asset": { "type": "subtitles", "src": "https://example.com/captions.srt", "style": { "size": 40 } } }
```

### How each line appears

`reveal` sets how each cue appears.

| `reveal` | Each cue |
| - | - |
| `line` | Appears whole at its start time. The default. |
| `typewriter` | Types out word by word over the cue, as in social video. |

For word-by-word captions made from the speech, with no cues to write, run [animated captions](/docs/docs/jobs/captions/animate) on the finished video.

## Timers

`direction` sets which way a timer counts. `up`, the default, counts from zero. `down` counts from the clip's length to zero, so a 10-second clip starts at 10.

```json theme={null}
{
  "asset": { "type": "timer", "direction": "down", "format": "MM:SS", "style": { "font": "Inter", "size": 96, "weight": 800, "color": "#FFFFFF" } },
  "start": 0,
  "length": 10
}
```

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

| `format` | Shows |
| - | - |
| `SS` | Seconds |
| `SS.S` | Seconds and tenths |
| `SS.SS` | Seconds and hundredths |
| `MM:SS` | Minutes and seconds |
| `MM:SS.SS` | Minutes, seconds and hundredths |
| `HH:MM:SS` | Hours, minutes and seconds |

## What they can animate

Subtitles and timers take an entrance in `style.animate`, limited to `fade` and the four slides (`slideUp`, `slideDown`, `slideLeft`, `slideRight`). They reject `blur`, `scale`, a split with `by`, and an exit with `out`. Only a text clip takes an exit.

Every field is in the [subtitles](/docs/docs/jobs/compose/reference/subtitles) and [timer](/docs/docs/jobs/compose/reference/timer) references.


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