remotion-dev/remotion · error · TypeError
The "freeze" prop of <Sequence /> must be a number, but is…
Error message
The "freeze" prop of <Sequence /> must be a number, but is of type ${typeof freeze}. What it means
Thrown when the freeze prop of <Sequence> is defined (not undefined/null) but is not a number. freeze pins playback at a specific frame, so a non-number makes the freeze point indeterminate.
Solutions
- Pass a concrete frame number: freeze={30}.
- Coerce when reading from external sources: freeze={Number(rawFreeze)}.
- Omit freeze entirely when freezing is not desired, rather than passing a sentinel.
Example fix
// before
<Sequence freeze={config.freezeFrame} />
// after
<Sequence freeze={config.freezeFrame ? Number(config.freezeFrame) : undefined} /> Defensive patterns
Strategy: type-guard
Validate before calling
const freeze = typeof rawFreeze === 'number' ? rawFreeze : undefined;
Type guard
const isFreezeFrame = (v: unknown): v is number => typeof v === 'number' && Number.isFinite(v);
Prevention
- Pass freeze only when you actually want to pin a frame.
- Avoid boolean or string sentinels for the freeze prop.
When it happens
Trigger: Passing freeze="10" (string), freeze={true}, freeze={someObject}, or any non-number truthy value to <Sequence>.
Common situations: Loading freeze from config as a string; conditional freeze={condition} where condition is boolean instead of a frame number; mis-spelling a related prop.
Related errors
- If layout="none", you may not pass a style. Passed
- The cropLeft, cropRight, cropTop and cropBottom props of…
- The <Freeze /> component requires a 'frame' prop, but none…
- The "freeze" prop of <Sequence /> must be a real number…
- The "freeze" prop of <Sequence /> must be finite, but it is
AI-assisted analysis of remotion-dev/remotion@b2f4e34732 (2026-08-12).
Data as JSON: /api/errors/55b925e1d565b574.
Report an issue: GitHub.
Appendix: source
Thrown at packages/core/src/Sequence.tsx:260
`The "trimBefore" prop of <Sequence /> must be greater than or equal to 0, but got ${trimBefore}.`,
);
}
if (Number.isNaN(trimBefore)) {
throw new TypeError(
'The "trimBefore" prop of <Sequence /> must be a real number, but it is NaN.',
);
}
if (!Number.isFinite(trimBefore)) {
throw new TypeError(
`The "trimBefore" prop of <Sequence /> must be finite, but it is ${trimBefore}.`,
);
}
if (typeof freeze !== 'undefined' && freeze !== null) {
if (typeof freeze !== 'number') {
throw new TypeError(
`The "freeze" prop of <Sequence /> must be a number, but is of type ${typeof freeze}.`,
);
}
if (Number.isNaN(freeze)) {
throw new TypeError(
`The "freeze" prop of <Sequence /> must be a real number, but it is NaN.`,
);
}
if (!Number.isFinite(freeze)) {
throw new TypeError(
`The "freeze" prop of <Sequence /> must be finite, but it is ${freeze}.`,
);
}
}
const absoluteFrame = useTimelinePosition();View on GitHub (pinned to b2f4e34732)