Agent Skillsnodetool-ai/nodetool › color-motion

color-motion

GitHub

指导在时间轴上构建调色板、设置形状与文本颜色,以及通过动画化色彩等级通道实现颜色动态变化。用于统一视觉风格、修复画面瑕疵及制作平滑的颜色过渡效果。

packages/system-skills/color-motion/SKILL.md nodetool-ai/nodetool

触发场景

需要为图形或文字选择并应用配色方案 需要在时间轴上创建颜色渐变或动态效果 处理视频画面的色彩校正与风格统一

安装

npx skills add nodetool-ai/nodetool --skill color-motion -g -y
更多选项

非标准路径

npx skills add https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/color-motion -g -y

不安装直接使用

npx skills use nodetool-ai/nodetool@color-motion

指定 Agent (Claude Code)

npx skills add nodetool-ai/nodetool --skill color-motion -a claude-code -g -y

安装 repo 全部 skill

npx skills add nodetool-ai/nodetool --all -g -y

预览 repo 内 skill

npx skills add nodetool-ai/nodetool --list

SKILL.md

Frontmatter
{
    "name": "color-motion",
    "description": "Choose and animate colour on a NodeTool timeline — restrained palettes, gradient fills for shapes and type, the grading order of a clip's effect chain, and which colour channels can actually move. Use when building a look, grading shots so they cut together, animating a colour change, or fixing a frame that reads muddy, washed out or banded. Not for the words or the cut."
}

Colour in Motion → palettes, grades and what can move

Two separate jobs: the colours you author into shapes and type, and the grade you apply over picture. They meet in the animated grade channels, which are the only colour values on a timeline that move.

motion-graphics carries the op contract for the calls named here. motion-direction decides whether colour is one of the channels this piece moves at all.

Build a restrained palette

One primary, one accent, two or three neutrals. Get depth from lightness and chroma, not from more hues — extra hues fight for attention and read as amateur.

Reason in OKLCH while you choose (oklch(L C H): perceptual lightness, chroma, hue angle) because holding L and C while rotating H gives hues of equal visual weight, which HSL cannot do. Then write hex into the document: color, fill and every effect colour are CSS colour strings, and a hex that every surface parses is worth more here than a notation one might not.

On dark plates make the accent pop with high lightness and moderate chroma rather than maximum saturation. A blown-out saturated accent vibrates on black.

Tint the neutrals a little toward the primary hue. Pure grey next to coloured elements reads as disconnected.

Where colour lives

Surface Field
Text textStyle.color, plus stroke.color, shadow.color, background.color
Text, gradient textStyle.fill — wins over color when set
Shape shapeStyle.fill and stroke, or shapeStyle.fillStyle for a gradient
Captions captionStyle.color, activeColor, outline, background
Transition set_transition dipToColor color
Picture set_effectscolor, curves, levels, liftGammaGain

A gradient fill is {type: "linear", angle, stops}, {type: "radial", stops} or {type: "solid", color}. Stop offsets are 0..1, so a fill is independent of the shape's size:

{"op": "add_shape_clip", "shape": {"kind": "rect", "x": 0, "y": 0,
 "width": 1, "height": 1,
 "fillStyle": {"type": "linear", "angle": 90, "stops": [
   {"offset": 0, "color": "#0b0f1a"}, {"offset": 1, "color": "#1b2440"}]}}}

Colour does not tween — the grade does

Nothing on a timeline interpolates one hex to another. textStyle.color and shapeStyle.fill are fixed for the clip's life. Three ways to make colour move, in order of how often they are the right answer:

  1. Animate the grade channels. hue (degrees, adds), saturation (0..4, multiplies), brightness (−1..1, adds), contrast (0..4, multiplies), temperature and tint (−1..1, add) are all animatable properties. A custom curve on saturation from 0 to 1 is a colour bloom; colorFade is that as a preset, and hueShift is a full wheel per loop cycle.
  2. Cross-fade two clips. Two shapes with different fills, overlapping on one track, dissolve between them — the only way to move between two authored colours rather than around the wheel from one.
  3. Re-author the clip. For a look that changes once at a cut, a second clip is cheaper to reason about than any curve.

Interpolating hue by rotation is not the same as interpolating between two colours: hue takes the wheel's path, so blue to amber travels through green unless you go the other way with a negative value.

Grade in order — the chain applies in the order you give it

set_effects replaces the whole chain and applies it in list order, so the list is the grading order. Reordering changes the result.

  1. levels — set the black and white points first.
  2. color with brightness, temperature and tint — exposure and cast.
  3. curves or color contrast — the tonal range.
  4. color saturation and hue — midtone colour.
  5. liftGammaGain — split-tone: lift cools the shadows, gain warms the highlights. Teal shadows and warm highlights is the cinematic default because it flatters skin. Keep it subtle.
  6. vignette, and any glow, last — they bind the frame.

Neutral values are the identity: brightness 0, contrast 1, saturation 1, hue 0, gamma 1, lift [0,0,0], gain [1,1,1]. An effect named with nothing set does nothing rather than being refused.

