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
- Re-run the audit — this is often caused by incomplete or corrupted trace collection
- Ensure Chrome captures the full page load from navigation start to load event
- If collecting traces manually, verify trace completeness and category configuration
- 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
- Ensure traces are complete and captured over a full page load lifecycle
- Use standard stable Chrome builds to avoid trace parsing edge cases
- Re-run audits when speedline returns degenerate results
- Handle NO_SPEEDLINE_FRAMES as a soft failure in metric pipelines
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.