AI PROMPT · 111
Nightshift 产品发布视频
<inputs> 请向我询问以下内容:我的产品名称(一个小写单词,它将变成一个带句点的黑色文字标识)、用户睡前交给它的唯一任务、它到早上报告的三个结果、同一地点夜晚和白天的两张照片(对齐,以便交叉淡化呈现出真实的日出效果)、一张位于标识外的阳光明媚的白天照片,以及一首开头附近有强烈节拍的歌曲。如果我跳过任何一项,请使用默认值:"nightshift", "本周预订 10 个销售电话", 找到 200 条线索 / 发送 200 封邮件 / 预订 10 个电话。 </inputs> <direction> 一段 24 秒的方形产品发布视频,分辨率为 1440x1440,帧率为 60fps,仅限 2D,采用可循环的单镜头连续拍摄。整个视频发生在文字标识的句点内部。外部是白天(阳光照片位于黑色文字标识后方)。内部是 iOS 风格玻璃面板下的夜景照片(每个面板后方的模糊照片、色调、边缘光)。没有任何剪辑:每个场景都从上一个场景中生长出来,形状变形,圆点飞行,颜色在泛光下变化。每个变形都以 cubic-bezier(.45,0,.15,1) 曲线平滑滑行 0.8s,相机变焦也遵循相同的曲线。Geist 字体,真实的 macOS 指针,阴影随每个形状的高度增长而变大。 禁止事项:代码生成的平面或渐变背景、相机变焦进入微小点、硬切、场景间的交叉淡化、弹跳弹簧效果、粒子、发光、超过 1s 的静止画面、裁剪的文字。 </direction> <structure> 节拍由歌曲决定。当第一个药丸状元素出现时,歌曲在其强节拍处进入。 开场:字母滑入句点并消失其中,同时句点滑动到中间。句点像光圈一样打开,露出内部的夜景,然后 "you log off at 6",接着 "[product] doesn't",通过遮罩行在夜景照片上滚动显示。 提问:一个玻璃质感的 "Ask [product]" 药丸状元素弹出。光标点击它,它滑动变成输入框,任务被打字出来。 查找:发送操作将输入框缩小为一个点,该点涟漪扩散成 23x15 的网格。扫描线扫过网格,200 个点亮起,计数器开始计数。 撰写:亮起的点涌入一个玻璃质感的电子邮件编辑器。第二个紫色光标标记为 "[product]",打出一个个性化的开场白并按下 Send,计数器运行至 200/200。 夜晚:编辑器变成一个带有进度环的玻璃球体。时钟芯片依次切换 11:42 PM, 3:17 AM, 5:02 AM, 6:59 AM,同时天空从夜晚重新点亮至黎明,"while you sleep" 滚动进入。 结果(第 20 拍):球体变黑并像粘液一样分裂成三个结果药丸状元素。对勾以绿色弹出。 早晨:药丸状元素合并成一个动态岛,随后扩展成手机锁屏界面:白天照片、日期、巨大的 7:00,边框从屏幕边缘生长出来。三个玻璃质感的通知堆叠进入,光标点击第一个,它以 iOS 风格打开。 证明:一周日历(10 个会议弹出,悬停显示其中一个的时间),然后是管道图表($48,200 计数上升,线条绘制,悬停跟随线条)。从线条末端发出的黑色泛光变成 "Start your night shift →",光标点击它。 结尾:按钮缩小为一个点,整个场景像光圈一样关闭进入该点,字母从句点中滑回。标语升起。最后一帧 = 第一帧。 </structure> <build> 1. 一个 HTML canvas。所有内容都是 seek(t) 内时间的纯函数;没有计时器,帧之间没有状态。 2. 一个元素通过表格中的节拍时间在所有状态(大小、半径、颜色、材质)间变形,因此调整时间只需一次编辑。 3. 将内部世界渲染到一个离屏 canvas 中,并通过句点以圆形遮罩揭示它。永远不要将相机变焦进入该点。 4. 玻璃效果:预模糊的照片副本裁剪到形状,然后添加色调和渐变边缘。 5. 粘液效果:在离屏图层上使用模糊 + alpha 阈值来实现分裂和合并。 6. 声音:为每个事件下载 SFX,并根据其测量峰值放置。歌曲在其强节拍处进入。响度标准化至 -14 LUFS。 7. 使用 Playwright 以 60fps 渲染,包含 4 个运动模糊子帧。扫描每一帧以查找单帧跳跃并逐一修复。 </build> <gotchas> 相机变焦进入非中心点会导致横向摆动和尖峰,因此应打开该点而不是变焦进入。闭合的光圈应按面积而非半径进行缓动,否则其前几帧会跳跃。设置 globalAlpha 的辅助函数必须恢复调用者的值,否则淡出的卡片会突然显现。计数器读取的是帧的时间,而不是子帧的时间,否则数字会出现拖影。 </gotchas> <start> 向我询问输入内容,然后在渲染之前展示给我节拍映射表和 6 张静帧图(开场、查找、撰写、结果、手机、结尾)。 </start>

