remotion-dev/remotion · error · Error
did not calculate natural duration, this is an error with…
Error message
did not calculate natural duration, this is an error with Remotion. Please report
What it means
spring() builds a naturalDurationGetter: a real getter when needsToCalculateNaturalDuration is true, otherwise a getter that throws this internal error. The throw fires if reverse mode needs the natural duration (e.g. reverse=true and passedDurationInFrames is undefined) but the duration was never calculated. The message explicitly calls this a Remotion bug to report.
Solutions
- Report the bug to Remotion with a minimal reproduction.
- Pass durationInFrames explicitly so the getter is not consulted.
- Compute the duration with measureSpring() and pass it through.
Example fix
// before
spring({ frame, fps, config, reverse: true })
// after
spring({ frame, fps, config, reverse: true, durationInFrames: 60 }) Defensive patterns
Strategy: validation
Validate before calling
// Avoid the unset getter by always passing durationInFrames with reverse:
const sp = spring({ frame, fps, config, reverse, durationInFrames: 60 }); Prevention
- Pass durationInFrames whenever using reverse mode.
- Compute the duration via measureSpring() first.
- Report the triggering combination upstream if it recurs.
When it happens
Trigger: Calling spring() with reverse=true and no passedDurationInFrames, hitting the thrower getter via `passedDurationInFrames ?? naturalDurationGetter.get()`.
Common situations: Edge-case combination of reverse spring without an explicit duration; an API path that sets needsToCalculateNaturalDuration=false while reverse still needs it.
Related errors
- A "duration" of a spring is NaN, which it must not be
- A "duration" of a spring must be a "number" but is
- A "duration" of a spring must be finite, but is
- A "duration" of a spring must be positive, but is
- Lambda was created but has no name
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/faf2eb8754beeaef.
Report an issue: GitHub.
Appendix: source
Thrown at packages/core/src/spring/index.ts:59
const needsToCalculateNaturalDuration =
reverse || typeof passedDurationInFrames !== 'undefined';
const naturalDuration = needsToCalculateNaturalDuration
? measureSpring({
fps,
config,
threshold: durationRestThreshold,
})
: undefined;
const naturalDurationGetter = needsToCalculateNaturalDuration
? {
get: () => naturalDuration as number,
}
: {
get: () => {
throw new Error(
'did not calculate natural duration, this is an error with Remotion. Please report',
);
},
};
const reverseProcessed = reverse
? (passedDurationInFrames ?? naturalDurationGetter.get()) - passedFrame
: passedFrame;
const delayProcessed = reverseProcessed + (reverse ? delay : -delay);
const durationProcessed =
passedDurationInFrames === undefined
? delayProcessed
: delayProcessed / (passedDurationInFrames / naturalDurationGetter.get());
if (passedDurationInFrames && delayProcessed > passedDurationInFrames) {
return to;View on GitHub (pinned to 78fe4bb3fd)