CtrlK
BlogDocsLog inGet started
Tessl Logo

viral-chaser

下载分析抖音/B站/小红书爆款视频,生成追爆报告。仅产出报告,脚本另外使用 video-product 技能根据 追爆报告.md 生成。

60

Quality

72%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

High

Do not use without reviewing

Fix and improve this skill with Tessl

tessl review fix ./crews/main/skills/viral-chaser/SKILL.md
SKILL.md
Quality
Evals
Security

🔑 前置:开通火山语音模型(仅首次)

本技能的语音转写(ASR)使用火山引擎豆包语音 · 录音文件极速版(资源 ID volc.bigasr.auc_turbo)。即便账号已订购火山 Code Plan,语音模型仍需单独开通,否则调用会返回鉴权/权限错误。

判断是否已开通:直接跑 Step 3 分析器,若 ASR 报错含 status=45xxxxx 或权限相关码,说明未开通,按下面流程开通一次即可。

开通流程(未开通时,根据下面提示并引导用户在火山引擎控制台操作一次):

  1. 登录火山引擎控制台,左侧控制面板进入 「开通管理」
  2. 选择 「语音模型」 选项卡
  3. 找到 「Doubao-录音文件识别2.0」 这一项,点击它的 「立即使用」
  4. 在跳转页面的「服务详情」里,选择 「极速版」 标签卡(对应实例名称 Speech_Recognition_Seed_AUC2000000854311547266,资源 ID volc.bigasr.auc_turbo),点击 「试用」(赠送 20 小时,可先用,后续再点开通付费)
  5. 在该极速版页面可同时获得三项凭据:APP ID(数字)、Access TokenSecret Key。把 APP ID + Access Token 提供给小贝(旧控制台双头鉴权,对应 VOLC_ASR_APP_ID + VOLC_ASR_ACCESS_KEY);Secret Key 不需要给(旧控制台账号用不上,填进 X-Api-App-Key 反而会报 45000010 appid mismatch)。由小贝写入实例环境变量。

环境变量(开通后由小贝配置,用户无需手动设置):

