heygen-com/hyperframes · error · CubeLutParseError

LUT_3D_INPUT_RANGE max must exceed min

Error message

LUT_3D_INPUT_RANGE max must exceed min

What it means

After confirming two tokens, parseCubeLut requires the LUT_3D_INPUT_RANGE max to strictly exceed min (line 131-132). An equal or inverted pair would describe a zero-length or negative domain, which cannot be sampled.

Source

Thrown at packages/core/src/colorLuts.ts:132

      title = parseTitle(line);
      continue;
    }
    if (keyword === "DOMAIN_MIN") {
      domainMin = parseVec3(rest, keyword, lineNumber);
      continue;
    }
    if (keyword === "DOMAIN_MAX") {
      domainMax = parseVec3(rest, keyword, lineNumber);
      continue;
    }
    if (keyword === "LUT_3D_INPUT_RANGE") {
      if (rest.length !== 2) {
        throw new CubeLutParseError(`${keyword} expects two numbers`, lineNumber);
      }
      const min = parseFiniteNumber(rest[0]!, lineNumber);
      const max = parseFiniteNumber(rest[1]!, lineNumber);
      if (max <= min) {
        throw new CubeLutParseError("LUT_3D_INPUT_RANGE max must exceed min", lineNumber);
      }
      domainMin = [min, min, min];
      domainMax = [max, max, max];
      continue;
    }
    if (keyword === "LUT_1D_SIZE") {
      lut1dSize = parseSize(rest[0], keyword, lineNumber);
      continue;
    }
    if (keyword === "LUT_3D_SIZE") {
      lut3dSize = parseSize(rest[0], keyword, lineNumber);
      if (lut3dSize > maxSize) {
        throw new CubeLutParseError(`LUT_3D_SIZE ${lut3dSize} exceeds max ${maxSize}`, lineNumber);
      }
      continue;
    }

    if (!isNumericDataLine(keyword)) {

View on GitHub (pinned to c2996c8626)

Solutions

  1. Set max strictly greater than min, e.g. 'LUT_3D_INPUT_RANGE 0 1'.
  2. If your LUT operates in a narrower band, choose a min/max pair with min < max (e.g. 0.1 0.9).
  3. Remove the line entirely to fall back to the default [0,0,0]..[1,1,1] domain.

Example fix

// before
LUT_3D_INPUT_RANGE 0.5 0.5

// after
LUT_3D_INPUT_RANGE 0 1
Defensive patterns

Strategy: try-catch

Validate before calling

function assertInputRangeOrdered(line: string): void {
  const [, a, b] = line.trim().split(/\s+/).map(Number);
  if (!(a < b)) throw new Error(`LUT_3D_INPUT_RANGE max must exceed min, got ${a} ${b}`);
}

Try / catch

try {
  parseCubeLut(fileText);
} catch (err) {
  if (err instanceof CubeLutParseError && /max must exceed min/.test(err.message)) {
    // suggest falling back to default domain by removing the line
  } else throw err;
}

Prevention

When it happens

Trigger: 'LUT_3D_INPUT_RANGE 0.5 0.5' (equal) or 'LUT_3D_INPUT_RANGE 1 0' (inverted).

Common situations: Copy-paste producing two identical values; swapping min/max when hand-editing; default placeholders left at the same value.

Related errors


AI-assisted analysis of heygen-com/hyperframes@c2996c8626 (2026-08-12). Data as JSON: /api/errors/5e1b0d4043b6850c. Report an issue: GitHub.