Grade every shot in a sequence the same way, or they will not cut together. When one shot needs its own correction, correct it toward the others first and apply the shared look after.

Judge the grade from a render, not a preview frame

preview_timeline_frame is a 2D compositor. It maps color and blur onto the canvas filter and has no equivalent for chromaKey, vignette, sharpen, or the temperature and tint fields of a color effect. It names them in effects_not_applied instead of dropping them silently. Motion is unaffected — use frames to judge timing and placement, and render_timeline to judge a look.

unknown_effect means this build cannot apply that type at all and the layer draws ungraded.

Contrast and legibility

validate_timeline reports text_illegible for type under 2.5% of frame height or under a 3:1 contrast ratio against its own background plate or a full-frame shape behind it. The check refuses to guess: a colour it cannot parse, a translucent plate, gradient-filled type or a backdrop it cannot prove is behind the text produces no finding at all. A silent pass is not a pass — look at the frame.

Three fixes, cheapest first: a background scrim on the text style, a stroke under the glyphs, or a shape clip at 40–60% black between the picture and the text. The scrim goes on a track index between them, because the lowest index draws on top.

Banding and muddy midpoints

A wide gradient across a dark frame bands. There is no noise generator on the timeline, so the fixes are: shorten the gradient's span, move the stops closer in lightness, or lay a texture image clip over it at 3–6% opacity with blendMode overlay or soft-light.

A gradient that reads grey in the middle has stops that pass through low chroma. Add a third stop at the midpoint, chosen with its chroma held up, rather than trusting the two-stop path.

Colour as a motion channel

Colour carries the same three-layer ranking motion does. The hero can hold the only saturated accent in the frame while the bed sits desaturated under a color effect at saturation 0.6 — a hierarchy the eye reads before any movement starts. A flash emphasis (a brightness spike) is the loudest colour event available; one per piece.

Before you finish

  • One primary, one accent, two or three neutrals, neutrals tinted toward the primary.
  • Every colour written as hex the document can parse.
  • The effect chain in grading order, and the same look on every shot in the cut.
  • Anything the frame preview cannot draw judged from a render.
  • Text legible over its actual backdrop, checked by looking.

版本历史

  • 9b979bc 当前 2026-09-22 23:28

同 Skill 集合

.agents/skills/ask-matt/SKILL.md
.agents/skills/ast-grep-outline/SKILL.md
.agents/skills/ast-grep/SKILL.md
.agents/skills/code-review/SKILL.md
.agents/skills/codebase-design/SKILL.md
.agents/skills/companion-clis/SKILL.md
.agents/skills/diagnosing-bugs/SKILL.md
.agents/skills/domain-modeling/SKILL.md
.agents/skills/flash/SKILL.md
.agents/skills/grill-with-docs/SKILL.md
.agents/skills/implement/SKILL.md
.agents/skills/improve-codebase-architecture/SKILL.md
.agents/skills/prototype/SKILL.md
.agents/skills/research/SKILL.md
.agents/skills/resolving-merge-conflicts/SKILL.md
.agents/skills/runpodctl/SKILL.md
.agents/skills/setup-matt-pocock-skills/SKILL.md
.agents/skills/tdd/SKILL.md
.agents/skills/to-spec/SKILL.md
.agents/skills/to-tickets/SKILL.md
.agents/skills/triage/SKILL.md
.agents/skills/unslop/SKILL.md
.agents/skills/wayfinder/SKILL.md
.agents/skills/wizard/SKILL.md
.agents/skills/yts806379-everything-claude-code-e2e-testing/SKILL.md
.claude/skills/ask-matt/SKILL.md
.claude/skills/ast-grep-outline/SKILL.md
.claude/skills/ast-grep/SKILL.md
.claude/skills/codebase-design/SKILL.md
.claude/skills/companion-clis/SKILL.md
.claude/skills/diagnosing-bugs/SKILL.md
.claude/skills/domain-modeling/SKILL.md
.claude/skills/flash/SKILL.md
.claude/skills/implement/SKILL.md
.claude/skills/improve-codebase-architecture/SKILL.md
.claude/skills/nodetool-api-reference/SKILL.md
.claude/skills/nodetool-browser-agent/SKILL.md
.claude/skills/nodetool-chat-cli/SKILL.md
.claude/skills/nodetool-custom-node-developer/SKILL.md
.claude/skills/nodetool-deployment/SKILL.md
.claude/skills/nodetool-model-provider-config/SKILL.md
.claude/skills/nodetool-rag-indexing/SKILL.md
.claude/skills/nodetool-troubleshooter/SKILL.md
.claude/skills/nodetool-workflow-builder/SKILL.md
.claude/skills/prototype/SKILL.md
.claude/skills/research/SKILL.md
.claude/skills/resolving-merge-conflicts/SKILL.md
.claude/skills/setup-matt-pocock-skills/SKILL.md
.claude/skills/tdd/SKILL.md
.claude/skills/to-spec/SKILL.md

元信息

文件数
0
版本
9b979bc
Hash
4dd72b21
收录时间
2026-09-22 23:28

首页 - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-09-23 22:39
浙ICP备14020137号-1