{"skill":{"slug":"video-summarize","displayName":"video-summarize","summary":"Video summarization. Trigger: 1.User provides a video link (Bilibili/YouTube/Douyin/Twitter/TikTok etc.), 2.Summarize this video","description":"---\nname: video-summarize\ndescription: \"Video summarization. Trigger: 1.User provides a video link (Bilibili/YouTube/Douyin/Twitter/TikTok etc.), 2.Summarize this video\"\n---\n\n# Video Summarizer\n\nIntelligently fetch video transcripts → Let LLM summarize the content\n\n## Pipeline\n\n```\nVideo Link → Check Cache → Try downloading subtitles → Has subtitles? → Extract text directly → Summarize\n                                                     ↓ No subtitles\n                                                      Download audio → Whisper transcribe → Summarize\n```\n\n## Features\n\n- **Subtitles first**: Prefer official/manual subtitles, fall back to Whisper transcription only when unavailable\n- **Multi-platform**: Bilibili, YouTube, Douyin, Twitter, TikTok and 1000+ more platforms\n- **Auto language detection**: Whisper auto-detects video language (Chinese, English, Japanese, etc.)\n- **Concurrency safe**: Each video uses its own temp directory, supports multiple videos simultaneously\n- **Smart caching**: Same video returns cached result on subsequent requests\n\n## Supported Platforms\n\nPowered by yt-dlp, supports **1000+ platforms**:\n\n| Platform | Example URL |\n|----------|-------------|\n| **Bilibili** | `https://www.bilibili.com/video/BVxxx` |\n| **YouTube** | `https://www.youtube.com/watch?v=xxx` |\n| **Douyin** | `https://www.douyin.com/video/xxx` |\n| **Twitter/X** | `https://twitter.com/user/status/xxx` |\n| **TikTok** | `https://www.tiktok.com/@user/video/xxx` |\n| **Instagram** | `https://www.instagram.com/p/xxx` |\n| **AcFun** | `https://www.acfun.cn/v/acxxx` |\n| **iQiyi/Youku/Tencent** | Various Chinese video platforms |\n| **Others** | Any platform supported by yt-dlp |\n\n## Dependency Installation\n\nThe script will automatically check and install missing dependencies:\n- ffmpeg (audio conversion) → `brew install ffmpeg`\n- whisper.cpp (transcription) → `brew install whisper-cpp`\n- Python3 (isolated virtual environment) → `brew install python3`\n\nRun:\n```bash\nscripts/install_dependency.sh\n```\n\nNote: First-time installation may take a while depending on your network speed.\n\n## Usage\n\n```bash\n# Process a video (first run transcribes, subsequent runs return cached result)\nscripts/process.sh \"video_url\"\n```\n\nPipeline:\n1. Check cache (return immediately if exists)\n2. Try downloading subtitles (prefer Chinese manual, then auto-generated)\n3. Has subtitles → extract plain text; No subtitles → download audio → Whisper transcribe\n4. Save to `summarize_result/{title}_transcript_raw.txt`\n\n**Then ask me to summarize and save the result as a markdown file!**\n\n## Input Formats\n\n- Bilibili: `https://www.bilibili.com/video/BV1s8UZBZEa8`\n- YouTube: `https://www.youtube.com/watch?v=dQw4w9WgXcQ`\n- Douyin: `https://www.douyin.com/video/7123456789`\n- Twitter: `https://twitter.com/user/status/123456789`\n- TikTok: `https://www.tiktok.com/@user/video/123456789`\n- Any other yt-dlp supported URLs\n\n## Output\n\nFilenames use the video title for clarity, special characters handled automatically:\n\n```\ncache/{title}/\n└── transcript_raw.txt          # Raw transcript\n\nsummarize_result/\n└── {title}.md                    # Summary\n```\n\n**Filename sanitization:**\n- Chinese punctuation `《》【】：？` → `_`\n- English symbols `/\\:*?\"<>|` → `_`\n- Spaces → `_`\n- Consecutive underscores merged\n- Max 50 characters\n\n## Directory Structure\n\n```\nvideo-summarize/\n├── cache/                   # Cache directory\n│   └── {title}/             # Per-video directory\n│       ├── transcript_raw.txt  # Raw transcript (preserved)\n│       ├── status.json      # Processing status (cleaned up)\n│       ├── subs/            # Subtitle temp dir (cleaned up)\n│       ├── audio.m4a        # Audio file (cleaned up)\n│       └── audio.wav        # WAV format (cleaned up)\n├── summarize_result/        # Summary output directory\n│   └── {title}.md           # Summary file\n├── whisper-models/\n│   └── ggml-base.bin\n├── scripts/\n│   ├── install_dependency.sh\n│   ├── process.sh\n│   └── safe_filename.py\n└── SKILL.md\n```\n\n## Subtitle Support\n\n| Platform | Manual Subtitles | Auto Subtitles |\n|----------|-----------------|----------------|\n| **YouTube** | ✅ Supported | ✅ Supported |\n| **Bilibili** | ✅ Supported | ⚠️ Partial |\n| **Others** | Varies | Varies |\n\nSubtitle priority: Chinese manual > English manual > Auto-generated\n\n## Notes\n\n- Only processes public videos (no members-only or paid content)\n- Subtitles are generally better than Whisper transcription (preferred)\n- Transcription quality depends on audio quality and Whisper base model\n- Long videos (>30 min) take longer to transcribe\n- Works well with Chinese, English, Japanese and other major languages\n- Requires network connection to download video audio/subtitles\n","topics":["Summarize","Twitter"],"tags":{"latest":"1.0.2026050302"},"stats":{"comments":0,"downloads":530,"installsAllTime":20,"installsCurrent":1,"stars":1,"versions":5},"createdAt":1776172621009,"updatedAt":1779075822430},"latestVersion":{"version":"1.0.2026050302","createdAt":1777822773266,"changelog":"update skill’s description","license":"MIT-0"},"metadata":null,"owner":{"handle":"yilsonyan","userId":"s17fbn63bhbeevtcqdj3rqahbd84vxtp","displayName":"yilsonyan","image":"https://avatars.githubusercontent.com/u/46336803?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780090736082}}