vox
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseVox
Vox
One photo and one idea in, a 6 to 15 second paper-collage animation out, in the look of Vox explainer documentaries. Then every change is one more prompt: another person, another place, another object, the same animation.
Talk to them in their language. = in their project (slug: 2 to 4 words of the idea, kebab-case).
<dir>video-agent/vox/<slug>/text
video-agent/vox/<slug>/
├── photo.jpg their photo, untouched
├── layers/ every layer of the collage (PNG with alpha, plates in JPG/PNG)
├── raw/ Codex renders before the chroma cut, and the job logs
├── shots.json the layers asked to Codex (name, kind, ar, subject)
├── animation.html the animation: window.setT(t), opens in any browser and plays
├── capture.mjs frames -> MP4
└── <slug>.mp4输入一张照片和一个创意,输出一个 6 至 15 秒的纸质拼贴动画,呈现 Vox 解释型纪录片的视觉风格。此后,每次修改只需再发一句提示:换一个人、换一个地点、添加一个物件,同时保留同一条动画。
使用用户所使用的语言与用户交流。 = ,位于用户项目中(slug:创意的 2 至 4 个单词,使用 kebab-case)。
<dir>video-agent/vox/<slug>/text
video-agent/vox/<slug>/
├── photo.jpg their photo, untouched
├── layers/ every layer of the collage (PNG with alpha, plates in JPG/PNG)
├── raw/ Codex renders before the chroma cut, and the job logs
├── shots.json the layers asked to Codex (name, kind, ar, subject)
├── animation.html the animation: window.setT(t), opens in any browser and plays
├── capture.mjs frames -> MP4
└── <slug>.mp41. Tools (once)
1. 工具(只需准备一次)
bash
codex --version && codex login status
ffmpeg -version | head -1
node --version- Codex missing: (Node 20+) or
npm i -g @openai/codex. Not logged in: they runbrew install codexthemselves ("Sign in with ChatGPT"). Never ask for a key or a password in the chat.codex login - ffmpeg missing: (macOS),
brew install ffmpeg(Linux),sudo apt install ffmpeg(Windows).winget install Gyan.FFmpeg - Then in :
<dir>(headless Chrome for the capture, downloaded once).npm init -y >/dev/null && npm i puppeteer@24
bash
codex --version && codex login status
ffmpeg -version | head -1
node --version- 未安装 Codex:运行 (Node 20+)或
npm i -g @openai/codex。尚未登录:让用户自行运行brew install codex(“Sign in with ChatGPT”)。绝不要在聊天中索要密钥或密码。codex login - 未安装 ffmpeg:macOS 使用 ,Linux 使用
brew install ffmpeg,Windows 使用sudo apt install ffmpeg。winget install Gyan.FFmpeg - 随后在 中运行:
<dir>(用于录制的 headless Chrome,只下载一次)。npm init -y >/dev/null && npm i puppeteer@24
2. The plan (one message, then their yes)
2. 方案(先发一条消息,然后等待用户确认)
From the photo and the idea, plan the collage like a page of a magazine, then the moves:
- The hero: their photo, always the REAL photo (never redrawn by an AI: faces drift). Cut out (step 3) and printed as halftone by code in the page.
- A background plate: one full-frame 9:16 paper scene that sets the place and the time (a sky, a city, a map, a desk, a sheet of aged paper).
- 3 to 6 cut-outs: the objects of the story (a monument, newspapers, banknotes, a car, a building, clouds, birds). Each one is a separate layer so it can move on its own.
- The moves (6 to 15 s): the camera pushes in slowly the whole time, layers enter one by one every 0.5 to 1.5 s (slide in, rise from below, drop from above, a torn-paper wipe), something keeps living (clouds drifting, a bird flapping with two cut-outs, notes falling), one title on a torn paper strip if the idea has one (a place and a year, a name). All on a 12 fps stop-motion clock.
Show the layers as a numbered list (name, plate or cut-out, what it shows) and the beat timeline in 4 to 6 lines. Wait for a yes: each layer is one Codex image on their plan.
根据照片和创意,先像规划杂志页面一样规划拼贴,再规划运镜:
- 主体(hero):始终使用用户的真实照片(绝不让 AI 重绘,因为人脸容易变形)。抠图(步骤 3),再由页面中的代码印刷成半色调效果。
- 背景底板(plate):一张铺满画面的 9:16 纸艺场景,用来交代地点与时间(天空、城市、地图、桌面、一张做旧纸张)。
- 3 至 6 个剪纸(cut-out):故事中的物件(纪念碑、报纸、钞票、汽车、建筑物、云朵、鸟)。每个物件都独立成层,因此可以单独运动。
- 运镜(moves)(6 至 15 秒):摄影机全程缓慢推进,图层每隔 0.5 至 1.5 秒依次进入(滑入、从下方升起、从上方落下、撕纸转场),同时让某个元素持续活动(云朵飘动、由两片剪纸构成的鸟拍动翅膀、纸片落下)。如果创意中有标题,就在一条撕纸上放置一个标题(地点和年份、人名)。全部采用 12 fps 的定格动画时钟。
以编号列表展示各个图层(名称、底板或剪纸、内容),并用 4 至 6 行列出节拍时间线。等待用户确认:方案中的每个图层都对应一张由 Codex 生成的图像。
3. Their photo: cut out, never redrawn
3. 用户的照片:抠图,绝不重绘
bash
mkdir -p <dir>/layers <dir>/raw
cp "<their photo>" <dir>/photo.jpg
uvx --from "rembg[cpu,cli]" rembg i <dir>/photo.jpg <dir>/layers/hero.pnguvxcurl -LsSf https://astral.sh/uv/install.sh | shpip install uv- Cut-out bad or no uv: keep the photo as a rectangular print instead, it is very Vox too: placed as a print with a white border and torn edges (see
layers/hero.jpg, "The photo as a print").references/animation.md - A person who never had a photo (Napoleon, a painting): an engraving or painting from the public domain (Wikimedia Commons), cut out the same way.
- Only photos of people who agreed, or public-domain images. Say it once if they send someone else's photo.
The halftone, the white scissor border and the shadow are added by the page (), so the real photo stays the real photo.
references/animation.mdbash
mkdir -p <dir>/layers <dir>/raw
cp "<their photo>" <dir>/photo.jpg
uvx --from "rembg[cpu,cli]" rembg i <dir>/photo.jpg <dir>/layers/hero.pnguvxcurl -LsSf https://astral.sh/uv/install.sh | shpip install uv- 抠图效果差或没有 uv:将照片保留为矩形印刷图,这同样很有 Vox 风格:把 作为带白色边框和撕边的印刷照片放入页面(参见
layers/hero.jpg中的“The photo as a print”)。references/animation.md - 没有照片可用的人物(如拿破仑)或绘画作品:使用 public domain 的版画或绘画(Wikimedia Commons),并采用相同方式抠图。
- 仅使用获得当事人同意的照片或 public domain 图像。如果用户发来他人照片,提醒一次即可。
半色调、白色剪刀边缘和阴影均由页面添加(),因此真实照片始终保持原样。
references/animation.md4. The layers with Codex
4. 使用 Codex 制作图层
Write and build every prompt with : the subject, plus the green-screen sentence for a cut-out, plus the style sentence. Never the word "Vox" in a prompt, never a logo, a wordmark or any readable text in an image (newspapers and notes get illegible type texture only).
<dir>/shots.jsonreferences/look.mdRun the jobs with the command of , 3 at a time in the background, always ending with . A job takes 1 to 3 minutes. Then for each cut-out, the chroma cut:
references/look.md< /dev/nullbash
ffmpeg -v error -y -i <dir>/raw/<name>.png -vf "colorkey=0x00FF00:0.30:0.10,despill=type=green:mix=0.6:expand=0,format=rgba" <dir>/layers/<name>.pngCheck each layer by eye: put it on red to see any green fringe (), and no text or letters in it. A bad one: fix the subject and run that one again.
ffmpeg -v error -y -f lavfi -i color=red:s=1024x1536 -i <layer> -filter_complex "[1:v]scale=1024:-1[a];[0:v][a]overlay=0:0" -frames:v 1 <dir>/raw/check-<name>.png编写 ,并使用 构建每个提示词:主体、用于剪纸的绿幕句子、风格句子。提示词中绝不能出现“Vox”一词,图像中绝不能出现 logo、wordmark 或任何可读文字(报纸和便笺只能带不可辨识的排版纹理)。
<dir>/shots.jsonreferences/look.md使用 中的命令运行任务,每次在后台运行 3 个,命令末尾始终带上 。每个任务需要 1 至 3 分钟。随后对每个剪纸图层执行色度抠图:
references/look.md< /dev/nullbash
ffmpeg -v error -y -i <dir>/raw/<name>.png -vf "colorkey=0x00FF00:0.30:0.10,despill=type=green:mix=0.6:expand=0,format=rgba" <dir>/layers/<name>.png逐个目视检查图层:将图层放在红色背景上,查看是否存在绿色边缘(),并确认其中没有文字或字母。若效果不佳:修正主体,并且只重新运行该图层。
ffmpeg -v error -y -f lavfi -i color=red:s=1024x1536 -i <layer> -filter_complex "[1:v]scale=1024:-1[a];[0:v][a]overlay=0:0" -frames:v 1 <dir>/raw/check-<name>.png5. The animation page
5. 动画页面
Write from the template of (the whole page is there, tested) and adapt it to the plan: the layers, their sizes and places, the timeline in . The rules that make it look like a Vox documentary are in the same file. Keep a pure function of : the capture calls it frame by frame.
<dir>/animation.htmlreferences/animation.mdsetTsetT(t)tOpen it in their browser to preview (it plays on its own): (macOS), (Linux), (Windows). Fix what looks wrong before the capture.
open <dir>/animation.htmlxdg-openstart根据 中的模板编写 (模板中包含完整且经过测试的页面),并按照方案调整图层、尺寸、位置以及 中的时间线。让页面呈现 Vox 纪录片风格的规则也位于同一个文件中。保持 为关于 的纯函数:录制程序会逐帧调用它。
references/animation.md<dir>/animation.htmlsetTsetT(t)t在用户的浏览器中打开预览(页面会自动播放):macOS 使用 ,Linux 使用 ,Windows 使用 。录制前修复所有看起来不正确的部分。
open <dir>/animation.htmlxdg-openstart6. The MP4
6. MP4
Write from , then:
<dir>/capture.mjsreferences/animation.mdbash
cd <dir> && node capture.mjs animation.html <slug>.mp4About 4 s of work per second of video. Look at 3 frames (start, middle, end) before showing it: . Hand over the MP4 path. Music or a voice go on top in their editor, or with .
ffmpeg -v error -y -ss <t> -i <slug>.mp4 -frames:v 1 -vf scale=540:-1 raw/frame-<t>.jpg/short-editing根据 编写 ,然后运行:
references/animation.md<dir>/capture.mjsbash
cd <dir> && node capture.mjs animation.html <slug>.mp4生成每 1 秒视频大约需要 4 秒处理时间。展示前检查开头、中间和结尾 3 帧:。交付 MP4 的路径。音乐或配音可以在用户的编辑器中叠加,也可以使用 。
ffmpeg -v error -y -ss <t> -i <slug>.mp4 -frames:v 1 -vf scale=540:-1 raw/frame-<t>.jpg/short-editing7. Change it with one more prompt
7. 再用一句提示修改
Same , same page, only what changes:
<dir>- Another person ("do it with Napoleon"): a new hero (step 3), same layers, same timeline: the page swaps and is captured again.
layers/hero.png - Another object or place: one new Codex layer (step 4), placed in the page, the rest stays.
- Another move or timing: only . Another format: see "Formats" in
setT.references/animation.md
Never regenerate layers that did not change.
继续使用同一个 和同一个页面,只修改发生变化的部分:
<dir>- 换一个人(“do it with Napoleon”):使用新的主体(步骤 3),其余图层和时间线保持不变;页面替换 ,然后重新录制。
layers/hero.png - 换物件或地点:只新增一个 Codex 图层(步骤 4)并放入页面,其余内容保持不变。
- 更换运镜或时间安排:只修改 。其他格式参见
setT中的“Formats”。references/animation.md
绝不重新生成未发生变化的图层。
Honest limits
实际限制
- Codex's image tool decides the details: a layer can come with letters on it or a green fringe. Always look.
- The cut-out of a busy photo can miss hair or fingers: the print version is the safe fallback.
- Each layer counts against their ChatGPT plan's Codex limits.
- The look is inspired by Vox's documentaries: never their name, logo or wordmark on screen.
- Codex 的图像工具会决定具体细节:生成的图层可能带有字母或绿色边缘,因此务必目视检查。
- 复杂照片的抠图可能漏掉头发或手指;印刷照片版本是可靠的后备方案。
- 每个图层都会占用用户 ChatGPT 方案中的 Codex 使用额度。
- 视觉风格仅受 Vox 纪录片启发:画面中绝不能出现其名称、logo 或 wordmark。