{"id":"a74ba90a-7179-4d9c-9976-5ea39bb5aaf3","entityType":"agent","slug":"clawhub-syanchen7-video-downloader-enhanced","name":"video-downloader-enhanced","canonicalUrl":"https://www.xpersona.co/agent/clawhub-syanchen7-video-downloader-enhanced","canonicalPath":"/agent/clawhub-syanchen7-video-downloader-enhanced","generatedAt":"2026-10-10T05:48:53.437Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T12:35:58.532Z","emptyReason":null},"description":"Download videos and extract original post captions, audio transcripts, and metadata from video platform links. Use when the user provides Douyin, Bilibili, WeChat Channels, Xiaohongshu, or YouTube links and asks to save the original video, capture the post text/caption, transcribe the spoken in-video script/copy, archive source material, or prepare video material for downstream analysis or skill creation. Douyin is implemented with an H5 primary route and yt-dlp fallback; Bilibili, YouTube, and Xiaohongshu are implemented through yt-dlp; WeChat Channels is not implemented yet and should currently be handled via the WeChat mini program kg百宝箱.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.6K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s1753gwq3cv6dbevemzv7jhq1h8bpzwv:video-downloader-enhanced","sourceUrl":"https://clawhub.ai/syanchen7/video-downloader-enhanced","homepage":"https://clawhub.ai/syanchen7/skills/video-downloader-enhanced","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/syanchen7/video-downloader-enhanced","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/syanchen7/skills/video-downloader-enhanced","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":68,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"video-downloader-enhanced technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T12:35:58.532Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T12:35:58.532Z","emptyReason":null},"stars":null,"forks":null,"downloads":2641,"packageName":null,"latestVersion":"0.1.0","tractionLabel":"2.6K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T12:35:58.531Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T12:35:58.532Z","lastCrawledAt":"2026-10-09T12:35:58.531Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T12:35:58.531Z","lastVerifiedAt":null,"highlights":[{"version":"0.1.0","createdAt":"2026-08-02T04:01:58.817Z","changelog":"**Initial release of video-downloader-enhanced.** - Download videos and extract original post captions, audio transcripts, and metadata from Douyin, Bilibili, Xiaohongshu, and YouTube links. - Output a structured folder containing media files, captions, transcripts, SRT subtitles (where available), and metadata. - Folder names include publish date, cleaned title, platform, and author; supports deduplication. - Multiple ASR options: local whisper.cpp, openai-whisper, SiliconFlow, or skip. - Douyin: prefers H5 primary route with yt-dlp as fallback; Bilibili, YouTube, Xiaohongshu handled via yt-dlp. - WeChat Channels not yet supported; users are instructed to use the `kg百宝箱` mini program for that platform.","fileCount":17,"zipByteSize":36387}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1753gwq3cv6dbevemzv7jhq1h8bpzwv:video-downloader-enhanced","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s1753gwq3cv6dbevemzv7jhq1h8bpzwv:video-downloader-enhanced` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/syanchen7/video-downloader-enhanced before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-syanchen7-video-downloader-enhanced/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-syanchen7-video-downloader-enhanced/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-syanchen7-video-downloader-enhanced/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-syanchen7-video-downloader-enhanced/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-syanchen7-video-downloader-enhanced/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-syanchen7-video-downloader-enhanced/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T05:48:53.437Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-syanchen7-video-downloader-enhanced/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-syanchen7-video-downloader-enhanced/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-syanchen7-video-downloader-enhanced/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-syanchen7-video-downloader-enhanced/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T12:35:58.532Z","emptyReason":null},"readme":"Skill: video-downloader-enhanced\n\nOwner: syanchen7\n\nSummary: Download videos and extract original post captions, audio transcripts, and metadata from video platform links. Use when the user provides Douyin, Bilibili, WeChat Channels, Xiaohongshu, or YouTube links and asks to save the original video, capture the post text/caption, transcribe the spoken in-video script/copy, archive source material, or prepare video material for downstream analysis or skill creation. Douyin is implemented with an H5 primary route and yt-dlp fallback; Bilibili, YouTube, and Xiaohongshu are implemented through yt-dlp; WeChat Channels is not implemented yet and should currently be handled via the WeChat mini program kg百宝箱.\n\nTags: latest:0.1.0\n\nVersion history:\n\nv0.1.0 | 2026-08-02T04:01:58.817Z | auto\n\n**Initial release of video-downloader-enhanced.**\n\n- Download videos and extract original post captions, audio transcripts, and metadata from Douyin, Bilibili, Xiaohongshu, and YouTube links.\n- Output a structured folder containing media files, captions, transcripts, SRT subtitles (where available), and metadata.\n- Folder names include publish date, cleaned title, platform, and author; supports deduplication.\n- Multiple ASR options: local whisper.cpp, openai-whisper, SiliconFlow, or skip.\n- Douyin: prefers H5 primary route with yt-dlp as fallback; Bilibili, YouTube, Xiaohongshu handled via yt-dlp.\n- WeChat Channels not yet supported; users are instructed to use the `kg百宝箱` mini program for that platform.\n\nArchive index:\n\nArchive v0.1.0: 17 files, 36387 bytes\n\nFiles: .gitignore (537b), LICENSE (1066b), NOTICE (911b), README.md (8016b), scripts (0b), scripts/asr.py (19654b), scripts/download_video.py (4255b), scripts/folder_utils.py (4470b), scripts/providers (0b), scripts/providers/__init__.py (768b), scripts/providers/bilibili.py (6717b), scripts/providers/douyin.py (14290b), scripts/providers/xiaohongshu.py (21450b), scripts/providers/youtube.py (7311b), skill-card.md (3135b), SKILL.md (12433b), _meta.json (144b)\n\nFile v0.1.0:SKILL.md\n\n---\nname: video-downloader-enhanced\ndescription: Download videos and extract original post captions, audio transcripts, and metadata from video platform links. Use when the user provides Douyin, Bilibili, WeChat Channels, Xiaohongshu, or YouTube links and asks to save the original video, capture the post text/caption, transcribe the spoken in-video script/copy, archive source material, or prepare video material for downstream analysis or skill creation. Douyin is implemented with an H5 primary route and yt-dlp fallback; Bilibili, YouTube, and Xiaohongshu are implemented through yt-dlp; WeChat Channels is not implemented yet and should currently be handled via the WeChat mini program kg百宝箱.\n---\n\n# Video Downloader\n\n## Overview\n\nUse this skill to turn a video-platform URL into a local source-material folder containing the video file, `post_caption.txt`, `audio.wav` / `audio.m4a` / `audio.mp3`, `transcript.txt`, `transcript.srt` (whisper.cpp only), and `metadata.json`.\n\nTerminology:\n\n- `post_caption.txt`: platform publish text, title, description, and hashtags.\n- `transcript.txt`: spoken in-video script generated from audio ASR.\n- `metadata.json`: normalized platform metadata plus download and ASR status.\n\n## Output Folder Naming\n\nEach download creates a folder with a human-readable name:\n\n```\nYY_MM_DD_标题摘要_平台_作者\n```\n\nExample: `26_07_27_AI做PPT零基础终极教程_抖音_木子不写代码`\n\nRules:\n- **Date** — video publish date preferred, falls back to download date. Format: `YY_MM_DD`.\n- **标题摘要** — title trimmed to ≤40 characters; newlines, hashtags (`#`), mentions (`@`), emoji removed.\n- **平台** — Chinese display name: `抖音` / `B站` / `YouTube` / `小红书`.\n- **作者** — falls back to `未知作者` when unavailable.\n- **Dedup** — if the folder already exists, appends the last 5 characters of the video ID.\n- Internal file names (`post_caption.txt`, `metadata.json`, etc.) are **not** affected.\n\nThe current implemented providers are Douyin, Bilibili, YouTube, and Xiaohongshu. WeChat Channels is an explicit extension point; do not claim that provider works until its provider module has been implemented and tested. For WeChat Channels links, tell the user to first use the WeChat mini program `kg百宝箱` to download the video from the 视频号 link, then continue with local ASR or downstream processing on the downloaded file.\n\n## Quick Start\n\nRun the bundled CLI from this skill directory:\n\n```bash\npython3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads\n```\n\nFor metadata/post-caption extraction without downloading the video:\n\n```bash\npython3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads --metadata-only\n```\n\nFor download without ASR:\n\n```bash\npython3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads --asr none\n```\n\nFor Chinese speech with local whisper.cpp (recommended):\n\n```bash\npython3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads --asr whisper_cpp --asr-language Chinese\n```\n\nFor Chinese speech with cloud ASR:\n\n```bash\nSILICONFLOW_API_KEY=\"...\" python3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads --asr siliconflow --asr-language Chinese\n```\n\nTo bias ASR toward domain terms or a specific script:\n\n```bash\npython3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads --asr-language Chinese --asr-prompt \"请使用简体中文转写。关键词：丧尸清道夫、Shotlab、Midjourney、GPT Image、AI生图。\"\n```\n\n## Workflow\n\n1. Identify the platform from the URL.\n2. Use `scripts/download_video.py` as the single entrypoint.\n3. Inspect the output folder and report:\n   - video path, when downloaded\n   - post caption path\n   - audio path\n   - transcript path\n   - SRT path (whisper.cpp and openai-whisper)\n   - metadata path\n   - platform, item ID, author, duration, resolution, and any provider caveats\n\n## ASR Transcript\n\nAfter a video is downloaded, the CLI extracts audio with `ffmpeg` and transcribes it. Four backends are available, selected via `--asr`.\n\n### Backend Options\n\n| Backend | Description |\n|---------|-------------|\n| `auto` (default) | Auto-detect: whisper.cpp > openai-whisper > SiliconFlow |\n| `whisper_cpp` | Local whisper.cpp (`whisper-cli`), fastest on Apple Silicon |\n| `whisper` | Local openai-whisper Python CLI |\n| `siliconflow` | Cloud API via SiliconFlow SenseVoiceSmall |\n| `none` | Skip audio extraction and transcription entirely |\n\n### `--asr auto` Priority\n\nWhen `--asr auto` (the default) is used, the backend is selected in this order:\n\n1. **whisper.cpp** — if `WHISPER_CPP_BIN` points to an executable file, or `whisper-cli` is available on PATH, and `WHISPER_CPP_MODEL` points to an existing model file.\n2. **openai-whisper** — if the `whisper` CLI is available on PATH.\n3. **SiliconFlow** — if `SILICONFLOW_API_KEY` is set in the environment.\n4. If none of the above are available, an error is returned. **No software is auto-installed.**\n\n### whisper.cpp (`--asr whisper_cpp`)\n\nThe recommended local backend for best performance on Apple Silicon.\n\nEnvironment variables:\n\n- `WHISPER_CPP_BIN` — optional explicit path to `whisper-cli`; when unset, search PATH\n- `WHISPER_CPP_MODEL` — required path to a local GGML model file\n\n```bash\nexport WHISPER_CPP_BIN=\"/path/to/whisper-cli\"\nexport WHISPER_CPP_MODEL=\"/path/to/ggml-large-v3-turbo.bin\"\n```\n\nDo not assume a platform-specific default path. No software is installed automatically.\n\nOutput artifacts:\n- `audio.wav` (16 kHz PCM)\n- `transcript.txt`\n- `transcript.srt` (subtitles with timestamps)\n- `transcript.whisper_cpp.json` (metadata)\n\nThe model is always the file path, not a model name — `--asr-model` is ignored for whisper_cpp.\n\n### openai-whisper (`--asr whisper`)\n\nOutput artifacts:\n- `audio.m4a`\n- `transcript.txt`\n- `transcript.srt`\n- `transcript.whisper.json`\n\n### SiliconFlow (`--asr siliconflow`)\n\nRequires `SILICONFLOW_API_KEY`. Calls `https://api.siliconflow.cn/v1/audio/transcriptions`.\n\nOutput artifacts:\n- `audio.mp3`\n- `transcript.txt`\n- `transcript.siliconflow.json`\n\nSiliconFlow does not currently provide an SRT file; `srt_path` is returned as `null`.\n\n### Result Contract\n\nEvery ASR result includes `status`, `backend`, `model`, `language`, `audio_path`,\n`transcript_path`, `srt_path`, `raw_json_path`, and `error`. A selected backend\nthat fails returns `status: failed`; `auto` does not silently retry another\nbackend after transcription has started.\n\n### Common Options\n\n- `--asr-language` — Language for transcription, e.g. `Chinese`, `zh`, `English`, `auto`. Default: `auto`.\n- `--asr-model` — Model name. Default: `auto` (whisper.cpp ignores this; openai-whisper defaults to `base`; SiliconFlow maps to `FunAudioLLM/SenseVoiceSmall`).\n- `--asr-prompt` — Initial prompt passed to the ASR engine. Use it to request Simplified Chinese output and provide domain terms.\n- `--asr-max-seconds` — Debug limit: transcribe only the first N seconds of audio.\n\n## Douyin Provider\n\nThe Douyin provider uses the H5 share page as the primary route. It follows the share URL, parses the server-rendered `window._ROUTER_DATA`, extracts the original post text and video resource ID, then downloads through the non-`playwm` endpoint.\n\nIf the H5 route fails, or if metadata extraction succeeds but direct media download fails, use `yt-dlp` as a fallback. The fallback first tries a normal `yt-dlp` download, then retries with Chrome cookies.\n\nImportant behavior:\n\n- Prefer the non-watermark `aweme/v1/play/` endpoint over the share-page `playwm` endpoint.\n- Treat `yt-dlp` as a backup route, not the primary Douyin route.\n- Store the original Douyin publish text in `post_caption.txt`.\n- Store raw and normalized metadata in `metadata.json`.\n- Use `--metadata-only` for fast tests or when the user only needs copy/caption.\n- Use `--no-yt-dlp-fallback` only when debugging the H5 route itself.\n\n## Bilibili Provider\n\nThe Bilibili provider uses `yt-dlp` as the primary route for both metadata extraction and media download.\n\nImportant behavior:\n\n- Support `bilibili.com` and `b23.tv` links.\n- Store the Bilibili title plus description in `post_caption.txt`.\n- Store `yt-dlp` raw metadata and normalized fields in `metadata.json`.\n- Download with `bv*+ba/b` and merge to mp4 when possible.\n- Retry with Chrome cookies when anonymous metadata extraction or download fails.\n- Use `--metadata-only` for fast tests or when the user only needs title/description metadata.\n\n## YouTube Provider\n\nThe YouTube provider uses `yt-dlp` as the primary route for both metadata extraction and media download.\n\nImportant behavior:\n\n- Support `youtube.com` and `youtu.be` links.\n- Store the YouTube title plus description in `post_caption.txt`.\n- Store `yt-dlp` raw metadata and normalized fields in `metadata.json`.\n- Download with `bv*+ba/b` and merge to mp4 when possible.\n- Use local Node as the yt-dlp JavaScript runtime when available.\n- Retry with `--remote-components ejs:github` or Chrome cookies when the basic route fails.\n- Use `--metadata-only` for fast tests or when the user only needs title/description metadata.\n\n## Xiaohongshu Provider\n\nThe Xiaohongshu provider uses a three-tier download fallback:\n\n1. **Anonymous yt-dlp** — public download without any authentication (no cookies).\n2. **Public direct URL** — if metadata is available but anonymous yt-dlp can't download, extracts the highest-quality video stream URL from yt-dlp's formats metadata and downloads it via plain HTTP.\n3. **Chrome cookies yt-dlp** — last resort; requires local Chrome browser access.\n\nMetadata extraction is always anonymous — cookies are never triggered just to get author info or metadata.\n\nImportant behavior:\n\n- Support `xiaohongshu.com`, `xhslink.com`, and `xhslink.cn` links.\n- Store the Xiaohongshu title plus note body in `post_caption.txt`.\n- Store `yt-dlp` raw metadata and normalized fields in `metadata.json`.\n- Author nickname is taken from anonymous metadata; falls back to `未知作者` when unavailable.\n- **Remote assistant**: if both public routes fail, reports \"需要在电脑端授权 Chrome Cookie\" immediately instead of hanging.\n- **Safety**: no `cookies.txt` is saved; cookie contents are never logged or included in output.\n- `metadata.json` records `download.method`, `download.cookie_used`, `download.direct_url_source`, and `download.fallback_errors` for full traceability.\n- Use `--metadata-only` for fast tests or when the user only needs title/note metadata.\n\n## WeChat Channels Provider\n\nWeChat Channels is recognized but not implemented yet.\n\nCurrent finding:\n\n- `yt-dlp` does not support the tested `weixin.qq.com/sph/...` share link.\n- The public web page can expose text, cover image, and QR-code flow, but did not expose a playable video URL in the tested case.\n- Do not claim that this skill can directly download WeChat Channels videos until a provider has been implemented and tested.\n\nTemporary workflow:\n\n- Ask the user to open WeChat and search for the mini program `kg百宝箱`.\n- In `kg百宝箱`, paste the 视频号 video link and download the video there.\n- After the user has the downloaded video file locally, this skill can still be used for local ASR/transcript work if the file is passed through the ASR helper or a future local-file entrypoint.\n\n## Provider Extension Contract\n\nAdd new platforms by creating a module under `scripts/providers/` and registering it in `scripts/providers/__init__.py`.\n\nEach provider should expose:\n\n- `PLATFORM`: stable provider name\n- `supports(url: str) -> bool`\n- `fetch(url: str, output_root: Path, *, metadata_only: bool = False, **options) -> dict`\n\nOutput folders should include the same artifact contract whenever possible:\n\n- `metadata.json`\n- `post_caption.txt`\n- `audio.wav` / `audio.m4a` / `audio.mp3` and `transcript.txt` when ASR is enabled\n- `transcript.srt` when whisper.cpp ASR is enabled\n- video file when download is enabled\n\nReserved providers:\n\n- `wechat_channels`\n\nWhen a reserved provider is detected but not implemented, say so plainly and do not fabricate a download result.\n\n## Safety\n\nDownload only material the user owns, has permission to download, or can lawfully archive for their intended use. Do not bypass DRM, paid access controls, private permissions, or platform restrictions for unauthorized redistribution.\n\nFile v0.1.0:README.md\n\n# Video Downloader Enhanced\n\n一个面向本地 AI Agent 的视频下载、素材归档与语音转写 Skill，也可以脱离 Agent，直接作为命令行工具运行。\n\n本项目基于 [`kangarooking/kangarooking-skills`](https://github.com/kangarooking/kangarooking-skills) 中的 `video-downloader` 修改和扩展。只要 Agent 能读取项目说明、访问本地文件并运行 Shell / Python 命令，就可以调用这套工作流。不同产品的 Skill 目录、自动发现机制和权限模型并不相同，因此脚本本身是通用的，安装方式需要以各 Agent 的规则为准。\n\n## 功能\n\n输入一个公开视频链接后，本项目可以：\n\n1. 识别视频平台；\n2. 获取原始发布标题、正文和话题标签；\n3. 下载视频，并在支持的下载路线中验证文件有效性；\n4. 使用 FFmpeg 提取音频；\n5. 使用本地或云端 ASR 进行语音转写；\n6. 生成纯文本转写稿、字幕和结构化元数据。\n\n当前已实现：\n\n- 抖音\n- 小红书\n- Bilibili\n- YouTube\n\n微信视频号链接目前只能识别，尚未实现直接下载。请先通过你有权使用的方式将视频保存到本地，再进行后续处理。\n\n## 输出内容\n\n每个视频会生成一个独立目录，命名格式为：\n\n```text\nYY_MM_DD_标题摘要_平台_作者\n```\n\n目录中可能包含：\n\n```text\n视频文件.mp4\npost_caption.txt\naudio.wav / audio.m4a / audio.mp3\ntranscript.txt\ntranscript.srt\ntranscript.whisper_cpp.json\ntranscript.whisper.json\ntranscript.siliconflow.json\nmetadata.json\n```\n\n- `post_caption.txt`：平台发布标题、正文和话题标签；\n- `audio.*`：从视频中提取的音频；\n- `transcript.txt`：纯文本语音转写；\n- `transcript.srt`：带时间轴的字幕，由 whisper.cpp 或 openai-whisper 后端生成；\n- `transcript.*.json`：所用 ASR 后端的结果或运行信息；\n- `metadata.json`：平台、作者、链接、时长、分辨率、下载方式和 ASR 状态。\n\n## 主要改进\n\n相较上游 `video-downloader`，本版本主要增加或调整了：\n\n- 支持 whisper.cpp；\n- 默认 ASR 优先级为 `whisper.cpp → openai-whisper → SiliconFlow`；\n- 通过环境变量配置 whisper.cpp 命令与模型路径；\n- 支持 `xhslink.cn` 小红书短链接；\n- 小红书匿名 `yt-dlp` 失败后尝试公开媒体直链；\n- 将 Chrome Cookie 作为最后一级下载回退；\n- 使用 `ffprobe` 校验小红书下载文件是否包含真实视频流；\n- 在 `metadata.json` 中记录下载路线、Cookie 使用情况、校验结果和回退错误；\n- 使用便于人工管理的输出目录名称。\n\n## 工作原理\n\n```text\n视频链接\n   ↓\n平台 Provider\n   ↓\nyt-dlp / 平台专用下载路线\n   ↓\n视频有效性校验\n   ↓\nFFmpeg 提取音频\n   ↓\nwhisper.cpp / openai-whisper / SiliconFlow\n   ↓\n视频、发布文案、转写稿、字幕与元数据\n```\n\n## 系统要求\n\n- Python 3.10+\n- [`yt-dlp`](https://github.com/yt-dlp/yt-dlp)\n- [FFmpeg](https://ffmpeg.org/)（包括 `ffmpeg` 和 `ffprobe`）\n\n语音转写至少配置一种后端：\n\n- [whisper.cpp](https://github.com/ggml-org/whisper.cpp)，推荐本地使用；\n- [openai-whisper](https://github.com/openai/whisper)，可选本地后端；\n- [SiliconFlow](https://siliconflow.cn/) API，可选云端后端。\n\n本项目不会自动安装或升级系统工具。\n\n## 安装\n\n克隆仓库并进入 Skill 目录：\n\n```bash\ngit clone <repository-url>\ncd video-downloader-enhanced\n```\n\n作为 Agent Skill 使用时，将整个目录放入目标 Agent 支持的 Skills 目录，或在项目规则中要求 Agent 先读取本仓库的 `SKILL.md`。请查阅你所使用产品的当前文档，不要假设不同 Agent 的安装目录和授权行为完全一致。\n\n也可以不安装为 Skill，直接运行命令行入口：\n\n```bash\npython3 scripts/download_video.py --help\n```\n\n## whisper.cpp 配置\n\n脚本优先使用 `WHISPER_CPP_BIN` 指定的可执行文件；未设置时，从 `PATH` 查找 `whisper-cli`：\n\n```bash\nexport WHISPER_CPP_BIN=\"/path/to/whisper-cli\"\nexport WHISPER_CPP_MODEL=\"/path/to/ggml-large-v3-turbo.bin\"\n```\n\n`WHISPER_CPP_MODEL` 必须指向本机已有的 GGML 模型文件。项目不假设任何平台专属默认路径，也不会自动安装软件。请勿把个人绝对路径或模型文件提交到公开仓库。\n\n## 命令行使用\n\n下载并自动选择可用 ASR 后端：\n\n```bash\npython3 scripts/download_video.py \\\n  \"https://v.douyin.com/...\" \\\n  --output-dir \"./downloads\"\n```\n\n指定 whisper.cpp：\n\n```bash\npython3 scripts/download_video.py \\\n  \"https://v.douyin.com/...\" \\\n  --output-dir \"./downloads\" \\\n  --asr whisper_cpp \\\n  --asr-language Chinese\n```\n\n只下载，不提取音频或转写：\n\n```bash\npython3 scripts/download_video.py \\\n  \"https://v.douyin.com/...\" \\\n  --output-dir \"./downloads\" \\\n  --asr none\n```\n\n只获取元数据和发布文案：\n\n```bash\npython3 scripts/download_video.py \\\n  \"https://v.douyin.com/...\" \\\n  --output-dir \"./downloads\" \\\n  --metadata-only\n```\n\n使用 SiliconFlow：\n\n```bash\nexport SILICONFLOW_API_KEY=\"your-api-key\"\n\npython3 scripts/download_video.py \\\n  \"https://v.douyin.com/...\" \\\n  --output-dir \"./downloads\" \\\n  --asr siliconflow \\\n  --asr-language Chinese\n```\n\nAPI Key 只从环境变量读取。不要将真实密钥写进命令示例、代码、`.env` 或 Git 提交记录。\n\n## 在 AI Agent 中使用\n\n可以直接告诉本地 Agent：\n\n```text\n请先阅读 video-downloader-enhanced/SKILL.md，\n然后用 scripts/download_video.py 下载并转写这个视频：\n<视频链接>\n```\n\n推荐在 Agent 的项目规则中提前约定：\n\n- 默认输出目录；\n- 是否启用 ASR；\n- 默认 ASR 后端和语言；\n- whisper.cpp 模型路径；\n- 是否允许读取浏览器 Cookie；\n- 是否允许安装或升级系统工具。\n\n## Cookie 与隐私\n\n部分平台无法完全匿名下载。对应 Provider 可能在公开路线失败后调用：\n\n```text\nyt-dlp --cookies-from-browser chrome\n```\n\n这会读取本机 Chrome Cookie；在 macOS 上还可能触发钥匙串授权。项目不会生成 `cookies.txt`，也不会主动将 Cookie 内容写入输出文件，但下载命令本身仍会访问浏览器凭证。\n\n在运行前请确认：\n\n- 你理解并授权本次浏览器 Cookie 访问；\n- 不把 Cookie 数据库、`cookies.txt` 或浏览器配置复制进仓库；\n- 远程或无人值守环境中设置 `VIDEO_DOWNLOADER_REMOTE=1`，使小红书 Provider 在需要 Cookie 时直接报告；\n- 只下载你拥有、获准下载或依法可以保存的内容。\n\n## 发布前安全检查\n\n仓库已提供 `.gitignore`，用于排除：\n\n- 下载的视频、音频、发布文案、转写稿和元数据；\n- `.env`、Cookie 导出文件和浏览器 Cookie 数据库；\n- `.DS_Store`、`__pycache__`、`*.pyc`；\n- `*.bak*` 备份、日志和临时文件。\n\n`.gitignore` 只能阻止未跟踪文件被新增，不能清除已经提交的文件或 Git 历史。发布前仍应检查暂存区与历史记录，并确认没有真实 API Key、Cookie、私人笔记或个人绝对路径。\n\n## 当前限制\n\n- 微信视频号暂不支持直接下载；\n- 平台页面结构或 `yt-dlp` 行为变化可能导致 Provider 暂时失效；\n- 私密、付费、地区限制或登录后可见内容可能需要额外认证；\n- 目前只对小红书下载执行额外的最小文件大小与 `ffprobe` 视频流校验；\n- 本 Skill 不包含完整的逐帧视觉理解、OCR 或画面内容分析；\n- 下载能力不代表拥有内容版权或再分发权限。\n\n## 致谢与许可\n\n本项目基于 [`kangarooking/kangarooking-skills`](https://github.com/kangarooking/kangarooking-skills) 中的 `video-downloader` 修改和扩展。上游仓库 README 声明：除各 Skill 另有说明外，其原创内容按 MIT License 开源。\n\n本项目按 [MIT License](LICENSE) 发布。详细上游来源和主要修改说明见 [NOTICE](NOTICE)。再发布或修改本项目时，请保留许可证和来源说明。\n\nFile v0.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn7ch7dax53njmcqff8gw5xnw18bpz6h\",\n  \"slug\": \"video-downloader-enhanced\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1785643318817\n}\n\nFile v0.1.0:skill-card.md\n\n## Description:\n\nDownloads videos from supported public video-platform links and saves post captions, audio transcripts, subtitles, and metadata for local analysis or archiving.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[syanchen7](https://clawhub.ai/user/syanchen7)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nDevelopers and local AI agents use this skill to turn authorized video links from Douyin, Bilibili, Xiaohongshu, and YouTube into source-material folders containing media, captions, transcripts, subtitles where available, and normalized metadata. It can also extract metadata and post text without downloading the video.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Fallback download routes may invoke yt-dlp with the user's live Chrome profile.\n\nMitigation: Run only when browser-cookie access is expected, use an isolated browser profile when possible, and prefer metadata-only or public routes for sensitive workflows.\n\nRisk: Default ASR auto-selection can use SiliconFlow cloud transcription when SILICONFLOW_API_KEY is inherited from the environment.\n\nMitigation: Use --asr none or an explicit local ASR backend for sensitive videos, and unset SILICONFLOW_API_KEY when cloud transcription is not intended.\n\nRisk: The YouTube provider can use unpinned remote components as a fallback.\n\nMitigation: Use trusted video URLs and run the skill in an isolated environment when remote component fallback is acceptable.\n\nRisk: Downloading platform videos can create copyright, access-control, or platform-terms risk.\n\nMitigation: Download only material the user owns, has permission to download, or can lawfully archive; do not use the skill to bypass DRM, paid access, or private permissions.\n\n## Reference(s):\n\n- [Server-resolved source repository](https://github.com/SyanChen7/video-downloader-enhanced)\n- [ClawHub skill page](https://clawhub.ai/syanchen7/skills/video-downloader-enhanced)\n- [Publisher profile](https://clawhub.ai/user/syanchen7)\n- [Upstream video-downloader attribution](https://github.com/kangarooking/kangarooking-skills/tree/main/video-downloader)\n- [yt-dlp](https://github.com/yt-dlp/yt-dlp)\n- [FFmpeg](https://ffmpeg.org/)\n- [whisper.cpp](https://github.com/ggml-org/whisper.cpp)\n- [openai-whisper](https://github.com/openai/whisper)\n- [SiliconFlow](https://siliconflow.cn/)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration guidance, Files, JSON]\n\n**Output Format:** [Markdown guidance plus JSON CLI results and local media, caption, transcript, subtitle, and metadata files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Output folders are named by date, cleaned title, platform, and author; ASR output depends on the selected backend.]\n\n## Skill Version(s):\n\n0.1.0 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v0.1.0:LICENSE\n\nMIT License\n\nCopyright (c) 2026 Syan Chen\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","readmeExcerpt":"Skill: video-downloader-enhanced Owner: syanchen7 Summary: Download videos and extract original post captions, audio transcripts, and metadata from video platform links. Use when the user provides Douyin, Bilibili, WeChat Channels, Xiaohongshu, or YouTube links and asks to save the original video, capture the post text/caption, transcribe the spoken in-video script/copy, archive source material, or prepare video mate","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"YY_MM_DD_标题摘要_平台_作者"},{"language":"bash","snippet":"python3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads"},{"language":"bash","snippet":"python3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads --metadata-only"},{"language":"bash","snippet":"python3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads --asr none"},{"language":"bash","snippet":"python3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads --asr whisper_cpp --asr-language Chinese"},{"language":"bash","snippet":"SILICONFLOW_API_KEY=\"...\" python3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads --asr siliconflow --asr-language Chinese"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: video-downloader-enhanced\ndescription: Download videos and extract original post captions, audio transcripts, and metadata from video platform links. Use when the user provides Douyin, Bilibili, WeChat Channels, Xiaohongshu, or YouTube links and asks to save the original video, capture the post text/caption, transcribe the spoken in-video script/copy, archive source material, or prepare video material for downstream analysis or skill creation. Douyin is implemented with an H5 primary route and yt-dlp fallback; Bilibili, YouTube, and Xiaohongshu are implemented through yt-dlp; WeChat Channels is not implemented yet and should currently be handled via the WeChat mini program kg百宝箱.\n---\n\n# Video Downloader\n\n## Overview\n\nUse this skill to turn a video-platform URL into a local source-material folder containing the video file, `post_caption.txt`, `audio.wav` / `audio.m4a` / `audio.mp3`, `transcript.txt`, `transcript.srt` (whisper.cpp only), and `metadata.json`.\n\nTerminology:\n\n- `post_caption.txt`: platform publish text, title, description, and hashtags.\n- `transcript.txt`: spoken in-video script generated from audio ASR.\n- `metadata.json`: normalized platform metadata plus download and ASR status.\n\n## Output Folder Naming\n\nEach download creates a folder with a human-readable name:\n\n```\nYY_MM_DD_标题摘要_平台_作者\n```\n\nExample: `26_07_27_AI做PPT零基础终极教程_抖音_木子不写代码`\n\nRules:\n- **Date** — video publish date preferred, falls back to download date. Format: `YY_MM_DD`.\n- **标题摘要** — title trimmed to ≤40 characters; newlines, hashtags (`#`), mentions (`@`), emoji removed.\n- **平台** — Chinese display name: `抖音` / `B站` / `YouTube` / `小红书`.\n- **作者** — falls back to `未知作者` when unavailable.\n- **Dedup** — if the folder already exists, appends the last 5 characters of the video ID.\n- Internal file names (`post_caption.txt`, `metadata.json`, etc.) are **not** affected.\n\nThe current implemented providers are Douyin, Bilibili, YouTube, and Xiaohongshu. WeChat Channels is an explicit extension point; do not claim that provider works until its provider module has been implemented and tested. For WeChat Channels links, tell the user to first use the WeChat mini program `kg百宝箱` to download the video from the 视频号 link, then continue with local ASR or downstream processing on the downloaded file.\n\n## Quick Start\n\nRun the bundled CLI from this skill directory:\n\n```bash\npython3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads\n```\n\nFor metadata/post-caption extraction without downloading the video:\n\n```bash\npython3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads --metadata-only\n```\n\nFor download without ASR:\n\n```bash\npython3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads --asr none\n```\n\nFor Chinese speech with local whisper.cpp (recommended):\n\n```bash\npython3 scripts/download_video.py \"https://v.douyin.com/...\" --output-dir ./downloads --asr whisper_cpp --asr-language Chinese\n```\n\nFor Chines"},{"path":"README.md","content":"# Video Downloader Enhanced\n\n一个面向本地 AI Agent 的视频下载、素材归档与语音转写 Skill，也可以脱离 Agent，直接作为命令行工具运行。\n\n本项目基于 [`kangarooking/kangarooking-skills`](https://github.com/kangarooking/kangarooking-skills) 中的 `video-downloader` 修改和扩展。只要 Agent 能读取项目说明、访问本地文件并运行 Shell / Python 命令，就可以调用这套工作流。不同产品的 Skill 目录、自动发现机制和权限模型并不相同，因此脚本本身是通用的，安装方式需要以各 Agent 的规则为准。\n\n## 功能\n\n输入一个公开视频链接后，本项目可以：\n\n1. 识别视频平台；\n2. 获取原始发布标题、正文和话题标签；\n3. 下载视频，并在支持的下载路线中验证文件有效性；\n4. 使用 FFmpeg 提取音频；\n5. 使用本地或云端 ASR 进行语音转写；\n6. 生成纯文本转写稿、字幕和结构化元数据。\n\n当前已实现：\n\n- 抖音\n- 小红书\n- Bilibili\n- YouTube\n\n微信视频号链接目前只能识别，尚未实现直接下载。请先通过你有权使用的方式将视频保存到本地，再进行后续处理。\n\n## 输出内容\n\n每个视频会生成一个独立目录，命名格式为：\n\n```text\nYY_MM_DD_标题摘要_平台_作者\n```\n\n目录中可能包含：\n\n```text\n视频文件.mp4\npost_caption.txt\naudio.wav / audio.m4a / audio.mp3\ntranscript.txt\ntranscript.srt\ntranscript.whisper_cpp.json\ntranscript.whisper.json\ntranscript.siliconflow.json\nmetadata.json\n```\n\n- `post_caption.txt`：平台发布标题、正文和话题标签；\n- `audio.*`：从视频中提取的音频；\n- `transcript.txt`：纯文本语音转写；\n- `transcript.srt`：带时间轴的字幕，由 whisper.cpp 或 openai-whisper 后端生成；\n- `transcript.*.json`：所用 ASR 后端的结果或运行信息；\n- `metadata.json`：平台、作者、链接、时长、分辨率、下载方式和 ASR 状态。\n\n## 主要改进\n\n相较上游 `video-downloader`，本版本主要增加或调整了：\n\n- 支持 whisper.cpp；\n- 默认 ASR 优先级为 `whisper.cpp → openai-whisper → SiliconFlow`；\n- 通过环境变量配置 whisper.cpp 命令与模型路径；\n- 支持 `xhslink.cn` 小红书短链接；\n- 小红书匿名 `yt-dlp` 失败后尝试公开媒体直链；\n- 将 Chrome Cookie 作为最后一级下载回退；\n- 使用 `ffprobe` 校验小红书下载文件是否包含真实视频流；\n- 在 `metadata.json` 中记录下载路线、Cookie 使用情况、校验结果和回退错误；\n- 使用便于人工管理的输出目录名称。\n\n## 工作原理\n\n```text\n视频链接\n   ↓\n平台 Provider\n   ↓\nyt-dlp / 平台专用下载路线\n   ↓\n视频有效性校验\n   ↓\nFFmpeg 提取音频\n   ↓\nwhisper.cpp / openai-whisper / SiliconFlow\n   ↓\n视频、发布文案、转写稿、字幕与元数据\n```\n\n## 系统要求\n\n- Python 3.10+\n- [`yt-dlp`](https://github.com/yt-dlp/yt-dlp)\n- [FFmpeg](https://ffmpeg.org/)（包括 `ffmpeg` 和 `ffprobe`）\n\n语音转写至少配置一种后端：\n\n- [whisper.cpp](https://github.com/ggml-org/whisper.cpp)，推荐本地使用；\n- [openai-whisper](https://github.com/openai/whisper)，可选本地后端；\n- [SiliconFlow](https://siliconflow.cn/) API，可选云端后端。\n\n本项目不会自动安装或升级系统工具。\n\n## 安装\n\n克隆仓库并进入 Skill 目录：\n\n```bash\ngit clone <repository-url>\ncd video-downloader-enhanced\n```\n\n作为 Agent Skill 使用时，将整个目录放入目标 Agent 支持的 Skills 目录，或在项目规则中要求 Agent 先读取本仓库的 `SKILL.md`。请查阅你所使用产品的当前文档，不要假设不同 Agent 的安装目录和授权行为完全一致。\n\n也可以不安装为 Skill，直接运行命令行入口：\n\n```bash\npython3 scripts/download_video.py --help\n```\n\n## whisper.cpp 配置\n\n脚本优先使用 `WHISPER_CPP_BIN` 指定的可执行文件；未设置时，从 `PATH` 查找 `whisper-cli`：\n\n```bash\nexport WHISPER_CPP_BIN=\"/path/to/whisper-cli\"\nexport WHISPER_CPP_MODEL=\"/path/to/ggml-large-v3-turbo.bin\"\n```\n\n`WHISPER_CPP_MODEL` 必须指向本机已有的 GGML 模型文件。项目不假设任何平台专属默认路径，也不会自动安装软件。请勿把个人绝对路径或模型文件提交到公开仓库。\n\n## 命令行使用\n\n下载并自动选择可用 ASR 后端：\n\n```bash\npython3 scripts/download_video.py \\\n  \"https://v.douyin.com/...\" \\\n  --output-dir \"./downloads\"\n```\n\n指定 whisper.cpp：\n\n```bash\npython3 scripts/download_video.py \\\n  \"https://v.douyin.com/...\" \\\n  --output-dir \"./downloads\" \\\n  --asr whisper_cpp \\\n  --asr-language Chinese\n```\n\n只下载，不提取音频或转写：\n\n```bash\npython3 scripts/download_video.py \\\n  \"https://v.douyin.com/...\" \\\n  --output-dir \"./downloads\" \\\n  --asr"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7ch7dax53njmcqff8gw5xnw18bpz6h\",\n  \"slug\": \"video-downloader-enhanced\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1785643318817\n}"},{"path":"skill-card.md","content":"## Description:\n\nDownloads videos from supported public video-platform links and saves post captions, audio transcripts, subtitles, and metadata for local analysis or archiving.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[syanchen7](https://clawhub.ai/user/syanchen7)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nDevelopers and local AI agents use this skill to turn authorized video links from Douyin, Bilibili, Xiaohongshu, and YouTube into source-material folders containing media, captions, transcripts, subtitles where available, and normalized metadata. It can also extract metadata and post text without downloading the video.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Fallback download routes may invoke yt-dlp with the user's live Chrome profile.\n\nMitigation: Run only when browser-cookie access is expected, use an isolated browser profile when possible, and prefer metadata-only or public routes for sensitive workflows.\n\nRisk: Default ASR auto-selection can use SiliconFlow cloud transcription when SILICONFLOW_API_KEY is inherited from the environment.\n\nMitigation: Use --asr none or an explicit local ASR backend for sensitive videos, and unset SILICONFLOW_API_KEY when cloud transcription is not intended.\n\nRisk: The YouTube provider can use unpinned remote components as a fallback.\n\nMitigation: Use trusted video URLs and run the skill in an isolated environment when remote component fallback is acceptable.\n\nRisk: Downloading platform videos can create copyright, access-control, or platform-terms risk.\n\nMitigation: Download only material the user owns, has permission to download, or can lawfully archive; do not use the skill to bypass DRM, paid access, or private permissions.\n\n## Reference(s):\n\n- [Server-resolved source repository](https://github.com/SyanChen7/video-downloader-enhanced)\n- [ClawHub skill page](https://clawhub.ai/syanchen7/skills/video-downloader-enhanced)\n- [Publisher profile](https://clawhub.ai/user/syanchen7)\n- [Upstream video-downloader attribution](https://github.com/kangarooking/kangarooking-skills/tree/main/video-downloader)\n- [yt-dlp](https://github.com/yt-dlp/yt-dlp)\n- [FFmpeg](https://ffmpeg.org/)\n- [whisper.cpp](https://github.com/ggml-org/whisper.cpp)\n- [openai-whisper](https://github.com/openai/whisper)\n- [SiliconFlow](https://siliconflow.cn/)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration guidance, Files, JSON]\n\n**Output Format:** [Markdown guidance plus JSON CLI results and local media, caption, transcript, subtitle, and metadata files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Output folders are named by date, cleaned title, platform, and author; ASR output depends on the selected backend.]\n\n## Skill Version(s):\n\n0.1.0 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or "},{"path":"LICENSE","content":"MIT License\n\nCopyright (c) 2026 Syan Chen\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1555,"uniquenessScore":41,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T12:35:58.532Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T12:35:58.532Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T05:48:53.437Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}