实验场 · 像素动画
像素巫师(复刻)
X 上刷屏的那只像素巫师,原作者把提示词公开了[1]。我们照着它让 AI 复刻了一遍,只改了一处,让它能一帧一帧拍成视频。
怎么让 AI 做出来的
原作者把提示词公开了,我们原样交给 AI。这段提示词好就好在把「要什么样子」说得特别细:小画面、固定的几种颜色、巫师的动作分成蓄力、施法、收招几段、火花怎么聚拢又怎么炸开。
我们只多加了一句话,让它能一帧一帧导出来拍成视频。第一版复刻的巫师像几块三角形拼的,跟原作差得远;我们跟 AI 说「照原作那样画出明暗,加上轮廓光和施法时的闪光」,第二版才像样。
提示词
原提示词(中文翻译来自 xilo[2]),丢给 AI 就是一个会动的网页:
创建一个独立的单 HTML 文件,用原生 JavaScript 和 Canvas 2D 渲染一个正在施法的像素风巫师动画。不使用任何外部素材、库或网络请求。 渲染 - 所有内容先画在一块逻辑分辨率固定为 128×96 的离屏画布上,再按能放进窗口的最大整数倍放大,画到全屏的显示画布上,居中,设置 imageSmoothingEnabled = false 和 CSS image-rendering: pixelated。 - 所有绘制都对齐到逻辑画布的整数坐标。不要亚像素位置、抗锯齿、渐变和 shadowBlur。 - 固定调色板,大约 24 个颜色:夜空用深蓝和深紫,长袍用暖色,再加 3–4 个明亮的魔法色。每一个像素都必须来自这个调色板。 角色 - 用填充矩形和一串串像素程序化地搭出巫师,大约 24×32 个逻辑像素:带弯折的尖顶帽、长胡子、双色长袍加深色描边、杖头有宝石的法杖。 - 把姿势做成参数(法杖角度、手臂抬起高度、头部倾斜、长袍摆动)。参数平滑变化,但每一帧都量化到像素网格上,这样虽然循环以 60fps 运行,动作看起来却像每秒 8–12 张的像素动画。 动画 - 循环状态机:待机(两帧上下晃动、胡子摆动)→ 蓄力(法杖举起、宝石闪烁、火花螺旋着向内聚拢)→ 施法(一道强光爆发,飞弹横穿画面,屏幕震动 1–2 像素)→ 收招(回到原位)。关键帧之间的姿势参数用缓动过渡。 - 粒子系统预先分配好、循环复用,不产生新对象。蓄力时火花围着宝石转,施法时向外炸开,每个粒子消失前从白色经过魔法色变成深色。画粒子时位置对齐到像素网格。 - 用固定的 60Hz 时间步长更新,用 requestAnimationFrame 渲染。循环里不产生任何新对象。 场景 - 极简背景:深色夜空、几颗闪烁的 1 像素星星、月亮、石头地面。角色的剪影必须清晰可辨。 - 宝石给巫师打一圈 1 像素的轮廓光,蓄力和施法时变亮。 质量标准 - 任何窗口大小下像素都清晰,无缝循环,稳定 60fps,剪影清楚。看起来要像一段精致的 16-bit 游戏角色动画,而不是缩小了的矢量图形。
想拍成视频,再在最后加上这一句:
不要用 requestAnimationFrame 实时播放。改成暴露 window.render(t),画面只由时间 t 决定(随机数带固定种子,帧与帧之间不保存状态),我要用 Playwright 逐帧截图拍成视频。
成品
引用
- 像素巫师原作和原提示词:@majidmanzarpour,x.com/majidmanzarpour/status/2102476258948927543
- 原提示词的中文翻译:xilo(@xilo2991)的《零基础入门 Opus 5.5 做视频》,x.com/xilo2991/status/2104912748794589515

