Emil Kowalski的动画Skill:43k Star,让AI写出不廉价的动效

Emil Kowalski的动画Skill:43k Star,让AI写出不廉价的动效

Emil Kowalski 这个名字,玩前端动效的人应该都眼熟:以前在 Vercel 和 Linear 做设计工程,写了一堆关于动画的经典文章,animations.dev 也是他的。今年他把自己那套东西打包成了一组 Agent Skill,开源在 github.com/emilkowalski/skills,43k star,MIT 协议。一句话:让 AI 不再给你写出“会动但很廉价”的动画。

先说结论:AI 写的动画为什么看着廉价

AI 生成动效有几个通病:上来就是 transition: all 300ms ease,下拉菜单从 scale(0) 凭空长出来,popover 永远从正中心放大,键盘操作也要加个 400ms 的过渡。单个看都没毛病,凑一起就是一股子“样板间”味。Emil 这组 skill 本质上是把他多年攒的“什么能忍、什么不能忍”写成了 AI 读得懂的规则。

核心规则,每一条都值得抄作业

主 skill emil-design-eng 里有个“动画决策框架”,顺序是这样的:先问该不该动——一天会被看到 100 次以上的东西(比如命令面板开关),永远不加动画;键盘触发的操作也不加,加了只会觉得迟钝。

决定要动,再按这个走:进场退场用 ease-out(起手快才跟手),屏内位移用 ease-in-out,悬停变色用 ease,匀速运动(跑马灯、进度条)用 linear。UI 动画里禁用 ease-in,起步那一下的延迟,正好卡在用户盯得最紧的时刻,体感就是“肉”。

还有几个具体的数:CSS 自带的缓动曲线一律否决,太弱,换成 cubic-bezier(0.23, 1, 0.32, 1) 这种有冲劲的;UI 动画时长压在 300ms 以内,180ms 的下拉看着比 400ms 的利落;元素出现别从 scale(0) 开始,从 scale(0.95)+opacity 0 开始——现实里没有东西是凭空变出来的;按钮必须有 :active 的按压缩放,不然像没点到。

不止“写”,还有“审”和“找”

这个仓库是成套的,分工很细:

animate 负责从零写一个动画,曲线时长属性中断退出全包;review-animations 负责挑刺,输出强制是 Before / After / Why 三列表格,不许写散文;improve-animations 是全库审计,扫一遍代码库按优先级列出整改计划,agent 照着执行就行;find-animation-opportunities 反过来,帮你找“这里值得加个动效”,同时告诉你哪里别加。

还有两个偏门但实用的:animation-vocabulary 教你用准确的词跟 AI 描述想要的效果(“springy”“snappy”这种词能显著改变输出);apple-design 把苹果 WWDC 设计 talk 里的动效原则翻译成了 web 版。另外 animate-expo 管 React Native,pick-ui-library 帮你选库(省得 AI 手搓一个 toast 或者装个三年没维护的包),prototype 一次出多个版本带切换器对比。

怎么装

npx skills@latest add emilkowalski/skills

Claude Code、Codex、Cursor 通吃。装完直接让 agent 干活就行,写动画、审动画、扫全库,各有各的入口。作者还有个配套课程 aiforui.dev,skill 是免费版,课程里那套更全,不差钱可以去看看。

跟 taste-skill 怎么选

之前介绍过 taste-skill(给 AI 装审美那个),这两个经常被一起提起。简单区分:taste-skill 管的是静态审美(布局、字排、配色、动效方向),emilkowalski 这套管的是动态手感(曲线、时长、中断、审查)。做 landing page 两个都装,一个负责好看,一个负责好摸,不冲突。

说到底,这类 skill 火的原因都一样:AI 写代码的下限已经很高了,现在拼的是品味和细节这种“最后一公里”。而品味这东西,恰好是可以被写成规则、装进 skill 的。Emil 干的就是把自己脑子里的 checklists 开源出来——43k star 说明,被廉价动画折磨的不只你一个。