color-motion
This skill should be used when the user asks to "build a color palette for a motion piece", "make a gradient background", "animate a color transition", "interpolate colors smoothly", "fix muddy/gray gradients", "convert colors to OKLCH", "color-grade a video for mood", "fix washed-out After Effects renders", "gamma shift", "Rec.709 vs sRGB", "colors shifted after rendering", or "match preview to final video". Covers palette construction, gradients, perceptual interpolation (OKLCH/Lab), grading order, and video/render color management.
1How It Works & Mechanism
Palettes substitute quantitative discipline for taste debates: 1 primary + 1 accent + 2-3 neutrals; contrast and hierarchy rely on lightness/chroma rather than piling on hues.
Limit hues. A strong motion palette is **1 primary + 1 accent + 2-3 neutrals**.
Interpolation must occur in a perceptually uniform space (OKLCH/OKLab/Lab)—linear interpolation in sRGB drops the midpoint into gray/muddy tones.
Linearly interpolating two colors in sRGB passes through a desaturated, often gray or muddy midpoint (blue->yellow goes through gray; blue->red through muddy purple).
A "premium" gradient is a recipe rather than inspiration: multi-radial stacking + grain + 8-20s slow drift.
- **Animate slowly**: drift gradient positions over 8-20s with `ease-in-out alternate`. Slow is premium; fast gradient motion looks like a screensaver.
For colors to truly tween rather than snap-jump, they must be registered with @property (unregistered CSS custom properties exhibit discrete jumps).
`@property` registration is what makes the color actually interpolate (unregistered custom properties jump instantly).
Color grading is a sequential pipeline: exposure/white balance → contrast → midtones/saturation → split toning → global balance; changing the sequence changes the result.
Apply grading operations in this order; reordering changes the result:
Render color management attributes "looks right in preview, washed out on export" to a four-stage gamma mismatch (working space, embedded tag, player interpretation, system display), rather than image content issues.
the cause is a gamma/transfer mismatch across four stages — AE working space, the render's embedded tag, the player's interpretation, and the display/OS gamma — not the artwork.
The validation environment must avoid QuickTime: defer to Chrome/Premiere/Resolve as ground truth.
**Never grade or approve to QuickTime** — Chrome, Premiere, or Resolve is the correct reference for web delivery.
The delivery loop is "single-file HTML + frozen frame screenshots": ?t=N pins the animation at a specific second using negative delays, allowing frame-by-frame inspection of banding and muddy midpoints for iterative refinement.
**Verify loop — render → freeze → screenshot → check:**
2Core Capabilities
3External Dependencies
| Kind | Dependency / Endpoint |
|---|---|
| cli | npx playwright screenshot(冻结帧截图,验收回路唯一命令) |
| cli | 打包助手 scripts/seek-shot.sh 与 scripts/contact-sheet.sh(仓库根,不在本 skill 目录;内部同样走 playwright 截帧 + ffmpeg 拼图) |
| package | culori(感知插值示例与色相路径控制) |
| package | d3-interpolate / d3-scale-chromatic(Lab/HCL 插值与色阶量化) |
| network | 交付 HTML 的可选 CDN 引用(仅当需要 JS 插值库时才引;属产物期由浏览器加载) |
| cli | ffprobe / ffmpeg(校验内嵌色彩标签 color_primaries / color_transfer / color_space) |
4Recommended Governance & Evidence
- scripts/: Executes local script or command: npx playwright screenshot --wait-for-timeout=500 "file://$PWD/color.html?t=
- 网络端点: Declares external network access: npx package resolution: fetches the playwright package from the npm registry if not installed (and downloads the Chromium binary on first run)
- 本地工作目录: File I/O and artifact output: Screenshot files such as frame-mid.png / frame-0.png written to current working directory (emitted by playwright, not skill code).
5Second-Pass Verification
- [ok] npx playwright 是否真的写在 SKILL.md(橙档关键证据) — SKILL.md 的 Verify loop 步骤 4 之后给出该命令原文(含 --wait-for-timeout=500 与 file://$PWD/color.html?t=8);同段第 3 步要求检查 banding 与浑浊中点。命令是验收回路的组成部分,不是可选项。
- [discrepancy] 正文引用的 scripts/ 助手是否随本 skill 目录分发 — SKILL.md 写「**Packaged helper** (`scripts/`)」,但 pin 目录下 skills/color-motion/ 只有 SKILL.md、references/、0 字节 README —— `scripts/` 实际在**仓库根**(scripts/README.md 自述为 verify-loop toolkit)。因此只装单个 skill 目录的镜像包里该引用悬空;同名写法也出现在 logo-animation、motion-background、remotion-video。对 pin commit 有效,属真实出入。
- [ok] 是否有其他隐藏的执行路径(下载/接口调用) — 全目录搜 curl/wget/fetch/XMLHttpRequest/api/child_process/process.env:零命中;唯一网络相关字符串是 npx 与交付 HTML 的 CDN 说明。
- [ok] culori / d3-interpolate 是否只是代码示例而非被执行的依赖 — 两处 import 均在 references/palettes-and-interpolation.md 的 Perceptual interpolation in code 小节内,作为给实现者抄的片段;skill 无 package.json、无安装步骤、不解析这些模块。
- [unlocatable] 颜色管理结论(QuickTime gamma、四段链路)是否可在源码内验证 — 这些是有明确立场的技术断言,但 pin 仓库内没有引用来源、没有测量脚本或样本文件;本次只读侦查也不运行渲染。文中给出的自证方法(50% 灰补丁回读、ffprobe 查 tag)用户可自行复现,故不视为空口断言,但数值本身未在本次核对。
- [ok] iart.ai 链接的性质 — reference 页脚为署名/营销链接(utm_source=github&utm_content=skill_footer),无跟踪脚本、不参与执行。
6Verdict & Scenarios
cb1e39e4a0e5b855…