Kākāpō Party将Claude生成的像素艺术变成演示视频
Simon Willison··作者 Simon Willison
关键信息
这个动画会响应点击并触发彩纸效果,因此视频生成脚本等待3秒后,再在画布的多个位置分散点击,最终录制出1280×720的视频。该成果依赖Claude生成的代码、浏览器自动化和原始交互页面,因此更像是创意展示,而不是全新的动画系统。
资讯摘要
Simon Willison在WeAreDevelopers World Congress North America的闭幕主题演讲中展示了Kākāpō Party。他希望最后一页能够庆祝新西兰在2026年创下纪录的鸮鹦鹉繁殖季。看到人们讨论Claude Opus 5.5制作像素艺术动画的能力后,他向Claude提供了三张鸮鹦鹉照片,作为外观参考。他在提示词中要求制作一个运行于HTML5画布的动画,让明显具有像素风格的鸮鹦鹉上下跳动、举办派对并产生彩纸效果,而且数量至少达到20只。
Claude生成了这个交互式页面,Willison随后将其发布为Kākāpō Party工具,并认为效果相当不错。由于他想把结果嵌入Keynote演示文稿,他下载了HTML文件,并让本地Claude Code会话为其制作视频。Claude Code使用Playwright打开页面,等待3秒后在多个位置点击以激活彩纸效果,最终生成了适合结束页使用的15秒视频。

资讯正文
工具:Kākāpō Party
昨天,我为 WeAreDevelopers World Congress North America 做了闭幕主题演讲。按照我对“STAR 时刻”的定义,我决定在演讲中穿插一些我们在 2026 年迎来的、创下纪录的鸮鹦鹉繁殖季的内容。
我想用最后一张幻灯片来庆祝这件事,而且我也看到了一些关于 Claude Opus 5.5 制作像素艺术动画能力有多出色的讨论。于是,我从 Google 图片搜索中找了三张鸮鹦鹉的照片,把它们放进 Claude,并附上了这段提示词:
```text
这是几张鸮鹦鹉的照片,只是为了提醒你它们长什么样
我需要你在 HTML 5 canvas 上制作一个动画,采用明显的像素艺术风格:让至少 20 只像素艺术鸮鹦鹉上下跳跃、开派对,并加入彩纸屑之类的效果
```
这是对话记录,生成的页面则在这里。效果相当不错!
我想把它嵌入 Keynote 演示文稿文件中,于是我下载了 HTML 文件,并告诉本地运行的 Claude Code:
```text
把 file:///Users/simon/Downloads/kakapo-party.html 制作成一段视频——你需要在浏览器中加载它,并点击几次以获得彩纸屑效果;视频应为 15 秒长
不要在开始后的 3 秒内点击
确保多次点击分散在可点击区域的不同位置
```
Claude Code 使用了 Playwright,并生成了这段视频,正好满足我最后一张幻灯片的需要:
我使用的完整 Playwright 脚本如下,短得令人满意:
```python
# /// script
# dependencies = ["playwright"]
# ///
import time
from playwright.sync_api import sync_playwright
W, H = 1280, 720
```
# Canvas 填充整个视口;将点击分散到四角、边缘和中心
clicks = [
(3.0, 640, 360), # 中心
(4.2, 160, 120), # 左上
(5.4, 1120, 120), # 右上
(6.6, 180, 600), # 左下
(7.8, 1100, 600), # 右下
(9.0, 640, 100), # 顶部中心
(10.0, 380, 380), # 左中
(11.0, 900, 380), # 右中
(12.2, 640, 620), # 底部中心
(13.2, 640, 300), # 最终中心
with sync_playwright() as p:
b = p.chromium.launch()
ctx = b.new_context(viewport={"width":W,"height":H}, record_video_dir="vids", record_video_size={"width":W,"height":H})
page = ctx.new_page()
t0 = time.time()
page.goto("file:///Users/simon/Downloads/kakapo-party.html")
for t,x,y in clicks:
time.sleep(max(0, t-(time.time()-t0)))
page.mouse.click(x,y)
time.sleep(max(0, 16.0-(time.time()-t0)))
ctx.close(); b.close()
来源与参考
收录于 2026-09-28