VIDEO PREVIEW
视频预览
PROMPT
<inputs>
Ask me for: my product's name ({argument name="product_name" default="nightshift"}) (one lowercase word, it becomes a black wordmark with a period), the one job a user hands it before bed ({argument name="user_job" default="book 10 sales calls this week"}), the three results it reports by morning ({argument name="results" default="200 leads found / 200 emails sent / 10 calls booked"}), two photos of the same place at night and by day (aligned, so a crossfade reads as a real sunrise), one sunny daytime photo for outside the logo, and a song with a big hit near its start. If I skip any, use the defaults.
</inputs> <direction>
A 24 second square product launch video, 1440x1440 at 60fps, 2D only, one continuous take that loops. The whole video happens inside the period of the wordmark. Outside it's daytime (the sunny photo behind a black wordmark). Inside it's the night photo under iOS-style glass panels (the blurred photo behind each panel, a tint, a rim light). Nothing cuts: every scene grows out of the last, shapes morph, dots fly, colours change under floods. Every morph glides 0.8s on cubic-bezier(.45,0,.15,1) and the camera zoom rides the same curve. Geist, the real macOS pointer, soft shadows that grow with each shape's height.
Banned: flat or gradient backgrounds made in code, camera zooms into tiny points, hard cuts, crossfades between scenes, bouncy springs, particles, glows, holds longer than 1s, cropped type.
</direction> <structure>
Beats are the song's. The song enters on its big hit as the first pill appears.
Open: the letters slide into the period and vanish into it while it glides to the middle. The period opens like an iris onto the night inside it, and "you log off at 6", then "{argument name="product_name_en" default="[product]"} doesn't", roll through one mask line over the night photo.
Ask: a glass "Ask {argument name="product_name_en" default="[product]"}" pill springs in. The cursor clicks it, it glides into an input and the job types out.
Find: send shrinks the input to a dot that ripples into a 23x15 grid. A scan line sweeps it, 200 dots light up and a counter counts them.
Write: the lit dots pour into a glass email composer. A second, purple cursor labelled "{argument name="product_name_en" default="[product]"}" types a personal opener and presses Send, and the counter runs to 200/200.
Night: the composer becomes a glass orb with a progress ring. A clock chip swaps 11:42 PM, 3:17 AM, 5:02 AM, 6:59 AM while the sky relights from night to dawn and "while you sleep" rolls in.
Results (beat 20): the orb turns black and goo-splits into the three result pills. The checks pop green.
Morning: the pills merge into a Dynamic Island that grows into a phone lock screen: the day photo, the date, a big 7:00, the bezel growing out of the screen edge. Three glass notifications stack in, and the cursor taps the first, which opens like iOS.
Proof: a week calendar (10 meetings pop in, a hover shows one's time), then a pipeline chart ($48,200 counts up, the line draws, a hover follows it). A black flood from the line's end becomes "Start your night shift →" and the cursor clicks it.
Out: the button shrinks into a dot, the whole scene closes down into it like an iris, and the letters slide back out of the period. The tagline rises. Last frame = first frame.
</structure> <build>
1. One HTML canvas. Everything is a pure function of time inside seek(t): no timers, no state between frames.
2. One element morphs through every state (size, radius, colour, material) from a table of beat times, so retiming is one edit.
3. Render the inside world into an offscreen canvas and reveal it through the period with a circular mask. Never zoom the camera into the dot.
4. Glass: a pre-blurred copy of the photo clipped to the shape, then a tint and a gradient rim.
5. Goo: blur + alpha threshold on an offscreen layer for the split and the merge.
6. Sound: a downloaded SFX for every event, each placed by its measured peak. The song enters on its hit. Loudnorm to -14 LUFS.
7. Render with Playwright at 60fps with 4 motion-blur subframes. Scan every frame for single-frame jumps and fix each one.
</build> <gotchas>
A camera zoom into an off-centre dot swings sideways and spikes, so open the dot instead. Ease a closing iris by area, not radius, or its first frames jump. A helper that sets globalAlpha must restore the caller's, or fading cards pop. Counters read the frame's time, not the subframe's, or the digits smear.
</gotchas> <start>
Ask me for the inputs, then show me the beat map and 6 stills (open, find, write, results, phone, out) before you render.
</start>