heygen-com/hyperframes · error

Parakeet did not produce output.

Error message

Parakeet did not produce output.

What it means

Thrown by transcribeWithParakeet when the parakeet-mlx process ran without throwing an error (execFileSync returned normally) but the expected output JSON file was not created in the work directory. The output file is named after the input (stem + .json) in a temp directory. Its absence means parakeet-mlx ran but produced no transcription — a silent failure.

Source

Thrown at packages/cli/src/whisper/parakeet.ts:141

  }

  const model = options?.model ?? DEFAULT_MODEL;
  // First run pulls the model from HuggingFace (~600MB) — cue it so the wait
  // doesn't read as a hang. HF caches at ~/.cache/huggingface/hub/models--<slug>.
  const cached = existsSync(
    join(homedir(), ".cache", "huggingface", "hub", `models--${model.replace(/\//g, "--")}`),
  );
  options?.onProgress?.(
    cached ? "Transcribing with Parakeet..." : "Downloading Parakeet model (first run, ~600MB)...",
  );
  const workDir = mkdtempSync(join(tmpdir(), "hyperframes-parakeet-"));
  try {
    const argv = [inputPath, "--model", model, "--output-format", "json", "--output-dir", workDir];
    if (options?.language) argv.push("--language", options.language);
    execFileSync(runner, argv, { stdio: ["ignore", "pipe", "pipe"], timeout: 1_800_000 });

    const produced = join(workDir, `${basename(inputPath, extname(inputPath))}.json`);
    if (!existsSync(produced)) throw new Error("Parakeet did not produce output.");
    const words = mergeTokensToWords(JSON.parse(readFileSync(produced, "utf-8")) as ParakeetJson);

    const transcriptPath = join(dir, "transcript.json");
    writeFileSync(transcriptPath, JSON.stringify(words, null, 2));
    const durationSeconds = words.length > 0 ? words[words.length - 1]!.end : 0;
    return { transcriptPath, wordCount: words.length, durationSeconds, speechOnsetSeconds: null };
  } finally {
    rmSync(workDir, { recursive: true, force: true });
  }
}

View on GitHub (pinned to c2996c8626)

Solutions

  1. Verify the input audio/video file is valid and contains audible speech.
  2. Check that the Parakeet model is fully downloaded (~/.cache/huggingface/hub/models--mlx-community/parakeet-tdt-0.6b-v3).
  3. Run parakeet-mlx manually with the same arguments to see its actual output and any stderr warnings.
  4. Update parakeet-mlx to the latest version in case of output-path changes.
  5. Fall back to the whisper engine (--engine whisper) if Parakeet consistently fails.
Defensive patterns

Strategy: try-catch

Try / catch

try {
  return transcribeWithParakeet(inputPath, dir, options);
} catch (err) {
  if (err instanceof Error && err.message === "Parakeet did not produce output.") {
    // Check input validity, then fall back to whisper
    console.warn("Parakeet produced no output. Check audio validity or use --engine whisper.");
    return transcribeWithWhisper(inputPath, dir, options);
  }
  throw err;
}

Prevention

When it happens

Trigger: parakeet-mlx exits 0 but writes to a different output path or format; the model isn't downloaded yet and parakeet exits without error but produces no output; the input audio file is empty or has no detectable speech; a parakeet-mlx version change altered the output naming convention.

Common situations: First run where the model download silently fails or is interrupted; an empty or corrupt audio file that parakeet processes without error but yields no transcription; an output directory permissions issue; a version mismatch in parakeet-mlx's CLI flags.

Related errors


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