ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Plate 项目 video-transcripts 技能实战:基于 Gemini Files API 将缺陷录屏转写为结构化 XML 时间线

Plate 项目 video-transcripts 技能实战:基于 Gemini Files API 将缺陷录屏转写为结构化 XML 时间线 Plate 项目 video-transcripts 技能实战基于 Gemini Files API 将缺陷录屏转写为结构化 XML 时间线【免费下载链接】plateRich-text editor with AI and shadcn/ui项目地址: https://gitcode.com/GitHub_Trending/pl/plate导读video-transcripts 是 Plate 仓库.agents/skills/video-transcripts/SKILL.md内置的一款 Agent 技能当 GitHub / Linear 的 Issue、PR 或评论中附带屏幕录制.mov、.mp4或跟踪平台托管的视频时它借助 Gemini Files API 把视频自动转写为按[MM:SS]时间戳逐行描述可见行为的video-transcriptsXML 块替代手工笔记。读完本文你将掌握该技能的调用命令、参数与环境变量、认证链、输出契约、缓存工作流以及它在仓库缺陷处理规则中的实际应用方式。技能定位什么时候该用它该技能解决的是开源项目缺陷复现链路中的一个真实痛点录屏里的 bug 行为无法被搜索、无法被 diff、无法被复用。技能描述明确限定其使用场景GitHub 或 Linear 的 Issue、PR、评论中包含屏幕录制附件 URL 指向uploads.linear.app附件 URL 指向 GitHub attachment 或私有 GitHub 资产托管域需要时间线式的转写行而不是模糊摘要期望结果严格落在如下 XML 形状内video-transcripts video-transcript title... [00:00] (...) /video-transcript /video-transcripts在仓库的 Agent 规则中可以看到它的实际挂钩位置规则文件.agents/rules/resolve-slate-issue.mdc要求读取 issue 正文、评论、标签、附件图片与附件视频并且如果存在视频或屏幕录制在 [实施] 之前使用video-transcripts规则.agents/rules/task.mdc同样要求跟踪证据包含视频时加载本技能、通过它使用或创建共享转写缓存并在实施前拿到规范化的video-transcriptsXML。也就是说该技能是缺陷工单证据归一化环节的强制前置步骤。快速开始三种输入形态技能脚本位于.agents/skills/video-transcripts/scripts/generate_video_transcript.sh每个相关视频运行一次即可。它同时接受远程 URL 与本地文件路径。Linear 托管录屏签名 URLbash .agents/skills/video-transcripts/scripts/generate_video_transcript.sh \ https://uploads.linear.app/.../screen-recording.mov \ --title PDF preview hyperlinks trigger leave-page modalGitHub 附件bash .agents/skills/video-transcripts/scripts/generate_video_transcript.sh \ https://github.com/user-attachments/assets/... \ --title Slash menu loses selection after confirm本地文件bash .agents/skills/video-transcripts/scripts/generate_video_transcript.sh \ /absolute/path/to/video.mov \ --title Preview hyperlink exits workflow从源码看脚本入口做了三件事的编排download_input_if_needed判断输入是否为https?://开头的 URL是则按来源分类下载到临时目录否则直接当作本地路径run_and_validate调用模型并对结果做规范化和质量门校验校验失败时自动切换到回退模型重试见 generate_video_transcript.sh。命令行参数与环境变量全解脚本的完整用法--help/-h可查看generate_video_transcript.sh video-path-or-url [--title TITLE] [--model MODEL] [--fallback-model MODEL] [--debug-dir DIR]参数说明默认值video-path-or-url必填本地视频绝对路径或远程视频 URL无--title每个转写块的简短、聚焦 bug 的标题缺省时取文件名去扩展名文件名--model主模型名VIDEO_TRANSCRIPTS_MODEL环境变量否则gemini-3.1-flash-lite-preview--fallback-model主模型产出不合格时的回退模型VIDEO_TRANSCRIPTS_FALLBACK_MODEL否则gemini-3-flash-preview--debug-dir目录保存请求/响应的原始工件空不保存除 CLI 参数外脚本还读取一组环境变量优先级顺序见 Notes 小节 与脚本源码Linear 认证先试LINEAR_COOKIE_HEADER再试LINEAR_COOKIES_DB指向 SQLite cookie 库最后回退到 macOS 本地 Linear 桌面端 cookie 存储~/Library/Application Support/Linear/Cookies。脚本中的linear_cookie_header函数以只读模式打开 SQLite 库按host_key .linear.app过滤非空 cookie 并拼接为Cookie头见 generate_video_transcript.sh。GitHub 认证先试GITHUB_TOKEN再试GH_TOKEN然后gh auth token最后回退到未认证下载。对应函数github_auth_header生成Authorization: Bearer token头见 generate_video_transcript.sh。Gemini 认证先试GEMINI_API_KEY再试GOOGLE_API_KEY两者都未设置时尝试 source 用户的~/.bash_profile仍缺失则报错退出见 generate_video_transcript.sh。脚本内部对下载源做了分类处理见download_input_if_neededgenerate_video_transcript.shuploads.linear.app域优先带 cookie 下载github.com/user-attachments/、private-user-images.githubusercontent.com、private-attachments.githubusercontent.com、media.githubusercontent.com/media/attachments/等私有资产域优先带 Bearer token 下载并允许降级。扩展名从 URL 文件名推导推导失败时兜底为bin。输出契约XML 而非 Markdown技能对产物格式有硬性约束见 Output Contract返回 XML不是 Markdown每个观察到的动作或系统响应占一行格式为[MM:SS] (...)可读的 UI 文本要尽量原样引用只描述可见动作、屏幕变化以及若存在可听到的语音禁止编造隐藏状态、动机或实现细节倾向高信号密度的简洁行而不是逐按键的冗余记录。对应地脚本在call_model中把这段约束直接写进了发送给模型的系统提示见 generate_video_transcript.sh要求恰好一个 XML 转写块、无 Markdown 代码围栏、每条可见动作一行、引用可读 UI 文本、不发明隐藏状态同时提示把持续键入折叠为该字段最终的稳定文本除非中间编辑本身就是 bug、避免重复滚动行、2 到 5 分钟产品视频目标约 15 到 35 行转写、保持内容对 bug 分诊和 QA 复现有用。在仓库的缺陷工作流中该输出契约被落实为验收标准计划文档 docs/plans/2026-06-15-task-repro-escalation-ladder.md 把视频或录屏证据被缓存并读取为规范化的video-transcriptsXML或标注 N/A 并给出原因列为完成项其检查表中也包含视频转写证据要求无视频则标注 N/A的行。工作流与转写缓存管理技能定义了一整套 17 步工作流见 Workflow核心思想是去重缓存 按源容器组织每个相关视频各运行一次 helper并为每次运行给出简短、聚焦 bug 的--title对于被跟踪的工作规范共享缓存应存放在跟踪平台中、紧邻它所描述的证据视频在 Issue 或 PR 正文中 → 使用顶层跟踪评论视频在 Linear 评论中 → 将转写缓存作为对该特定评论的回复视频在 GitHub Issue/PR 评论中 → 为该源评论的视频集使用一个专用的顶层缓存评论GitHub 没有回复机制因此按源容器分隔缓存评论而不是合并无关评论的视频缓存评论或回复正文应以转写来源链接开头随后是时间戳行[Transcript] [00:00] (...)缓存 helper XML 时剥掉video-transcripts与video-transcript ...包裹行只粘贴来源链接之后的时间戳行同一源容器有多个视频时为每个视频重复[Transcript]来源链接加时间戳行能运行 helper 时绝不手写或转述视频行为一律使用真实转写输出[Transcript]优先链接到视频 URLURL 不可用或不稳定时链接到包含视频的源评论对uploads.linear.app这类带签名的跟踪托管 URL去掉查询串避免新签名使原本有效的缓存条目失效不要给缓存条目添加title之类的装饰性元数据除非后续工作流确实需要在重新转写被跟踪工作前先按源容器匹配缓存条目Issue/PR 正文视频一条缓存评论、含视频的每条 Linear 评论一条回复、含视频的每条 GitHub Issue/PR 评论一条专用缓存评论若匹配的缓存已覆盖该源容器当前的规范化视频键直接复用只转写缺失或新增的视频证据不要用docs/存放原始跟踪转写缓存——那是持久的仓库知识空间不是原始 issue 证据通过codex exec调用时优先使用-o file让最终 XML 落盘而不被 CLI 进度噪音污染。模型策略与质量门技能默认使用gemini-3.1-flash-lite-preview以控制成本见 Model Strategy。若该模型产出畸形、过薄或明显有噪音自动改用gemini-3-flash-preview重试对 Gemini 3 系列模型会强制最小化思考让输出预算留给转写本身而非隐藏推理。两种覆盖方式VIDEO_TRANSCRIPTS_MODELgemini-3-flash-preview bash .agents/skills/video-transcripts/scripts/generate_video_transcript.sh ...bash .agents/skills/video-transcripts/scripts/generate_video_transcript.sh ... \ --model gemini-2.5-flash从脚本源码看模型策略背后是一套完整的生成 → 规范化 → 三关校验 → 回退流水线生成配置按模型族分流generation_config_jsongenerate_video_transcript.shGemini 3 模型使用temperature: 0、maxOutputTokens: 2400、thinkingLevel: minimalgemini-2.5-flash*使用thinkingBudget: 0其余模型只用temperature: 0与maxOutputTokens: 2400。输出规范化normalize_outputgenerate_video_transcript.sh剥掉首尾 Markdown 代码围栏把[MM:SS] xxx形式的裸行改写为[MM:SS] (xxx)若已有video-transcripts包裹则原样返回若只有video-transcript ...则补齐外层包裹否则判失败。质量门 1时间戳数量count_timestampsrun_and_validate转写行数少于 5 视为过薄直接判失败并回退。质量门 2噪音检测has_noisy_runsgenerate_video_transcript.sh用 awk 对时间戳行分类broadcast_title、message、scroll三类目标当输入标题字段消息文本区滚动等噪音型描述在同一目标上连续超过阈值标题 2 行、消息 3 行、滚动 2 行时判定为低信号转写触发自动回退。完成原因校验run_and_validate还会检查finishReason非STOP的异常结束同样触发回退generate_video_transcript.sh。底层原理脚本如何驱动 Gemini Files APIgenerate_video_transcript.sh完整实现了 Gemini Files API 的可恢复上传 → 轮询就绪 → 生成内容三段式调用call_modelgenerate_video_transcript.sh启动可恢复上传向https://generativelanguage.googleapis.com/upload/v1beta/files发送X-Goog-Upload-Protocol: resumable、X-Goog-Upload-Command: start等头附上文件字节数与 MIME 类型file -b --mime-type探测从响应头解析x-goog-upload-url。上传并 finalize向该 URL 以--data-binary提交视频带X-Goog-Upload-Offset: 0与X-Goog-Upload-Command: upload, finalize用jq提取返回的file.name与file.uri。轮询处理状态每 2 秒查询一次文件状态最多 60 次直到ACTIVE出现FAILED或超时则报错返回。生成内容向https://generativelanguage.googleapis.com/v1beta/models/model:generateContentPOST 请求体parts中同时携带file_dataMIME 类型 文件 URI与上节所述的转写约束提示文本。错误与调试响应含.error时输出错误信息并失败设置--debug-dir时把file_info.json、file_get.json、request.json、response.json四个工件复制到指定目录便于排查。脚本还通过escape_xml_attr对标题做 XML 实体转义、、、见 generate_video_transcript.sh避免标题中的特殊字符破坏输出 XML 结构整个过程在mktemp -d临时目录中进行trap cleanup EXIT保证退出时自动清理。在仓库中的落地技能如何被缺陷流程调用该技能并非孤立脚本而是 Plate 仓库 Agent 工作流的一等公民可在三处看到它的接线.agents/rules/resolve-slate-issue.mdc解决 Issue 前必须读取附件视频存在录屏则先运行 video-transcripts 再实施修复.agents/rules/task.mdc跟踪证据含视频时加载该技能、使用或创建共享转写缓存并要求在实施前拿到规范化video-transcriptsXML同文件还分别在技能选择清单跟踪证据包含视频或屏幕录制时启用与完成门视频证据在实施前使用了 video-transcripts两处引用它skills-lock.json技能注册表记录video-transcripts来源于udecode/dotai仓库的skills/video-transcripts/SKILL.md并带有内容哈希用于版本锁定。这意味着该技能的价值不止于生成转写它通过规范化 XML 按源容器缓存的去重策略把每次缺陷修复的证据沉淀为可复用、可审计的工单资产与 docs/plans/2026-06-15-task-repro-escalation-ladder.md 中视频证据必须缓存为规范化 XML 或标注 N/A的验收口径完全对应。注意事项与边界本技能依赖外部 Gemini API使用前必须在环境中配置GEMINI_API_KEY或GOOGLE_API_KEY模型名称与能力以脚本默认值为准可按需通过--model/--fallback-model覆盖。Linear 私有上传依赖桌面端 cookiemacOS 路径~/Library/Application Support/Linear/Cookies或LINEAR_COOKIE_HEADER/LINEAR_COOKIES_DB注入GitHub 私有资产依赖GITHUB_TOKEN/GH_TOKEN/gh auth token。认证链的完整优先级见脚本中的linear_cookie_header与github_auth_header函数。转写只描述可见行为不推断隐藏状态与动机对于过薄少于 5 条时间戳、畸形或重复噪音的输出脚本会自动回退到次选模型这是内置的质量保障无需手工干预。仓库为只读研究环境上述所有命令与配置仅用于说明技能的正确调用方式实际使用需在具备相应 API 凭据与视频附件访问权的环境中进行。【免费下载链接】plateRich-text editor with AI and shadcn/ui项目地址: https://gitcode.com/GitHub_Trending/pl/plate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表