Communitygithub.com

frameproof — 无盲区视频审查代理

该代理离线观看视频,能无死角覆盖画面,并通过时间码证明自己所看内容。无需API密钥。

frameproof — 无盲区视频审查代理 是什么?

frameproof 是一个专为AI代理设计的工具,旨在通过精确的时间码和帧索引来审查视频内容。它解决了代理在分析视频时容易“幻觉”或编造未看过帧的问题。该工具支持macOS、Linux等平台,完全离线运行,无需任何API密钥。工作流程包括:首先通过命令行建立视频帧索引,然后搜索特定文本(包括屏幕上的OCR文字和语音),最后在必要时查看具体帧。所有对画面的陈述都必须附带格式如`[MM:SS / fNNNN]`的时间码标记,这些标记可通过`frameproof verify`进行机械审计。对于更严谨的校验,还可以启用对抗性检查模式,委托一个独立的子代理来验证每个陈述,防止确认偏误。该工具特别适用于需要高可信度的视频内容分析任务,如技术演示、教程、代码审查或事件取证。

兼容平台~Claude Code✓Codex CLI~Cursor
npx skills add edvardgrishin27/frameproof

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

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(通用)。密钥对于任何功能都不需要。

相关技能