DyNote: systematically and efficiently extract raw Douyin/DY video data and analyze videos, comments, accounts, hashtags, and short-video scenes into evidence-graded learning notes, summaries, research briefs, scripts, and knowledge-base material. Use when the user asks to 抓取/提取/整理 抖音视频字幕、视频文案、ASR 转写、Qwen3-ASR 中文转写、原始材料归档、学习笔记、analysis plan、note budget、避免返工、复用已有素材、评论洞察、账号分析、赛道/话题研究、竞品拆解、电商/本地生活视频分析、事实核查、自动搜索素材, save Douyin content as Markdown/TXT, or use subtitle/local ASR as the factual spine with logged-in Douyin Web built-in AI / Doubao fallback as visual or quick-reading supplements.
DyNote 是面向 Codex 这类 Agent 的抖音学习工具,不是一次性摘要器。核心原则是“数据资产先行,学习笔记后置”:先把字幕/转写、评论、元数据和 AI 快读沉淀为可复用资产,再按用户需求生成可追溯的学习笔记、总结和写作材料。默认目标不是字幕工程文件,而是先落一份原始数据包:douyin_ai_brief.md、douyin_ai_brief.json、transcript.cleaned.md、transcript.txt、segments.json、metadata.json、note_budget.json,并用 assets/ 归档可复用资产。默认把独立字幕轨或本地自动语音识别转写当作事实主干;当转写密度低、任务需要画面理解或用户只要快速筛选时,再用已登录抖音网页版的“问AI / 识别画面”补充,豆包只作为抖音 AI 不可用时的备用快读或待核验假设。
联网或登录态操作必须先使用 web-access。不要读取、复制或打印 Cookie、msToken、a_bogus、x-secsdk-web-signature、临时签名视频 URL 等敏感参数;脚本只让已授权 Chrome 页面自己加载内容。
DyNote 与 Bili Note 共享可复用本地资源。默认共享目录是 %USERPROFILE%\.cache\rimagination-notes,Qwen3-ASR 环境默认是 %USERPROFILE%\.cache\rimagination-notes\qwen3-asr-venv。如果任一 skill 已经安装过 Qwen3-ASR,另一个 skill 必须优先复用,不要重复安装。Hugging Face、Whisper 和 faster-whisper 缓存按本机通用缓存复用。
web-access 连接到用户当前可用的 Chrome。不要启动无登录态 Playwright 浏览器,不要用静态 curl 抓登录页,不要导出或保存 storageState、Cookie、localStorage 或 token。问AI,必要时点击可见的 识别画面 把当前帧加入问答上下文。问AI / 识别画面 或未生成 章节要点,记录为 weak 或 blocked,先确保字幕/本地自动语音识别事实主干可用,再考虑豆包备用、关键帧或 OCR。https://www.doubao.com/chat/ 在当前 Chrome 中已登录且有可见聊天输入框、侧边栏/新对话等用户态界面。blocked: doubao-login-required,提示用户先在同一个 Chrome 登录豆包。不要静默降级到其他浏览器。douyin.com/video/...,因为完整分享文案更容易触发豆包的搜索/参考资料式视频概述。search-derived 是检索式概述,visual-claimed 是声称包含画面/镜头细节,blocked 是豆包无法访问视频画面,weak 是信息不足。不要把检索式概述说成逐帧视觉解析,也不要让豆包替代完整字幕或本地转写。抖音和 B 站不同:很多抖音视频没有可直接抓取的独立字幕文件。先按用户任务分流,不要固定把所有视频都下载转写。
douyin_ai_brief.json 时先复用;如果不可用,再用豆包 fast 备用。note_budget.json 显示转写密度低时,不能只靠音频转写;优先补抖音 问AI / 识别画面、关键帧、截图或 OCR。抖音 AI 仍不能提取完整字幕;豆包 evidence 只作为抖音 AI 不行时的备用视觉假设。抖音字幕常见两种形态:
如果视频较长,但 note_budget.json 中 visual_dependency.risk 为 medium 或 high,必须提醒用户:转写文本过少,完整理解可能依赖画面,不能把稀疏本地自动语音识别结果写成完整笔记。抖音问 AI、豆包和关键帧结果必须作为补充证据审计,不能替代原文主干。
先判断用户真正要完成的任务,再决定证据深度和工具路线:
single-video-note:默认模式。单条视频/分享文本 -> 字幕/本地自动语音识别做事实主干;转写稀疏或任务需要画面时补抖音问 AI、关键帧/OCR;抖音 AI 不可用时豆包才作为备用假设,输出可读笔记。comment-insight:用户关心评论、痛点、需求、FAQ、反对意见或爆点反馈时,加载 douyin-comments。默认只抓前 100 条主评论及这些主评论的楼中楼,输出 _sample.json/csv,并明确提示这不是全部评论。用户明确要完整评论资产、复核全部可见评论或样本不足时,再用 --full 做全量抓取。抓到的 JSON/CSV 必须归档到 assets/comments/,再输出用户洞察,而不是只把评论写进一次性总结。account-analysis:账号主页或多条视频 -> 定位、内容支柱、钩子模板、系列化栏目、发布节奏和可复用选题。topic-research:话题、关键词、赛道、竞品或“自动搜索” -> 先低成本收集标题/简介/话题/样本链接,再按需要升级到 ASR、评论和关键帧。script-mining:拆脚本、镜头、叙事节奏、开头钩子、转场、结尾 CTA;脚本文案以字幕/本地转写为主,抖音内置 AI 或备用豆包只给画面假设,重要结论要用转写/抽帧校验。commerce-analysis:带货、本地生活、探店、课程或服务视频 -> 卖点、信任证据、价格/优惠、CTA、转化阻力和评论需求。fact-check:涉及医学、法律、投资、新闻或强事实判断时,区分视频原文、抖音内置 AI/豆包概述和外部来源;高风险结论必须联网核验并标注来源。knowledge-archive:用户要沉淀资料库、Obsidian、RAG 或写作素材时,保留来源 URL、作者、时间、证据等级、关键词和后续可检索标签。成本分层默认从轻到重:
quick-pass:分享文本、页面元数据、抖音内置 AI,必要时备用豆包 fast;适合秒级判断、选题筛选和草稿,但必须标注不是完整字幕/全文证据。evidence-pass:独立字幕轨或 ASR 全文、关键帧/OCR、评论样本;适合要引用、拆解或发布的内容。research-pass:批量视频、账号/话题搜索、竞品对比和评论聚类;范围大时先给样本计划和 token/时间风险。默认按“问题 -> 取证 -> 分析 -> 审计”推进,不要把工具输出直接等同于结论:
research-question:写清要回答的问题、分析单位和场景模式。复杂任务先生成 analysis_plan.json。sampling-plan:账号、话题、评论或竞品任务必须说明样本怎么选、样本量是多少、为什么足够或不足。evidence-ladder:把证据分为用户输入、页面元数据、独立字幕轨/本地自动语音识别转写、抖音内置 AI、备用豆包快读、评论、关键帧/OCR、外部来源。字幕/转写是事实主干;抖音 AI 和豆包是快读或视觉补充。结论必须标注依赖哪一层。synthesis-gate:合成前先读取 assets/asset_manifest.json 或确认同等原始材料,检查证据等级、覆盖范围和反例/不确定性;缺证据时先写范围限制,不要补故事。audit-trail:最终笔记或研究简报保留来源 URL、采集时间、输出文件、样本范围、note_budget.json 和无法验证的点。douyin_ai_brief.json 时,不要重复问抖音内置 AI;已有 doubao_brief.json 时,不要重复问豆包;已有 transcript.txt、segments.json、metadata.json 时,不要重跑 ASR;已有 note_budget.json 且未过期时,不要重算预算。analysis_plan.json 只在复杂任务或目标变化时创建;已有计划默认复用。目标、来源、模式或证据等级变化时才用 --force 重建。quick-pass,只有当研究问题无法回答、证据等级不足、或用户要可发布笔记/事实核查时,才升级到 evidence-pass 或 research-pass。评论区任务的 quick-pass 是前 100 条主评论及对应楼中楼样本;全量可见评论属于更重的资产补齐步骤。douyin_ai_brief.json、doubao_brief.json、transcript.txt、segments.json、metadata.json、评论 JSON/CSV 和关键帧截图都属于原始数据;最终学习笔记必须能回到这些材料解释来源。assets/transcripts/ 保存字幕、转写和片段;assets/comments/ 保存完整评论 JSON/CSV、JSONL 明细和可读 Markdown;assets/asset_manifest.json 是后续再分析的入口。assets/asset_manifest.json 是事实入口;learning_note.md 是从资产生成的一种学习视图,不是资产本身。用户换问题、换场景或要求复核时,优先复用资产重新组织笔记,不要重跑或覆盖原始材料。note_budget.json。它根据视频时长、转写字数、片段/证据块、评论数和互动质量给出推荐笔记长度。$skill = "$env:USERPROFILE\.codex\skills\dy-note"
$py = "python"
& $py "$skill\scripts\check_environment.py"
inspect_workflow_state.py,复用已有计划、抖音内置 AI brief、豆包 brief、转写、评论、预算和评分。create_analysis_plan.py 生成 analysis_plan.json;已有计划且目标没变时不要重建。单条视频任务也要在脑中执行同样的证据闸门。note_budget.json。extract_douyin_text.py 取得字幕轨或本地自动语音识别转写。默认 --asr-backend auto:中文或未指定语言优先共享 Qwen3-ASR,明确外语视频优先 Whisper。默认复用已有输出;需要重跑时加 --force。douyin_web_ai_brief.py;已有可用 douyin_ai_brief.json 时先读旧结果。抖音内置 AI 不可用、弱,或 note_budget.json 显示低转写密度时,再用 doubao_video_brief.py 的 fast/evidence 模式备用,但必须标注为假设。quick-pass 样本,不要直接对大量视频逐条 ASR;样本结论不足时再升级到 evidence-pass 或 research-pass。大评论区默认用 fetch_douyin_comments.py 抓前 100 条主评论及对应楼中楼;需要完整可见评论时再显式加 --full,不要黑盒等待一轮全量抓取。archive_dy_note_assets.py 生成或更新 assets/。评论区任务必须保留评论样本或完整评论资产,不能只输出评论摘要。assets/asset_manifest.json,再按用户需求读取 transcript.cleaned.md、segments.json、完整评论、douyin_ai_brief.md、doubao_brief.md 或 analysis_plan.json,检查证据是否足以回答研究问题。再打开 note_budget.json,按推荐长度和 writing_guidance 写学习型笔记;如果 visual_dependency.needs_visual_review=true,必须在笔记和回复中提醒画面证据不足,或先补抖音 问AI / 识别画面、关键帧/OCR。对外部 AI 回答逐项做证据审计,不要把它们的扩写混成视频原文。assets/transcripts/ 里保留可复用文本资产。已有输出目录时先检查状态,决定下一步,不要盲目重跑:
& $py "$skill\scripts\inspect_workflow_state.py" `
--out-dir ".\dy_note_output" `
--mode "single-video-note"
重点看:
reusable_artifacts:可以直接复用的产物。recommended_next_steps:真正缺的下一步。avoid_rework:明确不要重复做的昂贵步骤。stale.note_budget / stale.note_score:预算或评分是否因新材料而过期。复杂任务先生成计划,再采集数据。单条视频可省略显式文件,但账号/话题/评论/竞品/事实核查任务建议保留:
& $py "$skill\scripts\create_analysis_plan.py" `
--mode "topic-research" `
--tier "quick-pass" `
--objective "分析这个赛道里什么视频形式值得复用" `
--source "铁板牛排 炸土豆饼 野外烹饪" `
--out-dir ".\dy_note_research"
如果 analysis_plan.json 已存在,脚本默认复用旧计划;只有目标、来源、模式或证据等级改变时才加 --force 覆盖。
常用模式:single-video-note、comment-insight、account-analysis、topic-research、script-mining、commerce-analysis、fact-check、knowledge-archive。
& $py "$skill\scripts\extract_douyin_text.py" `
--from-srt "D:\微信推送\douyin_subtitles_7647145112421633320\7647145112421633320_16k.srt" `
--metadata-json "D:\微信推送\douyin_subtitles_7647145112421633320\official_detail_summary.json" `
--out-dir "D:\微信推送\dy_note_7647145112421633320"
& $py "$skill\scripts\extract_douyin_text.py" `
--from-whisper-json ".\audio_16k.json" `
--out-dir ".\dy_note_output"
& $py "$skill\scripts\extract_douyin_text.py" `
--from-txt ".\raw_transcript.txt" `
--source-url "https://www.douyin.com/video/..." `
--out-dir ".\dy_note_output"
Qwen3-ASR 是中文视频优先使用的本地自动语音识别后端。首次使用时安装到共享 venv,复用现有 CUDA Torch;DyNote 和 Bili Note 共用同一套环境:
& $py "$skill\scripts\setup_qwen_asr_env.py"
& $py "$skill\scripts\check_environment.py"
看到 routes.qwen3_asr=OK 后再使用 Qwen 后端。本机默认 venv 路径是:
%USERPROFILE%\.cache\rimagination-notes\qwen3-asr-venv
为兼容早期原型,脚本仍会探测旧路径 %USERPROFILE%\.cache\dy-note\qwen3-asr-venv 和 %USERPROFILE%\.cache\douyin-note\qwen3-asr-venv。
先按 web-access 要求启动并检查 CDP proxy,再运行:
& $py "$skill\scripts\extract_douyin_text.py" `
"https://v.douyin.com/xxxxxxx/" `
--out-dir "D:\微信推送\dy_note_output" `
--asr-model medium `
--language Chinese
如果输出目录已有 transcript.txt、segments.json 和 metadata.json,脚本默认复用并跳过浏览器、下载和 ASR。确实要重跑时加:
--force
中文长视频默认优先用 Qwen3-ASR-0.6B。8GB 显存建议保留默认 60 秒分段,避免整段长音频 OOM:
& $py "$skill\scripts\extract_douyin_text.py" `
"https://v.douyin.com/xxxxxxx/" `
--out-dir "D:\微信推送\dy_note_output_qwen" `
--asr-backend qwen3-asr `
--qwen-model "Qwen/Qwen3-ASR-0.6B" `
--qwen-chunk-seconds 60 `
--language Chinese
脚本会输出:
transcript.cleaned.md:适合阅读和继续写笔记的 Markdown。transcript.txt:纯文本正文,适合喂给总结、RAG 或写作流程。segments.json:按原始字幕/ASR 片段保留的结构化文本。metadata.json:来源、作者、作品 ID、片段数、生成时间和输出清单。note_budget.json:按时长、转写字数、片段数、评论量和互动质量生成的推荐学习笔记长度,以及转写过稀时的画面依赖提示。page_metadata.json、视频、音频、Whisper SRT 或 Qwen JSON:完整流程产生的中间材料,供排错和回查使用。& $py "$skill\scripts\extract_douyin_text.py" `
--from-audio "D:\微信推送\video_16k.wav" `
--asr-backend qwen3-asr `
--qwen-chunk-seconds 60 `
--metadata-json ".\metadata.json" `
--out-dir ".\dy_note_qwen"
如果已经用 web-access 打开抖音页面并拿到 target id:
& $py "$skill\scripts\extract_douyin_text.py" `
"https://www.douyin.com/video/7647145112421633320" `
--target "CDP_TARGET_ID" `
--keep-tab `
--out-dir ".\dy_note_output"
不要关闭用户已有 tab;只有脚本自己新建的 tab 可以自动关闭。
先按 web-access 要求启动并检查 CDP proxy。脚本会使用当前 Chrome 打开抖音视频页,优先读取页面 问AI 生成的 章节要点 和时间线;如果传入的是 jingxuan?modal_id=...,会自动归一到更稳定的 /video/<id> 页面:
& $py "$skill\scripts\douyin_web_ai_brief.py" `
"https://www.douyin.com/jingxuan?modal_id=7655645985318085322" `
--out-dir ".\dy_note_douyin_ai_7655645985318085322"
如果任务依赖当前画面内容,可尝试把暂停帧加入抖音 AI 输入框:
& $py "$skill\scripts\douyin_web_ai_brief.py" `
"https://www.douyin.com/jingxuan?modal_id=7655645985318085322" `
--identify-frame `
--out-dir ".\dy_note_douyin_ai_frame"
脚本会输出:
douyin_ai_brief.md:抖音内置 AI 的章节要点、时间线、识别画面状态和局限。douyin_ai_brief.json:来源 URL、归一化 URL、作品 ID、证据等级、时间线和输出路径。证据等级为 weak 或 blocked 时,继续跑备用豆包、本地自动语音识别、关键帧或 OCR;如果只是拿草稿或选题筛选,douyin-web-ai-chapters 通常已经够用。
当抖音内置 AI 不可用、弱、或需要交叉对照时,再走豆包备用路线。先按 web-access 要求启动并检查 CDP proxy。脚本会自己打开当前 Chrome 的豆包页并确认登录态;未登录时会停止,不会换浏览器:
& $py "$skill\scripts\doubao_video_brief.py" --check-login
推荐传入完整分享文本,而不是只传最终视频 URL:
& $py "$skill\scripts\doubao_video_brief.py" `
"8.28 x@F.uf gbA:/ 07/06 :9pm 铁板牛排+炸土豆饼 向阳而生 # 助眠 # 治愈 # 美食 # 野外烹饪 # 牛排 https://v.douyin.com/xxxxxxx/ 复制此链接,打开Dou音搜索,直接观看视频!" `
--out-dir "D:\微信推送\dy_note_doubao_7580609296384249123" `
--mode fast
要判断豆包是否真的有画面证据,用 evidence 模式:
& $py "$skill\scripts\doubao_video_brief.py" `
--from-file ".\douyin_share.txt" `
--out-dir ".\dy_note_doubao_evidence" `
--mode evidence
脚本会输出:
doubao_brief.md:豆包视频概述、时间线或阻塞说明。doubao_brief.json:会话 URL、证据等级、是否搜索派生、是否被阻塞、原始分享文本和输出路径。证据等级为 blocked 或 weak 时,继续跑完整 ASR/抽帧路线;等级为 search-derived 时可作为快速草稿,但最终说明要标注它不是逐帧视觉证据。
如果后来补了评论 JSON、改了元数据,或只想根据已有输出重算预算:
& $py "$skill\scripts\compute_note_budget.py" `
--out-dir ".\dy_note_output" `
--comments-json ".\dy_note_output\douyin_comments_7580609296384249123_full.json"
写最终学习笔记前必须看 note_budget.json 中的:
recommended_note_chars_min / recommended_note_chars_max:默认笔记字数区间。quality_multiplier / quality_metrics:互动质量为何让笔记变长或变短。granularity / writing_guidance:短视频、长讲解、高互动视频分别该用什么粒度写。写完最终 Markdown 后,用预算做一次长度和信噪比校验:
& $py "$skill\scripts\score_dy_note.py" `
--out-dir ".\dy_note_output" `
--note-path ".\dy_note_output\learning_note.md" `
--out ".\dy_note_output\note_score.json"
抓完字幕/转写、评论或 AI brief 后,更新资产包:
& $py "$skill\scripts\archive_dy_note_assets.py" `
--out-dir ".\dy_note_output"
如果评论文件在别的目录,可以显式传入:
& $py "$skill\scripts\archive_dy_note_assets.py" `
--out-dir ".\dy_note_output" `
--comments-json ".\douyin_comments_765xxxx_full.json" `
--comments-csv ".\douyin_comments_765xxxx_full.csv"
资产包包含:
assets/transcripts/transcript.txt、segments.json:后续总结、检索和引用的事实主干。assets/comments/comments.sample.json、comments.sample.csv:默认评论样本备份,通常是前 100 条主评论及对应楼中楼。assets/comments/comments.full.json、comments.full.csv:显式 --full 后的完整可见评论备份。assets/comments/comments.rows.jsonl:适合继续做评论聚类、用户需求分析和二次处理。assets/comments/comments.text.md:适合人工快速浏览的评论全集。assets/asset_manifest.json:资产入口和覆盖范围。大评论区不要一上来黑盒等待完整评论。默认先抓评论样本:前 100 条主评论及这些主评论下的楼中楼。
& $py "$skill\scripts\fetch_douyin_comments.py" `
"https://www.douyin.com/video/7655645985318085322" `
--out-dir ".\dy_note_output" `
--basename "douyin_comments_7655645985318085322"
默认输出:
douyin_comments_<aweme_id>_sample.jsondouyin_comments_<aweme_id>_sample.csvdouyin_comments_<aweme_id>_main_only_sample.json/csv checkpoint如果用户确实需要完整可见评论,再全量抓取:
& $py "$skill\scripts\fetch_douyin_comments.py" `
"https://www.douyin.com/video/7655645985318085322" `
--out-dir ".\dy_note_output" `
--basename "douyin_comments_7655645985318085322" `
--full `
--main-count 50 `
--main-page-limit 300 `
--reply-count 50 `
--reply-page-limit 50 `
--main-delay 0.15 `
--reply-delay 0.05
抓完任一阶段都要运行 archive_dy_note_assets.py。如果 coverage.is_sample=true,最终说明必须提示“这不是全部评论,只是样本”;同时报告 coverage.total_reported、row_count、主评论数、楼中楼数和 reported_gap,不要把平台报告数直接说成已抓取行数。
assets/asset_manifest.json,不要只给最终学习笔记;评论区分析必须保留 assets/comments/ 下的样本或完整备份,并说明覆盖范围。识别画面 只能证明当前帧被加入输入框,不能自动等同于完整逐帧分析或完整字幕提取。fast 模式现在是备用路线;只有抖音问 AI 不可用或质量弱时再用。如果结果包含“搜索 N 个关键词 / 参考 N 篇资料”,按检索式解读使用,不要称为“豆包已看完关键帧”。blocked 结果通常会写“无法访问视频画面”或类似措辞;这时不要继续追问编造,直接回落到本地 ASR/关键帧补充。caption、简介和话题标签不等于完整字幕。只有完整逐句文本才可称为字幕/转写。问AI / 识别画面、关键帧、OCR、备用豆包视觉假设或人工检查。note_budget.json 的 visual_dependency 提示转述给用户,不要写成“已完整解析”。transcript.cleaned.md 和 transcript.txt;segments.json 供程序处理。note_budget.json。预算偏长时补概念卡、方法步骤、评论洞察、坑点和自测题;预算偏短时避免把短视频硬扩成长文。/video/<aweme_id> 或 /note/<aweme_id>;脚本会通过 Chrome 获取最终 URL。ffmpeg 和一个 ASR 后端;本地整理已有 SRT/TXT 不依赖它们。--qwen-chunk-seconds 60。scripts/check_environment.py:检查 web-access proxy、ffmpeg、Whisper、Qwen3-ASR 和本地模型缓存。scripts/archive_dy_note_assets.py:把字幕/转写、完整评论、AI brief、元数据和预算整理成 assets/ 可复用资产包。scripts/compute_note_budget.py:按转写长度、时长、评论量和互动质量生成 note_budget.json,指导学习笔记长短,并提示长视频转写过稀时的画面依赖风险。scripts/create_analysis_plan.py:按场景模式生成 analysis_plan.json,记录研究问题、采样策略、证据阶梯和合成闸门。scripts/douyin_web_ai_brief.py:使用当前已登录 Chrome 中的抖音网页版“问AI / 识别画面”提取视频章节要点和时间线。scripts/doubao_video_brief.py:备用路线,使用当前已登录 Chrome 中的豆包网页版,对完整抖音分享文本做快速解读、登录态检查和证据分级。scripts/extract_douyin_text.py:从抖音链接、本地音频或本地转写文件生成文本素材。scripts/fetch_douyin_comments.py:通过 web-access CDP proxy 分阶段抓取抖音主评论和楼中楼,支持主评论 checkpoint、续抓回复、进度输出和覆盖率统计。scripts/inspect_workflow_state.py:检查输出目录已有产物,推荐下一步并提示哪些步骤不要返工。scripts/run_qwen_asr.py:调用 Qwen3-ASR-0.6B,可按 chunk 分段避免显存溢出。scripts/score_dy_note.py:把最终 Markdown 与 note_budget.json 比较,判断笔记过短、过长或合适。scripts/setup_qwen_asr_env.py:创建/更新共享的 Qwen3-ASR Python 环境。scripts/selftest.py:轻量自测,覆盖 SRT/Qwen 解析、合段和本地输出生成。references/douyin-video-text-notes.md:实现细节、场景模式、证据分层、已知限制和后续改进建议。Copy a source-pinned command for your client. You run it yourself.
Destination: .claude/skills/dy-note · pinned to the source commit
git clone https://github.com/Rimagination/dy-note.git
cd dy-note
git checkout 9a65f0d069cacdf5b0d7529f2ce1139d38072b47
mkdir -p ".claude/skills/dy-note"
cp -r . ".claude/skills/dy-note"Review the source before running. This copies files into your project; it is not a one-click install and does not verify runtime safety.
Scanner static-checks@0.1.0 · commit 9a65f0d069ca. Static checks cannot prove runtime safety – review the source and the exact diff before installing. How checks work.
Fetches remote content at runtime, which can change after review.
Evidence: curl· fingerprint 427e4b79b1f0fc90