ai21.net
语言

Analyze http://sprites.ai and build a product promo from o…

演示视频

Analyze http://sprites.ai and build a product promo from o… — 1

提示词

Analyze http://sprites.ai and build a product promo from our own UI, not generic components.

<direction>
Dribbble-level UI motion. One shape, never cut: every state is the same element morphing its size, radius and color while its content swaps with a short blur. A cursor drives every change with real clicks and drags. Warm-gray canvas, black and white components, one accent (#FD9543), Geist. Springs everywhere, a tiny overshoot at most. The camera zooms so each state fills the frame. Last frame = first frame, so it loops.
Banned: bouncy easing, particles, glows, gradients on UI chrome, mismatched icon strokes, dead time, anything that looks like a template.
</direction>

<structure>
120 BPM, 7 bars, something on every beat.
Connect ad account (Meta, Google, LinkedIn, TikTok, Reddit logos) → loader → check → prompt bar types "Launch ads that convert" → island "Researching 42 competitors" → Ads Library wall of real ads scrolls and lands on a top performer → approval card → Approve & launch → budget slider that stretches past max → Autopilot toggle → knob becomes a liquid tab indicator across channels → ROAS chart draws itself with hover tooltip → ⌘K → type "pause" → toast "Paused 3 losing ads" → back to the button.
</structure>

<build>
1. One HTML file, 1440x1440. Every style is computed inside seek(t): no CSS transitions, no timers, no state between frames.
2. Springs are closed-form step responses. A value that changes target many times is a sum of springs, so it stays a pure function of time.
3. Tab indicator and toggle knob: the two edges ride different springs, so the leading edge stretches ahead.
4. Drags are direct manipulation: while held, the value follows the cursor. On release it springs back from wherever it was.
5. No music. Synthesize UI sounds with numpy and place each one by its measured peak on the beat grid.
6. Render with Playwright: 4 subframes per frame, blended with ffmpeg tmix for motion blur at 60fps.
7. Render one frame per beat first. Fix anything off-grid, cramped or hard to read.
</build>

<gotchas>
No will-change on anything the camera scales. Swapped text needs its own enter/exit timing. Match the last frame to the first, cursor position and speed included, or the loop stutters.
</gotchas>

Show me the state list on the beat grid before writing any code.

中文译文

分析 http://sprites.ai,并用我们自己的 UI,而不是通用组件,来构建一支产品宣传片。

<direction>
Dribbble 水准的 UI 动效。一个形状,绝不剪切:每个状态都是同一个元素在改变其尺寸、圆角和颜色,同时其内容以短暂的模糊切换。一个光标通过真实的点击和拖拽驱动每一次变化。暖灰色画布,黑白组件,一个强调色(#FD9543),Geist。处处弹簧,至多只有极小的过冲。镜头缩放,让每个状态填满画面。最后一帧 = 第一帧,从而形成循环。
禁止:弹跳式缓动、粒子、辉光、UI 外框上的渐变、不匹配的图标描边、死时间、任何看起来像模板的东西。
</direction>

<structure>
120 BPM,7 小节,每一拍都有内容。
连接广告账户(Meta、Google、LinkedIn、TikTok、Reddit 标志)→ 加载器 → 对勾 → 提示栏输入“Launch ads that convert” → 灵动岛显示“Researching 42 competitors” → 广告库中真实广告的墙滚动并停在一条高表现广告上 → 审批卡片 → Approve & launch → 预算滑块拉伸超过最大值 → Autopilot 开关 → 旋钮变成横跨各渠道的液态标签指示器 → ROAS 图表自行绘制并带悬停提示 → ⌘K → 输入“pause” → 提示条“Paused 3 losing ads” → 回到按钮。
</structure>

<build>
1. 一个 HTML 文件,1440x1440。所有样式都在 seek(t) 内部计算:没有 CSS 过渡,没有计时器,帧与帧之间没有状态。
2. 弹簧是闭式阶跃响应。一个多次改变目标值的量是多个弹簧之和,因此它仍然是时间的纯函数。
3. 标签指示器和开关旋钮:两条边缘各自由不同的弹簧驱动,所以前缘会向前伸展。
4. 拖拽是直接操作:按住时,数值跟随光标。松开后,它从当时所在的位置弹回。
5. 没有音乐。用 numpy 合成 UI 音效,并按每个音效测得的峰值把它放到节拍网格上。
6. 用 Playwright 渲染:每帧 4 个子帧,用 ffmpeg tmix 混合,以实现 60fps 的运动模糊。
7. 先每个节拍渲染一帧。修正任何偏离网格、拥挤或难以辨认的地方。
</build>

<gotchas>
不要在镜头会缩放的东西上使用 will-change。被替换的文字需要有自己的进入/退出时序。让最后一帧与第一帧一致,包括光标位置和速度,否则循环会卡顿。
</gotchas>

在写任何代码之前,先把状态列表放到节拍网格上给我看。

溯源

原作者
AnnaCher___
发布日期
2026-09-25(由推文 ID 反解)
原始出处
查看原帖 ↗
收录来源
yihui-dev/awesome-opus5-5-videos · annacher-433425 · MIT