AI视频生成流水线(用户生成内容 / TikTok联盟)
概述
John的流水线:产品截图 → 故事板提示(First Frame UGC Hub策略) → Google Flow生成 → TikTok Studio网页上传(间隔10分钟,分批上传) → Telegram状态推送 → John在TikTok应用内关联商品。反重复 + 电影级修复(2026年8月6日):主提示词v2.2已集成到流水线中。 每次生成脚本时,必须:(1) 读取 /home/john/google-flow-automation/master_prompt_v2.2.txt(A-J章节),(2) 运行 python3 /home/john/google-flow-automation/script_rotation.py pick,仅从 allowed_strategies/allowed_hooks/allowed_ctas/allowed_personas/allowed_cameras/allowed_lighting 中选择,(3) 在 prompt.json 中写入额外的字段(strategy/hook_type/persona/cta_line/camera_movement/lighting),(4) 之后运行 script_rotation.py record --strategy N --hook ... --cta ... --persona ... --camera ... --lighting ... --starters ...。旋转状态持久化在 rotation_state.json 中(最近10个脚本:不允许策略/钩子/CTA/人物/镜头/光照连续重复,不重复使用最近10个列表中的句子开头,'黄色购物篮' CTA最多每3个视频出现1次)。v2.2新特性(John的要求,8月6日): 每个 videoPrompt 必须指定 恰好一个镜头运动(库I.1:慢推入、轻柔后拉、横向轨道、手持漂移、俯仰揭示、低角度推进、环绕、焦平面切换、静态微动、POV步入——一个连续的10秒运动,绝不使用静态镜头)+ 一种光照/氛围(库I.2:黄金时刻、柔和窗光、舒适夜晚、电影感氛围、干净工作室、清晨清新、温暖咖啡厅虚化、霓虹夜景)+ 不露脸构图规则(I.3:绝不显示人脸——只显示手部/POV/过肩镜头(从背后)/产品特写;使用画外音,而不使用画面内说话者)+ 语音时机规范(H:最多20词 ≈ 7-8秒语音,在第1秒开始,节奏间微停顿,最后一个CTA词在第8秒左右结束,结束画面保持在第8-10秒)。主提示词副本位于 /home/john/google-flow-automation/master_prompt_v2.2.txt(Downloads/ai_studio_master_prompt.txt 是同步的源文件——每次编辑后都需复制)。 截至2026年8月6日的状态:影子运行已完成——流水线端到端验证。TikTok Studio上传流程已在同一天晚上映射完成(上传 + AI切换 + 上传时关联产品;点击路径见 references/tiktok-studio-upload.md)。通过CDP(flow_driver.py,Chrome 151原生,GOOGLE FLOW配置文件)的备用路线B:上传 → 关联 → 合规提示词 → Omni Flash 10秒 9:16 1x生成 → 1080p放大下载——全部成功。早期生成尝试偶尔失败(一般性错误,未扣除积分),但重试成功——见“陷阱”部分。
路线A — SnapGen API生成(2026年8月11日验证——新的首选路线)
snapgen_client.py 现在是第一生成选择(2026年8月11日自动提示已修补):通过 api.snapgen.ai 进行纯HTTP Omni-Flash生成——无需Chrome/CDP/X11、无需Flow积分、无需冻结/对话框/双次生成失败。用法:timeout 400 ~/.venvs/tiktok/bin/python /home/john/google-flow-automation/snapgen_client.py <job-dir> [--no-upscale] [--max-retries 3] —— 读取 prompt.json 中的 videoPrompt + product_image*.png,提交模型为 omni-flash,参数为10秒、9:16、1080p(帧模式≤2张图,ingredient=3),轮询历史约2分15秒,下载签名版MP4,使用ffmpeg放大至1080x1920(API返回原生720x1280——不存在放大端点;--no-upscale 保持720p),写入 generated_video.json。退出码:0表示完成,1表示致命错误,2表示临时性错误。每个视频消耗30积分;SNAPGEN_API_KEY 位于项目 .env 文件中(John的账户PP0001)。崩溃后恢复(8月12日——两个客户端均适用): 提交后立即将UUID持久化到 <job-dir>/.snapgen_uuid(Omni)或 <seg-dir>/<out>.uuid(Veo);重新运行时,客户端在重新提交前先从历史记录轮询该UUID(服务器在客户端崩溃后会 继续生成——2026年8月11日验证:3个已提交的Veo任务在客户端崩溃后完成并恢复;重新提交会导致积分重复扣除)。恢复标记在成功后移除;Veo的恢复基于缺失的 <out>.json 记录(而非MP4——未修剪的局部MP4 不能 被视为完成)。降级链:snapgen → flow_batch.py → 手动CDP。画外音会根据提示方向即兴创作自己的他加禄语-英语混合措辞(相同节奏,而非逐字脚本)。图像生成 nano-banana-pro 通过API免费使用(5次请求/分钟),用于静态图像客户端工作——不通过脚本(John于2026年8月11日裁定:Nano Banana保持 仅限浏览器)。完整细节和验证:references/snapgen-api.md 和 /home/john/google-flow-automation/SNAPGEN_API_ANALYSIS.md。
/generate 交互式流程 + Veo 3.1 快速路径(2026年8月11日验证)
通过SnapGen API的Veo 3.1快速路径已验证(2026年8月11日):4积分,8.0秒,9:16被接受(文档称仅16:9——API有宽松限制),带参考图像的帧到视频生成, 按照脚本生成他加禄语-英语混合画外音**(逐字转录: