YYL 对标账号拆解 Skill 做一件事: 给一个链接,把对方的内容拆到能复用的程度。 产出固定三件套(见 ): 1. 可复用爆款公式 —— 提炼成能直接套用的选题套路 + 结构模板 + 视觉公式。 2. 画面 + 口播逐段拆解 —— 时间轴对齐,逐段标注画面/口播/钩子/节奏/转折/CTA + 两者协同方式。 3. 人设与内容定位 —— 人设标签、视觉符号、内容矩阵、差异化打法。 这是 分析型 skill,产出 markdown 报告,不产图。要做封面用 ,要做小红书图文用 。 工作流(前置清单通过后自动开干) 0. 前置清单(每次开工先跑,但不要反复打扰用户) : - 跑 。 - 如果自检失败 :不要开始拆解;先帮用户补环境。按自检输出说明缺什么、为什么需要、下一步命令是什么。 - Docker 未安装/未启动 → 说明 Docker 是本地下载 API 的运行环境,引导用户安装并打开 Docker Desktop。 - Douyin TikTok Download API 或 XHS-Downloader API 不可达 → Docker 可用时运行 ,再重跑 。 - ffmpeg / whisper 缺失 → 按 给出安装命令,装好再重跑自检。 - 如果必需依赖全部通过 :不要问用户确认,直接进入第 1 步。 - TikHub 是可选项 :首次 setup 或目标平台需…

