Files
contentm_agent/.workbuddy/memory/2026-10-05.md
T
WorkBuddy df56c2c137 初始化提交:contentm_agent 工作区全量快照
内容分四块:
1、产品规划产出 —— MCN 短视频整合营销工作台的①段五份(1a 需求/1b 竞品/1c 画像/1d 策略/1e 场景)、②段两份(2a 功能/2b 布局)、③段界面(DESIGN.md 契约与令牌表 + mcn-workbench.html 原型 + 实测/会诊/审查三份 + 23 张闸门截图)。
2、开源竞品调研 —— 5 个内容工作台项目的取证原始件与 1b 系列分析文档。
3、参考资料 —— 竞品视频抽帧 1145 张 + 2 个源视频 + 功能点截图。
4、机制侧 —— 协作脚本与状态台账、工作区记忆日志、抽帧/OCR 脚本。

.gitignore 只排运行时日志、脚本备份副本与一次性探针输出,其余按原样入库。
2026-10-08 08:13:02 +08:00

74 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-10-05
- 将 `session-mechanism` 技能**本地部署**到本工作区(agent-product):
- `deploy_code.py --ws .../agent-product` 拷 7 个程序副本进 `.workbuddy/collab/`(collabd.py / goalctl.py / collabctl.py / guard.py / session-rules-check.py / init_workspace.py / supervise-launch.py,md5 与技能源一致)。
- 新建 `collabd.config.json`:workspace=agent-product,host_db 空串(照现网 ai1net-dsh-server),wake_enable=false,含 env_check 三键(log / supervise_interval / wake_enable);建 `tmp/supervise-inbox/` 骨架。
- 验证:env_check 0 bad、16 条钩子 0 缺失;`collabd --where` 正确认到本区配置。
- ⛔ 未改全局 `roots.env`(现为 ai1net-dsh-server):避免劫持共享看板主视图。钩子已全局注册、靠 `payload.cwd` 定归属,agent-product 开会话即用。
- 待拍板(跨工作区影响):agent-product 是否进共享看板可见 —— 改 roots.env 当主视图(动 ai1net-dsh-server 主区)vs 加进 ai1net-dsh-server 的 peer_workspaces(只读并列 tab)。已抛给用户。
- 用户选「加为只读并列 tab」:把 agent-product 加进 ai1net-dsh-server 的 `collabd.config.json` 的 `peer_workspaces`(vibe-product 之后)。重启看板(触发 dsh-board-keepalive 计划任务,新实例 PID 70736,20099 HTTP=200)。
- 看板 peer 硬过滤(`board.py::goal_files` 699-701):peer 必须有 `tmp/supervise-inbox/goal.json` 才出格;agent-product 当前无 goal.json ⇒ 不出格,符合「无目标不显示」设计,⛔ 不代设目标。设目标后即自动入榜。
- 重启教训:手动 `Start-Process pythonw` 拉不起看板(无新进程);正确做法=`Start-ScheduledTask dsh-board-keepalive`(走生产动作)。curl 本机要 `--noproxy` 否则被代理返回 502。
## 加载 aigc-idea-impression 技能到本工作区
- 用户要求「只加载技能相关文件」:从 `E:/ProgramData/AIProject/aigc-idea-impression` 拷贝 SKILL.md / POLICIES.md / 经验方法总结.md / references/ / subskill/ 到 `agent-product/.workbuddy/skills/aigc-idea-impression/`(项目级技能,自动发现)。
- 排除非技能项:`.git/`、`AI变现日报/`(项目产物)、`.wbapp_*.genie`、源根 `.gitignore`/`.gitattributes`(git 元数据)、源自身 `.workbuddy/`。共 187 文件,1.5M;SKILL.md md5 与源一致。
- 关键判据:以 SKILL.md 引用的文件集合为「技能相关」边界(而非整目录搬运)。
## 参考资料抽帧(aigc-idea-impression 抽帧 SOP 实战)
- 建 `参考资料/`:Bilibili `BV1gsHn6AEk6`(AI工作台 3.0)与 YouTube `jVHyoCYidLM`(15万人看过的 AI工作台 2.0)。两视频各抽关键帧到各自 `frames/`。
- 抽帧脚本 `extract_frames.py`(Python 调度 ffmpeg,双因素 scene 0.3/0.1/0.05 + 首尾帧 + >5s 补中点;字幕区=分辨率底部 15%,已自适应分辨率)。Bilibili=468 帧(1920×1080/293s),YouTube=661 帧(1280×720/371s)。
- 🔴 **本机代理两套、别混**:
- `HTTPS_PROXY=127.0.0.1:64313` 是 CodeBuddy 沙箱注入的「仅国内」代理——bilibili 200 通,google/youtube **502 被墙**。
- 真·海外代理=**Shadowsocks(PID 26588)监听 `127.0.0.1:10800`(SOCKS5)** 与 **`ss_privoxy` `127.0.0.1:50410`(HTTP)**。两者 YouTube 均 200。yt-dlp 下载海外视频用 `--proxy http://127.0.0.1:50410`,且**沙箱外跑**(`dangerouslyDisableSandbox=true`),否则走 64313 被墙。
- 🔴 **yt-dlp 缺 JS 运行时只拿到 360p**:加 `--js-runtimes "node:<managed node.exe 路径>"` 解锁 720p/1080p(实测 136+140 得 720p/49MB)。
- 🔴 **safe-delete 钩子会打断下载**:`hlsnative` 给每个 HLS 分片建 `.part-FragN`,结尾批量删 ~48 个 ⇒ 触发 `SAFE_DELETE_BULK_CONFIRM_REQUIRED`(阈值 50/ turn 累计)并中断合并。修法=`--downloader ffmpeg`(HLS 由 ffmpeg 直写单文件、无分片临时文件),根除批量删除。
- 残片:YouTube 目录里 3 个 `.f620.*` 是首次 360p 失败残片(共 ~112MB),safe-delete 门拦着没删;**用户 20:11 确认「可以清理」后已删除**,目录现仅余最终 .mp4 + frames/。
## 从关键帧 OCR 提取字幕(aigc-idea-impression 参考素材)
- 需求:把两视频字幕分别整理成文档,「用关键帧即可」。结论:两视频都**无独立字幕轨**(YT 无字幕/自动字幕;B 站字幕需登录)→ 字幕是烧录硬字幕,只能从关键帧认字。
- 方案(脚本留在项目根,可复用):
- `cluster_subs.py`:每帧裁底部 15% 字幕区 → **固定阈值(160)二值掩码哈希**聚类(同句字幕跨帧掩码稳定、可合并),每簇取代表帧;另可拼字幕长图(被 Read 大文件守卫拦,弃用)。
- `ocr_subs.py`:对代表帧字幕区 2x 放大 → `rapidocr-onnxruntime` OCR → 按时间排序、**模糊去重(相似度≥0.82 合并近重复)**、剔纯符号行 → 输出 `字幕文档.md`(含「内容概要」+ 时间戳条目)。
- 结果:B 站 45 条 / YouTube 98 条 → `参考资料/<平台>/字幕文档.md`。
- 🔴 **pip 装包坑**:环境 `HTTPS_PROXY=127.0.0.1:64313` 是仅国内代理,pip 装海外包(PyPI)会卡死/502 → 必须 `pip install --proxy http://127.0.0.1:50410`(Shadowsocks,沙箱外)。首装 rapidocr 因漏写代理卡 10 分钟。
- 🔴 rapidocr 不接受 PIL Image,要 `engine(np.array(sub))`(numpy)。
- 🔴 大尺寸 montage 长图被 Read「大文件守卫」拦截(全文进历史太贵)→ 改 OCR 而非视觉读长图。
- OCR 仍有典型错字(ski→skill、爆数→爆款、彻作→创作、搜素→搜索),已靠模糊去重+概要缓解;要 100% 准确需人工校。
## 按规范重抽关键帧 + 逐帧 OCR(修复大量字幕遗漏)
- 用户反馈「关键帧提取有问题,很多字幕都没有」;根因:v1 OCR 只对聚类代表帧 OCR,代表帧若模糊/过渡被丢弃则整句丢失,且字幕区 scene 0.1 未加低阈值安全网。
- 严格按《视频抽帧与字幕规范》重写 `extract_frames_v2.py`:双因素 scene 0.3 + 字幕区 scene 0.1 + 全局 scene 0.05 + 首尾帧 + >5s 补中点;字幕区 crop 严格底部 15%(B 站 `1920:162:0:918`、YouTube `1280:108:0:612`);新增字幕区 scene 0.05 安全网。
- 重写 `subtitle_ocr_v2.py`:对每帧字幕区(底部 18%,防双行截断)2x 放大后 OCR → 按时间滚动去重(相似度≥0.80 合并保留最长)→ 输出规范格式 `字幕稿_日期.md`(时间线表:时间 | 台词 | 帧文件)。
- 结果:B 站 532 帧 → OCR 419 有效行 → 去重后 **241 条**(v1 仅 45 条);YouTube 772 帧 → OCR 640 有效行 → 去重后 **253 条**(v1 仅 98 条)。覆盖完整到片尾。
- 旧 `frames/` 已移为 `frames_v1/` 备份;旧 `字幕文档.md` 保留以便对照。新产物为 `字幕稿_2026-10-05.md`。
## 优化 aigc-idea-impression 技能(规则展示不明显 → 内联)
- 用户指出:技能对抽帧规则展示不够明显,导致执行时绕过规范。根因 = #002 同型(规则进了规范文档 ≠ 进执行上下文)。
- 三处改动使规则"明显":
1. `SKILL.md` §1.1:把抽帧核心铁律(双因素+首尾+补帧、crop 按分辨率、CRLF、`-ss`、逐帧 OCR)**内联成逐项勾选清单**(不再"仅引用链接")。
2. `视频抽帧与字幕规范.md`:顶部加"⚠️ 核心铁律"速查块(6 条不可违反项);五、字幕提取明确"🔴 必须逐帧 OCR,禁只对代表帧"。
3. `经验方法总结.md`:新增 **#010**(规则须内联进 SKILL.md + 字幕须逐帧 OCR),#006 交叉引用。
4. `审计检查清单.md`:新增"七、抽帧/字幕产出校验"(19-23 条:字幕区 scene0.1 在场、双因素齐全、crop 按分辨率、逐帧 OCR、CRLF)。
- 关键认知:技能里"明显"= 内联进被加载即进上下文的位置(SKILL.md 执行前强制检查),靠链接引用 = 不明显 = 等于没写。
## 从关键帧梳理 AI 内容工作台功能点
- 产物:`参考资料/AI内容工作台_功能点梳理.md`(综合 B站 3.0 + YouTube 2.0 两视频关键帧的视觉分析)。
- 平台识别:同一套个人内容工作台(Obsidian 插件形态,作者「小曾」);2.0 为升级版。
- 主导航 10 Tab:首页 / 对标与热点 / 选题 / 拆解与沉淀 / 创作 / 发布与经营 / 计划 / 常用助手 / 画板 / 收支。
- 功能模块:①首页(随手记录/本月之星/搜索) ②对标与热点(博主监控+爆款异常值识别+AI热点/Twitter/评论洞察) ③选题 ④拆解与沉淀(文案拆解→资产库:选题角度/结构/开场白/标题库) ⑤创作流水线(聊思路→写文案→起标题→做封面→发布检查→录制卡片) ⑥发布与经营(多平台发布/作品登记/数据复盘) ⑦计划 ⑧常用助手 ⑨画板(Excalidraw) ⑩收支。
- 底座:Skill 调用体系 + 外部 AI(Codex/Claude) + Obsidian 知识库 + 飞书联动 + 跨平台数据聚合。
- 方法:按抽帧规范取帧 → 逐帧视觉读取 UI → 归纳(非 OCR,是看画面 UI)。
- ⚠️ 发现 v2 `frames/` 目录已被清掉(只剩 `frames_v1/`);截图改用 `frames_v1/` 按时间戳就近匹配(同一视频,时间戳可对齐)。
- 整理产物:`参考资料/AI内容工作台_功能点与截图/`(README 索引 + 功能点梳理.md + `截图/` 16 张,命名 `序号_模块_功能点.jpg`)。
## 梳理 Easel 项目功能点 + 官方截图
- 项目:`E:/ProgramData/AIProject/vibe-product/Easel`(浙大 ZJU-REAL/OpenDCAI Lab 开源,Apache 2.0,基于 OpenClaw Agent 的社媒内容工作台)。
- 与上一例差异:Easel 是**源码项目**(非视频),信息源=README + `docs/skill-function-mapping.md`(114 Skill 能力地图)+ `web/frontend/src/components`(前端页面)+ CHANGELOG。
- 五层工作流:发现→策划→创作→发布→归因。Web 主导航 6 项:工作台(含热点雷达/选题库/内容日历/发布中心子导航)/对话/技能库/内容库/账号/画像。
- Skill 114 个分 6 层:基础6/发现9/策划16/创作51/发布20/归因11。画像六维:定位/风格/受众/平台/偏好红线/长期记忆。发布支持 7 平台。
- 产物:`参考资料/Easel_功能点与截图/`(README + Easel_功能点梳理.md + `截图/` 6 张:品牌/海报 + 官方 4 张工作台截图 画像/热点雷达/内容日历/发布中心)。
- ⚠️ 官方仓库**仅有 4 张工作台界面截图**(assets/readme/features),其余页面无图;已注明可从 `easel web` 运行实例补截。
- 用户给出在线权威参照 `github.com/ZJU-REAL/Easel/blob/main/docs/skill-function-mapping.md` → 抓取核对:在线版与本地一致(114 Skill/6 层/计数相同),逐条比对**文档 0 缺失、0 多余**;已在文档头补上权威外链。
- 追加:创作层 Skill 按「文字 11 / 视觉 16 / 音频 10 / 视频 15」四类做成明细表(合计 **52**,与在线清单逐条一致,0 重复 0 遗漏)。⚠️ 发现官方「分层总览表」写创作层 51,但其下**实际列出 52 条**(口径差 1),文档已按逐条清单标注 52 并说明差异。