{"record":{"id":"912fcaf38cc211b6","repo":"remotion-dev/remotion","slug":"the-offset-property-of-a-series-sequence-mus-912fca","errorCode":null,"errorMessage":"The \"offset\" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).","messagePattern":"The \"offset\" property of a <Series\\.Sequence /> must be finite, but got (.+?) \\((.+?)\\)\\.","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"packages/core/src/series/index.tsx","lineNumber":131,"sourceCode":"\treadonly childrenLength: number;\n}) => {\n\tconst debugInfo = `index = ${index}, duration = ${durationInFrames}`;\n\tif (index !== childrenLength - 1 || durationInFrames !== Infinity) {\n\t\tvalidateDurationInFrames(durationInFrames, {\n\t\t\tcomponent: `of a <Series.Sequence /> component`,\n\t\t\tallowFloats: true,\n\t\t});\n\t}\n\n\tconst offset = offsetProp ?? 0;\n\tif (Number.isNaN(offset)) {\n\t\tthrow new TypeError(\n\t\t\t`The \"offset\" property of a <Series.Sequence /> must not be NaN, but got NaN (${debugInfo}).`,\n\t\t);\n\t}\n\n\tif (!Number.isFinite(offset)) {\n\t\tthrow new TypeError(\n\t\t\t`The \"offset\" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`,\n\t\t);\n\t}\n\n\tif (offset % 1 !== 0) {\n\t\tthrow new TypeError(\n\t\t\t`The \"offset\" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`,\n\t\t);\n\t}\n\n\treturn offset;\n};\n\nconst SeriesInner: FC<SeriesProps> = (props) => {\n\tconst childrenValue = useMemo(() => {\n\t\tconst flattenedChildren = flattenChildren(props.children);\n\t\tconst renderChildren = (i: number, startFrame: number): React.ReactNode => {\n\t\t\tif (i === flattenedChildren.length) {","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/core/src/series/index.tsx#L113-L149","documentation":"After the NaN check, Series.Sequence's offset must be finite (`!Number.isFinite(offset)`). Passing Infinity or -Infinity throws because an infinite gap/overlap makes the sequence layout unbounded and unrenderable.","triggerScenarios":"offset={Infinity}, offset={-Infinity}, offset={1/0}, or default-param logic leaking Infinity.","commonSituations":"Math errors producing Infinity; dividing by zero in offset computation; sentinel Infinity leaking into props.","solutions":["Pass a finite integer.","Omit offset to fall back to the default 0.","Clamp the value: offset={Math.max(0, Math.min(v, MAX))}."],"exampleFix":"// before\n<Series.Sequence offset={Infinity} />\n// after\n<Series.Sequence offset={undefined} />","handlingStrategy":"validation","validationCode":"const safeOffset = Number.isFinite(rawOffset) ? Math.round(rawOffset) : undefined;","typeGuard":"const isFiniteOffset = (v: unknown): v is number =>\n  typeof v === 'number' && Number.isFinite(v);","tryCatchPattern":null,"preventionTips":["Never pass Infinity as an offset.","Clamp computed offsets to a sane frame range.","Omit offset to use the default 0."],"tags":["series","validation","props","range"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}