phone-reel-pipeline
端到端的安卓 → Instagram Reel 流水线。手机提供素材(并可选择性地提供趋势灵感);PC 完成所有编辑;手机接收成品 Reel,由用户手动发布。此技能负责协调其兄弟技能——它自身不包含任何脚本,也不重复任何现有逻辑。一次调用即可运行整个链条:agent 自己解锁手机(通过保险库 PIN,用户无需触碰手机),并可在需要灵感时自行导航 Edits 应用。
此仓库中的兄弟技能 — phone-reel-pipeline 负责路由至它们,不要重新实现: phone-media-bridge 负责设备连接、锁屏解锁及媒体拉取/推送, ig-edits-inspiration 负责 Edits 应用灵感(只读捕获及在已解锁手机上的自主导航), reel-maker 负责 PC 端 Reel 构建(其自身又委托给 clip-picker 和 video-tool-router — 永远不要从这里直接调用这两个)。在每个阶段之前,先阅读其相对路径下的兄弟技能 SKILL.md;它们的文档对标志、路径和陷阱具有权威性。
何时使用
触发词:"从手机端到端制作 Reel"、"用我手机素材制作 Reel"、"手机到 Reel"、"从手机拉取并制作 Reel",或任何一次运行中跨越设备 → PC → 设备的任务。
不适用于:
- 纯 PC 编辑,素材已在磁盘上且不涉及手机 → 直接调用 reel-maker。
- 仅获取灵感("有什么趋势"、"这次编辑的路线图",尚未开始构建) → 直接调用 ig-edits-inspiration。
- 发布 → 始终由用户在手机上手动完成。本仓库中没有技能负责发布、安排或上传任何内容 —— 自动发布已被明确拒绝。
工作流程
阶段 0 — 设备检查 + 解锁
运行 adb devices -l。通过 bridge 脚本的链式查找方法定位 adb(--adb 标志、ADB 环境变量、PATH,最后是 WinGet platform-tools 备选方案)。如果设备列表为空,则停止并打印以下用户检查清单:
- 无线:手机与 PC 在同一 Wi-Fi 下,无线调试已开启(如果连接已断开,需使用代码 +
adb connect <ip>:<port>重新配对)。 - USB:使用支持数据的线缆(非仅充电线),文件传输(MTP)模式,USB 调试已开启,并在手机上接受 RSA 指纹提示。
如果设备显示为 unauthorized,不要继续 —— 请用户在手机上接受 RSA 提示,然后重新运行 adb devices -l。仅在设备状态为 device 时继续。然后为自主运行解锁(无需用户触碰):
C:\Python314\python.exe %USERPROFILE%\GitHub\editor-pack\skills\phone-media-bridge\scripts\unlock.py
ALREADY_UNLOCKED→ 继续。VAULT_ENTRY_MISSING→ 通过保险库弹出窗口收集phone-1:password(python "%USERPROFILE%\.agents\skills\secure-vault\vault.py" gui --request "phone-1:password"),然后重新运行。- 完整规则见 phone-media-bridge 的阶段 0b。
阶段 1 — 灵感(可选,仅当用户想要趋势指导的编辑时)
问一个问题:趋势指导(Edits 灵感)还是直接构建(参考链接或自由形式)?如果用户想要趋势指导,则交给 ig-edits-inspiration:它从 Edits 应用捕获内容(首选只读捕获;允许在已解锁手机上遵循其原则进行自主 UI 导航),并返回一个符合 reel-maker 格式的配方。该配方成为阶段 3 的构建规范。让用户自行导航 Edits 是快速路径备选方案,并非必需 —— 当用户未操作时,agent 自行驱动。如果用户跳过灵感,直接进入阶段 2 —— reel-maker 的阶段 1 已接受参考链接,因此用户提供的任何链接将原样传递。
阶段 2 — 媒体拉取
交给 phone-media-bridge:运行其清单步骤,然后向用户展示一个紧凑的按文件夹摘要(文件夹名称、剪辑数量、总大小 —— 而非完整文件列表),并问一个问题(多选)要拉取哪些文件夹/剪辑。然后运行其拉取步骤。拉取的素材存放在连接点 skills\phone-media-bridge\scripts\phone_pull(物理路径为 D:\EditorPackArchive)。素材保留在 D: 盘 —— 编辑器从此处读取,切勿复制到 C: 盘。支持断点续传:如果在拉取过程中手机断开连接,重新运行拉取即可;参见陷阱。
阶段 3 — PC 端构建
使用阶段 1 的配方(或参考链接)加上阶段 2 的素材文件夹,调用 reel-maker 流程。reel-maker 自行委托给 clip-picker 和 video-tool-router —— 不要在此处重复该路由。有两件事需要显式传递:(a) 手机素材通常是 HEVC/HDR,因此 video-tool-router 的 HLG 10-bit 保护机制适用(在调色/字幕烧录前进行色调映射,否则色彩会变淡);(b) HEVC 解码速度较慢,因此预期阶段 3 会占据大部分运行时间(参见 clip-picker 陷阱)。
阶段 4 — 推送回手机(审批关卡)
硬性规则:未经用户对此运行中特定文件的明确批准,切勿将任何内容推送到手机。 阶段 3 完成并不表示获得推送许可。在阶段 3 结束时停止,报告本地 PC 路径、时长和大小;询问"推送到手机?",仅在得到肯定回应后继续。笼统的"制作 Reel"指令绝不视为推送批准。
一旦获得批准,交给 phone-media-bridge 的推送步骤(push_reel.py):将成品 reel_<name>_vN.mp4 推送到手机上的 /sdcard/Movies/Reels。验证文件存在于设备上(adb shell ls)并报告其字节大小与 PC 副本进行比较。
阶段 5 — 交接(用户发布)
运行 phone-media-bridge 中在手机上打开 Instagram 的步骤(push_reel.py --open-app)。然后停止:用户自行在 Instagram 应用中手动发布。永远不要自动发布 —— 已被明确拒绝。报告:Reel 路径(手机路径 + PC 路径)、版本号,以及一份简短的发布前检查清单(字幕可读、音频存在、宽高比正确)。
输出
- 手机上的
reel_<name>_vN.mp4(/sdcard/Movies/Reels/)+ 保留在项目文件夹中的 PC 副本(带版本号;绝不覆盖 v1)。 - 端到端状态报告:每个阶段通过 / 跳过 / 失败的状态、每阶段的挂钟时间、处理每个阶段的兄弟技能,以及诚实的注意事项(见下文)。示例格式:阶段 0 通过(设备
<serial>,通过保险库解锁,5 秒)→ 阶段 1 跳过(用户选择直接构建)→ 阶段 2 通过(3 个剪辑,1.2 GB,4 分钟)→ 阶段 3 通过(reel_<name>_v1.mp4,22 分钟)→ 阶段 4 通过(推送已验证,大小匹配)→ 阶段 5 已交接(Instagram 已打开,用户待发布)。
陷阱
- 克隆后连接点丢失:
skills\phone-media-bridge\scripts\phone_pull是通往D:\EditorPackArchive的连接点,克隆后不会保留 —— 在阶段 2 之前按照 phone-media-bridge 文档重新创建。 - 运行过程中手机断开连接:拉取支持断点续传(重新运行拉取步骤);推送不支持 —— 重新运行
push_reel.py并使用adb shell ls重新验证。 - 运行过程中手机重新锁定:
unlock.py设置保持唤醒 + 30 分钟超时,但重启或手动锁定会重新启用锁屏 —— 重新运行unlock.py(PIN 保留在保险库中,无需用户操作)并继续。 - HEVC 解码速度慢(clip-picker 陷阱):手机素材的缩略图和运动评分比 H.264 花费更长的时间 —— 提前说明,不要为了补偿而缩减采样。
- 永不自动发布:没有 Instagram 发布流程的 UI 自动化,没有安排,没有上传。为用户打开应用是最后一个自动化步骤。
诚实报告规则
- 报告每个阶段实际验证的内容与假设的内容:在
adb devices -l中看到的设备序列号(而非"手机已连接"),通过 dumpsys 验证的解锁状态(而非"手机已打开"),拉取的字节数匹配(而非"文件已复制"),通过adb shell ls+ 大小匹配验证的推送,Instagram 已打开(而非"Reel 已发布")。 - 如果某个阶段被跳过(例如没有灵感),明确说明 —— 永远不要暗示其输出存在。
- 时间诚实:报告每阶段测量的挂钟时间;HEVC 转码/评分时间是实际工作,不是需要隐藏的开销。
- 标示质量缺陷而非默默输出:画面抖动、HDR 色彩变淡、借用音频的重新发布限制(适用 reel-maker 阶段 5 规则)。