Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion concepts/credits.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ Every job is billed in nanodollars (one-billionth of a US dollar) drawn from you

1. **Submit gate.** Submit is atomic. If your balance is greater than zero and you are under your concurrent-job limit, the job runs. We do not estimate cost up front. Insufficient balance returns `402 INSUFFICIENT_CREDITS`.
2. **Execution.** Job runs. Balance untouched.
3. **Debit on terminal status.** Every terminal job (`complete`, `failed`, or `cancelled`) is charged based on actual provider cost, infrastructure cost, and margin. The debit is atomic with the status update.
3. **Debit on terminal status.** Every terminal job (`complete`, `failed`, or `cancelled`) is charged for the compute it consumed. The debit is atomic with the status update.
4. **No auto-refund.** Failed jobs are still charged for the compute they consumed. If you believe a job failed due to a platform bug, contact support. Refunds are issued at our discretion via the dispute process.

## Negative balance
Expand Down
2 changes: 1 addition & 1 deletion concepts/job-lifecycle.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ waiting → dispatched → running → complete
| Status | Meaning |
|---|---|
| `waiting` | Saved, queued for dispatch |
| `dispatched` | Sent to the execution provider (Trigger.dev) |
| `dispatched` | Sent to the execution provider |
| `running` | Provider has started processing |
| `complete` | Finished successfully. Output available |
| `failed` | Errored. See `error.code` and `error.message` |
Expand Down
16 changes: 6 additions & 10 deletions guides/ffmpeg.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -98,16 +98,12 @@ Unrecognised flags are rejected before dispatch with `VALIDATION_ERROR`.

## Security model

Eight layers, in order:

1. **Clean environment.** Inherited env vars stripped. Only `PATH`, `HOME`, `TMPDIR` remain.
2. **Flag whitelist.** ~120 known-safe flags, including stream specifiers.
3. **Format blocklist.** `-f lavfi`, `concat`, `hls`, `tee`, `segment`, `dash`, `null` blocked.
4. **Filter function blocklist.** File-reading filters (`movie`, `amovie`, `sendcmd`, `zmq`, `ladspa`, `frei0r`) blocked.
5. **Filter parameter blocklist.** `textfile=`, `filename=` in subtitles, absolute paths in subtitle filters blocked.
6. **Pattern blocklist.** Path traversal (`../`), `/proc/`, `/sys/`, `subfile:` blocked.
7. **Per-input protocol restriction.** `-protocol_whitelist file` injected before each `-i` server-side.
8. **Container isolation.** Trigger.dev container sandboxing, restricted stdio.
Every command is validated before it runs, then executed in an isolated, network-restricted sandbox.

- **Flag allowlist.** Only known-safe flags pass. Anything unrecognised is rejected with `VALIDATION_ERROR` before dispatch.
- **No reads through filters.** Filters and formats that read from disk, fetch over the network, or run external code are blocked.
- **Path containment.** Inputs are limited to the files you provide. Path traversal and access to system paths are rejected.
- **Sandboxed execution.** Each job runs in an isolated container with a clean environment, restricted I/O, and no ambient network access.

## Cost & timeout

Expand Down
2 changes: 1 addition & 1 deletion job-types/caption-burn.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ tag: "Live"
Burn subtitles permanently into a video. Provide an SRT, VTT, or ASS file as the `subtitles` input, or omit it to auto-transcribe the audio. Style the text with web-hex colors, an outline, a background box, and a position. This is the static counterpart to [`captions.animate`](/job-types/captions-animate), which renders per-word animated captions.

<Info>
**Timeout:** 600 s max (plan-capped) · **Provider:** triggerdev · **Accepts:** video
**Timeout:** 600 s max (plan-capped) · **Accepts:** video
</Info>

## Request
Expand Down
6 changes: 3 additions & 3 deletions job-types/captions-animate.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: "captions.animate"
description: "Burn animated word-level captions onto a video at $0.10/min. Pick a preset (hormozi, mrbeast, tiktok, pill). Single speaker, 5 min input cap."
icon: "captions"
tag: "Live"
keywords: ["animated captions", "burn subtitles", "whisper captions", "tiktok captions", "ass subtitles", "captions.animate"]
keywords: ["animated captions", "burn subtitles", "auto captions", "tiktok captions", "subtitles", "captions.animate"]
---

<script
Expand All @@ -28,10 +28,10 @@ keywords: ["animated captions", "burn subtitles", "whisper captions", "tiktok ca
**Live.** Production-ready, available on all plans.
</Check>

Returns a video with word-level animated captions burned in. Speech is transcribed by whisper.cpp, segmented into cues, and rendered as styled ASS subtitles before FFmpeg burns them onto the source.
Returns a video with word-level animated captions burned in. Speech is automatically transcribed, segmented into timed cues, and rendered as styled subtitles burned onto the source.

<Info>
**Timeout:** 600 s · **Provider:** triggerdev · **Accepts:** video · **Limits:** single speaker, 5 min input
**Timeout:** 600 s · **Accepts:** video · **Limits:** single speaker, 5 min input
</Info>

## Request
Expand Down
2 changes: 1 addition & 1 deletion job-types/ffmpeg.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ keywords: ["ffmpeg api reference", "ffmpeg cloud", "ffmpeg sandboxed", "ffmpeg r
Execute a custom FFmpeg command with whitelisted flags. Input files go in `-i` positions and are downloaded into a sandbox before execution.

<Info>
**Timeout:** 900 s max (plan-capped) · **Provider:** triggerdev · **Accepts:** video, audio, image
**Timeout:** 900 s max (plan-capped) · **Accepts:** video, audio, image
</Info>

## Request
Expand Down
4 changes: 2 additions & 2 deletions support/faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ keywords: ["rendobar faq", "video api faq", "rendobar pricing faq", "ffmpeg api
"name": "What happens if a job fails?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Failed jobs are charged for the compute they used. Rendobar has no auto-refund. If you believe a failure was caused by a Rendobar bug or platform issue, contact support and we will review for a discretionary refund. Successful and failed jobs are billed the same way: actual provider cost plus infrastructure cost plus margin. Inspect error.code and error.message on the job, and retry via POST /jobs/{id}/retry if appropriate."
"text": "Failed jobs are charged for the compute they used. Rendobar has no auto-refund. If you believe a failure was caused by a Rendobar bug or platform issue, contact support and we will review for a discretionary refund. Successful and failed jobs are billed the same way: for the compute the job consumed. Inspect error.code and error.message on the job, and retry via POST /jobs/{id}/retry if appropriate."
}
},
{
Expand Down Expand Up @@ -119,7 +119,7 @@ keywords: ["rendobar faq", "video api faq", "rendobar pricing faq", "ffmpeg api
</Accordion>

<Accordion title="What happens if a job fails?">
Failed jobs are charged for the compute they used. Rendobar has no auto-refund. If you believe a failure was caused by a Rendobar bug or platform issue, contact support and we will review for a discretionary refund. Successful and failed jobs are billed the same way: actual provider cost plus infrastructure cost plus margin. Inspect `error.code` and `error.message` on the job, and retry via `POST /jobs/{id}/retry` if appropriate. [Error codes](/support/errors).
Failed jobs are charged for the compute they used. Rendobar has no auto-refund. If you believe a failure was caused by a Rendobar bug or platform issue, contact support and we will review for a discretionary refund. Successful and failed jobs are billed the same way: for the compute the job consumed. Inspect `error.code` and `error.message` on the job, and retry via `POST /jobs/{id}/retry` if appropriate. [Error codes](/support/errors).
</Accordion>

<Accordion title="Can I run custom FFmpeg commands?">
Expand Down
Loading