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.
1How It Works & Mechanism
It is not a single point tool but an end-to-end asset pipeline: starting from a single travel theme, it chains 12 tasks covering 4x4 photo wall -> image splitting -> character cards -> video prompts/generation -> music prompts -> final video assembly -> QA.
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."
Key design for identity consistency: lock all 16 photos into a single model context via a single 4x4 grid generation, then slice it locally into four 2x2 sheets, rather than running four separate text-to-image generations.
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.
Image cropping is executed by a local Python/Pillow script, established as the sole default cropping path (no design tools, no fallback to independent 2x2 generations).
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.
Character cards adhere to strict specifications (1:1 aspect ratio, seven-panel layout, four on top and three on bottom, solid white background, turnaround expressions/postures), generated exclusively via Codex Image Gen / gpt-image-2 by default.
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.
Video generation is platform-agnostic: it runs a 'provider detection' script first, automating execution if connected, or offering a complete manual handoff package if not.
After the four 2x2 sheets, character cards, and video prompts are ready, run [scripts/check-video-providers.py](scripts/check-video-providers.py).
Topview automation is executed via a wrapper script to eliminate cross-platform shell quoting issues: assembling reference images into JSON before passing them to video_gen.py.
Before submitting video tasks, pause for an explicit queue decision:
Strict gating before payment: display settings, credit estimates, and queue wait times prior to submission, requiring user selection between regular queue and Quick Generate (extra 15 credits), never silently spending credits.
Do not continue to video submission until the user answers.
All assets reside in a dedicated project directory under the user-selected output root, with strict rules against deleting files or silently installing third-party skills/packages.
Never delete files. If cleanup is needed, ask the user for explicit second confirmation first.
Music and video editing follow 'principled fallbacks': music only provides Chinese prompts for manual generation; editing splits into simple/advanced tiers (FFmpeg vs Remotion/HyperFrames), explicitly stating HyperFrames does not generate source footage.
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`
The output structure is strictly defined as a contract (brief/prompts/images/videos/audio/qa), facilitating cross-session resumption and manual takeover.
- `brief.md` - theme, couple profile, location, style notes.
2Core Capabilities
3External Dependencies
| 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 技能——角色卡与记忆图的首选图像路径 |
4Recommended Governance & Evidence
- scripts/: Local script/command execution: python scripts/check-tools.py --show-install-hints (probe only, no installation)
- 网络端点: External network access declaration: repository code contains no HTTP/socket calls; network activity occurs solely through invoked external CLIs
- 本地工作目录: File I/O and artifact generation: creates <Project Title>/ and subdirectories prompts, images, videos, audio under the user-selected output root, writing brief.m
5Second-Pass Verification
- [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,非空壳。
6Verdict & Scenarios
c85905174ced23a9…