heygen-com/hyperframes · critical · Error
Neither puppeteer nor puppeteer-core found
Error message
Neither puppeteer nor puppeteer-core found
What it means
Thrown by getPuppeteer() when both dynamic import('puppeteer') and the fallback import('puppeteer-core') fail. The engine needs a Puppeteer-compatible module to launch headless Chrome for frame capture and audio FX processing. Without it, no rendering can proceed.
Source
Thrown at packages/engine/src/services/browserManager.ts:60
renderer.includes("llvmpipe") ||
renderer.includes("lavapipe") ||
renderer.includes("softpipe") ||
renderer.includes("mesa offscreen") ||
renderer.includes("microsoft basic render driver") ||
renderer.includes("software rasterizer")
);
}
async function getPuppeteer(): Promise<PuppeteerNode> {
if (_puppeteer) return _puppeteer;
try {
const mod = await import("puppeteer" as string);
_puppeteer = mod.default;
} catch {
const mod = await import("puppeteer-core");
_puppeteer = mod.default;
}
if (!_puppeteer) throw new Error("Neither puppeteer nor puppeteer-core found");
return _puppeteer;
}
async function probeHardwareWebGlInfo(
ppt: PuppeteerNode,
options: {
args: string[];
browserTimeout: number;
executablePath: string | undefined;
},
): Promise<WebGlProbeInfo> {
let probeBrowser: Browser | undefined;
try {
probeBrowser = await ppt.launch({
headless: true,
args: options.args,
defaultViewport: { width: 64, height: 64 },
executablePath: options.executablePath,View on GitHub (pinned to c2996c8626)
Solutions
- Install the browser dependency: bun install in the engine package root.
- Verify the module resolves: run node -e "require.resolve('puppeteer-core')" from packages/engine.
- If using a custom Puppeteer fork, ensure it exports a default object with a launch() method.
- Check for monorepo hoisting issues: if using bun workspaces, verify packages/engine/package.json lists puppeteer or puppeteer-core.
Defensive patterns
Strategy: validation
Validate before calling
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
function assertPuppeteerInstalled(): void {
try { require.resolve('puppeteer'); return; } catch {}
try { require.resolve('puppeteer-core'); return; } catch {}
throw new Error('Install puppeteer or puppeteer-core: bun add puppeteer-core');
}
assertPuppeteerInstalled(); Prevention
- Ensure packages/engine/package.json lists puppeteer or puppeteer-core as a dependency.
- Run bun install in the repo root after cloning or pulling.
- In CI, cache node_modules to avoid partial installs.
- Use require.resolve at startup to fail fast if the module is missing.
When it happens
Trigger: getPuppeteer() is called during browser acquisition (acquireBrowser or probeHardwareWebGlInfo). The first import('puppeteer') throws (module not installed), then the catch tries import('puppeteer-core') which also throws. If both resolve but _puppeteer is still falsy (malformed module), the final guard throws.
Common situations: Neither puppeteer nor puppeteer-core is in the engine's dependencies (incomplete install, bun install ran in wrong workspace). The packages are installed but node_modules is corrupted or the .pnp.cjs is misconfigured. A monorepo hoisting issue left the module in a sibling package's node_modules.
Related errors
- Failed to load @puppeteer/browsers: ${cause} Fix: run `npm i
- Chrome Headless Shell is not available for Linux ARM64 (DGX
- audio FX runtime failed to load
- Audio FX failed for track ${options.trackId}: ${(err as Erro
- [build-zip] npm install into staging failed (status ${result
AI-assisted analysis of heygen-com/hyperframes@c2996c8626 (2026-08-12).
Data as JSON: /api/errors/c2eafb586a653dff.
Report an issue: GitHub.