Run jobs for up to 9 hours
Each job now gets 1 hour of processing on Free and 9 hours on Pro, up from 5 and 15 minutes. The budget is on processing time, not output length.
A single job used to stop after 5 minutes on Free and 15 minutes on Pro. Those budgets are now 1 hour and 9 hours.
That is longer than any per-job limit we could find published in this category, including Transloadit’s 8 hours. Several competitors cap output duration instead: json2video stops at 30 minutes of finished video, Creatomate at 15 minutes per render.
The limit has always been on processing time, not on how long your output can be. There is no cap on output length. A two-hour render is fine as long as it finishes inside the budget, and nothing needs splitting into parts.
You can still set a shorter timeout per job when you want to fail fast. Asking for more than your plan allows is rejected at submit with PLAN_LIMIT, so a job never starts against a budget it cannot use.
Waiting on long jobs
jobs.wait() in the SDK used to give up after 5 minutes and raise WaitTimeoutError for jobs that were still running normally. It now follows the job’s own budget.
The API returns that budget as timeoutMs on the job, so wait() learns the real number on its first poll instead of guessing. Passing an explicit timeout still bounds the wait exactly as before.
// Follows the job's own budget, however long the plan allows.const job = await client.jobs.run({ type: "ffmpeg", inputs, params });
// Or bound it yourself.const job = await client.jobs.wait(id, { timeout: 90_000 });Per-plan budgets are listed under plan limits. This follows the same principle as removing the caption input cap: the plan budget is the real bound, so there is no second limit in front of it.
