{"record":{"id":"1120cad98babacea","repo":"remotion-dev/remotion","slug":"name-must-contain-only-finite-numbers-but-got","errorCode":null,"errorMessage":"${name} must contain only finite numbers, but got [${arr.join(',')}]","messagePattern":"(.+?) must contain only finite numbers, but got \\[(.+?)\\]","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/core/src/interpolate.ts","lineNumber":1031,"sourceCode":"\t\t\t\t\t',',\n\t\t\t\t)}]`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction checkInfiniteRange(name: string, arr: readonly number[]) {\n\tif (arr.length < 1) {\n\t\tthrow new Error(name + ' must have at least 1 element');\n\t}\n\n\tfor (const element of arr) {\n\t\tif (typeof element !== 'number') {\n\t\t\tthrow new Error(`${name} must contain only numbers`);\n\t\t}\n\n\t\tif (!Number.isFinite(element)) {\n\t\t\tthrow new Error(\n\t\t\t\t`${name} must contain only finite numbers, but got [${arr.join(',')}]`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function assertValidInterpolateEasingOption(\n\teasing: EasingFunction | readonly EasingFunction[] | undefined,\n\tinputRangeLength: number,\n) {\n\tif (easing === undefined) {\n\t\treturn;\n\t}\n\n\tif (typeof easing === 'function') {\n\t\treturn;\n\t}\n","sourceCodeStart":1013,"sourceCodeEnd":1049,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/core/src/interpolate.ts#L1013-L1049","documentation":"Thrown by checkInfiniteRange when inputRange or outputRange contains a number that is not finite — NaN, Infinity, or -Infinity. Finite math cannot interpolate to or from an infinite bound, so these are rejected even though typeof is 'number'.","triggerScenarios":"interpolate(0, [0, Infinity], [0, 100]); interpolate(0, [0, 1], [0, NaN]); a range element computed from 1/0, Math.log(0), or parseFloat('abc').","commonSituations":"Division-by-zero in keyframe generation; parseFloat on malformed user input yielding NaN; math operations on undefined operands producing NaN.","solutions":["Replace NaN/Infinity with finite fallbacks (e.g. clamp to a large finite number) before calling interpolate().","Trace the producer of the value (look for division, log, sqrt of negatives, parseInt of non-numeric strings).","Filter the range with Number.isFinite() at build time and drop invalid entries."],"exampleFix":"// before\nconst r = interpolate(t, [0, 1 / 0], [0, 100]);\n// after\nconst r = interpolate(t, [0, 1], [0, 100]);","handlingStrategy":"validation","validationCode":"const isAllFinite = (arr: readonly number[]) => arr.every(Number.isFinite);\n\nif (!isAllFinite(inputRange) || !isAllFinite(outputRange)) {\n  throw new Error('ranges must contain only finite numbers');\n}\nconst r = interpolate(input, inputRange, outputRange);","typeGuard":"const isFiniteNumberArray = (arr: readonly unknown[]): arr is number[] =>\n  arr.every((v) => typeof v === 'number' && Number.isFinite(v));","tryCatchPattern":null,"preventionTips":["Wrap range-producing math and assert Number.isFinite on each element.","Watch for division by zero and parseInt/Float on bad input.","Add a debug assertion that logs the offending value before the call."],"tags":["interpolation","validation","nan","infinity"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}