{"record":{"id":"d560c7544cd60d87","repo":"remotion-dev/remotion","slug":"cannot-interpolate-kind-values-because-axis-a","errorCode":null,"errorMessage":"Cannot interpolate ${kind} values because axis ${axis + 1} has no unit","messagePattern":"Cannot interpolate (.+?) values because axis (.+?) has no unit","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"packages/core/src/interpolate.ts","lineNumber":846,"sourceCode":"\t\t\t\tconst unit = parsed.units[axis];\n\t\t\t\tif (unit === null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (units[axis] === null) {\n\t\t\t\t\tunits[axis] = unit;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (units[axis] !== unit) {\n\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t`Cannot interpolate ${kind} values with different units on axis ${axis + 1}: ${units[axis]} and ${unit}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (units[axis] === null) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t`Cannot interpolate ${kind} values because axis ${axis + 1} has no unit`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst values: [number, number, number, number] = [0, 0, 0, 0];\n\tfor (let axis = 0; axis < dimensions; axis++) {\n\t\tvalues[axis] = interpolateNumber({\n\t\t\tinput,\n\t\t\tinputRange,\n\t\t\toutputRange: parsedOutputRange.map((parsed) => parsed.values[axis]),\n\t\t\toptions,\n\t\t});\n\t}\n\n\treturn serializeStringInterpolationValue({\n\t\tkind,","sourceCodeStart":828,"sourceCodeEnd":864,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/core/src/interpolate.ts#L828-L864","documentation":"Thrown by interpolateString when, for a non-scale kind, a given axis has no unit declared in any outputRange element. Translate and rotate kinds require a unit on each interpolated axis; if every element reports null on an axis, interpolation cannot pick a unit to serialize. Because parseStringInterpolationComponent always assigns a unit to translate/rotate components, this is mostly a defensive guard for unusual dimension mismatches.","triggerScenarios":"Reachable through dimension mismatches where a shorter element leaves a higher axis null and no longer element supplies a unit on that axis, or via internal callers; uncommon from the public API because translate/rotate components always carry units.","commonSituations":"Mostly defensive. Could surface with carefully constructed dimension-mismatched translate values; normally the units check (292) or kind check (291) fires first.","solutions":["Give every axis an explicit unit in every element: \"0px 0px\" paired with \"10px 20px\".","Equalize the number of components across all elements."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"function everyAxisHasUnit(values: string[]): boolean {\n  const dims = Math.max(...values.map((v) => v.trim().split(/\\s+/).length));\n  for (let axis = 0; axis < dims; axis++) {\n    const any = values.some((v) => {\n      const m = /^([+-]?(?:\\d+\\.?\\d*|\\.\\d+))([a-zA-Z%]+)?$/.exec(v.trim().split(/\\s+/)[axis] ?? '');\n      return m && m[2];\n    });\n    if (!any) return false;\n  }\n  return true;\n}\n\nif (!everyAxisHasUnit(outputRange as string[])) {\n  throw new Error('Some axis has no unit in any outputRange element');\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Give every component of every output a unit (px/deg/etc.).","Equalize component counts across outputRange elements."],"tags":["interpolate","string-interpolation","units","defensive"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}