Notebooklm
/SKILLComplete API for Google NotebookLM - full programmatic access including features not in the web UI. Create notebooks, add sources, generate all artifact types, download in multiple formats.
--- name: notebooklm description: Complete API for Google NotebookLM:full programmatic access, including features not available in the web UI. Create notebooks, add sources, generate all artifact types, and download in multiple formats. Activates upon explicit /notebooklm or an intent such as "create a podcast about X" --- # NotebookLM Automation Complete programmatic access to Google NotebookLM:including capabilities not exposed in the web UI. Create notebooks, add sources (URLs, YouTube, PDFs, audio, video, images), interact with content, generate all artifact types, and download results in multiple formats. ## Installation From PyPI (Recommended for AI-agents:Python-version-aware): ``bash pip install "notebooklm-py[browser]" # mandatory; errors must propagate # [cookies] (rookiepy) is optional and known to FAIL TO BUILD on Python 3.13+. # Skip it deliberately on 3.13+ rather than swallowing the error : that lets # *real* install failures (typos, network, PyPI outages) surface for the agent. if python -c "import sys; sys.exit(0 if sys.version_info < (3, 13) else 1)"; then pip install "notebooklm-py[cookies]" # errors propagate else echo "Skipping [cookies] on Python 3.13+ (rookiepy unavailable). Use 'notebooklm login' interactively." fi ` > Full install matrix (extras, headless servers, contributor flow): [Installation guide on GitHub](https://github.com/teng-lin/notebooklm-py/blob/main/docs/installation.md). **From GitHub (use latest release tag, NOT main branch):** `bash # Get the latest release tag (requires curl + jq) if ! command -v jq >/dev/null; then echo "jq is required to read the latest release tag" >&2 exit 1 fi LATEST_TAG=$( curl -fsSL https://api.github.com/repos/teng-lin/notebooklm-py/releases/latest | jq -r '.tag_name' ) # Includes [browser] so the interactive notebooklm login flow works. pip install "notebooklm-py[browser] @ git+https://github.com/teng-lin/notebooklm-py@${LATEST_TAG}" ` ⚠️ **DO NOT install from main branch** ( pip install git+https://github.com/teng-lin/notebooklm-py). The main branch may contain unreleased/unstable changes. Always use PyPI or a specific release tag, unless you are testing unreleased features. **Skill install methods:** - notebooklm skill install installs this skill into the supported local agent directories managed by the CLI. - npx skills add teng-lin/notebooklm-py installs this skill from the GitHub repository into compatible agent skill directories. - If you are already reading this file inside an agent skill directory, the skill is already installed. You only need the Python package and authentication below. **CLI-managed install:** `bash notebooklm skill install ` ## Prerequisites **IMPORTANT:** Before using any command, you MUST authenticate: `bash notebooklm login # Opens browser for Google OAuth notebooklm list # Verify authentication works ` If commands fail with authentication errors, re-run notebooklm login . ### CI/CD, Multiple Accounts, and Parallel Agents For automated environments, multiple accounts, or parallel agent workflows: | Variable | Purpose | |----------|---------| | NOTEBOOKLM_HOME | Custom config directory (default: ~/.notebooklm) | | NOTEBOOKLM_PROFILE | Active profile name (default: default ) | | NOTEBOOKLMAUTHJSON | Inline auth JSON - no file writes needed | **CI/CD setup:** Set NOTEBOOKLMAUTHJSON from a secret containing your storage_state.json contents. **Multiple accounts:** Use named profiles ( notebooklm profile create work , then notebooklm -p work login ). Alternatively, use different NOTEBOOKLM_HOME directories per account. **Parallel agents:** The CLI stores notebook context per profile (~/.notebooklm/profiles /<profile>/context.json, with a legacy fallback to ~/.notebooklm/context.json for the implicit default profile). Multiple concurrent agents that share a profile and use notebooklm use can overwrite each other's context : use one of the isolation strategies below. **Solutions for parallel workflows:** 1. **Always use explicit notebook ID** (recommended): Pass -n <notebook_id> / --notebook <notebook_id>` on notebook-scoped command