[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80041":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":13,"stars7d":14,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":16,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":15,"starSnapshotCount":15,"syncStatus":14,"lastSyncTime":25,"discoverSource":26},80041,"claude-watch","devinilabs\u002Fclaude-watch","devinilabs","Turn any tutorial or lecture video into structured study notes — scene-aware frames, persistent library, Claude-vision OCR.",null,"Python",67,22,1,2,0,3,47.39,"MIT License",false,"main",[],"2026-06-12 04:01:26","# claude-watch\n\n**Turn any tutorial or lecture video into structured study notes.** Paste a URL, walk away, come back to a markdown file with embedded screenshots, timestamped transcript, and Claude's synthesis — saved to a persistent library.\n\n```\n\u002Fclaude-watch https:\u002F\u002Fyoutu.be\u002F\u003Clecture> backprop intuition\n```\n\n## Install\n\n| Surface | Command |\n|---|---|\n| **Claude Code** | `\u002Fplugin marketplace add devinilabs\u002Fclaude-watch` then `\u002Fplugin install claude-watch@claude-watch` |\n| **claude.ai** (web) | Download `claude-watch.skill` from the latest release → Settings → Capabilities → Skills → `+` |\n| **Codex** | `git clone https:\u002F\u002Fgithub.com\u002Fdevinilabs\u002Fclaude-watch ~\u002F.codex\u002Fskills\u002Fclaude-watch` |\n\n## What it does\n\n1. Downloads via `yt-dlp` (or accepts a local file).\n2. Detects scene changes with `ffmpeg`. Inserts coverage-floor frames every 45s across long static gaps so a lecture with one slide for 5 minutes still gets ~7 frames, not 1.\n3. Pulls a timestamped transcript — captions first (free), Whisper API (Groq preferred, OpenAI alt) only when missing.\n4. Hands frames + transcript to Claude. Claude `Read`s every frame as an image and writes `notes.md` to a strict template:\n   - `## TLDR` — 3-4 sentence synthesis\n   - `## Key Concepts` — bulleted with timestamps\n   - `## Notes` — one section per scene with embedded screenshot, on-screen text, what was said, Claude's synthesis\n   - `## Code & Commands` — every code-on-screen frame transcribed into a runnable fenced block\n   - `## Diagrams Referenced`, `## Open Questions`\n5. Saves everything to `~\u002Fclaude-watch\u002Flibrary\u002F\u003Cslug>\u002F` — re-running the same URL is a cache hit.\n\n## Why this exists\n\n`claude-video`'s uniform frame sampling spends the budget poorly on long lectures with slow-changing slides. And answers live in chat, so you can't go back to \"the notes from that video.\" `claude-watch` is opinionated for the tutorial workflow: scene-aware frames, persistent library, structured notes file.\n\n## Usage\n\n```\n\u002Fclaude-watch \u003Curl-or-path> [topic]\n\u002Fclaude-watch ~\u002FLectures\u002Fcs231n.mp4 backpropagation derivation\n\u002Fclaude-watch https:\u002F\u002Fyoutu.be\u002F\u003Clong> --start 5:00 --end 25:00\n\u002Fclaude-watch \u003Curl> --resolution 1024            # for slides with tiny code text\n```\n\nFlags: `--start\u002F--end`, `--max-frames`, `--resolution`, `--scene-threshold`, `--max-gap`, `--whisper groq|openai`, `--no-whisper`, `--out-dir`.\n\n## Bring your own keys\n\nCaptions cover the majority of public videos for free. Whisper only kicks in when a video has no caption track.\n\n| Need | Cost |\n|---|---|\n| Download + native captions | free (`yt-dlp` + `ffmpeg`) |\n| Whisper fallback (preferred) | Groq `whisper-large-v3` — cheap, fast |\n| Whisper fallback (alt) | OpenAI `whisper-1` |\n| Disable Whisper | `--no-whisper` (frames-only when no captions) |\n\nKeys go in `~\u002F.config\u002Fclaude-watch\u002F.env` (mode 0600).\n\n## Re-running the same video\n\nThe library is keyed on `slug = YYYY-MM-DD-\u003Ctitle>-\u003Cshort-hash>` where the short hash is `sha1(source + focus_range)[:4]`. Re-running the same URL with the same focus range hits the cache — no re-download, no re-transcribe, only frames + notes regenerate. Different focus range = different slug = a separate notes file.\n\nTo force a fresh run, delete the `meta.json` in the library dir.\n\n## Limits\n\n- **Best accuracy: under ~30 minutes** for a single notes pass. Past that, use `--start`\u002F`--end` to focus.\n- **Hard frame cap: 80** by default. Bump with `--max-frames` (token cost grows linearly).\n- **Whisper upload limit: 25 MB** (~50 min mono 16 kHz). Longer videos need captions.\n- **No private platforms.** Public URLs and local files only.\n\n## Develop\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fdevinilabs\u002Fclaude-watch\ncd claude-watch\npython3 -m pytest                         # full suite\nbash scripts\u002Fbuild-skill.sh               # → dist\u002Fclaude-watch.skill (claude.ai bundle)\n```\n\nReleasing: tag `vX.Y.Z`, push the tag — CI builds and attaches `claude-watch.skill`.\n\n## License\n\nMIT. Built on `yt-dlp`, `ffmpeg`, and Claude's multimodal `Read` tool. Whisper transcription via [Groq](https:\u002F\u002Fgroq.com) or [OpenAI](https:\u002F\u002Fopenai.com).\n","claude-watch 是一个将教学或讲座视频转换为结构化学习笔记的工具。它通过检测场景变化来智能截取关键帧，并利用OCR技术（Claude-vision OCR）从视频中提取文本和代码片段，生成包含时间戳、截图及摘要的Markdown文件。此外，该项目支持本地保存笔记库，方便用户随时回顾。适用于需要从视频教程或讲座中高效提取信息的学习者和研究人员。基于Python开发，使用了yt-dlp、ffmpeg等开源软件，并可通过Claude Code、Web界面或Codex等多种方式安装运行。","2026-06-11 03:59:00","CREATED_QUERY"]