GoogleChrome/lighthouse · error · LighthouseError

NO_SPEEDLINE_FRAMES

NO_SPEEDLINE_FRAMES

Error message

Chrome didn't collect any screenshots during the page load. Please make sure there is content visible on the page, and then try re-running Lighthouse. ({errorCode})

What it means

Thrown as a LighthouseError with code NO_SPEEDLINE_FRAMES from Speedline.compute_() when speedline resolves successfully but returns a result with zero frames (speedline.frames.length === 0). This is distinct from NO_SCREENSHOTS: speedline ran without error but produced no usable frame data. The check at line 42 in the .then handler triggers the throw.

Source

Thrown at core/computed/speedline.js:42

      // See https://github.com/GoogleChrome/lighthouse/issues/2333
      const traceEvents = trace.traceEvents.slice();
      // Force use of timeOrigin as reference point for speedline
      // See https://github.com/GoogleChrome/lighthouse/issues/2095
      const timeOrigin = processedTrace.timestamps.timeOrigin;
      return speedline(traceEvents, {
        timeOrigin,
        fastMode: true,
        include: 'speedIndex',
      });
    }).catch(err => {
      if (/No screenshots found in trace/.test(err.message)) {
        throw new LighthouseError(LighthouseError.errors.NO_SCREENSHOTS);
      }

      throw err;
    }).then(speedline => {
      if (speedline.frames.length === 0) {
        throw new LighthouseError(LighthouseError.errors.NO_SPEEDLINE_FRAMES);
      }

      if (speedline.speedIndex === 0) {
        throw new LighthouseError(LighthouseError.errors.SPEEDINDEX_OF_ZERO);
      }

      return speedline;
    });
  }
}

const SpeedlineComputed = makeComputedArtifact(Speedline, null);
export {SpeedlineComputed as Speedline};

View on GitHub (pinned to 9515cd4e58)

Solutions

  1. Re-run the audit — this is often caused by incomplete or corrupted trace collection
  2. Ensure Chrome captures the full page load from navigation start to load event
  3. If collecting traces manually, verify trace completeness and category configuration
  4. Use the latest stable Chrome and Lighthouse versions to avoid parsing edge cases
Defensive patterns

Strategy: try-catch

Try / catch

try {
  const speedline = await Speedline.request(trace, context);
} catch (e) {
  if (e instanceof LighthouseError && e.code === 'NO_SPEEDLINE_FRAMES') {
    // Speedline produced no frames — Speed Index not available
    return { notApplicable: true, reason: 'NO_SPEEDLINE_FRAMES' };
  }
  throw e;
}

Prevention

When it happens

Trigger: Speedline.request() runs speedline() which resolves without rejection, but the resulting speedline object has an empty frames array. The .then() callback checks `speedline.frames.length === 0` and throws NO_SPEEDLINE_FRAMES.

Common situations: The trace contains some trace events but they are malformed, partial, or from a non-standard capture that speedline cannot parse into frames. Incomplete trace where screenshot events exist but lack the data needed to construct visual frames. Edge cases where speedline's internal parsing succeeds technically but yields empty results.

Related errors


AI-assisted analysis of GoogleChrome/lighthouse@9515cd4e58 (2026-08-13). Data as JSON: /api/errors/94c2ef5f86938a65. Report an issue: GitHub.