frameproof — 观看视频并能够证明这一点
主要规则
绝不要断言屏幕上有什么,如果你没有看到帧。
该工具诚实地打印覆盖率。如果报告中有一个“无帧”区域——请直接谈论这个区间:“这里没有帧,根据音频——就是这样”。将猜测当作观察会贬低整个分析。
每个关于屏幕的陈述都要带有 [MM:SS / fNNNN] 标记。 这不是装饰:frameproof verify 会检查每个此类标记与索引的对应关系。虚构的引用将被算术捕捉——无需任何模型。
工作流程
1. 索引
frameproof index "<链接或路径>" --ocr
输出覆盖率报告。在开始任何其他操作前阅读它:帧数量、最大间隔是多少、是否存在无帧区域。
索引路径在输出的最后一行。后续需要用它作为 --out。
--ocr 启用帧上的文本识别(macOS,离线)。这使得屏幕可搜索:命令、文件名和URL无需任何图片即可通过搜索找到。会在原始分辨率下识别一个单独的副本,显示保持轻量。
有用的参数:--max-gap 10(更密集的覆盖率),--max-frames 400(长视频),--lang ru(解码语言,如果没有字幕)。
如果视频旁边有现成的字幕文件——--subs 语音.srt,这比解码更准确更快。在非macOS系统上,可以使用自己的OCR引擎:--ocr-command "<程序>",该程序接收图片路径并打印 路径<TAB>文本。
2. 阅读索引地图
cat <索引>/index.json
一个小文件,完整阅读。它包含时长、帧数、转录来源以及——最重要的——coverage 块。
3. 用文本而非图片搜索
frameproof search "<查询>" --out <索引>
同时搜索语音和屏幕上的文本。返回带时间码的行。没有一张图片——零视觉标记。 大多数问题在此处解决。
搜索是子串匹配(三元组),俄语词形变化不受影响。
对于更复杂的查询,直接使用 grep:
grep -i "docker" <索引>/segments.jsonl | head
grep -i "npm" <索引>/frames.jsonl | head
4. 仅在必要时查看帧
frameproof frames --at 4:12 --out <索引> # 特定时刻
frameproof frames --ids f0043,f0044 --out <索引> # 特定帧
这是唯一返回图片的命令。通过 Read 读取输出的路径。
预算:每次4–8帧。 一张1280×720的帧大约消耗1196个视觉标记。展示一小时视频的所有帧将花费数十万个标记——不要这样做。
5. 用证据回答
关于屏幕的陈述格式:
在18:38显示模型路由表:MAIN — 昂贵但智能,AUXILIARY — 便宜且快速。
[18:38 / f0097]
如果用户请求文章或摘要——请插入帧作为插图,使用 frames.jsonl 中的路径,并附上时间码。
6. 自我检查——当要求时
[MM:SS / fNNNN] 标记不是装饰,而是可验证的引用。机械审计是免费且即时的,在任何长度超过几个段落的分析中运行它:
frameproof verify <分析文件.md> --out <索引>
它完全不知道语义——它检查引用的完整性:帧是否存在,其时间码是否正确,该时刻是否落在无帧区域,该帧是否曾经被请求过,引用的行是否出现在帧文本或附近语音中。
FAIL 表示引用损坏——需要修复,而不是讨论。WARN 表示应该打开帧用肉眼查看。
7. 盲审第二意见——仅在明确请求下
当用户说“检查分析”、“重新检查”、“你确定看到了吗”——启动对抗性验证。
frameproof verify <文件> --out <索引> --plan
该命令输出一个包含任务的JSON。一次性将这些任务委托给子代理 frameproof-adversary(不要为每个陈述创建一个代理——一个足够)。
传递给子代理的内容: 仅限编号的陈述列表和帧路径,严格按JSON格式。
绝不能传递的内容,哪怕一个字也不:
- 用户提出的问题;
- 你自己关于为什么得出这个结论的推理;
- 分析的其他部分文本;
- 暗示你认为正确答案的任何内容。
子代理看不到对话历史——这是保证。但委托消息是你写的,这是唯一可能泄漏的渠道。知道预期答案的检查者是无用的:他们会确认它。
对裁决的处理:
CONFIRMED— 保持不变。REFUTED— 标记而非删除:[未被第二意见确认:<原因>]。反驳者在正确陈述上出错的频率比看起来更高,因此决定由用户做出,而不是你。UNSUPPORTED— 诚实地说:在帧上无法看到这个,结论是基于语音或相邻时刻做出的。
不要在每个分析后主动运行此步骤。它消耗标记和时间,而机械层免费捕获了大部分问题。
禁止事项
- 不要仅根据单一转录本重新叙述视频并称之为屏幕分析。 语音和屏幕会分叉:在视频中,用户说“openrouter”,但屏幕上写着
openrouter/pareto-code (min_coding_score 0.65)。第二个信息只存在于帧和OCR中。 - 不要以“以防万一”的方式批量加载帧。 先搜索,然后精确获取帧。
- 不要将OCR当作代码原文输出。 识别可能会混淆标点:
[main可能被读作Imain。OCR用于查找帧;它的内容需要用肉眼查看。 - 不要对盲区保持沉默。 如果覆盖率低于100%,请告诉用户。
如果缺少什么
frameproof doctor
显示已安装和缺失的内容。ffmpeg 和 numpy 是必需的;yt-dlp 仅用于链接;解码使用 mlx-whisper(在Apple Silicon上快速)或 openai-whisper(通用)。密钥对于任何功能都不需要。