变量说明
VOLC_ASR_APP_ID旧控制台数字 APP ID(如 1216386473),用于 X-Api-App-Key。旧控制台双头鉴权必需
VOLC_ASR_ACCESS_KEY旧控制台 Access Token,用于 X-Api-Access-Key。与 VOLC_ASR_APP_ID 成对使用
VOLC_ASR_APP_KEY新控制台 APP Key,用于 X-Api-Key 单头鉴权。仅新控制台账号需要;旧控制台账号不要把 Secret Key 填到这里(会报 45000010 appid mismatch
VOLC_ASR_RESOURCE_ID资源 ID,默认 volc.bigasr.auc_turbo,一般无需改

鉴权二选一(脚本优先旧控制台双头):同时给出 VOLC_ASR_APP_ID+VOLC_ASR_ACCESS_KEY → 旧控制台双头;否则用 VOLC_ASR_APP_KEY → 新控制台单头。旧控制台 X-Api-App-Key 要的是数字 APP ID,不是 Secret Key。

写入流程:用户把 VOLC_ASR_APP_ID / VOLC_ASR_ACCESS_KEY(或新控制台的 VOLC_ASR_APP_KEY)交给小贝后,小贝应 spawn 一个 IT engineer 作为 subagent 去把这两个变量添加到实例环境变量中——IT engineer 掌握如何在本机环境变量 / 服务配置里安全添加此类密钥的规范。小贝本人不要直接写环境变量文件。

关于接口选型:火山 ASR 分录音文件标准版 2.0(volc.seedasr.auc,单价最低,但只接受音频公网 URL,需自备 TOS 对象存储)、极速版(本技能采用,支持本地文件 base64 直传、一次返回)、闲时版(24h 内返回,不适合交互流程)、流式(实时上屏用)。viral-chaser 输入是本地 audio.wav,极速版免托管、原生返回时间戳,综合最合适。若后续为降本要切标准版 2.0,需额外引入 TOS 上传环节。

Viral Chaser(追爆分析 — 报告产出)

Use this skill when:

  • 用户提供抖音 / B 站 / 小红书视频链接,希望分析并制作同类视频
  • 需要分析爆款视频的结构和公式

本技能仅产出追爆报告,不生成脚本,不制作视频。报告产出后,直接进入 video-product 技能,按追爆报告生成脚本并完成后续生产。

Supported platforms: 抖音(Douyin)、B 站(Bilibili)、小红书(XHS — 仅视频笔记)

Not supported: 微信视频号、TikTok


⚙️ 执行方式(强制)

本技能涉及多步骤生产流程,你应该 self-spawn 一个 subagent 来执行,原因:subagent 独立上下文,不会因对话历史积累而降低输出质量。

你只负责跟进subagent的执行,避免它们长时间卡在某个步骤,必要时可以提供提示或调整执行策略。


Workflow

Step 1 — Create workspace

Before anything else, create the working directory for this video under output_videos/:

VIDEO_SLUG="<platform>-<contentId>"  # e.g. douyin-7389abc or bilibili-BV1xx
mkdir -p "output_videos/${VIDEO_SLUG}/references"

All downloaded files, analysis results, and generated reports will be saved under this directory. The references/ subdirectory holds the raw assets (video, audio, key frames) downloaded by the analyzer script.

Step 2 — Run the analyzer(内置探活 + 下载 + 转写 + 关键帧)

一条命令闭环:先探活、再下载、再 ASR、再抽帧。探活已合并进脚本,无需单独跑 check-login。

viral-chaser <url> [--no-frames]
  • <url>: Full or short-link URL of the video(支持短链,如 xhslink.com/o/xxxv.douyin.com/xxxb23.tv/xxx,脚本内部跟随重定向解析)
  • --no-frames: Skip key frame extraction (faster, audio-only analysis)
  • OUTPUT_DIR(环境变量):落盘目录,必须指向 Step 1 建的 references/ 子目录

⚠️ exec allowlist 注意OUTPUT_DIR=... viral-chaser ... 内联 env 前缀会触发 allowlist miss。通过 exec 工具调用时,把 OUTPUT_DIR 放到 exec 的 env 字段里传,不要写成内联前缀;同理避免 mkdir ... ; echo 这类分号复合命令。脚本本身已正确读取 OUTPUT_DIR 落盘,问题只在调用规范。

内置探活_shared/check-session.ts):douyin 抓取前先做两层探活(Tier1 cookie 关键字段 + Tier2 平台 pong,pong 带 TTL 缓存);bilibili 公开视频免登录,跳过探活。xhs 走无 cookie HTML 路线(见下),不依赖签名/cookie,跳过探活——探活 user/me 通过也不代表 feed 签名路径被接受,HTML 路线根本不走签名,无需探活。

The script outputs a JSON object to stdout. Read it and proceed with analysis.

Output JSON structure:

{
  "ok": true,
  "platform": "douyin",
  "metadata": {
    "contentId": "...",
    "title": "...",
    "desc": "...",
    "author": "...",
    "durationSeconds": 89,
    "coverUrl": "...",
    "stats": { "playCount": 0, "likeCount": 0, "commentCount": 0 }
  },
  "transcript": {
    "text": "全文转录...",
    "segments": [{ "start": 0.0, "end": 5.2, "text": "开场文案" }],
    "estimated": false
  },
  "frames": ["output_videos/<slug>/references/frames/frame_00_0s.jpg", "..."],
  "localPaths": {
    "video": "output_videos/<slug>/references/video.mp4",
    "audio": "output_videos/<slug>/references/audio.wav",
    "tmpDir": "output_videos/<slug>/references"
  }
}
  • transcript.estimated: false 表示 segments 是火山 ASR 返回的真实时间戳(utterance 级,毫秒精度转秒);true 仅在接口异常未返回 utterances 时出现,此时按句切分全文并按字数比例在音频时长上估算分段,时间区间为近似值。正常情况下始终为 false

Exit codes:

  • 0 = Success
  • 1 = Error(URL invalid / download failed),或 SIGN_UNAVAILABLE(签名缺 OFB_KEY,重登救不了,交 IT engineer 配凭证)
  • 2 = SESSION_EXPIRED(cookie 失效)— 走 login-manager 重登(login-manager --platform <p> 导出+验证),重试一次

Step 3 — Read key frames (if available)

For each path in frames, use the Read tool to load the image and analyze it visually.

Read: output_videos/<slug>/references/frames/frame_00_0s.jpg
Read: output_videos/<slug>/references/frames/frame_01_3s.jpg
...

