jackwener/OpenCLI · error · CommandExecutionError
NotebookLM CreateAudioOverview RPC returned no audio id; ser
Error message
NotebookLM CreateAudioOverview RPC returned no audio id; server may have rejected the request.
What it means
This CommandExecutionError is thrown when the CreateAudioOverview RPC executed but `parseAudioIdFromResult` could not find an audio id in the response, meaning NotebookLM likely rejected or failed the audio-generation request server-side.
Source
Thrown at clis/notebooklm/generate-audio.js:79
const notebookId = parseNotebooklmNotebookTarget(String(kwargs.notebook ?? ''));
requireNotebooklmExecute(kwargs.execute, 'generate NotebookLM audio');
try {
await page.goto(buildNotebooklmNotebookUrl(notebookId));
await page.wait(2);
}
catch (error) {
throw new CommandExecutionError(`Failed to open NotebookLM notebook ${notebookId}: ${error?.message || error}`);
}
await requireNotebooklmSession(page);
const sources = await listNotebooklmSourcesViaRpc(page);
const sourceIds = sources.map((s) => s.id).filter((id) => typeof id === 'string' && id);
if (sourceIds.length === 0) {
throw new EmptyResultError('notebooklm generate-audio', 'The notebook has no sources; add a source before generating an audio overview.');
}
const rpc = await callNotebooklmRpc(page, NOTEBOOKLM_CREATE_AUDIO_RPC_ID, buildCreateAudioArgs(notebookId, sourceIds));
const audioId = parseAudioIdFromResult(rpc.result, [notebookId, ...sourceIds]);
if (!audioId) {
throw new CommandExecutionError('NotebookLM CreateAudioOverview RPC returned no audio id; server may have rejected the request.');
}
return [{
notebook_id: notebookId,
audio_id: audioId,
source_count: sourceIds.length,
status: 'pending',
notebook_url: buildNotebooklmNotebookUrl(notebookId),
}];
},
});
export const __test__ = { AUDIO_OVERVIEW_CONFIG_BLOCK, buildCreateAudioArgs, parseAudioIdFromResult };
View on GitHub (pinned to 49907e53dc)
Solutions
- Retry later — server-side rejections (quota/capacity) are often transient.
- Reduce or replace problematic sources, then re-run generate-audio.
- Update opencli to a version whose parseAudioIdFromResult matches the current NotebookLM RPC response format, and inspect the RPC result for an embedded error message.
Example fix
// before
const audioId = parseAudioIdFromResult(rpc.result, ids) // null -> throw
// after
if (!rpc.result || rpc.result.error) throw new Error('NotebookLM rejected: ' + JSON.stringify(rpc.result))
const audioId = parseAudioIdFromResult(rpc.result, ids) Defensive patterns
Strategy: retry
Validate before calling
const sources = await listSources(notebookId);
if (!sources.length) throw new Error('no sources');
if (!supportedLanguages.includes(language)) throw new Error('unsupported language'); Type guard
const hasAudioId = (result) => typeof result?.audioId === 'string' && result.audioId.length > 0;
Try / catch
try {
return await generateAudio({ notebookId });
} catch (e) {
if (String(e.message).includes('returned no audio id')) {
await sleep(60000);
return await generateAudio({ notebookId });
}
throw e;
} Prevention
- Respect NotebookLM audio-overview quotas; space out requests.
- Keep opencli current so the RPC response parser matches NotebookLM.
- Log the raw rpc.result on failure to capture server-side error messages.
When it happens
Trigger: `callNotebooklmRpc` with NOTEBOOKLM_CREATE_AUDIO_RPC_ID returns a payload from which no audio id can be extracted given the notebookId and sourceIds as context — e.g. quota exceeded, unsupported source types, or NotebookLM RPC format change.
Common situations: Daily audio-overview quota reached; sources too large or unsupported language; NotebookLM silently returning an error body instead of a job id.
Related errors
- NotebookLM CreateArtifact (slides) RPC returned no slide-dec
- NotebookLM CreateNote RPC returned no note id
- NotebookLM AddFileSource (o4cbdc) RPC returned no source id;
- NotebookLM AddSources RPC returned no source id; verify the
- NotebookLM CreateProject RPC returned no notebook id
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/7e70b205ecbb47da.
Report an issue: GitHub.