remotion-dev/remotion · error

Combined 1D and 3D LUTs are not supported.

Error message

Combined 1D and 3D LUTs are not supported.

What it means

Thrown by the Studio's own cube-lut helper while scanning .cube headers: a valid .cube file must declare exactly one of LUT_1D_SIZE or LUT_3D_SIZE, defining the LUT type. The parser keeps a `type` variable, and this error fires when a size keyword for the other type appears after a type has already been established (e.g. both LUT_1D_SIZE and LUT_3D_SIZE present). It means the LUT file mixes 1D and 3D table declarations, which the parser does not support; the fix is to supply a LUT file that is purely 1D or purely 3D.

Solutions

  1. Split the file into separate 1D and 3D .cube LUTs and load them independently.
  2. Remove the size keyword that does not match the intended LUT type.
  3. Re-export the LUT with only one of LUT_1D_SIZE or LUT_3D_SIZE.
  4. Use a LUT tool that converts combined shaper+3D LUTs into a single 3D LUT.

Example fix

// before
LUT_1D_SIZE 32
LUT_3D_SIZE 2
// after
LUT_3D_SIZE 2
Defensive patterns

Strategy: validation

Validate before calling

const sizes = text.match(/^LUT_(1D|3D)_SIZE.*$/gm) || [];
if (new Set(sizes.map((s) => s.split('_')[1])).size > 1) throw new Error('Combined 1D and 3D LUT');

Type guard

null

Try / catch

try {
  parseCubeLut(text);
} catch (err) {
  if (err.message.includes('Combined 1D and 3D')) {
    // split file into two LUTs or pick one type
  }
}

Prevention

When it happens

Trigger: Loading a .cube file containing both LUT_1D_SIZE and LUT_3D_SIZE keywords.

Common situations: Hand-merged LUT files combining a 1D shaper and 3D table into one file; converters that emit both sections; editing mistakes.

Related errors


AI-assisted analysis of remotion-dev/remotion@46a3a6bf13 (2026-09-18). Data as JSON: /api/errors/32190e0e9ccbbab1. Report an issue: GitHub.

Appendix: source

Thrown at packages/studio/src/helpers/cube-lut.ts:52

			if (offset > 0) {
				throw new Error(`LUT header after color data on line ${index + 1}.`);
			}

			if (headers.has(keyword)) {
				throw new Error(`Duplicate ${keyword} on line ${index + 1}.`);
			}

			headers.add(keyword);
		}

		if (keyword === 'TITLE' && titleMatch) {
			title = titleMatch[1];
			continue;
		}

		if (keyword === 'LUT_1D_SIZE' || keyword === 'LUT_3D_SIZE') {
			if (type !== null) {
				throw new Error('Combined 1D and 3D LUTs are not supported.');
			}

			type = keyword === 'LUT_1D_SIZE' ? '1d' : '3d';
			size = numbers[0];
			const maxSize = type === '1d' ? 65536 : 256;
			if (
				numbers.length !== 1 ||
				!Number.isInteger(size) ||
				size < 2 ||
				size > maxSize
			) {
				throw new Error(`${keyword} must be an integer from 2 to ${maxSize}.`);
			}

			data = new Float32Array((type === '1d' ? size : size ** 3) * 3);
			continue;
		}

View on GitHub (pinned to 46a3a6bf13)