Analysis Framework

After receiving the JSON output and reading the frames, generate a 追爆报告 in Markdown and save it to output_videos/<slug>/raw_article.md.

1. 内容摘要

1–2 sentences: what core value does this video deliver to viewers?

2. 开头钩子分析(前 0–10 秒)

Based on transcript.segments where start < 10:

  • 钩子类型: 提问型 / 冲突型 / 反转型 / 数字型 / 悬念型 / 痛点型 / 利益型
  • 具体文案: quote the exact opening line(s)
  • 效果评估: why this hook works (or doesn't)

3. 内容结构拆解

Based on transcript segments, divide into logical sections:

段落时间区间功能核心内容
开场0–Xs钩子/引入...
主体一X–Ys价值/信息传递...
主体二Y–Zs深化/转折...
收尾Z–结束CTA/情绪收尾...

4. 爆款元素评估

Rate each element as 强 / 中 / 弱 with a one-line explanation:

元素评级说明
前 3 秒吸引力
痛点共鸣度
悬念设置
情绪触发
价值清晰度
CTA 效果
视觉冲击(基于关键帧)
节奏把控

5. 视觉风格分析(基于关键帧图片)

After reading the frame images:

  • 色调风格: 暖色系/冷色系/高饱和/低饱和/黑白
  • 构图类型: 人脸近景 / 产品展示 / 场景空镜 / 文字卡片 / 混合
  • 字幕/文字覆盖: 字体粗细、位置、是否有背景框、动画感
  • 整体视觉标签: 3–5 个关键词(如:「真实感」「强对比」「高信息密度」)

If --no-frames was used or frames is empty, note: "(跳过视觉分析,请重新运行不带 --no-frames 参数)"

6. 可借鉴点

3–5 concise, directly actionable techniques. One sentence each.

7. 目标受众

One sentence describing the primary audience persona.


衔接 video-product

追爆报告产出后,直接进入 video-product 技能流程,并应该明确提示后续工作流程:工作目录为 output_videos/<slug>/,直接按raw_article.md制作脚本.


Notes

  • Workspace files are stored in output_videos/<slug>/ — all downloaded assets and analysis reports are kept together. The references/ subdirectory contains raw assets from the analyzer.
  • Bilibili DASH format: if mediaFormat is DASH, the video and audio streams are separate. The downloaded video.mp4 contains the video stream only; audio is in audio.wav after extraction. This is transparent to the analysis workflow.
  • XHS video notes only: 小红书图文笔记(image-only)不含视频,viral-chaser 会报错并提示。只有视频笔记(type=video)才能下载和分析。
  • XHS 取数走 SSR HTML 路线(无 cookie 优先)platforms/xhs.ts 直接 GET www.xiaohongshu.com/explore/{note_id}?xsec_token=... 笔记详情页 HTML,解析 og:meta + window.__INITIAL_STATE__ 拿标题/封面/视频地址/时长/互动计数(_shared/xhs-html-note.ts)。不走 feed API/api/sns/web/v1/feed 需 xRap relay 签名,极易 406/500/滑块,且探活 user/me 通过不代表 feed 签名路径被接受,会出现「探活绿、feed 红」假绿)。输入必须是带 xsec_token 的分享链接(xhslink.com/...www.xiaohongshu.com/explore/...?xsec_token=...),脚本从短链展开后的 URL 抽 token。无 cookie 抓不到(滑块/空页)时,若本机有 xhs-browse cookie 则用同指纹 UA + cookie 回退重试一次。
  • ASR segments: 语音转写使用火山引擎豆包语音·录音文件极速版(volc.bigasr.auc_turbo),原生返回 utterance 级真实时间戳(start_time/end_time,毫秒),脚本转成秒后填入 transcript.segmentsestimated=false。仅在接口异常未返回 utterances 时,才按句切分全文并按字数比例在音频时长上估算分段(estimated=true)作为兜底。开通/鉴权见文首「前置:开通火山语音模型」。
  • Exit code 2 — cookie expired: Execute the login flow described in the login-manager skill(原则 3:douyin / xhs-browse 有头手动登录;bilibili 有头登录),导出 cookie + UA 后重试一次。Do not retry more than once.
Repository
TeamWiseFlow/xiaobei
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.