# Config reference

> Every field of a project's config on build 0.9.0-alpha1-2026-10-20T14-10Z-3f05aa, generated from its schema.

Every field of a project's `config` on build `0.9.0-alpha1-2026-10-20T14-10Z-3f05aa`, generated from that build's
JSON Schema: the same schema `GET /schema` returns, and the one the API validates against. The
guides explain how the pieces fit together; this page lists all of them.

Objects with several kinds (engines, voices, outputs) are told apart by `@type`, and each kind
takes only its own fields. A field marked *deprecated* is still accepted; do not rely on it.

> **Note:**
> Another build may differ. `GET /schema?buildVersion=…` answers the schema of any build, and
> `buildVersion` of a project names the build it runs.

## The config

| Field | Type | Default | |
|---|---|---|---|
| `sourceMedia` | one of [Input folder](#input-folder), [RSS feed](#rss-feed), [Media RSS feed](#media-rss-feed) |  | Where the media comes from: the project’s input folder (`S3FolderSource`, also what a config without one gets), an RSS feed (`RssSource`: the media in each item’s `<enclosure>`) or a Media RSS feed (`MrssSource`: each item’s `<media:content>`). Set it on create: a change between the folder and a feed is refused; a feed’s `url` and its kind may change. |
| `transcription` | one of [Speechmatics](#speechmatics), [Soniox](#soniox), [Sarvam](#sarvam) | required | What is spoken in the media, and the engine that transcribes it. `@type` picks the engine; left out, the first engine that transcribes `language` is used. |
| `translations` | array of [Translation](#translation) |  | One entry per target language: its translation engine and, to dub it, `ttsOptions`. Left out or empty, the media is only transcribed. |
| `outputs` | array of one of [Output folder](#output-folder), [Output RSS feed](#output-rss-feed), [Output Media RSS feed](#output-media-rss-feed) | required | Where the results go: the project’s output folder (`S3FolderOutput`), and for a feed project one re-published feed per language (`RssOutput` with an `RssSource`, `MrssOutput` with an `MrssSource`). Each lists its `items`, and each item is one file written for every input. |

## `sourceMedia`

<p className="text-sm">In `sourceMedia`, by `@type`.</p>

### Input folder

`"@type": "S3FolderSource"`

Files put into the project’s input folder (`storage.inputPath`), through the API or the AWS role; each is processed once.

No fields besides `@type`.

### RSS feed

`"@type": "RssSource"`

An RSS 2.0 feed (a podcast feed, say), read every 30 seconds. Each item’s media is its `<enclosure>`, downloaded into the input folder, named after the item, and processed once; an item whose media URL changes is processed again. Files cannot be uploaded to such a project.

| Field | Type | Default | |
|---|---|---|---|
| `url` | string | required | The feed: `https://` only, no credentials in it, on a host that resolves to a public address. A new URL is fetched and read when the project is saved. |

### Media RSS feed

`"@type": "MrssSource"`

A Media RSS feed, read every 30 seconds. Each item’s media is its `<media:content>` (the default one of a `<media:group>`), downloaded into the input folder, named after the item, and processed once; an item whose media URL changes is processed again. Files cannot be uploaded to such a project.

| Field | Type | Default | |
|---|---|---|---|
| `url` | string | required | The feed: `https://` only, no credentials in it, on a host that resolves to a public address. A new URL is fetched and read when the project is saved. |

## `transcription`

<p className="text-sm">In `transcription`, by `@type`.</p>

### Speechmatics

`"@type": "Speechmatics"`

Broad language coverage; the default for most languages.

| Field | Type | Default | |
|---|---|---|---|
| `language` | string | required | The language spoken in the media, as a code from `GET /enums/languages` (`en`, `es`, `pt-BR`). |
| `outputLabel` | string |  | The label written where an output shows one, such as a subtitle track's name. Default: the language's English name. |
| `diarization` *deprecated* | boolean | `true` | Ignored: speakers are always told apart. |
| `maxDelay` | number |  | Seconds the recognizer may take to settle a word; longer is more accurate. Left out, it is chosen for you. From 0 to 4. |
| `filterDisfluency` | boolean | `true` | Drop "uh", "um" and similar from the transcript. |
| `filterProfanity` | string | `"remove"` | `remove` takes profanity out of the transcript; `keep` leaves it in. One of `keep`, `remove`. |
| `volumeThreshold` | number |  | Ignore audio quieter than this, so background noise is not transcribed. From 0 to 100. |
| `punctuationSensitivity` | number |  | How readily punctuation is added: lower is more conservative. Left out, the language’s own default (usually 0.5). From 0 to 1. |
| `previewModel` | boolean | `false` | Use Speechmatics' preview model. |
| `dictionary` | string or integer |  | A dictionary of your account in the transcription language, by id or name: words the engine should recognise, such as names and terminology. Managed with the Live API (`/v2/dictionaries`). Left out, your account's default for the language applies, if it has one; `null` applies none. |
| `postprocessingDictionary` | one of object, integer, string |  | Word replacements applied to the transcript before translation, so a name is right in every language. The key is the word you want; the value lists what the engine writes instead, as literals or Java regular expressions. Matching ignores case and applies to single words. An empty key deletes the words it lists. Or a postprocessing dictionary of your account in the transcription language, by id or name, managed with the Live API (`/v2/postprocessing-dictionaries`). Left out, your account's default for the language applies, if it has one; `null` applies none. |
| `expectedLanguages` | array of string |  | With `language: "mul"`, the languages to expect in the media, as codes. |

### Soniox

`"@type": "Soniox"`

Strong accuracy, and the engine for mixed-language media (`language: "mul"`).

| Field | Type | Default | |
|---|---|---|---|
| `language` | string | required | The language spoken in the media, as a code from `GET /enums/languages` (`en`, `es`, `pt-BR`). |
| `model` | string | `"stt-rt-v5"` | The Soniox model. |
| `extraPrompt` | string |  | Context that guides recognition: the topic, names, terminology. |
| `outputLabel` | string |  | The label written where an output shows one, such as a subtitle track's name. Default: the language's English name. |
| `diarization` *deprecated* | boolean | `true` | Ignored: speakers are always told apart. |
| `filterDisfluency` | boolean | `true` | Drop "uh", "um" and similar from the transcript. |
| `dictionary` | string or integer |  | A dictionary of your account in the transcription language, by id or name: words the engine should recognise, such as names and terminology. Managed with the Live API (`/v2/dictionaries`). Left out, your account's default for the language applies, if it has one; `null` applies none. |
| `postprocessingDictionary` | one of object, integer, string |  | Word replacements applied to the transcript before translation, so a name is right in every language. The key is the word you want; the value lists what the engine writes instead, as literals or Java regular expressions. Matching ignores case and applies to single words. An empty key deletes the words it lists. Or a postprocessing dictionary of your account in the transcription language, by id or name, managed with the Live API (`/v2/postprocessing-dictionaries`). Left out, your account's default for the language applies, if it has one; `null` applies none. |
| `expectedLanguages` | array of string |  | With `language: "mul"`, the languages to expect in the media, as codes. |

### Sarvam

`"@type": "Sarvam"`

Specialised in Indian languages.

| Field | Type | Default | |
|---|---|---|---|
| `language` | string | required | The language spoken in the media, as a code from `GET /enums/languages` (`en`, `es`, `pt-BR`). |
| `outputLabel` | string |  | The label written where an output shows one, such as a subtitle track's name. Default: the language's English name. |
| `diarization` *deprecated* | boolean | `true` | Ignored: speakers are always told apart. |
| `filterDisfluency` | boolean | `true` | Drop "uh", "um" and similar from the transcript. |
| `dictionary` | string or integer |  | Not available for Sarvam. |
| `postprocessingDictionary` | one of object, integer, string |  | Word replacements applied to the transcript before translation, so a name is right in every language. The key is the word you want; the value lists what the engine writes instead, as literals or Java regular expressions. Matching ignores case and applies to single words. An empty key deletes the words it lists. Inline only: your account's postprocessing dictionaries apply to Speechmatics and Soniox. |
| `model` | string | `"saaras:v4"` | The Sarvam model. |
| `prompt` | string |  | Terminology hint applied to the final transcript. |
| `silenceDuration` | seconds | `"0.3"` | The pause, in seconds, that ends an utterance. Shorter pauses give smaller, earlier chunks. Written as a string: `"0.3"`, `"10"`, `"1:30"`. |
| `expectedLanguages` | array of string |  | With `language: "mul"`, the languages to expect in the media, as codes. |

## `translations`

<p className="text-sm">In `translations[]`.</p>

### Translation

One target language.

| Field | Type | Default | |
|---|---|---|---|
| `language` | string | required | The target language, as a code from `GET /enums/languages`. |
| `engine` | one of [NoTranslation](#notranslation), [Soniox translation](#soniox-translation), [DeepL](#deepl), [Google Translate](#google-translate), [OpenAI](#openai), [Nova](#nova), [Gemini](#gemini) |  | The translation engine. Left out, the recommended engine for the language is used, and stored in the project. |
| `ttsOptions` | [Dubbing](#dubbing) |  | Dub this language. Left out, the translation is used by subtitle outputs only. |
| `outputLabel` | string |  | The label written where an output shows one. Default: the language's English name. |

<p className="text-sm">In `translations[].engine`, by `@type`.</p>

### NoTranslation

`"@type": "NoTranslation"`

No machine translation: the source text is passed through.

| Field | Type | Default | |
|---|---|---|---|
| `glossary` | one of object, integer |  | Terms with a fixed translation, `{"source term": "translation"}`: names, brands, terminology. Or the id of a glossary of your account, from the transcription language into this one, managed with the Live API (`/v2/glossaries`). |

### Soniox translation

`"@type": "Soniox"`

Pairs with Soniox transcription.

| Field | Type | Default | |
|---|---|---|---|
| `glossary` | one of object, integer |  | Terms with a fixed translation, `{"source term": "translation"}`: names, brands, terminology. Or the id of a glossary of your account, from the transcription language into this one, managed with the Live API (`/v2/glossaries`). |

### DeepL

`"@type": "DeepL"`

Fast and literal; excellent for European languages.

| Field | Type | Default | |
|---|---|---|---|
| `useContext` *deprecated* | boolean | `true` | Ignored: always on. |
| `glossary` | one of object, integer |  | Terms with a fixed translation, `{"source term": "translation"}`: names, brands, terminology. Or the id of a glossary of your account, from the transcription language into this one, managed with the Live API (`/v2/glossaries`). |

### Google Translate

`"@type": "Google"`

Google Translate: the widest language coverage.

| Field | Type | Default | |
|---|---|---|---|
| `glossary` | one of object, integer |  | Terms with a fixed translation, `{"source term": "translation"}`: names, brands, terminology. Or the id of a glossary of your account, from the transcription language into this one, managed with the Live API (`/v2/glossaries`). |

### OpenAI

`"@type": "OpenAI"`

OpenAI GPT: natural, context-aware translation.

| Field | Type | Default | |
|---|---|---|---|
| `model` | string | `"GPT-5.6 Luna"` | The model. One of `GPT-5.4 mini`, `GPT-5.6 Luna`, `GPT-5.6 Luna (Thinking)`. |
| `glossary` | one of object, integer |  | Terms with a fixed translation, `{"source term": "translation"}`: names, brands, terminology. Or the id of a glossary of your account, from the transcription language into this one, managed with the Live API (`/v2/glossaries`). |
| `extraPrompt` | string | `"Avoid profane language in translated output."` | Instructions for the translator: style, register, audience. They replace the default, so restate it to keep it. |
| `latencyMode` | string |  | `quality` translates whole sentences; `low-latency` smaller units. Left out, it is chosen to suit the transcription engine. One of `quality`, `low-latency`, `null`. |
| `compression` | boolean | `true` | Condense long translations, which keeps a dub in step with the original speech. |
| `enableSpeakerGenderAware` *deprecated* | boolean | `true` | Deprecated by the build; kept so older configs stay valid. |

### Nova

`"@type": "Nova"`

Amazon Nova: natural, context-aware translation.

| Field | Type | Default | |
|---|---|---|---|
| `model` | string | `"Nova 2 Lite"` | The model. One of `Nova 2 Lite`. |
| `glossary` | one of object, integer |  | Terms with a fixed translation, `{"source term": "translation"}`: names, brands, terminology. Or the id of a glossary of your account, from the transcription language into this one, managed with the Live API (`/v2/glossaries`). |
| `extraPrompt` | string | `"Avoid profane language in translated output."` | Instructions for the translator: style, register, audience. They replace the default, so restate it to keep it. |
| `latencyMode` | string |  | `quality` translates whole sentences; `low-latency` smaller units. Left out, it is chosen to suit the transcription engine. One of `quality`, `low-latency`, `null`. |
| `compression` | boolean | `true` | Condense long translations, which keeps a dub in step with the original speech. |
| `enableSpeakerGenderAware` *deprecated* | boolean | `true` | Deprecated by the build; kept so older configs stay valid. |

### Gemini

`"@type": "Gemini"`

Google Gemini: natural, context-aware translation. A strong default for dubbing.

| Field | Type | Default | |
|---|---|---|---|
| `model` | string | `"Gemini 3.1 Flash Lite"` | The model. One of `Gemini 3.1 Flash Lite`, `Gemini 3.1 Flash Lite (Thinking)`. |
| `glossary` | one of object, integer |  | Terms with a fixed translation, `{"source term": "translation"}`: names, brands, terminology. Or the id of a glossary of your account, from the transcription language into this one, managed with the Live API (`/v2/glossaries`). |
| `extraPrompt` | string | `"Avoid profane language in translated output."` | Instructions for the translator: style, register, audience. They replace the default, so restate it to keep it. |
| `latencyMode` | string |  | `quality` translates whole sentences; `low-latency` smaller units. Left out, it is chosen to suit the transcription engine. One of `quality`, `low-latency`, `null`. |
| `compression` | boolean | `true` | Condense long translations, which keeps a dub in step with the original speech. |
| `enableSpeakerGenderAware` *deprecated* | boolean | `true` | Deprecated by the build; kept so older configs stay valid. |

<p className="text-sm">In `translations[].ttsOptions`.</p>

### Dubbing

How a translation is dubbed: the voice, and how the new voice is mixed with the original.

| Field | Type | Default | |
|---|---|---|---|
| `provider` | one of [Amazon Polly](#amazon-polly), [Azure](#azure), [Deepdub](#deepdub), [Google Text-to-Speech](#google-text-to-speech), [MultiVoice](#multivoice), [Sarvam voice cloning](#sarvam-voice-cloning) | required | The voice provider and the voice. |
| `locale` | string |  | The pronunciation locale, such as `es-XL` (Latin American Spanish) or `pt-BR`. It must belong to the translation's language. Left out, it is chosen from the language. |
| `volume` | number | `1` | Level of the new voice. From 0 to 2. |
| `originalAudioSplitting` | boolean | `true` | `true` separates the original into voices and background, keeps the background and removes the original voices: a clean dub. `false` keeps the whole original under the new voice, at `originalAudioVolume`: a voice-over. |
| `originalAudioVolume` | number | `1` | Level of what is kept of the original: the background, or the whole original for a voice-over. `0` leaves it out; `1` is its own level. From 0 to 10. |
| `lateUtteranceTimeout` | seconds | `"10"` | Seconds after which a line that could not be synthesised in time is skipped. Written as a string: `"0.3"`, `"10"`, `"1:30"`. |
| `dictionary` | object |  | How words are spoken: `{"SyncWords": "sink words"}` has "SyncWords" said as "sink words". |

<p className="text-sm">In `translations[].ttsOptions.provider`, by `@type`.</p>

### Amazon Polly

`"@type": "Amazon"`

Amazon Polly voices, by name. `GET /voices?provider=Amazon` lists known ones.

| Field | Type | Default | |
|---|---|---|---|
| `voice` | string | required | The voice, by its id or name in the provider's catalogue. It must speak the target language. Only a Deepdub voice is checked when the project is saved; for Amazon, Azure and Google, `GET /voices` lists known ones. See [Choosing a voice](/vod-express/configuration/voices). |
| `engine` | string | `"NEURAL"` | The Polly engine; not every voice has every engine. One of `STANDARD`, `NEURAL`, `GENERATIVE`. |
| `rate` | integer | `100` | Speaking rate in percent, used with `rateStrategy: "static"`. From 20 to 200. |
| `rateStrategy` | string | `"dynamic"` | `dynamic` speeds each line up or slows it down to fit the time the original took; `static` keeps `rate`. One of `static`, `dynamic`. |
| `minDynamicRate` | integer | `80` | The slowest `dynamic` may go, in percent. From 50 to 200. |
| `maxDynamicRate` | integer | `160` | The fastest `dynamic` may go, in percent. From 50 to 200. |

### Azure

`"@type": "Azure"`

Microsoft Azure neural voices, by name. `GET /voices?provider=Azure` lists known ones.

| Field | Type | Default | |
|---|---|---|---|
| `voice` | string | required | The voice, by its id or name in the provider's catalogue. It must speak the target language. Only a Deepdub voice is checked when the project is saved; for Amazon, Azure and Google, `GET /voices` lists known ones. See [Choosing a voice](/vod-express/configuration/voices). |
| `rate` | integer | `100` | Speaking rate in percent, used with `rateStrategy: "static"`. From 20 to 200. |
| `rateStrategy` | string | `"dynamic"` | `dynamic` speeds each line up or slows it down to fit the time the original took; `static` keeps `rate`. One of `static`, `dynamic`. |
| `minDynamicRate` | integer | `80` | The slowest `dynamic` may go, in percent. From 50 to 200. |
| `maxDynamicRate` | integer | `160` | The fastest `dynamic` may go, in percent. From 50 to 200. |

### Deepdub

`"@type": "Deepdub"`

Clones each speaker's own voice into the target language.

| Field | Type | Default | |
|---|---|---|---|
| `voice` | string | required | Always `auto`, which clones each speaker's own voice; anything else is refused. |
| `model` | string | `"syncwords34-baked"` | The Deepdub model. |
| `backupModel` | string | `"dd-etts-3.4"` | The model used when `model` is unavailable. |
| `promptBoost` | boolean | `false` | Work harder to reproduce each speaker's characteristics; less robust. |
| `cleanMode` | boolean | `false` | More robust with noisy source audio; somewhat the opposite of `promptBoost`. Not every model has it. |
| `referenceBufferDuration` | seconds | `"2"` | Seconds of each speaker's audio used as the reference for cloning. Written as a string: `"0.3"`, `"10"`, `"1:30"`. |
| `accentLocale` | string |  | Blend in an accent: a Deepdub locale, mixed in by `accentRatio`. |
| `accentRatio` | number | `0.75` | How much of `accentLocale` to blend in: 0 is fully native, 1 fully the accent. From 0 to 1. |
| `rate` | integer | `100` | Speaking rate in percent, used with `rateStrategy: "static"`. From 20 to 200. |
| `rateStrategy` | string | `"dynamic"` | `dynamic` speeds each line up or slows it down to fit the time the original took; `static` keeps `rate`. One of `static`, `dynamic`. |
| `minDynamicRate` | integer | `80` | The slowest `dynamic` may go, in percent. From 50 to 200. |
| `maxDynamicRate` | integer | `160` | The fastest `dynamic` may go, in percent. From 50 to 200. |

### Google Text-to-Speech

`"@type": "Google"`

Google Cloud Text-to-Speech voices, by name. `GET /voices?provider=Google` lists known ones.

| Field | Type | Default | |
|---|---|---|---|
| `voice` | string | required | The voice, by its id or name in the provider's catalogue. It must speak the target language. Only a Deepdub voice is checked when the project is saved; for Amazon, Azure and Google, `GET /voices` lists known ones. See [Choosing a voice](/vod-express/configuration/voices). |
| `rate` | integer | `100` | Speaking rate in percent, used with `rateStrategy: "static"`. From 20 to 200. |
| `rateStrategy` | string | `"dynamic"` | `dynamic` speeds each line up or slows it down to fit the time the original took; `static` keeps `rate`. One of `static`, `dynamic`. |
| `minDynamicRate` | integer | `80` | The slowest `dynamic` may go, in percent. From 50 to 200. |
| `maxDynamicRate` | integer | `160` | The fastest `dynamic` may go, in percent. From 50 to 200. |

### MultiVoice

`"@type": "MultiVoice"`

A voice for each speaker, chosen for you from SyncWords' voices for the translation's language.

| Field | Type | Default | |
|---|---|---|---|
| `rate` | integer | `100` | Speaking rate in percent, used with `rateStrategy: "static"`. From 20 to 200. |
| `rateStrategy` | string | `"dynamic"` | `dynamic` speeds each line up or slows it down to fit the time the original took; `static` keeps `rate`. One of `static`, `dynamic`. |
| `minDynamicRate` | integer | `80` | The slowest `dynamic` may go, in percent. From 50 to 200. |
| `maxDynamicRate` | integer | `160` | The fastest `dynamic` may go, in percent. From 50 to 200. |

### Sarvam voice cloning

`"@type": "Sarvam"`

Voice cloning for Indian languages.

| Field | Type | Default | |
|---|---|---|---|
| `rate` | integer | `100` | Speaking rate in percent, used with `rateStrategy: "static"`. From 20 to 200. |
| `rateStrategy` | string | `"dynamic"` | `dynamic` speeds each line up or slows it down to fit the time the original took; `static` keeps `rate`. One of `static`, `dynamic`. |
| `minDynamicRate` | integer | `80` | The slowest `dynamic` may go, in percent. From 50 to 200. |
| `maxDynamicRate` | integer | `160` | The fastest `dynamic` may go, in percent. From 50 to 200. |

## `outputs`

<p className="text-sm">In `outputs[]`, by `@type`.</p>

### Output folder

`"@type": "S3FolderOutput"`

The project’s output folder (`storage.outputPath`). One per project; its items’ names must differ.

| Field | Type | Default | |
|---|---|---|---|
| `items` | array of one of [Video file](#video-file), [Audio file](#audio-file), [Subtitle file](#subtitle-file) | required | The files written to the output folder for every input. |

### Output RSS feed

`"@type": "RssOutput"`

The source RSS feed re-published in one language, at `GET /feeds/{id}/{language}/feed.xml`: every item whose media is done links the dubbed file in its `<enclosure>` instead, `<channel><language>` is set, and the rest of the feed passes through. Items not done yet are left out. Needs an `RssSource`; one per language.

| Field | Type | Default | |
|---|---|---|---|
| `language` | string | required | The feed’s language: the transcription language or a translation language. Written to `<channel><language>`. |
| `items` | array of one of [Video file](#video-file), [Audio file](#audio-file), [Subtitle file](#subtitle-file) | required | Exactly one video or audio file, which each feed item links to; other items are written beside it (under `output/feeds/{language}/`) and not linked yet. |

### Output Media RSS feed

`"@type": "MrssOutput"`

The source Media RSS feed re-published in one language, at `GET /feeds/{id}/{language}/feed.xml`: every item whose media is done links the dubbed file in its `<media:content>` instead, `<channel><language>` is set, and the rest of the feed passes through. Items not done yet are left out. Needs an `MrssSource`; one per language.

| Field | Type | Default | |
|---|---|---|---|
| `language` | string | required | The feed’s language: the transcription language or a translation language. Written to `<channel><language>`. |
| `items` | array of one of [Video file](#video-file), [Audio file](#audio-file), [Subtitle file](#subtitle-file) | required | Exactly one video or audio file, which each feed item links to; other items are written beside it (under `output/feeds/{language}/`) and not linked yet. |

<p className="text-sm">In `outputs[].items[]`, by `@type`.</p>

### Video file

`"@type": "VideoFile"`

The input's video with the audio and subtitle tracks you choose.

| Field | Type | Default | |
|---|---|---|---|
| `containerFormat` | string | `"mp4"` | The container, as an ffmpeg muxer name. It may differ from `ext`: `matroska` writes `.mkv`. |
| `ext` | string | required | The file extension: `${ext}` in `nameTemplate`. |
| `nameTemplate` | string | required | The file's name. `${name}` is the input's name without its extension, subfolders included; `${ext}` is `ext`. It must contain `${name}`, and no two items of an output may render the same name. |
| `useOriginalTracks` | boolean | `false` | `true` copies the input's audio into the file as it is, with its own language, title and default flag, ahead of the dub tracks. |
| `dubTracks` | array of [Dub track](#dub-track) |  | The dubbed audio tracks, in order, after the input’s audio. With neither, the video has no sound. |
| `subTracks` | array of [Subtitle track](#subtitle-track) |  | Subtitle streams in the file, in order, which players can select. |
| `videoCodec` | string | `"copy"` | `copy` keeps the input's video untouched, the fastest. An ffmpeg encoder (`libx264`) re-encodes it. |

### Audio file

`"@type": "AudioFile"`

An audio file: MP3, M4A, WAV, …

| Field | Type | Default | |
|---|---|---|---|
| `containerFormat` | string | required | The container, as an ffmpeg muxer name: `mp3`, `ipod` (for `.m4a`), `wav`, … |
| `ext` | string | required | The file extension: `${ext}` in `nameTemplate`. |
| `nameTemplate` | string | required | The file's name. `${name}` is the input's name without its extension, subfolders included; `${ext}` is `ext`. It must contain `${name}`, and no two items of an output may render the same name. |
| `useOriginalTracks` | boolean | `false` | `true` makes the file the input's audio, copied as it is: AAC in most inputs, so `ipod` (`.m4a`) or `matroska`, not MP3 or WAV. Either this or one dub track. |
| `dubTracks` | array of [Dub track](#dub-track) |  | The dub the file holds: exactly one entry, or none with `useOriginalTracks`. |

### Subtitle file

`"@type": "SubtitleFile"`

A subtitle or transcript file in one language.

| Field | Type | Default | |
|---|---|---|---|
| `format` | string | required | The caption format: `SRT`, `VTT`, `TXT`, … Also the file's extension, in lower case. |
| `language` | string | required | The transcription language or a translation language. |
| `nameTemplate` | string |  | `${name}`, `${lang}` (the file's language) and `${ext}`. Default: `${name}.${lang}.${ext}`. |
| `options` | any |  | Caption layout options, passed to the caption renderer as given. |

<p className="text-sm">In `outputs[].items[].dubTracks[]`.</p>

### Dub track

One dubbed audio track of a video or audio file.

| Field | Type | Default | |
|---|---|---|---|
| `language` | string | required | The code of a dubbed translation (one with `ttsOptions`), written as in `translations`. |
| `codec` | string | `"copy"` | `copy` keeps the dub's AAC. An ffmpeg encoder re-encodes it: `libmp3lame` for MP3. |
| `title` | string |  | The track name players show in their audio menu. |

<p className="text-sm">In `outputs[].items[].subTracks[]`.</p>

### Subtitle track

A subtitle stream inside the video, which players can select.

| Field | Type | Default | |
|---|---|---|---|
| `language` | string | required | The transcription language or a translation language. |
| `options` | any |  | Caption layout options, passed to the caption renderer as given. |
| `subtitleCodec` | string | `"mov_text"` | `mov_text` for MP4 and MOV, `subrip` or `ass` for Matroska, `webvtt` for WebM. |
