[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G72KZE2KEF84D1CPMACE4B":3,"skill-same:01M6G72KZE2KEF84D1CPMACE4B":65},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":14,"categories":15,"keywords":16,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":20,"frontMatter":21,"refName":22,"commitSha":23,"skillDirectory":24,"forksCount":25,"repositoryHtmlUrl":26,"repositoryHomepageUrl":6,"ownerHtmlUrl":27,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":28,"install":29,"resources":42},"01M6G72KZE2KEF84D1CPMACE4B","tl-dw",null,"kbarbel640-del\u002Fskills","kbarbel640-del","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F255315490?v=4","01M6CJPPQGCCESXMG3K7BBGQ5J","01M6CJPPX2PB2BCZERFVM2C2B3",1,"MIT","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fvovavvk\u002Ftl-dw\u002FSKILL.md",[],[17],"tl dw","2026-11-10 10:12:30",false,"# tldw - YouTube Video Summarizer\n\n**too long; didn't watch**\n\nExtract and summarize YouTube video transcripts quickly and efficiently.\n\n## Overview\n\nThe tldw skill takes a YouTube URL, extracts the video transcript, and provides a comprehensive summary of the content. This allows you to quickly understand video content without watching the entire video.\n\n### Purpose\n\nThis skill solves the problem of information overload from video content. Instead of spending 10-60 minutes watching a video, you can get the key points, main arguments, and conclusions in a concise summary within seconds.\n\n### When to Use\n\nUse this skill when:\n- A user provides a YouTube video URL and asks for a summary\n- You need to quickly understand video content without watching it\n- You want to analyze or reference specific video content\n- You need to extract information from educational, news, or documentary videos\n\n### How It Works\n\n1. **Extraction**: Uses yt-dlp to download video transcripts (captions\u002Fsubtitles)\n2. **Cleaning**: Applies deduplication to remove artifacts from auto-generated captions\n3. **Processing**: Analyzes the cleaned transcript directly in the main agent session\n4. **Summary**: Returns a structured summary with main points, key arguments, and conclusions\n\n### Key Features\n\n- **Caching**: Downloaded transcripts are cached locally to avoid re-downloading\n- **Deduplication**: Removes duplicate lines common in auto-generated captions\n- **Multi-format support**: Works with VTT, SRT, and JSON caption formats\n- **Cookie support**: Can access age-restricted content with a cookie file\n- **Comprehensive summaries**: Provides thesis, key examples, comparisons, and conclusions\n- **Fast processing**: Typical videos summarized in seconds\n\n### Attribution\n\nThis skill is based on the [tldw project](https:\u002F\u002Fgithub.com\u002Frmusser01\u002Ftldw) by stong. Full attribution and licensing details are available in [ATTRIBUTION.md](ATTRIBUTION.md).\n\n---\n\n## Requirements\n\n### System Requirements\n\n- **Python**: 3.8 or higher\n- **Disk space**: ~60MB for virtual environment and dependencies, plus additional space for transcript cache\n\n### Required Dependencies\n\nThe skill uses a Python virtual environment with the following dependencies:\n\n- **yt-dlp**: Video transcript downloader (installed via pip)\n- **Python standard library**: json, re, argparse (built-in)\n\nAll dependencies are installed in the local virtual environment at `venv\u002F`.\n\n### Optional Dependencies\n\n- **Cookie file**: For accessing age-restricted or members-only content\n  - Format: Netscape cookie format (can be exported from browser)\n  - Place in skill directory and reference with `--cookies` flag\n\n### Directory Structure\n\n```\ntldw\u002F\n├── SKILL.md              # This documentation\n├── ATTRIBUTION.md        # Credit to original project\n├── LICENSE               # AGPL-3.0 license\n├── scripts\u002F\n│   └── extract_transcript.py   # Main extraction script\n├── cache\u002F                # Cached transcripts (auto-created)\n└── venv\u002F                 # Python virtual environment\n    ├── bin\u002F\n    │   └── yt-dlp        # Video transcript downloader\n    └── lib\u002F              # Python packages\n```\n\n### Setup\n\nFollow these steps to set up the tldw skill:\n\n1. **Navigate to the skill directory:**\n   ```bash\n   cd tldw\u002F\n   ```\n\n2. **Create a Python virtual environment:**\n   ```bash\n   python3 -m venv venv\n   ```\n\n3. **Install dependencies:**\n   ```bash\n   venv\u002Fbin\u002Fpip install yt-dlp webvtt-py\n   ```\n\n4. **Verify installation:**\n   ```bash\n   venv\u002Fbin\u002Fyt-dlp --version\n   ```\n\n5. **The cache directory will be created automatically on first use**\n\nThe skill is now ready to use!\n\n---\n\n## Usage Instructions\n\n### Basic Usage\n\nWhen a user provides a YouTube URL and requests a summary, use the following workflow:\n\n1. Extract the transcript using the extraction script\n2. Parse the JSON output to get the cleaned transcript\n3. Summarize the transcript directly (do not use sub-agents for large transcripts)\n4. Return a structured summary to the user\n\n### Command Syntax\n\n```bash\ncd tldw\u002F && \\\nvenv\u002Fbin\u002Fpython scripts\u002Fextract_transcript.py \\\n  --json --cache-dir cache \"YOUTUBE_URL\"\n```\n\n### Processing the Output\n\nThe script returns JSON with the following structure:\n\n```json\n{\n  \"transcript\": \"Full cleaned transcript text...\",\n  \"video_id\": \"video_id_here\",\n  \"title\": \"Video Title\",\n  \"description\": \"Video description...\",\n  \"duration\": 1234,\n  \"uploader\": \"Channel Name\",\n  \"upload_date\": \"20260101\",\n  \"view_count\": 12345,\n  \"webpage_url\": \"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=...\"\n}\n```\n\nExtract the `transcript` field and process it directly to create a comprehensive summary.\n\n### Command Options\n\n- `--json`: Output in JSON format (recommended for parsing)\n- `--cache-dir \u003Cpath>`: Specify cache directory (default: `cache\u002F`)\n- `--cookies \u003Cfile>`: Path to Netscape-format cookie file for age-restricted content\n\n### Example Workflow\n\n```bash\n# 1. Extract transcript\ncd tldw\u002F && \\\nvenv\u002Fbin\u002Fpython scripts\u002Fextract_transcript.py \\\n  --json --cache-dir cache \"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=VIDEO_ID\"\n\n# 2. Parse the JSON output and extract the transcript field\n\n# 3. Summarize the transcript directly (include main points, key arguments, conclusions)\n\n# 4. Return formatted summary to user\n```\n\n### Accessing Age-Restricted Content\n\nFor age-restricted or members-only videos, export cookies from your browser:\n\n1. Install a browser extension like \"Get cookies.txt LOCALLY\"\n2. Navigate to YouTube while logged in\n3. Export cookies in Netscape format\n4. Save to the tldw directory (e.g., `youtube_cookies.txt`)\n5. Use with: `--cookies youtube_cookies.txt`\n\n---\n\n## Error Handling\n\n### No Captions Available\n\n**Error message:** `\"No subtitles\u002Fcaptions found\"`\n\n**What it means:** The video has no auto-generated or manual captions available.\n\n**Solution:** Inform the user that the video cannot be transcribed because it lacks captions.\n\n### Invalid URL\n\n**Error message:** `\"ERROR: unable to download video data\"`\n\n**What it means:** The URL is malformed, the video doesn't exist, or it's private\u002Fdeleted.\n\n**Solution:** Verify the URL is correct and check if the video is publicly accessible.\n\n### Age-Restricted Content\n\n**Error message:** `\"Sign in to confirm your age\"` or similar authentication errors\n\n**What it means:** The video requires age verification or YouTube login.\n\n**Solution:** Use the `--cookies` flag with exported browser cookies (see \"Accessing Age-Restricted Content\" above).\n\n### Network\u002FConnection Errors\n\n**Error messages:** `\"Unable to download\"`, `\"Connection timeout\"`, extraction failures\n\n**What it means:** Network issues, YouTube blocking the request, or **outdated yt-dlp** that's incompatible with current YouTube.\n\n**Solution:**\n1. **First, update yt-dlp:** \n   ```bash\n   cd tldw\u002F && \\\n   venv\u002Fbin\u002Fpip install --upgrade yt-dlp\n   ```\n2. Retry the extraction\n3. If still failing: check internet connection or wait and try later\n\nYouTube frequently changes their API, so keeping yt-dlp updated is essential.\n\n### Cache Issues\n\n**Symptoms:** Permission errors, disk full errors\n\n**What it means:** The cache directory has permission problems or insufficient disk space.\n\n**Solution:** Check available disk space with `df -h` and verify write permissions on the `cache\u002F` directory.\n\n### Large Transcript Handling\n\n**Note:** Transcripts over 50,000 characters may take longer to process.\n\n**Best practice:** Process large transcripts directly in the main agent session. Do not delegate to sub-agents, as they have been found unreliable with large payloads.\n\n### Debugging\n\nTo see full error output (not just the last 100 lines):\n\n```bash\ncd tldw\u002F && \\\nvenv\u002Fbin\u002Fpython scripts\u002Fextract_transcript.py \\\n  --json --cache-dir cache \"YOUTUBE_URL\"\n```\n\nTo inspect cached transcripts:\n\n```bash\nls -lh tldw\u002Fcache\u002F\n```\n\n---\n\n## Limitations\n\n### Caption Dependency\n\n- The skill **only works with videos that have captions\u002Fsubtitles** available\n- Cannot transcribe videos with only audio (no built-in speech-to-text capability)\n- Auto-generated captions may contain errors, typos, or timing artifacts\n- Deduplication helps clean up auto-generated caption issues but isn't perfect\n\n### Language Support\n\n- Depends on available caption languages provided by YouTube\n- The script extracts whatever captions are available (auto-generated or manual)\n- Non-English captions work, but summarization quality depends on the language model's capabilities\n- English captions typically provide the best results\n\n### Video Length\n\n- Very long videos (2+ hours) may produce extremely large transcripts (100k+ characters)\n- Processing time increases proportionally with transcript length\n- No hard limit, but practical considerations for context window and processing time apply\n\n### YouTube-Only\n\n- Currently **only supports YouTube URLs**\n- Does not work with other video platforms (Vimeo, Dailymotion, TikTok, etc.)\n- While yt-dlp supports many platforms, this script is optimized specifically for YouTube\n\n### Private\u002FRestricted Content\n\n- Cannot access truly private videos (not shared publicly)\n- Members-only or channel membership content requires cookies from an authenticated session\n- Live streams may not have captions available until after the stream has ended\n- Some geographic restrictions cannot be bypassed even with cookies\n\n### Deduplication Limitations\n\n- The deduplication logic removes **consecutive duplicate lines**\n- May occasionally remove legitimate repeated phrases or refrains\n- Designed primarily for auto-generated caption artifacts, not all repetition scenarios\n- Manual captions typically don't need deduplication\n\n### No Audio Extraction\n\n- This skill extracts **text transcripts only**, not audio files\n- For audio extraction or processing, other tools (like yt-dlp directly with audio flags) would be needed\n- Focus is on text-based content analysis, not media files\n\n---\n",{},"main","e7e336ac628c3e3bd771aff1aaa469c93778f94a","skills\u002Fvovavvk\u002Ftl-dw",0,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del","2026-08-23 22:39:37",{"source":7,"skillName":5,"commands":30,"prompt":40,"zipAvailable":41},[31,34,37],{"tool":32,"command":33},"npx","npx skills add kbarbel640-del\u002Fskills --skill tl-dw",{"tool":35,"command":36},"bunx","bunx skills add kbarbel640-del\u002Fskills --skill tl-dw",{"tool":38,"command":39},"pnpm","pnpm dlx skills add kbarbel640-del\u002Fskills --skill tl-dw","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fvovavvk\u002Ftl-dw\u002FSKILL.md",true,[43,49,53,59],{"path":44,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":47,"sourceHtmlUrl":48},"_meta.json","REFERENCE","参考文档",290,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fvovavvk\u002Ftl-dw\u002F_meta.json",{"path":50,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":51,"sourceHtmlUrl":52},"ATTRIBUTION.md",1278,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fvovavvk\u002Ftl-dw\u002FATTRIBUTION.md",{"path":54,"resourceType":55,"resourceTypeDesc":56,"sizeBytes":57,"sourceHtmlUrl":58},"LICENSE.txt","LICENSE","许可证",34523,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fvovavvk\u002Ftl-dw\u002FLICENSE.txt",{"path":60,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":63,"sourceHtmlUrl":64},"scripts\u002Fextract_transcript.py","SCRIPT","脚本",17231,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fvovavvk\u002Ftl-dw\u002Fscripts\u002Fextract_transcript.py",[66,97,126,147,153,173],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":77,"publishedAt":18},"01M6G8J55967D6281ACMKAKTEQ","crowd-prompting","A marketplace where AI agents improve prompts, system instructions, tool descriptions, and other text-based content with domain expertise from real-world operations — and earn tokens for valuable contributions.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzzadrian\u002Fcrowd-prompting\u002FSKILL.md",[72],{"categoryNo":73,"categoryName":74,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96],"crowd prompting","prompting","api","with","tokens","domain","world","prompts","operations","instructions","text","tool","system","improve","productivity","marketplace","https","content","ai agents",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":108,"publishedAt":18},"01M6G8J0PKPAYVET6BWE8W4C26","dilemm-ai","Compete in DilemmAI, the prisoner's dilemma AI arena at dilemm.ai. Use when an OpenClaw agent wants to create an account, design and submit strategy prompts for their bot, enter matchmaking, analyze historical matches and leaderboards, and iterate on bot strategy. Requires headless browser automation (no API available yet).","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzyori\u002Fdilemm-ai\u002FSKILL.md",[103],{"categoryNo":104,"categoryName":105,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[109,80,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,85,125],"dilemm ai","arena","analyze","browser","openclaw agent","create","automation","browser automation","bot","openclaw","design","strategy","headless","compete","submit","matchmaking","use",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":135,"publishedAt":18},"01M6G8HWAF3K9SW7NP3Z83CPJ6","arxiv-paper-reviews","Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date\u002Fcategory\u002Finterest, viewing paper details with comments, or submitting paper reviews via API at http:\u002F\u002F150.158.152.82:8000.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Fweak-accept\u002FSKILL.md",[132],{"categoryNo":133,"categoryName":134,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000021","资料检索与研究",[136,137,138,139,140,141,142,81,143,123,125,144,80,145,146],"arxiv paper reviews","reviews","arxiv","paper","crawler","papers","comments","fetch","read","http","via",{"skillNo":148,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":152,"publishedAt":18},"01M6G8HQJ7N7WMY6YV7D7SSJ16","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Farxiv-paper-reviews\u002FSKILL.md",[151],{"categoryNo":133,"categoryName":134,"taxonomyType":106,"taxonomyTypeDesc":107},[139,138,137,136,146,141,142,81,140,123,125,143,144,80,145],{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":18},"01M6G8HM95Y64JNVFC2HN4E2BG","git-summary","Get a quick summary of the current Git repository including status, recent commits, branches, and contributors.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzweack\u002Fgit-summary\u002FSKILL.md",[],[160,161,162,163,164,165,166,167,168,169,170,171,172],"git","summary","git summary","commits","repository","win32","status","linux","contributors","true","quick","get","branches",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":183,"publishedAt":18},"01M6G8HGEGF05CNEJCGVYFSC4R","agent-constitution","Interact with AgentConstitution governance contracts on Base Sepolia. Check compliance, read rules, log actions, query governance state.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fztsalexey\u002Fagent-constitution\u002FSKILL.md",[179,180],{"categoryNo":104,"categoryName":105,"taxonomyType":106,"taxonomyTypeDesc":107},{"categoryNo":181,"categoryName":182,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000037","律师与法务",[184,185,186,187,81,188,189,22,190,144,191,192,193,194,195,94,196,197,198],"agent constitution","constitution","contracts","tree","query","base","log","check","Rules","projects","compliance","actions","state","governance","github"]