anidoodle 是做什么的?
完全由代码绘制的图片、影片和交互式作品。一个纯函数绘制每一帧;另一个纯函数合成每一段音频样本。同一份源码在任何机器上、以任意尺寸、任意时长重建相同的像素和相同的声音。
引擎是简单的一半。作品之所以被丢弃,是因为它没有意义,是因为主题只是其自身的图标,是因为风格仅仅是调色板的替换,是因为音乐没有形式,或者是因为创作者在审批碎片中耗尽了耐心。这个技能承载了防止上述每一种情况的工艺。
从提问开始,再构建
阅读 references/workflows/start-here.md 并运行其初始化流程:一次一个问题,只问需求中未明确的部分,你先给出推荐。他们正在制作什么,用哪种风格(展示图库工作表,https://github.com/alexgreensh/anidoodle/blob/main/skills/anidoodle/assets/styles.jpg;列表见 references/styles/INDEX.md),什么形状(1x1、9x16、16x9、4x5 或任意 W x H),多长(任意时长;永远不要设上限),什么声音(无声或一种音乐风格和情绪),哪些角色。“你选”意味着你做出选择,并用一句话说明理由。在绘制之前将这些答案写成一份简短的需求摘要。
你在制作什么?
| 制作内容 | 阅读文档 |
|---|---|
| 静态图:主图、插图、封面、卡片、海报、系列作品 | 下方的静态图工作流,references/formats.md |
| 自绘式图片(延时摄影、制作过程) | references/workflows/drawing-process.md |
| 循环动画、贴纸、动态 Logo、氛围页头 | 下方的循环动画工作流,references/formats.md |
| 故事影片,任意时长 | 下方的影片工作流,references/workflows/long-film.md |
| 解说视频或信息图 | references/workflows/explainer.md |
| 发布或产品视频(欢迎使用他们的截图) | references/workflows/launch-video.md;基于 references/workflows/launch-video-kit.md 构建 |
| 响应用户界面的交互式网页动画 | references/workflows/interactive.md |
| 绘画课程,或“我该如何画这个?” | references/workflows/teach-drawing.md |
| 在任何风格(木版画到积木)中都保持一致的角色 | references/workflows/character-consistency.md,references/anatomy.md |
| 从用户的图片匹配风格 | references/workflows/adapt-a-style.md |
| 配乐或原声带 | references/music/README.md |
- 音乐:为影片创作自己的配乐(
references/music/README.md);node tools/music.mjs check <score.ts#export>必须在人类聆听之前通过。 - 音效:
references/music/sound-design.md。14 层、基于种子的音效,由影片帧(filmSfx)触发;配乐自动避让,且每个音效必须在配乐的 6 dB 范围内。音效仅用于真正的方向变化,每部影片一次上升音 + 一次撞击音。 - 发布影片:
launchTemplate.ts根据数据渲染产品的发布:提示、为它绘制的图版、为它编写的配乐、文字、安装命令;节省 Token 的习惯见references/working-method.md。
七条法则
- 每件作品都有意义。 静态图:一个想法,一个焦点主体,一束光。影片:一次转变,一个回报,一个回归的象征。→
references/storytelling.md - 明确写实程度。 对于动物、物体和人物,都要指明解剖学结构、视角以及你打开的参考。→
references/realism-and-craft.md,references/anatomy.md - 风格是作画的方式。 改变媒介、边缘和笔画的顺序,而不仅仅改变调色板。→
references/styles.md - 先用一张静态图验证外观,再从头到尾构建。 此后,检查点往往弊大于利。→
references/working-method.md - 契约是绝对的。 仅使用
(frame, env)(以及交互式作品的输入日志)作为纯函数输入,仅使用rng(seed),不使用时钟,不使用ctx.filter。不生成也不下载任何内容;用户带来的图片可以嵌入,并通过哈希固定。→references/determinism-and-contract.md - 音乐需要计划,而不是形容词。 风格、每个乐段的情绪、将音符作为数据,然后是测量。你无法听到它,因此在上线前需要一个人来聆听。→
references/music/ - 一人导演,一人构建,两人都将一切记录下来。 当会话质量下降时,重置;文件是记忆。→
references/working-method.md
工作流
静态图。 (1)用一句话说出想法;命名焦点主体和光线。(2)为任何存在的物体打开真实的参考,并记录是哪些。(3)选择风格,首先阅读其图版的标题。(4)按照该媒介的顺序绘制。(5)使用 still.mjs 以全尺寸渲染,对裁剪区域(面部、手、脚、关节;references/craft-bar.md)运行细节检查,进行书面批评。✋ 一次审批。 (6)从同一份源码交付所有要求的尺寸和形状,并说明已打印 reproducible。
循环动画。 同静态图,外加:每个运动在循环中是周期性的,主体永不停止,每秒钟都有东西在移动。检查接缝(最后一帧与第 0 帧)。✋ 一次审批,在移动文件上。
影片。 (1)三句话讲述故事(设定、转变、回报)和象征物;对于较长的影片,一个主干加上每章节一行。如果写不出来,就停止。(2)网格:一个节拍 = 60 x fps / bpm 帧,bpm 来自需求摘要的配乐;一个提示表保存每个帧号,加载时运行检查器。(3)真实的参考,用于任何存在的物体。(4)一张外观静态图,选最困难的一帧,进行书面批评。✋ 审批。 (5)一段 8 秒的音乐样本。 ✋ 审批。 (6)构建整部影片;机械检查持续运行。(7)从渲染文件中审核一次:每节拍的缩略图、每处剪辑作为一对、无声段落时长。一份排好优先级的修复清单,一次重建。(8)✋ 最终审批。 说明你验证了什么以及你无法验证什么。
最多三个审批关卡。审批是预算;把它花在错误代价高昂的地方。
工艺标准
测试标准:一个骄傲的人类插画师会交付这个吗?还是它只是机械的形状组合?完整的特征列表见 references/craft-bar.md。最常导致作品被弃的原因:由椭圆构成的主体、一种风格仅重新着色成另一种风格、渐入而非绘制的物体、具有橡胶关节的人物、以及在不同镜头中绘制不一致的角色。
任何运动的画面中不得有死寂时段:每秒都有视觉可见的变化。自我绘制式的影片声明 kind: "drawing",并以更精细的标准评判;冻结的静态画面仍然不合格。
引擎
engine/ 是可移植的艺术核心加上工具链。engine/src/canvas-core 对 DOM 或任何后端一无所知。W、H、fps 和 durationFrames 来自影片的 meta。摄像机运动(平移、缩放、视差、抖动)来自 engine/src/canvas-core/camera.ts:references/camera.md。render.mjs --blur N 使用运动模糊渲染(每帧在线性光中平均 N 个子帧);默认路径保持不变。
node <skill>/engine/tools/scaffold.mjs ~/art --film intro --format 9x16 --duration 12 # 秒
cd ~/art && npm install && npx playwright-core install chromium
node tools/still.mjs intro --frame 0 --out out/look.png --scale 2 # 一张静态图,附带其哈希值
node tools/render.mjs intro # MP4;--out x.gif|x.webm|x.apng
node tools/gate.mjs intro # 确定性、契约、死寂时段
node tools/emit.mjs intro --out out/intro.html # 一个自包含的离线播放器
| 工具 | 作用 |
|---|---|
scaffold.mjs | 创建一个包含静态图和/或影片的项目;--duration、--format 或 --size、--fps、--bpm |
still.mjs / render.mjs | 帧被绘制两次并附带哈希值(--frames a,b,c --sheet 在单个浏览器中)/ 以任意格式输出作品(--from/--to、--poster-frame、--hashes) |
gate.mjs | 检查确定性、契约、死寂时段、伪影;--self-test 证明它能检测到失败 |
registry.mjs / gallery.mjs | 从图版本身获取风格列表 / 图库工作表 |
docs-check.mjs | 当任何文档的风格计数、长度或路径与代码不一致时失败 |
verify-export.mjs | 对渲染文件进行质量检查:帧数、时长、配乐;可选择检查第一帧、循环接缝、--delivery |
test.mjs(npm test) | engine/test/ 中的单元测试套件,无需浏览器 |
music.mjs | 渲染并计量配乐;check 验证它(调性、主输出、限制器、音轨、新颖性) |
sfx.mjs | 音效工具包:list、one、kit <dir>、test |
四个后端,一个艺术核心:playwright、html-player、remotion、hyperframes。
→ references/backends-and-adapters.md
工作示例
- 风格图版位于
engine/src/canvas-core/:每个风格包含一张静态图和一段绘制过程的影片,配方在标题中,references/styles/<id>.md中有详细信息。 - MECHANICAL LEPIDOPTERA 位于
example/:一部 47 秒的配乐影片。运行scaffold.mjs ~/study --example可创建。
研究它们。不要复制它们。 工艺标准不满足于继承。
诚实的限制
你无法听到配乐、观看影片的运动或使用交互式作品。关于它们的任何声明都来自测量或人类反馈;请说明是哪一种。一个绿色的勾号在重新运行之前只是一个声明。在信任一张静态图之前,请以 --scale 2 渲染一帧:通过错误变换叠加的图层在 1 倍缩放时看起来正确,但在 2 倍时就会暴露问题。