virtual-couple-travel-vlog
Create virtual couple travel vlog workflows and assets from a user-provided theme, destination, couple profile, output folder, or reference images. Use when Codex needs to generate nostalgic iPhone travel photo grids, split 4x4 grids into four 2x2 memory sheets, create male/female character reference cards, generate Topview Omni Reference video clips, write manual Chinese music prompts, assemble final vlog videos, and save all assets in a user-selected dedicated project folder.
1实现原理 · 为什么它能做到
它不是单点工具而是一条「资产流水线」:从一句旅行主题出发,串起四格照片墙→切图→角色卡→视频提示词/生成→音乐提示词→成片拼接→QA 共 12 个任务。
Build a repeatable "virtual couple travel vlog" asset pipeline from a short theme such as "a young Japanese couple in Paris" or "a Chinese couple in northern Normandy."
身份一致性的关键设计:先用一次生成出 4x4 拼版把 16 张照片锁进同一模型上下文,再本地切成四张 2x2,而不是各自文生图四张。
Prefer generating one 4x4 contact sheet in a single image task, then splitting it into four 2x2 sheets. Do not generate four independent 2x2 text-to-image sheets unless there is already a strong locked character reference image.
切图由本地 Python/Pillow 脚本完成,且被指定为唯一默认裁切路径(不许用设计工具,也不许回退到独立 2x2 生成)。
Use [scripts/split-grid.py](scripts/split-grid.py) to split the approved 4x4 image into four 2x2 memory sheets. This is the only default crop route.
角色卡有硬规格(1:1、七面板、上四下三、纯白底、转身表语言),并默认只用 Codex Image Gen / gpt-image-2 生成。
Generate character cards with Codex Image Gen / `gpt-image-2`, not Topview, unless the user explicitly asks for Topview for this step after being warned about possible lower model quality.
视频段不绑死平台:先跑一个「provider 检测」脚本,有连接就自动化、没有就给完整的手动交付包。
After the four 2x2 sheets, character cards, and video prompts are ready, run [scripts/check-video-providers.py](scripts/check-video-providers.py).
Topview 自动化通过一个包装脚本调用,目标是避免跨平台 shell 引号问题:把参考图组织成 JSON 后交给 video_gen.py。
Before submitting video tasks, pause for an explicit queue decision:
付费前必须有闸门:提交前展示设置、积分估算与等待预估,并让用户选普通队列或 Quick Generate(额外 15 积分),绝不静默花费。
Do not continue to video submission until the user answers.
所有资产落在用户选定的输出根目录下的项目文件夹,且明令不删文件、不静默安装第三方技能/包。
Never delete files. If cleanup is needed, ask the user for explicit second confirmation first.
音乐与剪辑都走「有原则的退让」:音乐只写中文提示词交人工生成;剪辑按简单/进阶分叉(FFmpeg vs Remotion/HyperFrames),并明确 HyperFrames 不做源视频生成。
Do not use Gemini CLI or any automatic music generation tool by default. Always write the final Chinese music prompt to `audio/music_prompt_zh.txt`
产出结构固定成契约(brief/prompts/images/videos/audio/qa),便于跨会话续做与人工接管。
- `brief.md` - theme, couple profile, location, style notes.
2核心能力
3外部依赖
| Kind | Dependency / Endpoint |
|---|---|
| cli | FFmpeg / FFprobe |
| package | Python Pillow(PIL) |
| cli | Node / npm / npx(Remotion 与 HyperFrames 路径) |
| cli | Topview skill 的 video_gen.py(第三方技能,付费平台) |
| cli | HyperFrames CLI(npx hyperframes lint / inspect / render) |
| api | 第三方视频/图像平台 API 密钥(仅检测存在性,不调用):Seedance / Krea / Lovart / LibTV |
| cli | Codex Image Gen(gpt-image-2)与 imagegen 技能——角色卡与记忆图的首选图像路径 |
4管控建议与判定依据
- scripts/: 执行本地脚本或命令: python scripts/check-tools.py --show-install-hints(只探测,不安装)
- 网络端点: 声明外部网络访问: 仓库内代码本身无任何 HTTP/socket 调用;网络行为全部通过被调用的外部 CLI 发生
- 本地工作目录: 文件读写与工件输出: 在用户选定输出根目录下创建 <Project Title>/ 及其子目录 prompts、images、videos、audio,并写 brief.m
5第二遍独立确认
- [ok] 「仓库内无直接网络调用」是否成立 — 全仓 https?:// 扫描中本技能目录零命中;5 个脚本 import 仅 argparse/json/os/shutil/importlib/subprocess/sys/time/pathlib/PIL,无 urllib/requests/socket/http。
- [ok] 密钥是否会被回显(凭证泄露风险) — first_env() 只返回命中的环境变量名,print_table() 打印的 evidence 列即该变量名;未出现 os.environ.get(name) 取值的输出路径,结论:不回显密钥值。
- [ok] 外部依赖条目逐条反查 — FFmpeg/FFprobe/Node/npm/npx/PIL 在 check-tools.py 的 results 列表中逐项存在;Topview 路径解析在 run-topview-omni.py 与 check-video-providers.py 两处互证;npx hyperframes 三连命令在 SKILL.md 与 tooling.md 两处出现。
- [unlocatable] Topview 平台域名(未能定位) — 本仓库内没有任何 Topview/Seedance/Krea/Lovart/LibTV 的域名或端点字符串,只有平台名与「本机是否安装/是否配置 key」的判断。真实网络端点位于被引用的第三方技能与平台侧,超出本次可读源范围,按纪律标为待补,不臆测域名。
- [ok] 付费闸门是否真的落在流程里(而非口号) — SKILL.md 有独立的 Topview 段要求提交前展示设置/积分/等待并等用户回答;task_list.md Task 6 给出「Do not submit video tasks until the user replies」与逐次/整批授权规则;tooling.md 提供决策话术模板。「不静默花费」在指令层有三处互证。
- [ok] 写入范围是否被限定在输出根目录内 — SKILL.md Operating Rules 第一条要求所有资产存于 <Output Root>/<Project Title>/;assemble-vlog.py 的工作目录默认取输出文件父目录;split-grid.py 的 output_dir 由参数传入。未发现写到技能目录或系统目录的路径(唯一例外是 npx 自身的缓存行为,属工具侧)。
- [ok] HyperFrames 定位是否前后一致(防止第一遍读错) — SKILL.md『HyperFrames editing only』段、README『HyperFrames 不再作为四段源视频的生成 provider 使用』、tooling.md『Do not use HyperFrames as the source provider』三处口径一致,第一遍所述成立。
- [ok] 任务清单完整性 — task_list.md 实含 Task -1、Task 0 至 Task 10 共 12 段,与 SKILL.md Task List 的 12 条编号一一对应;每条带 Acceptance 或 Fallback,非空壳。
6结论
c85905174ced23a9…