github teng-lin/notebooklm-py v0.4.0

4 hours ago

Added

  • Multi-account profiles - Switch between Google accounts without re-authenticating (#227)
    • notebooklm profile create/list/switch/rename/delete commands
    • Global --profile / -p flag and NOTEBOOKLM_PROFILE environment variable to scope any command to a profile
    • Per-profile storage paths under ~/.notebooklm/profiles/<name>/
    • Implicit default profile preserved for backward compatibility; existing ~/.notebooklm/storage_state.json is auto-detected as the default profile (no manual migration needed)
  • notebooklm doctor diagnostic command - notebooklm doctor [--fix] [--json] checks profile setup, auth, and migration status; reports actionable issues
  • Microsoft Edge SSO login - notebooklm login --browser msedge for organizations that require Edge for SSO (#204)
  • Browser cookie import - Reuse cookies from your existing browser session without driving Playwright
    • notebooklm login --browser-cookies <browser> (chrome, edge, firefox, safari, etc.)
    • New convert_rookiepy_cookies_to_storage_state() Python helper
    • Optional [cookies] extra installs rookiepy (pip install "notebooklm-py[cookies]")
    • Honors the active profile: notebooklm --profile <name> login --browser-cookies <browser> writes to that profile's storage_state.json. Note that cookie extraction always pulls the source browser's currently-active Google account for google.com / notebooklm.google.com — to populate multiple profiles from the same browser, switch the active Google account in the browser between runs (or use a separate browser per profile).
  • EPUB source type - Upload .epub files as notebook sources (#231)
  • Agent skill installation - Install the bundled NotebookLM skill into local AI agents (#206, #207)
    • notebooklm skill install - Install into ~/.claude/skills/notebooklm and ~/.agents/skills/notebooklm
    • notebooklm skill status - Check installation state
    • notebooklm agent show codex / notebooklm agent show claude - Print bundled agent templates
  • Mind map customization - client.artifacts.generate_mind_map() now accepts language and instructions parameters (#252)
  • note list --json - Machine-readable note listings (#259)
  • Bare status codes in decoder errors - Decoder surfaces server status codes on null RPC results for clearer diagnostics (#114, #294)

Fixed

  • Cross-domain cookie preservation - Login storage state retains cookies across google.com and notebooklm.google.com subdomains, restoring sessions for regional domains
  • NotebookLM subdomain cookies - Subdomain cookies are no longer dropped during login (#334)
  • Video artifact detection - Correctly detect completed video media URLs in polling responses (#333)
  • Research import on unavailable snapshots - CLI gracefully handles missing source snapshots during research import (#335)
  • Source import retry - Filtered partial-import retry payloads and tightened verification to avoid false positives (#321, #327)
  • Server-state verification on timeout - Prevents duplicate inflation when source imports time out (#319)
  • Playwright navigation interruption - Handles updated Playwright behavior on already-authenticated sessions (#214, #322)
  • Login subprocess on Windows - Use sys.executable for Playwright subprocess calls (#279)
  • Legacy Windows Unicode output - Sanitized output streams for legacy Windows consoles (#324)
  • Settings quota errors - Use account limits when reporting create-quota failures (#328)
  • Chat references - Emit references only from the winning chunk to avoid >600-element duplication (#300, #310)
  • Login retry mechanism - Resolved race conditions and improved error handling on retry (#243)
  • Quota detection during polling - Detect quota / daily-limit failures during artifact polling (#240)
  • Google account switching - Fixed switching between Google accounts at login time (#246)
  • YouTube URL extraction - Extract YouTube URLs at deeply-nested response positions (#265)
  • Bare-HTTP URL fallback - Disabled brittle bare-HTTP fallback in sources.list() (#294)
  • Logout context cleanup - Clear the active notebook context on notebooklm logout
  • Infographic URL extraction - Aligned with download-path logic; added regression test (#229)
  • Custom storage path for downloads - Artifact downloads now respect custom auth storage paths (#235)
  • Windows file permissions - Skip Unix-only 0o600 calls on Windows and rely on Python 3.13+ ACL behavior (#225)
  • TOCTOU protection - Hardened directory creation in session.py (#225)

Changed

  • rookiepy is an optional [cookies] extra - Excluded from [all] to avoid Python 3.13+ install issues; install with pip install "notebooklm-py[cookies]"
  • Login error detection - Improved detection of missing browser binaries (e.g., msedge not installed)
  • Skill installation paths - Hardened to handle alternative ~/.claude and ~/.agents layouts
  • Deprecation removal deferred to v0.5.0 - The deprecated APIs originally scheduled for removal in v0.4.0 — StudioContentType, Source.source_type, SourceFulltext.source_type, Artifact.artifact_type, Artifact.variant, and DEFAULT_STORAGE_PATH — continue to work and emit DeprecationWarning. Removal is now planned for v0.5.0 to give downstream users an extra release to migrate.

Infrastructure

  • Pinned ruff==0.8.6 in dev deps to match pre-commit configuration
  • Bumped python-dotenv (#299)
  • Bumped pytest in the uv group
  • Added contribution templates and PR quality guidelines for issues and PRs

Don't miss a new notebooklm-py release

NewReleases is sending notifications on new releases.