A step-by-step method for budgeting video generation
Updated 2026-10-02
A video API budget is simple arithmetic once you know five inputs. The hard part is estimating them honestly, especially the retry factor. This page gives a spreadsheet layout, a symbolic worked example, and a checklist for the inputs people usually guess wrong. All numbers live in your sheet and in the live tables, not in this text.
The formula
monthly_cost = N * S * P * R * (1 + F)
N = accepted clips per month
S = seconds per clip
P = per-second price for your model, host and resolution tier
R = retry factor (generations billed per accepted clip)
F = platform fee (VideoRouter: a flat 2% on image and video)
Charges are made once at job creation from the requested duration, polling is free and jobs that fail upstream are not billed, so R counts successful generations you discard, not failed ones. The pricing explainer covers the billing flow.
Step 1: define the workload
Write down what you will produce and in which stages. Do not average across very different jobs. For each job type, set:
- the model and mode (text-to-video, image-to-video, reference),
- the tier you ship, and a lower tier for drafts if you use them,
- the clip length in seconds,
- the volume N as accepted clips, because that is what the business needs.
Step 2: get P from live data
Take P from the live price for your exact model and tier, not from memory. The pricing page compares hosts, and the table below shows what clips of common lengths cost at the cheapest host at the compared tier:
| Model | Tier | Cheapest host | Rate | 5 s clip | 10 s clip | 1 min of video | 1,000 × 10 s clips |
|---|---|---|---|---|---|---|---|
| seedance-2-5 | 480p | OpenSand | $0.0525 / second | $0.263 | $0.525 | $3.15 | $525 |
| seedance-2-5 | 720p | OpenSand | $0.1179 / second | $0.59 | $1.18 | $7.07 | $1,179 |
| seedance-2-5 | 720p-sr | Atlas Cloud | $0.2193 / second | $1.10 | $2.19 | $13.16 | $2,193 |
| seedance-2-5 | 720p-esr | Atlas Cloud | $0.2515 / second | $1.26 | $2.52 | $15.09 | $2,515 |
| seedance-2-5 | 1080p | OpenSand | $0.2919 / second | $1.46 | $2.92 | $17.51 | $2,919 |
| seedance-2-5 | 1080p-sr | Atlas Cloud | $0.4056 / second | $2.03 | $4.06 | $24.34 | $4,056 |
| seedance-2-5 | 1080p-esr & 60fps | Atlas Cloud | $0.4958 / second | $2.48 | $4.96 | $29.75 | $4,958 |
| seedance-2-5 | 1080p-esr | Atlas Cloud | $0.4507 / second | $2.25 | $4.51 | $27.04 | $4,507 |
| seedance-2-5 | 1440p-esr | Atlas Cloud | $0.7602 / second | $3.80 | $7.60 | $45.61 | $7,602 |
| seedance-2-5 | 1440p-sr | Atlas Cloud | $0.7 / second | $3.50 | $7.00 | $42.00 | $7,000 |
| seedance-2-5 | 2160p | OpenSand | $0.6065 / second | $3.03 | $6.07 | $36.39 | $6,065 |
| seedance-2-5 | 4k-esr | Atlas Cloud | $1.7006 / second | $8.50 | $17.01 | $102 | $17,006 |
Computed from each model's cheapest current host per resolution tier, before VideoRouter's 2% platform fee. Built 2026-10-02 from live data. Failed upstream jobs are not billed; re-generations are, so multiply by your retry rate.
Use it to sanity check your sheet: the cost of a 5, 10 or 60 second clip is P times the seconds. If you plan to pin a specific host instead of leaving routing automatic, use that host's price from the model page.
Step 3: estimate R honestly
R is the number of generations you pay for per clip you actually keep. It is specific to your prompts, your acceptance bar and your workflow, so guess nothing. Measure it:
- Take 30 to 50 representative prompts.
- Generate with your intended model and tier. Count generations until each one is accepted.
- Take the average attempts per accepted clip as R, and look at the high end too, since your budget needs a margin.
A draft stage changes R in an interesting way. If you explore on a lower tier or a cheaper model variant, the many discarded attempts happen at a low P, and the final stage runs at a high P with an R close to one. Budget them as separate rows.
Step 4: add the fee and any extras
Apply F to the whole product. Then add lines for things that are not per-second:
- Models that bill per clip or per request. Use the flat amount instead of P times S for those rows.
- Timeout hedging. If you enable
failover.on_timeout_sec, both attempts are billed when both finish. Add the expected share of hedged jobs to R for those rows. - Storage and delivery of the finished files, which are your cost, not the API's.
- A contingency margin for rate changes. Prices move, so re-check the live table when you refresh the sheet.
A symbolic worked example
Suppose a product has two job types. Lay it out like a spreadsheet, one row per stage:
| Row | Stage | N (clips) | S (sec) | P (per sec) | R | Cost = N x S x P x R |
|---|---|---|---|---|---|---|
| 1 | Drafts, low tier | N1 | S1 | P1 | R1 | N1 * S1 * P1 * R1 |
| 2 | Finals, delivery tier | N2 | S2 | P2 | R2 | N2 * S2 * P2 * R2 |
| 3 | Flat-priced model (per clip) | N3 | n/a | C3 | R3 | N3 * C3 * R3 |
| Subtotal | row1 + row2 + row3 | |||||
| Fee F | subtotal * F | |||||
| Total | subtotal * (1 + F) |
In a real sheet each symbol becomes a cell reference: P1 and P2 come from the live pricing for your tiers, S1 and S2 from your product spec, and R1 and R2 from your pilot. Put assumptions in one block at the top so a stakeholder can change N or R and see the total move.
Step 5: stress test it
Re-run the total with pessimistic and optimistic values to see which input dominates:
- R up by half. If your total is very sensitive to R, invest in prompt quality, shorter drafts or caching accepted clips before shopping for a cheaper host.
- Move to a more expensive host (your pinned choice, or the priciest in the table) to see the cost of consistency.
- Double the delivery tier's seconds to see how clip length affects the total.
Use per-key spend caps as a second line of defense so a bug cannot exceed the plan: a key's monthly cap returns 402 when reached. For per-model views see the cost page, and compare options with the cheapest-API method. The quickstart gets you a first request, and a key is available at videorouter.sh/signup.
Refresh cadence
Treat the sheet as a living document. Re-check P whenever you change host or tier, re-measure R whenever the prompts or the model change, and review the whole thing when a new model version ships, because a new version resets both.
Frequently asked questions
How do I estimate a video API budget?
Multiply accepted clips by seconds per clip, the per-second price for your model, host and tier, and a retry factor, then add the platform fee. Use separate rows for drafts and finals.
What is a realistic retry factor?
It depends entirely on your prompts and acceptance bar, so measure it with a pilot of 30 to 50 representative prompts instead of guessing.
Are failed generations part of the budget?
On VideoRouter, jobs that fail upstream are not billed, so the retry factor counts successful generations you discard. Slow jobs that finish are billed, and hedged duplicates are billed twice.
How do I stop a bug from overspending?
Set a monthly spend cap and a model allow-list on each API key. Reaching the cap returns a 402 error instead of continuing to charge.
Keep reading
- How AI Video API Pricing Works — Per-Second, Per-Tier, Per-Host
- Cheapest Video Generation API: How to Find It for Your Workload
- Video API Pricing by Resolution: 480p to 4K Per-Second Costs
- AI Video Generation Cost Per Minute: How to Calculate It
VideoRouter puts it next to dozens of other video and image models behind one API key, so you can compare providers, prices and fail over automatically. Compare providers on VideoRouter →