Notebooklm Youtube Skill

v1.0.0

Automate NotebookLM notebook creation from YouTube videos. Given a YouTube video URL, extract information about people featured in the video, research them o...

0· 61·0 current·0 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for x-rayluan/notebooklm-youtube-skill.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Notebooklm Youtube Skill" (x-rayluan/notebooklm-youtube-skill) from ClawHub.
Skill page: https://clawhub.ai/x-rayluan/notebooklm-youtube-skill
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install notebooklm-youtube-skill

ClawHub CLI

Package manager switcher

npx clawhub@latest install notebooklm-youtube-skill
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description (NotebookLM + YouTube automation) match the instructions: the SKILL.md focuses on controlling Chrome, extracting video info, web-searching people, creating a research document, and automating NotebookLM UI interactions. All required capabilities (browser control, being signed into NotebookLM) are in-line with the stated purpose; there are no unrelated binaries, config paths, or environment variables requested.
Instruction Scope
Instructions explicitly tell the agent to open YouTube and NotebookLM in Chrome, perform web searches, assemble research text, and inject that content into NotebookLM via DOM manipulation (setting textarea values, dispatching input/change events, clicking buttons). This is within scope for a browser-automation skill, but it necessarily uses whatever browser session is active: any sites you're logged into (cookies, sessions) are accessible to the automation. The skill does not instruct reading local files or exporting data to third-party endpoints, but it will paste/submit content into your NotebookLM account and perform clicks on your behalf — consider that sensitive account data and any pages open in the same browser may be reachable by the automation connector.
Install Mechanism
Instruction-only skill with no install spec and no code files to download or execute. The README asks the user to enable an existing 'Control Chrome' connector in the host app and adjust a macOS developer setting; there are no external downloads, third-party packages, or extraction steps in the skill bundle itself.
Credentials
The skill declares and requires no environment variables, credentials, or configuration paths. The README and SKILL.md require the user to be logged into NotebookLM in Chrome and to enable the 'Control Chrome' connector — these are proportionate to the stated automation task and are not covertly asking for unrelated secrets.
Persistence & Privilege
The skill is not marked always:true and does not request permanent presence or modify other skills/configs. It relies on the host's browser-control connector at runtime and does not persist files or install background services in the provided bundle.
Assessment
This skill automates your browser to act in your NotebookLM account. Before installing: (1) Only enable the Control Chrome connector for accounts you trust — automation will act using your logged-in browser session and can interact with pages & data you have open. (2) Avoid running this on a browser profile that contains sensitive accounts (banking, email, work systems). (3) Review the SKILL.md and README; confirm no external network endpoints are being used beyond web_search and opening NotebookLM/YouTube. (4) When running for the first time, watch the automation so you can stop it if it navigates or enters unexpected data. (5) If unsure, test with a throwaway Google account and a non-sensitive video first.

Like a lobster shell, security has layers — review code before you run it.

latestvk97eem96vbj7bfgrf6tby94xcd85e1p8
61downloads
0stars
1versions
Updated 3d ago
v1.0.0
MIT-0

NotebookLM Video Research Skill

Automate NotebookLM notebook creation from YouTube videos with automatic research and Audio Overview generation.

Core Principle

Screenshot before every action — verify UI state, identify correct elements, confirm success.

📸 Screenshot → 👀 Analyze → 🎯 Target → ✅ Verify → 🖱️ Execute → 📸 Screenshot → ✓ Confirm

Quick Start Workflow

Phase 1: Research

# 1. Get video info
Control Chrome:open_url("https://www.youtube.com/watch?v=VIDEO_ID")
Control Chrome:get_page_content()

# 2. Research people mentioned
web_search("[Person Name] background career")

# 3. Create research document (keep under 500k chars)

Phase 2: NotebookLM Automation

# 1. Navigate
Control Chrome:open_url("https://notebooklm.google.com/")

# 2. Create notebook
# Click "Create new" button

# 3. Add YouTube source
# Click "Websites" → Enter URL → Click "Insert"

