
Wowerpoint
Turn a single long-form report or doc into a shareable kawaii NotebookLM slide-deck PDF without leaving your agent session.
Install
npx skills add https://github.com/thedotmack/claude-mem --skill wowerpointWhat is this skill?
- Strict one-source-doc in → one PDF slide deck out (no multi-source deck padding)
- NotebookLM-py + Playwright Chromium one-time machine setup with interactive OAuth login
- jq required for workflow JSON parsing alongside notebooklm auth check pre-flight
- Slides-only scope—videos and podcasts explicitly worse; direct users to notebooklm CLI for those
- Thin sources must be expanded first via mem-search and sequential thinking before rendering
Adoption & trust: 835 installs on skills.sh; 81.2k GitHub stars; 1/3 security scanners passed (skills.sh audits).
Recommended Skills
Lark Maillarksuite/cli
Lark Slideslarksuite/cli
Pptxanthropics/skills
Pdfanthropics/skills
Lark Markdownlarksuite/cli
Docxanthropics/skills
Journey fit
Primary fit
Canonical shelf is Grow → Content because the output is a narrative slide deck meant for sharing and storytelling, not building app code. Content subphase fits doc-to-deck workflows for reports, memos, and research summaries you want to circulate.
Common Questions / FAQ
Is Wowerpoint safe to install?
skills.sh reports 1 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Wowerpoint
# Wowerpoint One doc in, one PDF out. Slide-deck only — videos and podcasts from the same engine are noticeably worse and out of scope; refer the user to the `notebooklm` CLI directly if they want those. ## Triggers - "Wowerpoint <file>" - "Make a slide deck about <file>" - "Turn this report into slides" - "Kawaii-deck this" ## Setup (one-time per machine) If `notebooklm auth check` returns 0 and `command -v jq` resolves, skip. ```bash uv tool install --with playwright --force notebooklm-py $(uv tool dir)/notebooklm-py/bin/playwright install chromium ``` `jq` is required by the workflow's JSON parsing; install if missing (`brew install jq` on macOS, or your distro's package manager). Then the user authenticates interactively — do not script. Tell them to type `! notebooklm login` so the OAuth ENTER lands in their terminal. ## Workflow ### 1. The source doc You need exactly one source doc. If it doesn't exist or is too thin to carry a deck, **write it first** — use mem-search and sequential thinking to make it comprehensive (long-form, narrative, several thousand words is normal). Do not paper over a weak source by adding more sources. ### 2. Auth pre-flight ```bash notebooklm auth check 2>&1 | tail -5 ``` Exit 1 with `Run 'notebooklm login' to authenticate.` = halt and tell the user. ### 3. Create notebook, add the source ```bash NOTEBOOK_ID=$(notebooklm create "<title>" --json | jq -r .notebook.id) SOURCE_ID=$(notebooklm source add "<doc-path>" --notebook "$NOTEBOOK_ID" --json | jq -r .source.id) ``` Title: H1 of the source doc, or its filename stem; append a date for dated work. JSON envelope keys differ — `create` → `.notebook.id`, `source add` → `.source.id`, `generate` → `.task_id`. Wrong key = empty string = silent downstream failure. ### 4. Spawn the subagent Generation takes ~10 minutes; never block on it. Use the template below with `run_in_background: true`. ### 5. End your turn Print the notebook URL so the user can watch live: ```text https://notebooklm.google.com/notebook/<NOTEBOOK_ID> ``` The subagent's completion notification fires when the file is on disk. ## Output path Adjacent to the source, parallel filename: ```text <source-dir>/<source-stem>-slides.pdf ``` If the source isn't somewhere that makes sense as an output location, default to `reports/<stem>-slides.pdf`. ## Share link (WOWerpoint Server) After the PDF lands on disk, the subagent also POSTs it to the WOWerpoint Server, which converts the 16:9 deck into a 9:16 mobile twin and returns a share URL. The share URL is the primary deliverable to the user; the PDF on disk is the backup. Required env (exported in the user's shell — the subagent inherits the parent's environment, so plain `export` is enough; no dotenv loader runs): ```bash WOWERPOINT_API_BASE=https://wowerpoint-api.<subdomain>.workers.dev WOWERPOINT_VIEWER_BASE=https://wowerpoint-viewer.<subdomain>.workers.dev WOWERPOINT_UPLOAD_TOKEN=<token> ``` If any var is missing, skip the share-link step and just hand the PDF over. Upload pattern (run AFTER the subagent confirms the PDF exists on disk). Capture the full response so empty `id` and `error` payloads are handled — `jq -r '.id'` returns the literal string `null` on a missing key, so always pipe through `.id // empty`: ```bash if [ -n "$WOWERPOINT_API_BASE" ] && [ -n "$WOWERPOINT_UPLOAD_TOKEN" ] && [ -n "$WOWERPOINT_VIEWER_BASE" ]; then UPLOAD_JSON=$(curl -sS --connect-timeout 10 --max-time 30 -X POST "$WOWERPOINT_API_BASE/api/decks" \ -H "Authorization: Bearer $WOWERPOINT_UPLOAD_TOKEN" \ -F "file=@<OUTPUT_PATH>" \ -F "title=<TITLE>") DECK_ID=$(printf '%s' "$UPLOAD_JSON" | jq -r '.id // empty') API_ERROR=$(printf '%s' "$UPLOAD_JSON" |