remotion-dev/remotion · error · TypeError
Parameter 'durationInMilliseconds' must be finite but it is
Error message
Parameter 'durationInMilliseconds' must be finite but it is ${durationInMilliseconds} What it means
Third guard in the estimatePrice validation chain: Number.isFinite(durationInMilliseconds) is false (Infinity or -Infinity), so a TypeError is thrown with the offending value. Prevents the price formula from producing an Infinite dollar amount.
Source
Thrown at packages/lambda-client/src/estimate-price.ts:59
const durationInMilliseconds =
'durationInMiliseconds' in other
? other.durationInMiliseconds
: other.durationInMilliseconds;
if (typeof durationInMilliseconds !== 'number') {
throw new TypeError(
`Parameter 'durationInMilliseconds' must be a number but got ${typeof durationInMilliseconds}`,
);
}
if (Number.isNaN(durationInMilliseconds)) {
throw new TypeError(
`Parameter 'durationInMilliseconds' must not be NaN but it is.`,
);
}
if (!Number.isFinite(durationInMilliseconds)) {
throw new TypeError(
`Parameter 'durationInMilliseconds' must be finite but it is ${durationInMilliseconds}`,
);
}
if (durationInMilliseconds < 0) {
throw new TypeError(
`Parameter 'durationInMilliseconds' must be over 0 but it is ${durationInMilliseconds}.`,
);
}
const durationPrice = pricing[region]['Lambda Duration-ARM'].price;
// In GB-second
const timeCostDollars =
Number(durationPrice) *
((memorySizeInMb * durationInMilliseconds) / 1000 / 1024);
const diskSizePrice = pricing[region]['Lambda Storage-Duration-ARM'].price;View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Bound durationInMilliseconds to a sane finite range before calling
- Fix the upstream calculation that produced Infinity
Example fix
// before const durationInMilliseconds = totalMs / count; // count could be 0 -> Infinity // after const durationInMilliseconds = count > 0 ? totalMs / count : 0;
Defensive patterns
Strategy: validation
Validate before calling
if (!Number.isFinite(durationInMilliseconds)) {
throw new Error('duration must be finite');
} Type guard
const isDuration = (v: unknown): v is number => typeof v === 'number' && !Number.isNaN(v) && Number.isFinite(v) && v >= 0;
Prevention
- Clamp durations with Math.max/Math.min before estimating
- Watch for divide-by-zero in upstream duration math
When it happens
Trigger: durationInMilliseconds is Infinity or -Infinity (e.g. from division by zero or a bad calculation).
Common situations: Upstream division producing Infinity, unbounded user input, JSON deserialization of Infinity.
Related errors
- Parameter 'durationInMilliseconds' must be a number but got
- Parameter 'durationInMilliseconds' must not be NaN but it is
- Parameter 'durationInMilliseconds' must be over 0 but it is
- inputRange must contain only numbers
- outputStyles must contain only objects
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/09bcfdfe2b1ede70.
Report an issue: GitHub.