# 4. Add research document  
# Click "Add sources" → "Copied text" → Paste content → Click "Insert"

# 5. Generate audio
# Click "Audio Overview" in Studio panel

Critical: Element Targeting

⚠️ The Main Trap

NotebookLM has multiple textareas. Generic selectors grab the wrong one!

SIDEBAR (wrong)          CENTER MODAL (correct)
┌──────────────┐         ┌──────────────────┐
│ Search box   │         │ URL/Text input   │
│ query-input  │         │ "Paste any links"|
└──────────────┘         └──────────────────┘

Correct Selectors

ElementSelector
URL inputtextarea[placeholder="Paste any links"]
Text inputtextarea[placeholder="Paste text here"]
Sidebar (AVOID)textarea[placeholder*="Search"]

Angular Event Pattern

// Simple .value = doesn't work! Use this:
var setter = Object.getOwnPropertyDescriptor(
    HTMLTextAreaElement.prototype, 'value'
).set;
setter.call(textarea, 'content');
textarea.dispatchEvent(new Event('input', {bubbles: true}));
textarea.dispatchEvent(new Event('change', {bubbles: true}));

Button State Check

var btn = document.querySelector('button');
if (btn && !btn.disabled && !btn.className.includes('disabled')) {
    btn.click();
}

Complete Code Snippets

Enter YouTube URL

var urlTextarea = document.querySelector('textarea[placeholder="Paste any links"]');
if (urlTextarea) {
    var setter = Object.getOwnPropertyDescriptor(
        HTMLTextAreaElement.prototype, 'value'
    ).set;
    setter.call(urlTextarea, 'https://www.youtube.com/watch?v=VIDEO_ID');
    urlTextarea.dispatchEvent(new Event('input', {bubbles: true}));
    urlTextarea.dispatchEvent(new Event('change', {bubbles: true}));
}

Enter Research Text

var pasteTextarea = document.querySelector('textarea[placeholder="Paste text here"]');
if (pasteTextarea) {
    var setter = Object.getOwnPropertyDescriptor(
        HTMLTextAreaElement.prototype, 'value'
    ).set;
    setter.call(pasteTextarea, RESEARCH_CONTENT);
    pasteTextarea.dispatchEvent(new Event('input', {bubbles: true}));
    pasteTextarea.dispatchEvent(new Event('change', {bubbles: true}));
}

Click Button by Text

var buttons = Array.from(document.querySelectorAll('button'));
var btn = buttons.find(b => b.textContent.includes('Insert'));
if (btn && !btn.disabled) {
    btn.click();
}

Verify State

// Check what textareas exist
var textareas = Array.from(document.querySelectorAll('textarea'));
textareas.map(t => ({
    placeholder: t.placeholder,
    value: t.value.substring(0, 50)
}));

Checkpoint Summary

StepVerify BeforeVerify After
Navigate-Home page loaded
Create notebookCreate button visibleNotebook opened
Add URLCorrect textarea identifiedURL in center, not sidebar
Click InsertButton ENABLEDSource added
Add textCorrect textarea identifiedText in center, not sidebar
Click InsertButton ENABLED2 sources shown
Audio OverviewStudio panel visibleGeneration started

Anti-Patterns

❌ Don't✅ Do
document.querySelector('textarea')textarea[placeholder="Paste any links"]
Click without checking stateVerify button enabled first
Assume action succeededScreenshot to confirm
Rush through stepsWait for async operations

Wait Times

ActionWait
Page navigation3s
Dialog open2s
YouTube source processing8-10s
Text source processing5s
Audio generation5-10 minutes

Error Recovery

Wrong input targeted:

  1. Clear sidebar: document.querySelectorAll('.query-input').forEach(el => el.value = '')
  2. Re-target with specific selector

Button disabled:

  1. Re-dispatch events on textarea
  2. Verify content actually entered

Modal didn't open:

  1. Wait longer
  2. Click trigger button again

Comments

Loading comments...