\\t' read -r kind url; do\n [[ -n \"$url\" ]] || continue\n case \"$kind\" in\n video)\n [[ -f \"$RUN_DIR/video.mp4\" ]] || curl -L -A \"Mozilla/5.0\" -H \"Referer: https://www.xiaohongshu.com/\" \"$url\" -o \"$RUN_DIR/video.mp4\"\n ;;\n image)\n i=$((i + 1))\n ext=\"${url%%\\?*}\"\n ext=\"${ext##*.}\"\n case \"$ext\" in\n jpg|jpeg|png|webp|heic|avif) ;;\n *) ext=\"jpg\" ;;\n esac\n curl -L -A \"Mozilla/5.0\" -H \"Referer: https://www.xiaohongshu.com/\" \"$url\" -o \"$RUN_DIR/xhs_images/$(printf '%03d' \"$i\").$ext\"\n ;;\n esac\n done \u003c \"$url_list\"\n}\n\nsrt_to_text() {\n local srt=\"$1\"\n local out=\"$2\"\n python3 - \"$srt\" \"$out\" \u003c\u003c'PY'\nimport re, sys\nfrom pathlib import Path\n\nsrc = Path(sys.argv[1])\ndst = Path(sys.argv[2])\nlines = []\nfor raw in src.read_text(encoding=\"utf-8\", errors=\"ignore\").splitlines():\n line = raw.strip()\n if not line:\n continue\n if line.isdigit():\n continue\n if re.match(r\"\\d{2}:\\d{2}:\\d{2}[,.]\\d{3}\\s+-->\\s+\\d{2}:\\d{2}:\\d{2}[,.]\\d{3}\", line):\n continue\n lines.append(line)\n\ndst.write_text(\"\\n\".join(lines).strip() + (\"\\n\" if lines else \"\"), encoding=\"utf-8\")\nPY\n}\n\ncopy_new_xhs_files() {\n local marker=\"$1\"\n if [[ ! -d \"$XHS_DOWNLOAD_DIR\" ]]; then\n log \"warning: XHS_DOWNLOAD_DIR not found: $XHS_DOWNLOAD_DIR\"\n log \"set XHS_DOWNLOAD_DIR to the mounted XHS-Downloader Volume/Download directory to collect downloaded files\"\n return 0\n fi\n\n local newest_video=\"\"\n newest_video=\"$(find \"$XHS_DOWNLOAD_DIR\" -type f -newer \"$marker\" -iname '*.mp4' -print 2>/dev/null | sort | tail -1 || true)\"\n if [[ -n \"$newest_video\" ]]; then\n cp \"$newest_video\" \"$RUN_DIR/video.mp4\"\n fi\n\n local i=0 ext base\n while IFS= read -r file; do\n i=$((i + 1))\n base=\"$(basename \"$file\")\"\n ext=\"${base##*.}\"\n cp \"$file\" \"$RUN_DIR/xhs_images/$(printf '%03d' \"$i\").$ext\"\n done \u003c \u003c(find \"$XHS_DOWNLOAD_DIR\" -type f -newer \"$marker\" \\( \\\n -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.webp' -o -iname '*.heic' \\\n \\) -print 2>/dev/null | sort)\n}\n\njson_has_data() {\n python3 - \"$1\" \u003c\u003c'PY'\nimport json, sys\ntry:\n with open(sys.argv[1], \"r\", encoding=\"utf-8\") as f:\n payload = json.load(f)\nexcept Exception:\n raise SystemExit(1)\ndata = payload.get(\"data\")\nraise SystemExit(0 if data else 1)\nPY\n}\n\nprepare_xhs_web_fallback() {\n local replace_metadata=\"${1:-true}\"\n local page=\"$RUN_DIR/xhs_page.html\"\n local web_meta=\"$RUN_DIR/xhs_web_meta.json\"\n curl -sS -L -A \"Mozilla/5.0\" \"$URL\" -o \"$page\"\n\n python3 - \"$page\" \"$web_meta\" \"$URL\" \u003c\u003c'PY'\nimport json, re, sys\nfrom pathlib import Path\nfrom urllib.parse import urlparse\n\npage = Path(sys.argv[1])\nout = Path(sys.argv[2])\nsource_url = sys.argv[3]\ns = page.read_text(encoding=\"utf-8\", errors=\"ignore\")\nnormalized = s.replace(\"\\\\u002F\", \"/\")\n\ndef first(pattern, text=normalized, flags=0):\n m = re.search(pattern, text, flags)\n return m.group(1) if m else \"\"\n\ndef json_string(key, text):\n value = first(rf'\"{re.escape(key)}\":\"((?:\\\\.|[^\"\\\\])*)\"', text)\n if not value:\n return \"\"\n try:\n return json.loads(f'\"{value}\"')\n except Exception:\n return value\n\ndef json_number(key, text):\n return first(rf'\"{re.escape(key)}\":([0-9]+)', text)\n\npath = urlparse(source_url).path\nnote_id = \"\"\nfor pattern in (\n r\"/explore/([0-9a-f]+)\",\n r\"/discovery/item/([0-9a-f]+)\",\n r\"/user/profile/[a-z0-9]+/([0-9a-f]+)\",\n):\n note_id = first(pattern, path) or note_id\nnote_id = note_id or first(r'\"firstNoteId\":\"([^\"]+)\"') or first(r'\"noteId\":\"([^\"]+)\"')\n\nnote_marker = f'\"noteDetailMap\":{{\"{note_id}\"' if note_id else '\"noteDetailMap\":{'\nnote_pos = normalized.find(note_marker)\nif note_pos \u003c 0 and note_id:\n note_pos = normalized.find(f'\"noteId\":\"{note_id}\"')\nsegment = normalized[max(0, note_pos - 2000): note_pos + 50000] if note_pos >= 0 else normalized\n\nvideo_urls = []\nfor pattern in (r'\"master_url\":\"([^\"]+)\"', r'\"masterUrl\":\"([^\"]+)\"'):\n video_urls.extend(re.findall(pattern, normalized))\n\nsubtitle_url = \"\"\nsubtitle_lang = \"\"\nmedia_v2_raw = json_string(\"mediaV2\", segment)\nif media_v2_raw:\n try:\n media_v2 = json.loads(media_v2_raw)\n subtitles = (((media_v2.get(\"video\") or {}).get(\"subtitles\")) or {})\n for lang in (\"source\", \"zh-CN\", \"en-US\"):\n items = subtitles.get(lang) or []\n if items and items[0].get(\"url\"):\n subtitle_url = items[0][\"url\"].replace(\"\\\\u002F\", \"/\")\n subtitle_lang = items[0].get(\"language\") or lang\n break\n except Exception:\n pass\nif not subtitle_url:\n subtitle_url = first(r'https://sns-subtitle[^\"\\\\]+', normalized)\n\nmeta = {\n \"platform\": \"xhs\",\n \"type\": first(r'\"type\":\"([^\"]+)\"', segment),\n \"noteId\": note_id,\n \"title\": json_string(\"title\", segment),\n \"desc\": json_string(\"desc\", segment),\n \"author\": json_string(\"nickname\", segment),\n \"time\": json_number(\"time\", segment),\n \"lastUpdateTime\": json_number(\"lastUpdateTime\", segment),\n \"likedCount\": first(r'\"likedCount\":\"([^\"]+)\"', segment),\n \"collectedCount\": first(r'\"collectedCount\":\"([^\"]+)\"', segment),\n \"commentCount\": first(r'\"commentCount\":\"([^\"]+)\"', segment),\n \"shareCount\": first(r'\"shareCount\":\"([^\"]+)\"', segment),\n \"videoUrl\": video_urls[0] if video_urls else \"\",\n \"subtitleUrl\": subtitle_url,\n \"subtitleLanguage\": subtitle_lang,\n \"fallback\": \"xhs_web_html\",\n}\n\nout.write_text(json.dumps(meta, ensure_ascii=False, indent=2), encoding=\"utf-8\")\nprint(json.dumps(meta, ensure_ascii=False))\nPY\n\n local video_url subtitle_url\n video_url=\"$(python3 - \"$web_meta\" \u003c\u003c'PY'\nimport json, sys\nprint(json.load(open(sys.argv[1], encoding=\"utf-8\")).get(\"videoUrl\", \"\"))\nPY\n)\"\n subtitle_url=\"$(python3 - \"$web_meta\" \u003c\u003c'PY'\nimport json, sys\nprint(json.load(open(sys.argv[1], encoding=\"utf-8\")).get(\"subtitleUrl\", \"\"))\nPY\n)\"\n\n if [[ -n \"$video_url\" && ! -f \"$RUN_DIR/video.mp4\" ]]; then\n curl -L -A \"Mozilla/5.0\" -H \"Referer: https://www.xiaohongshu.com/\" \"$video_url\" -o \"$RUN_DIR/video.mp4\"\n fi\n if [[ -n \"$subtitle_url\" ]]; then\n curl -L -A \"Mozilla/5.0\" -H \"Referer: https://www.xiaohongshu.com/\" \"$subtitle_url\" -o \"$RUN_DIR/subtitle.srt\" || true\n if [[ -s \"$RUN_DIR/subtitle.srt\" ]]; then\n srt_to_text \"$RUN_DIR/subtitle.srt\" \"$RUN_DIR/audio.txt\"\n fi\n fi\n if [[ \"$replace_metadata\" == \"true\" ]]; then\n cp \"$web_meta\" \"$METADATA\"\n fi\n}\n\nprepare_xhs_detail_retry() {\n local detail=\"$RUN_DIR/xhs_detail_retry.json\"\n curl -sS -X POST \"$XHS_API_BASE/xhs/detail\" \\\n -H \"Content-Type: application/json\" \\\n -d \"$(json_payload false)\" \\\n -o \"$detail\"\n\n if ! json_has_data \"$detail\"; then\n return 1\n fi\n\n cp \"$detail\" \"$METADATA\"\n download_xhs_assets_from_json \"$detail\"\n}\n\nPLATFORM=\"$(detect_platform)\"\n: > \"$MANIFEST\"\nprintf '%s\\n' \"$URL\" > \"$RUN_DIR/source.url\"\nlog \"run_dir: $RUN_DIR\"\nlog \"platform: $PLATFORM\"\n\ncase \"$PLATFORM\" in\n xhs)\n marker=\"$RUN_DIR/download.marker\"\n : > \"$marker\"\n curl -sS -X POST \"$XHS_API_BASE/xhs/detail\" \\\n -H \"Content-Type: application/json\" \\\n -d \"$(json_payload false)\" \\\n -o \"$METADATA\"\n if json_has_data \"$METADATA\"; then\n download_xhs_assets_from_json \"$METADATA\"\n prepare_xhs_web_fallback false\n else\n warn_xhs_cookie_if_needed\n log \"warning: XHS API detail-only returned no data; retrying download=true mode\"\n curl -sS -X POST \"$XHS_API_BASE/xhs/detail\" \\\n -H \"Content-Type: application/json\" \\\n -d \"$(json_payload true)\" \\\n -o \"$METADATA\"\n copy_new_xhs_files \"$marker\"\n if ! json_has_data \"$METADATA\"; then\n log \"warning: XHS API download=true returned no data; trying web HTML fallback for metadata/subtitles\"\n prepare_xhs_web_fallback\n elif json_has_data \"$METADATA\"; then\n if [[ ! -f \"$RUN_DIR/video.mp4\" ]] && ! find \"$RUN_DIR/xhs_images\" -type f | grep -q .; then\n download_xhs_assets_from_json \"$METADATA\"\n fi\n prepare_xhs_web_fallback false\n fi\n fi\n ;;\n douyin|tiktok|bilibili)\n encoded_url=\"$(python3 - \"$URL\" \u003c\u003c'PY'\nfrom urllib.parse import quote\nimport sys\nprint(quote(sys.argv[1], safe=\"\"))\nPY\n)\"\n curl -sS \"$DOUYIN_API_BASE/api/hybrid/video_data?url=$encoded_url&minimal=false\" -o \"$METADATA\"\n if video_url=\"$(extract_video_url)\"; then\n case \"$PLATFORM\" in\n douyin) referer=\"https://www.douyin.com/\" ;;\n tiktok) referer=\"https://www.tiktok.com/\" ;;\n bilibili) referer=\"https://www.bilibili.com/\" ;;\n esac\n download_video_from_url \"$video_url\" \"$referer\"\n else\n log \"warning: no video url found in metadata\"\n fi\n ;;\n *)\n log \"warning: platform not automated by this script; use TikHub/Jina/browser fallback from fetch-playbook\"\n printf '{\"url\": %s, \"platform\": %s, \"message\": \"manual fallback required\"}\\n' \\\n \"$(python3 -c 'import json,sys; print(json.dumps(sys.argv[1]))' \"$URL\")\" \\\n \"$(python3 -c 'import json,sys; print(json.dumps(sys.argv[1]))' \"$PLATFORM\")\" > \"$METADATA\"\n ;;\nesac\n\nprepare_video_assets\nprepare_image_sheet\n\n{\n echo \"\"\n echo \"outputs:\"\n find \"$RUN_DIR\" -maxdepth 2 -type f | sort\n} >> \"$MANIFEST\"\n\nlog \"done: $RUN_DIR\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":17582,"content_sha256":"09a99835c32f47d9dfc9bbb28b1f60d786a531466802cd044a6379c0c9e64958"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"YYL 对标账号拆解 Skill","type":"text"}]},{"type":"paragraph","content":[{"text":"做一件事:","type":"text"},{"text":"给一个链接,把对方的内容拆到能复用的程度。","type":"text","marks":[{"type":"strong"}]}]},{"type":"paragraph","content":[{"text":"产出固定三件套(见 ","type":"text"},{"text":"references/output-template.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"):","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"可复用爆款公式","type":"text","marks":[{"type":"strong"}]},{"text":" —— 提炼成能直接套用的选题套路 + 结构模板 + 视觉公式。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"画面 + 口播逐段拆解","type":"text","marks":[{"type":"strong"}]},{"text":" —— 时间轴对齐,逐段标注画面/口播/钩子/节奏/转折/CTA + 两者协同方式。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"人设与内容定位","type":"text","marks":[{"type":"strong"}]},{"text":" —— 人设标签、视觉符号、内容矩阵、差异化打法。","type":"text"}]}]}]},{"type":"blockquote","content":[{"type":"paragraph","content":[{"text":"这是","type":"text"},{"text":"分析型","type":"text","marks":[{"type":"strong"}]},{"text":" skill,产出 markdown 报告,不产图。要做封面用 ","type":"text"},{"text":"yyl-video-thumbnail","type":"text","marks":[{"type":"code_inline"}]},{"text":",要做小红书图文用 ","type":"text"},{"text":"yuyile-social-card-skill","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"工作流(前置清单通过后自动开干)","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"前置清单(每次开工先跑,但不要反复打扰用户)","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"跑 ","type":"text"},{"text":"bash scripts/check-deps.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"如果自检失败","type":"text","marks":[{"type":"strong"}]},{"text":":不要开始拆解;先帮用户补环境。按自检输出说明缺什么、为什么需要、下一步命令是什么。","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Docker 未安装/未启动 → 说明 Docker 是本地下载 API 的运行环境,引导用户安装并打开 Docker Desktop。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Douyin_TikTok_Download_API 或 XHS-Downloader API 不可达 → Docker 可用时运行 ","type":"text"},{"text":"bash scripts/bootstrap-local-apis.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":",再重跑 ","type":"text"},{"text":"bash scripts/check-deps.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"ffmpeg / whisper 缺失 → 按 ","type":"text"},{"text":"INSTALL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 给出安装命令,装好再重跑自检。","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"如果必需依赖全部通过","type":"text","marks":[{"type":"strong"}]},{"text":":不要问用户确认,直接进入第 1 步。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"TikHub 是可选项","type":"text","marks":[{"type":"strong"}]},{"text":":首次 setup 或目标平台需要 TikHub(YouTube/快手/海外平台/本地 API 失败)且没有 ","type":"text"},{"text":"TIKHUB_API_KEY","type":"text","marks":[{"type":"code_inline"}]},{"text":" 时,给用户两个选择:「现在配置」或「先跳过」。跳过后继续处理本地 API 能覆盖的平台;不要因为 TikHub 缺失阻塞抖音/B站/TikTok/小红书单条。","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"前置清单:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"必需:Docker、Douyin_TikTok_Download_API、XHS-Downloader API、ffmpeg、openai-whisper。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"可选:TikHub API key、Jina Reader key。","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"识别","type":"text","marks":[{"type":"strong"}]},{"text":":从 URL 判断平台 + 粒度(单条/账号)。规则见 ","type":"text"},{"text":"references/fetch-playbook.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"拿不准粒度就先按单条处理,抓到页面再修正。","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"准备证据包(优先跑自动流程)","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"先跑 ","type":"text"},{"text":"bash scripts/prepare-assets.sh \"\u003curl>\"","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"它会自动创建工作目录,保存 ","type":"text"},{"text":"metadata.json","type":"text","marks":[{"type":"code_inline"}]},{"text":"、下载视频/图片、转写 ","type":"text"},{"text":"audio.txt","type":"text","marks":[{"type":"code_inline"}]},{"text":"、抽帧并生成 ","type":"text"},{"text":"sheet_*.jpg","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"xhs_sheet_*.jpg","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"跑完先读工作目录里的 ","type":"text"},{"text":"manifest.txt","type":"text","marks":[{"type":"code_inline"}]},{"text":",回显一句「我抓到了什么」(平台/字段/缺什么),再进入拆解。","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"取数回退(自动流程失败时继续走,不要在第一级失败就停)","type":"text","marks":[{"type":"strong"}]},{"text":"。细节、端点、命令见 ","type":"text"},{"text":"references/fetch-playbook.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"① 平台本地 API(主力)","type":"text","marks":[{"type":"strong"}]},{"text":":","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"抖音 / TikTok / Bilibili → Douyin_TikTok_Download_API:","type":"text"},{"text":"curl http://localhost:80/api/hybrid/video_data?url=...","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"小红书单条笔记 → XHS-Downloader:","type":"text"},{"text":"POST ${XHS_API_BASE:-http://127.0.0.1:5556}/xhs/detail","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"},{"text":"download:true","type":"text","marks":[{"type":"code_inline"}]},{"text":" 会下载图文/视频文件到 ","type":"text"},{"text":"${XHS_DOWNLOAD_DIR:-$HOME/.xhs-downloader/Volume/Download}","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"② TikHub(备用)","type":"text","marks":[{"type":"strong"}]},{"text":":YouTube、快手、海外平台、小红书本地 API 失败时用。需要 ","type":"text"},{"text":"TIKHUB_API_KEY","type":"text","marks":[{"type":"code_inline"}]},{"text":" 环境变量。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"③ Jina Reader","type":"text","marks":[{"type":"strong"}]},{"text":":公众号文章、普通网页、纯图文兜底,","type":"text"},{"text":"curl https://r.jina.ai/\u003curl>","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"④ 引导粘贴","type":"text","marks":[{"type":"strong"}]},{"text":":还拿不到 → 让用户发文案/字幕/截图,","type":"text"},{"text":"不报错","type":"text","marks":[{"type":"strong"}]},{"text":"。","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"短视频必做:下载 + 转写口播 + 抽视觉帧","type":"text","marks":[{"type":"strong"}]},{"text":"(三样都缺不可)","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"抖音 / B站 / TikTok / YouTube 单条 → 用 ","type":"text"},{"text":"download_addr","type":"text","marks":[{"type":"code_inline"}]},{"text":" 下视频 → ","type":"text"},{"text":"ffmpeg","type":"text","marks":[{"type":"code_inline"}]},{"text":" 抽音轨 → ","type":"text"},{"text":"whisper --model medium --language Chinese","type":"text","marks":[{"type":"code_inline"}]},{"text":" 转写 → ","type":"text"},{"text":"ffmpeg","type":"text","marks":[{"type":"code_inline"}]},{"text":" 场景检测 + 节奏采样 + 拼 contact sheet。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"小红书视频笔记 → XHS-Downloader 先下载 mp4 → 复用同一套 ","type":"text"},{"text":"ffmpeg","type":"text","marks":[{"type":"code_inline"}]},{"text":" + ","type":"text"},{"text":"whisper","type":"text","marks":[{"type":"code_inline"}]},{"text":" + contact sheet 流程。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"抽完帧","type":"text"},{"text":"用 Read 工具把 ","type":"text","marks":[{"type":"strong"}]},{"text":"/tmp/bm/sheet_*.jpg","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" 喂给自己看","type":"text","marks":[{"type":"strong"}]},{"text":"——多模态读图是视觉拆解的核心证据。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"小红书图文笔记 → 用 XHS-Downloader 下载图片,按图片序号拼 contact sheet,把图序当作\"视觉脚本\"看;没有口播就明确标「无口播」,不硬编。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"公众号文章 → 跳过下载/转写,但正文和配图都要作为证据。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"命令模板见 ","type":"text"},{"text":"references/fetch-playbook.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 第 3 节。","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"拆解","type":"text","marks":[{"type":"strong"}]},{"text":":按通用四层 + 视觉七维 + 平台特化分析。","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"脚本/结构/选题/转化 → ","type":"text"},{"text":"references/breakdown-framework.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"画面层(视觉钩子/景别/切点节奏/字幕/视觉符号/色调/场景调度)→ ","type":"text"},{"text":"references/visual-framework.md","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"单条 → 深拆这一条,","type":"text"},{"text":"画面与口播必须时间轴对齐","type":"text","marks":[{"type":"strong"}]},{"text":"(看协同/互补/错位/预告/强调)。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"账号 → 先抓 5–15 条样本,找","type":"text"},{"text":"重复出现的规律","type":"text","marks":[{"type":"strong"}]},{"text":"(选题、结构、视觉符号、发布、互动),再挑 1–2 条代表作深拆。","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"输出 + 存档","type":"text","marks":[{"type":"strong"}]},{"text":":按 ","type":"text"},{"text":"references/output-template.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 生成报告,","type":"text"},{"text":"同时存一份","type":"text","marks":[{"type":"strong"}]},{"text":"到 ","type":"text"},{"text":"benchmarks/\u003c平台>-\u003c账号名>/\u003c日期>-\u003c标题slug>.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"(目录不存在就建)。 存档是第二阶段「长期对标库」的地基,每次都存。","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"短视频报告末尾必须附 ","type":"text"},{"text":"## 完整文字转写稿","type":"text","marks":[{"type":"code_inline"}]},{"text":",逐字粘贴 ","type":"text"},{"text":"audio.txt","type":"text","marks":[{"type":"code_inline"}]},{"text":" 的完整内容;不能只给摘要。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"图文/网页报告末尾必须附完整正文;如果确实无口播,明确写「无口播」。","type":"text"}]}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"收尾","type":"text","marks":[{"type":"strong"}]},{"text":":交付前检查报告末尾是否已经附完整转写稿/正文,再给「","type":"text"},{"text":"这条/这个账号最值得我抄的 3 个点","type":"text","marks":[{"type":"strong"}]},{"text":"」+ 一句可执行的下一步建议。","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"铁律","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"自检通过就自动开干","type":"text","marks":[{"type":"strong"}]},{"text":":不要再问用户要不要开始;必须完成下载 → 转写 → 视觉识别 → 爆款拆解 → 存档。不能只停在证据包准备完成。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"永不空手而归","type":"text","marks":[{"type":"strong"}]},{"text":":逐级回退走完;真抓不到就引导粘贴,绝不只甩一句「抓取失败」。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"短视频必转写 + 必读图","type":"text","marks":[{"type":"strong"}]},{"text":":caption + 数据不够,","type":"text"},{"text":"口播 + 画面 contact sheet 两个证据都要","type":"text","marks":[{"type":"strong"}]},{"text":",缺一拆不全。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"报告末尾必须附完整转写稿","type":"text","marks":[{"type":"strong"}]},{"text":":短视频必须把 ","type":"text"},{"text":"audio.txt","type":"text","marks":[{"type":"code_inline"}]},{"text":" 完整粘贴到 ","type":"text"},{"text":"## 完整文字转写稿","type":"text","marks":[{"type":"code_inline"}]},{"text":";图文/网页附完整正文或标注「无口播」。这是交付硬门槛,不能只写摘要、不能漏。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"要可复用,不要复述","type":"text","marks":[{"type":"strong"}]},{"text":":别复述对方讲了什么/拍了什么,要提炼","type":"text"},{"text":"为什么这么做、我怎么套用","type":"text","marks":[{"type":"strong"}]},{"text":"。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"基于证据","type":"text","marks":[{"type":"strong"}]},{"text":":数据、原句来自实际抓取;抓不到的指标标「未获取」,不要编。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"第一性","type":"text","marks":[{"type":"strong"}]},{"text":":每个结论回到「它解决了观众什么问题 / 戳了什么情绪」,不堆术语。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"始终存档","type":"text","marks":[{"type":"strong"}]},{"text":"到 ","type":"text"},{"text":"benchmarks/","type":"text","marks":[{"type":"code_inline"}]},{"text":",文件名含平台、账号、日期。","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"文件","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"INSTALL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" —— 依赖安装指南(给人看)+ 常见问题。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"scripts/check-deps.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":" —— 一键自检前置依赖,缺什么给装的命令。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"scripts/bootstrap-local-apis.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":" —— 一键拉起本地 Douyin / XHS 下载 API;Docker 缺失时给安装引导。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"scripts/prepare-assets.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":" —— 自动证据包流程:下载 → 转写 → 抽帧/拼图 → 生成 manifest。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/fetch-playbook.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" —— ★开工先读:平台/粒度识别表、四级取数回退、下载+转写+抽帧命令、粘贴引导话术。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/breakdown-framework.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" —— 通用四层拆解 + 各平台特化(脚本/结构层) + 爆款公式提炼法。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/visual-framework.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" —— ★短视频必读:画面七维拆解 + 视觉/口播时间轴对齐 + 视觉公式提炼法。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"references/output-template.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" —— 三件套交付模板(已含画面+口播对齐表) + 存档命名约定。","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"第二阶段(暂未实现,已留地基)","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"长期对标账号库","type":"text","marks":[{"type":"strong"}]},{"text":":基于 ","type":"text"},{"text":"benchmarks/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 里沉淀的多份拆解,做跨账号/跨时间的规律汇总(谁的哪类选题稳定爆、行业共性、可追踪趋势)。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"长视频转写优化","type":"text","marks":[{"type":"strong"}]},{"text":":>15 分钟视频自动切片 + 并行转写;或接商业 API(飞书妙记/通义听悟)。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"小红书账号级自动化","type":"text","marks":[{"type":"strong"}]},{"text":":接 MediaCrawler 自托管,用于账号主页采样、评论与搜索;单条下载已经由 XHS-Downloader 覆盖。","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"等单链接拆解打磨稳了再做。","type":"text"}]}]},"metadata":{"date":"2026-11-02","name":"yyl-benchmark-breakdown","author":"@skillopedia","source":{"stars":323,"repo_name":"skills","origin_url":"https://github.com/ttfake92-lab/skills/blob/HEAD/skills/yyl-benchmark-breakdown/SKILL.md","repo_owner":"ttfake92-lab","body_sha256":"ede154f5d418f847249d80e900170ffefef82659a7779e39c18e31b4542d738f","cluster_key":"f9db36051476759ce9a3a54c7225680645390c85e193dec5d9f11f2e4e4446df","clean_bundle":{"format":"clean-skill-bundle-v1","source":"ttfake92-lab/skills/skills/yyl-benchmark-breakdown/SKILL.md","text_bytes":68943,"source_commit":"a146797c01ebfd48c12e4860416b99b6acdaf070","skills_sh_rank":18310,"attachment_count":9,"text_attachments":9,"attachment_storage":"skill_attachments","binary_attachments":0},"cluster_size":1,"skill_md_path":"skills/yyl-benchmark-breakdown/SKILL.md","import_metadata":{"date":"2026-11-02","author":"@skillopedia","version":"v1","category":"business-sales-marketing","category_label":"Business"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"business-sales-marketing","import_tag":"skills-sh-top20k-2026-11","description":"拆解对标账号 / 竞品内容——丢一个链接进来,自动识别平台(抖音/小红书/B站/YouTube/公众号)和粒度(单条 or 整个账号),抓取内容后输出三件套:可复用爆款公式、画面+口播逐段拆解、人设与内容定位,并自动存档到 benchmarks/。短视频自动下载 + 转写口播 + 抽视觉帧(contact sheet 多模态读图),不只看 caption。当用户说「拆解这个账号/视频/笔记」「分析对标/竞品」「这条为什么火」「给链接拆内容」「teardown」「看看别人怎么做的」时使用。抓不到内容会引导粘贴文案/字幕,绝不直接报错。"}},"renderedAt":1793671770622}

YYL 对标账号拆解 Skill 做一件事: 给一个链接,把对方的内容拆到能复用的程度。 产出固定三件套(见 ): 1. 可复用爆款公式 —— 提炼成能直接套用的选题套路 + 结构模板 + 视觉公式。 2. 画面 + 口播逐段拆解 —— 时间轴对齐,逐段标注画面/口播/钩子/节奏/转折/CTA + 两者协同方式。 3. 人设与内容定位 —— 人设标签、视觉符号、内容矩阵、差异化打法。 这是 分析型 skill,产出 markdown 报告,不产图。要做封面用 ,要做小红书图文用 。 工作流(前置清单通过后自动开干) 0. 前置清单(每次开工先跑,但不要反复打扰用户) : - 跑 。 - 如果自检失败 :不要开始拆解;先帮用户补环境。按自检输出说明缺什么、为什么需要、下一步命令是什么。 - Docker 未安装/未启动 → 说明 Docker 是本地下载 API 的运行环境,引导用户安装并打开 Docker Desktop。 - Douyin TikTok Download API 或 XHS-Downloader API 不可达 → Docker 可用时运行 ,再重跑 。 - ffmpeg / whisper 缺失 → 按 给出安装命令,装好再重跑自检。 - 如果必需依赖全部通过 :不要问用户确认,直接进入第 1 步。 - TikHub 是可选项 :首次 setup 或目标平台需…