@ninkch/dsh-artcraft 0.2.10 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -13
- package/README.zh-CN.md +33 -10
- package/apps/catalog.json +53 -1
- package/artcraft.config.json.example +5 -2
- package/client.js +11 -2
- package/cordis.patch.yml +4 -0
- package/index.js +451 -19
- package/package.json +6 -2
- package/recipes/recipes.json +315 -32
- package/skills/README.md +43 -0
- package/skills/artcraft-batch-pipeline/SKILL.md +96 -0
- package/skills/artcraft-color-light/SKILL.md +96 -0
- package/skills/artcraft-color-light/references/develop-controls.md +43 -0
- package/skills/artcraft-color-light/references/lumetri-and-scopes.md +65 -0
- package/skills/artcraft-delivery-qc/SKILL.md +105 -0
- package/skills/artcraft-delivery-qc/references/platform-specs.md +74 -0
- package/skills/artcraft-edit-rhythm/SKILL.md +110 -0
- package/skills/artcraft-edit-rhythm/references/transitions.md +53 -0
- package/skills/artcraft-film-study/SKILL.md +109 -0
- package/skills/artcraft-motion-vfx/SKILL.md +117 -0
- package/skills/artcraft-motion-vfx/references/effect-catalogue.md +429 -0
- package/skills/artcraft-motion-vfx/references/scene-to-effect.md +103 -0
- package/skills/artcraft-multicam/SKILL.md +79 -0
- package/skills/artcraft-ops/SKILL.md +116 -0
- package/skills/artcraft-ops/references/command-families.md +57 -0
- package/skills/artcraft-shot-language/SKILL.md +112 -0
- package/skills/artcraft-shot-language/references/shot-vocabulary.md +98 -0
- package/skills/artcraft-sound-design/SKILL.md +95 -0
- package/skills/artcraft-sound-design/references/essential-sound.md +77 -0
- package/skills/artcraft-style-bible/SKILL.md +84 -0
- package/skills.js +84 -0
package/recipes/recipes.json
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version":
|
|
3
|
-
"updated": "2026-10-
|
|
2
|
+
"version": 2,
|
|
3
|
+
"updated": "2026-10-12",
|
|
4
|
+
"note": "v2:每套配方标注应先读的技能(skills 字段);新增 chains —— 面向常见后期任务的『任务 → 技能 → 命令链』编排模板,命令 id 均为家族实测命令。技能包随插件分发(@ninkch/dsh-artcraft/skills)。",
|
|
4
5
|
"recipes": [
|
|
5
6
|
{
|
|
6
7
|
"id": "poster-short-drama",
|
|
7
8
|
"title": "短剧海报(竖版)",
|
|
8
9
|
"apps": ["photocraft"],
|
|
10
|
+
"skills": ["artcraft-ops", "artcraft-shot-language"],
|
|
9
11
|
"goal": "生成竖版短剧海报:标题层级、装饰元素、无损输出",
|
|
10
12
|
"principles": [
|
|
11
13
|
"视觉层级:主标题 → 副标题 → 装饰元素,字号/字重至少差 2 级,同屏不超过 3 个信息层",
|
|
@@ -24,17 +26,20 @@
|
|
|
24
26
|
{
|
|
25
27
|
"id": "storyboard-color-grade",
|
|
26
28
|
"title": "分镜批量调色(一致性)",
|
|
27
|
-
"apps": ["photocraft"],
|
|
29
|
+
"apps": ["photocraft", "lightcraft"],
|
|
30
|
+
"skills": ["artcraft-color-light", "artcraft-ops"],
|
|
28
31
|
"goal": "整批分镜图统一色调,保持跨镜一致性",
|
|
29
32
|
"principles": [
|
|
30
33
|
"先定基调再微调:一条柔和 S 曲线 + 少量 vibrance,避免逐张各调各的",
|
|
31
34
|
"保护肤色:调整幅度宁小勿大,人脸偏色比不够风格化更伤观感",
|
|
32
35
|
"锐化放在调色之后(amount 60-80),避免锐化放大噪点",
|
|
33
|
-
"actions.json
|
|
36
|
+
"actions.json / 预设一处定义、整批复用,保证批次内完全一致",
|
|
37
|
+
"LightCraft 路线:develop.controls 122 个控制按分区顺序调(profile→wb→light→curve→color→grading→detail→optics),再 preset.create 固化"
|
|
34
38
|
],
|
|
35
39
|
"steps": [
|
|
36
40
|
"写 craft/grade.json:[{\"cmd\":\"layer.newAdjustmentLayer.curves\",\"params\":{\"points\":[[0,0],[64,48],[192,212],[255,255]]}},{\"cmd\":\"filter.sharpen.smartSharpen\",\"params\":{\"amount\":80}}]",
|
|
37
41
|
"photocraft-cli batch --actions <项目>/craft/grade.json --in <项目>/media --out <项目>/out/graded",
|
|
42
|
+
"或 LightCraft:run --library <库> develop.set control=light.exposure value=… 逐项设置后 preset.create",
|
|
38
43
|
"抽 2-3 张对比原图检查,不满意只调曲线中段(64,48 / 192,212 两点)重跑"
|
|
39
44
|
],
|
|
40
45
|
"checks": ["抽样对比:同场景相邻分镜色调一致;高光不过曝、暗部不死黑"]
|
|
@@ -43,6 +48,7 @@
|
|
|
43
48
|
"id": "vertical-reframe",
|
|
44
49
|
"title": "横转竖重构图",
|
|
45
50
|
"apps": ["filmcraft", "photocraft"],
|
|
51
|
+
"skills": ["artcraft-shot-language", "artcraft-ops"],
|
|
46
52
|
"goal": "16:9 素材适配 9:16 竖屏,三种策略按画面主体选择",
|
|
47
53
|
"principles": [
|
|
48
54
|
"策略选择:主体居中 → 居中裁切;主体偏侧 → 位移裁切(保主体);多主体/全景 → 模糊填充(上原图下补景,不裁掉信息)",
|
|
@@ -51,7 +57,7 @@
|
|
|
51
57
|
],
|
|
52
58
|
"steps": [
|
|
53
59
|
"filmcraft-cli probe <素材> 先量分辨率/时长/帧率(永远先探测再动手)",
|
|
54
|
-
"序列设 1080×1920@30
|
|
60
|
+
"序列设 1080×1920@30(file.newSequence),放置后按位移/缩放保留主体",
|
|
55
61
|
"导出 H.264:--quality 80 起步"
|
|
56
62
|
],
|
|
57
63
|
"checks": ["导出后 probe 验证分辨率/时长;抽帧目检主体完整、不切脸"]
|
|
@@ -59,50 +65,58 @@
|
|
|
59
65
|
{
|
|
60
66
|
"id": "loudness-web",
|
|
61
67
|
"title": "网络平台响度标准化",
|
|
62
|
-
"apps": ["filmcraft"],
|
|
68
|
+
"apps": ["filmcraft", "soundcraft"],
|
|
69
|
+
"skills": ["artcraft-sound-design", "artcraft-delivery-qc"],
|
|
63
70
|
"goal": "成片响度对齐平台标准,避免用户手动调音量",
|
|
64
71
|
"principles": [
|
|
65
|
-
"主流短视频平台目标:integrated -14 LUFS,true peak ≤ -1 dBTP",
|
|
66
|
-
"
|
|
67
|
-
"BGM
|
|
72
|
+
"主流短视频平台目标:integrated -14 LUFS,true peak ≤ -1 dBTP;广播 -23 LUFS / -2 dBTP",
|
|
73
|
+
"用 essentialSound.autoMatch 一次到位,不要二次压限",
|
|
74
|
+
"BGM 与人声分层:人声为主轨,用 essentialSound.generateDucking 自动闪避 6-10 dB"
|
|
68
75
|
],
|
|
69
76
|
"steps": [
|
|
70
|
-
"
|
|
71
|
-
"
|
|
77
|
+
"essentialSound.setType {type:\"dialogue\"} → essentialSound.set {key:\"repair.noise…\"}",
|
|
78
|
+
"essentialSound.autoMatch {target:-14}",
|
|
79
|
+
"essentialSound.generateDucking(音乐轨避让对白)",
|
|
80
|
+
"exec file.exportMedia {\"path\":<out>,\"format\":\"h264\",\"loudnessLufs\":-14,\"wait\":true}"
|
|
72
81
|
],
|
|
73
|
-
"checks": ["probe
|
|
82
|
+
"checks": ["probe 报告音轨存在且响度参数已应用;SoundCraft 侧跑 session.audio_health 体检"]
|
|
74
83
|
},
|
|
75
84
|
{
|
|
76
85
|
"id": "srt-burn",
|
|
77
|
-
"title": "
|
|
86
|
+
"title": "字幕生成/导入与烧录",
|
|
78
87
|
"apps": ["filmcraft"],
|
|
79
|
-
"
|
|
88
|
+
"skills": ["artcraft-edit-rhythm", "artcraft-delivery-qc"],
|
|
89
|
+
"goal": "由转写生成字幕或导入 SRT,并烧录进成片",
|
|
80
90
|
"principles": [
|
|
81
91
|
"单行 ≤ 15 个中文字符,超长拆条;每条最短停留 1 秒",
|
|
82
|
-
"位置:底部安全区,避开平台 UI(进度条/互动栏约占底部 15%)",
|
|
83
|
-
"样式统一:描边 2-3px
|
|
92
|
+
"位置:底部安全区,避开平台 UI(进度条/互动栏约占底部 12-15%)",
|
|
93
|
+
"样式统一:描边 2-3px 或半透明底条,全片一种字体(captions.setStyle 一次设定)",
|
|
94
|
+
"家族自带转写:transcript.generate 无需外部工具;去停顿/去口头禅可直接粗剪"
|
|
84
95
|
],
|
|
85
96
|
"steps": [
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
97
|
+
"(可选)transcript.generate {model:\"whisper-base\", language:\"auto\"} → transcript.removePauses → transcript.removeFillers",
|
|
98
|
+
"transcript.createCaptions {maxChars, lines, minSeconds, maxSeconds} 或 captions.import {path}",
|
|
99
|
+
"captions.setStyle / captions.setTrack 统一字体与轨道格式",
|
|
100
|
+
"file.exportMedia 带字幕输出(或 graphics.upgradeCaption 做花字动效)"
|
|
89
101
|
],
|
|
90
102
|
"checks": ["抽帧目检字幕:无溢出、无遮挡主体、时间轴同步"]
|
|
91
103
|
},
|
|
92
104
|
{
|
|
93
105
|
"id": "title-motion",
|
|
94
|
-
"title": "
|
|
95
|
-
"apps": ["effectcraft"],
|
|
106
|
+
"title": "动态片头/花字",
|
|
107
|
+
"apps": ["effectcraft", "filmcraft"],
|
|
108
|
+
"skills": ["artcraft-motion-vfx", "artcraft-shot-language"],
|
|
96
109
|
"goal": "生成动态片头,叠加回剪辑或直接使用",
|
|
97
110
|
"principles": [
|
|
98
111
|
".ecproj 是版本化 JSON —— 直接生成或模板替换文本,比逐帧描述高效",
|
|
99
|
-
"动画时长 1.5-3s:入场 0.3-0.5s 缓动(
|
|
100
|
-
"
|
|
112
|
+
"动画时长 1.5-3s:入场 0.3-0.5s 缓动(keys.easyEase),停留 ≥ 1s,出场 0.3s",
|
|
113
|
+
"先渲单帧再渲全片:render-frame 看静帧 → 3 秒试片 → 全片",
|
|
114
|
+
"FilmCraft 侧优先用图形模板:graphics.template.list → graphics.template.apply(带 values)"
|
|
101
115
|
],
|
|
102
116
|
"steps": [
|
|
103
117
|
"生成/填充 intro.ecproj(composition 尺寸对齐主序列)",
|
|
104
|
-
"effectcraft-cli render --
|
|
105
|
-
"
|
|
118
|
+
"effectcraft-cli render-frame --time 1 --out preview.png(先看静帧)",
|
|
119
|
+
"effectcraft-cli render --comp Main --out <项目>/out/intro.mp4 <项目>/craft/intro.ecproj"
|
|
106
120
|
],
|
|
107
121
|
"checks": ["render 后 probe 时长/分辨率;视觉检查动画节奏(入场不突兀、停留可读完整标题)"]
|
|
108
122
|
},
|
|
@@ -110,34 +124,303 @@
|
|
|
110
124
|
"id": "delivery-pack",
|
|
111
125
|
"title": "多平台分发包",
|
|
112
126
|
"apps": ["filmcraft"],
|
|
127
|
+
"skills": ["artcraft-delivery-qc"],
|
|
113
128
|
"goal": "同一成片产出多平台版本(分辨率/帧率/响度/命名规范)",
|
|
114
129
|
"principles": [
|
|
115
130
|
"平台参数表:抖音/快手/视频号 1080×1920@30 -14LUFS;B 站/西瓜 1920×1080@30 -14LUFS",
|
|
116
131
|
"命名规范:<项目>_<平台>_v<序号>.mp4,一次导出成组不散落",
|
|
117
|
-
"每平台独立导出(各自过 loudness 与 probe),不要一份文件多处转发"
|
|
132
|
+
"每平台独立导出(各自过 loudness 与 probe),不要一份文件多处转发",
|
|
133
|
+
"需要交接时同时导出交换格式:file.exportInterchange(otio/fcpxml/aaf/omf)"
|
|
118
134
|
],
|
|
119
135
|
"steps": [
|
|
120
136
|
"逐平台 exec file.exportMedia {\"path\":<out>,\"format\":\"h264\",\"width\":…,\"height\":…,\"loudnessLufs\":-14,\"wait\":true}",
|
|
121
|
-
"每个产物跑一次 probe 核对"
|
|
137
|
+
"每个产物跑一次 probe 核对",
|
|
138
|
+
"需要交接:file.exportInterchange {format:\"otio\", path:<out.otio>}"
|
|
122
139
|
],
|
|
123
140
|
"checks": ["probe 全部产物:分辨率/帧率/音轨符合平台表;文件命名一致"]
|
|
124
141
|
},
|
|
125
142
|
{
|
|
126
143
|
"id": "probe-verify",
|
|
127
144
|
"title": "通用纪律:先探测、后验证",
|
|
128
|
-
"apps": ["filmcraft", "photocraft", "effectcraft"],
|
|
129
|
-
"
|
|
145
|
+
"apps": ["filmcraft", "photocraft", "effectcraft", "lightcraft", "soundcraft"],
|
|
146
|
+
"skills": ["artcraft-ops"],
|
|
147
|
+
"goal": "所有媒体操作的通用工作流纪律",
|
|
130
148
|
"principles": [
|
|
131
|
-
"先探测再动手:永远先 probe 素材拿真实时长/分辨率/帧率/音轨,不从文件名猜",
|
|
149
|
+
"先探测再动手:永远先 probe/info 素材拿真实时长/分辨率/帧率/音轨,不从文件名猜",
|
|
132
150
|
"能无损不重编:剪切片段优先流复制,只在必须(精确剪切/滤镜/换格式)时重编码",
|
|
151
|
+
"先问能不能跑:describe <id> 看 enabled 与 disabled_reason,再决定动作顺序",
|
|
133
152
|
"做完必验证:产物 probe 一次 + 关键帧目检,报告里写明验证结果",
|
|
134
153
|
"诚实标注:成功是 Done、失败是 Failed,部分完成必须写出缺口"
|
|
135
154
|
],
|
|
136
155
|
"steps": [
|
|
137
|
-
"任何处理前:filmcraft-cli probe <media
|
|
138
|
-
"
|
|
156
|
+
"任何处理前:filmcraft-cli probe <media>(或对应成员 info)",
|
|
157
|
+
"处理前:filmcraft-cli describe <命令 id> 核对 params 与前置条件",
|
|
158
|
+
"处理后:probe <out> + 抽帧目检"
|
|
139
159
|
],
|
|
140
160
|
"checks": ["probe 输出与预期一致;差异写入报告而不是含糊带过"]
|
|
141
161
|
}
|
|
162
|
+
],
|
|
163
|
+
"chains": [
|
|
164
|
+
{
|
|
165
|
+
"id": "short-drama-episode",
|
|
166
|
+
"title": "竖屏短剧单集成片(素材 → 交付)",
|
|
167
|
+
"skills": ["artcraft-ops", "artcraft-edit-rhythm", "artcraft-sound-design", "artcraft-delivery-qc"],
|
|
168
|
+
"when": "已有拍摄/生成素材,要出一集竖屏短剧",
|
|
169
|
+
"steps": [
|
|
170
|
+
{ "app": "filmcraft", "cmd": "probe", "note": "逐条素材探真实参数(分辨率/帧率/VFR/音轨)" },
|
|
171
|
+
{ "app": "filmcraft", "cmd": "file.newSequence", "params": { "width": 1080, "height": 1920, "fps": 30 } },
|
|
172
|
+
{ "app": "filmcraft", "cmd": "timeline.place", "note": "按叙事顺序铺轨;用 timeline.move/razor/trim(mode=ripple) 调整" },
|
|
173
|
+
{ "app": "filmcraft", "cmd": "transcript.generate", "note": "内置 whisper 转写" },
|
|
174
|
+
{ "app": "filmcraft", "cmd": "transcript.removePauses", "note": "去停顿(自动粗剪)" },
|
|
175
|
+
{ "app": "filmcraft", "cmd": "transcript.removeFillers", "note": "去口头禅" },
|
|
176
|
+
{ "app": "filmcraft", "cmd": "transcript.createCaptions", "params": { "maxChars": 15, "lines": 2 } },
|
|
177
|
+
{ "app": "filmcraft", "cmd": "captions.setStyle", "note": "统一字体/描边/安全区" },
|
|
178
|
+
{ "app": "filmcraft", "cmd": "lumetri.applyMatch", "note": "以参考镜头做跨镜色彩匹配" },
|
|
179
|
+
{ "app": "filmcraft", "cmd": "essentialSound.autoMatch", "params": { "target": -14 } },
|
|
180
|
+
{ "app": "filmcraft", "cmd": "essentialSound.generateDucking", "note": "音乐避让对白" },
|
|
181
|
+
{ "app": "filmcraft", "cmd": "file.exportMedia", "params": { "format": "h264", "width": 1080, "height": 1920 } },
|
|
182
|
+
{ "app": "filmcraft", "cmd": "probe", "note": "复核产物规格" },
|
|
183
|
+
{ "app": "filmcraft", "cmd": "scopes.read", "note": "示波器核对画面电平" }
|
|
184
|
+
],
|
|
185
|
+
"verify": ["probe 规格一致", "示波器不越界", "响度达标", "字幕在安全区内", "抽帧目检通过"]
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"id": "storyboard-from-script",
|
|
189
|
+
"title": "剧本 → 图文分镜(含调度图)",
|
|
190
|
+
"skills": ["artcraft-shot-language", "artcraft-edit-rhythm"],
|
|
191
|
+
"when": "有剧本/大纲,要出可执行分镜",
|
|
192
|
+
"steps": [
|
|
193
|
+
{ "app": "figcraft", "cmd": "file.new", "note": "建画板:每场一页(page.add)" },
|
|
194
|
+
{ "app": "figcraft", "cmd": "component.create", "note": "把『镜位框/人物块/箭头』做成组件,保证分镜风格统一" },
|
|
195
|
+
{ "app": "figcraft", "cmd": "variable.createCollection", "note": "变量锁:景别/机位/光线标签统一取值" },
|
|
196
|
+
{ "app": "figcraft", "cmd": "vector.create", "note": "画俯视调度图:站位、走位线、机位、灯位、轴线" },
|
|
197
|
+
{ "app": "deckcraft", "cmd": "slide.delete", "note": "(可选)用 DeckCraft 出演示式分镜:slide 系列 + animation.timing" },
|
|
198
|
+
{ "app": "designcraft", "cmd": "layout.pages.insert", "note": "(可选)排版成分镜册:book/article/type" },
|
|
199
|
+
{ "app": "gridcraft", "cmd": "data.sort", "note": "分镜表:镜号/景别/角度/运动/时长/内容/声音/转场(data.* + pivot.* 汇总)" },
|
|
200
|
+
{ "app": "figcraft", "cmd": "export", "note": "导出 png/pdf 分镜(--bleed/--crop-marks 供印刷)" }
|
|
201
|
+
],
|
|
202
|
+
"verify": ["每镜有景别/角度/运动/时长", "轴线一致无跳轴", "调度图与分镜一一对应"]
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"id": "raw-batch-develop",
|
|
206
|
+
"title": "RAW/照片批量冲洗与风格锁定",
|
|
207
|
+
"skills": ["artcraft-color-light", "artcraft-ops"],
|
|
208
|
+
"when": "一批照片/RAW 要统一影调并交付",
|
|
209
|
+
"steps": [
|
|
210
|
+
{ "app": "lightcraft", "cmd": "run", "params": { "args": ["--import", "<目录>"] }, "note": "导入素材" },
|
|
211
|
+
{ "app": "lightcraft", "cmd": "develop.controls", "note": "先列 122 个控制与分区,明确要动哪几项" },
|
|
212
|
+
{ "app": "lightcraft", "cmd": "develop.auto", "note": "自动初调作为起点" },
|
|
213
|
+
{ "app": "lightcraft", "cmd": "develop.set", "note": "按顺序微调:light.* → curve.* → color.* → grading.* → detail.* → optics.*" },
|
|
214
|
+
{ "app": "lightcraft", "cmd": "mask.add", "note": "局部处理(人脸/天空)" },
|
|
215
|
+
{ "app": "lightcraft", "cmd": "preset.create", "note": "把定稿参数固化为预设" },
|
|
216
|
+
{ "app": "lightcraft", "cmd": "preset.apply", "note": "整批套用,保证一致性" },
|
|
217
|
+
{ "app": "lightcraft", "cmd": "app.export", "note": "按目标尺寸/质量导出(可选 --opt colorSpace/bitDepth)" }
|
|
218
|
+
],
|
|
219
|
+
"verify": ["抽样对比跨图一致", "肤色正常", "无过曝/死黑", "导出规格符合交付要求"]
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"id": "film-study",
|
|
223
|
+
"title": "拉片/影片分析(结构·情绪·镜头)",
|
|
224
|
+
"skills": ["artcraft-edit-rhythm", "artcraft-shot-language", "artcraft-delivery-qc"],
|
|
225
|
+
"when": "要研究一部片子的结构、节奏与镜头语言(影评/学习)",
|
|
226
|
+
"steps": [
|
|
227
|
+
{ "app": "filmcraft", "cmd": "probe", "note": "先拿全片真实参数(时长/帧率/音轨)" },
|
|
228
|
+
{ "app": "filmcraft", "cmd": "transcript.generate", "note": "得到带时间轴的台词/对白" },
|
|
229
|
+
{ "app": "filmcraft", "cmd": "transcript.inspect", "note": "按段落查转写,定位场次" },
|
|
230
|
+
{ "app": "filmcraft", "cmd": "captions.export", "params": { "format": "srt" }, "note": "导出字幕作为文本底稿" },
|
|
231
|
+
{ "app": "photocraft", "cmd": "batch", "note": "按 1 秒间隔抽帧(或用 filmcraft render 单帧)得到全片帧表" },
|
|
232
|
+
{ "app": "gridcraft", "cmd": "data.sort", "note": "建拉片表:时间码/场次/镜头数/景别/情绪值/备注(pivot.* 汇总统计)" },
|
|
233
|
+
{ "app": "gridcraft", "cmd": "insert.chart", "note": "画情绪曲线/节奏密度图" },
|
|
234
|
+
{ "app": "deckcraft", "cmd": "slide.first", "note": "出分析报告:结构树 + 泳道时间轴 + 情绪曲线" },
|
|
235
|
+
{ "app": "deckcraft", "cmd": "file.export", "note": "导出 PDF/PPTX 交付" }
|
|
236
|
+
],
|
|
237
|
+
"verify": ["时间码与画面对齐", "情绪曲线有依据(标出转折点)", "结论可回溯到具体镜头"]
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"id": "audio-post",
|
|
241
|
+
"title": "音频后期:清理 → 混音 → 母带",
|
|
242
|
+
"skills": ["artcraft-sound-design"],
|
|
243
|
+
"when": "对白有噪声、需要混音与响度交付",
|
|
244
|
+
"steps": [
|
|
245
|
+
{ "app": "soundcraft", "cmd": "session.open", "note": "打开/新建工程(或 FilmCraft 用 mixer 系列)" },
|
|
246
|
+
{ "app": "soundcraft", "cmd": "session.audio_health", "note": "先体检:丢失/异常片段" },
|
|
247
|
+
{ "app": "soundcraft", "cmd": "mix.insert_param", "note": "插入降噪/EQ/压缩并设参" },
|
|
248
|
+
{ "app": "soundcraft", "cmd": "automation.set_point", "note": "写音量/声像自动化(或 write_range 批量写)" },
|
|
249
|
+
{ "app": "soundcraft", "cmd": "automation.thin", "note": "自动化点稀疏化" },
|
|
250
|
+
{ "app": "soundcraft", "cmd": "event.beat_detective", "note": "音乐段落检测节拍(配合画面切点)" },
|
|
251
|
+
{ "app": "soundcraft", "cmd": "file.bounce_stems", "params": { "format": "wav", "bit_depth": 24 }, "note": "分轨交付" },
|
|
252
|
+
{ "app": "soundcraft", "cmd": "file.bounce_mix", "note": "母版导出" }
|
|
253
|
+
],
|
|
254
|
+
"verify": ["audio_health 无异常", "对白清晰不被盖", "响度与真峰值达标"]
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"id": "vfx-composite-shot",
|
|
258
|
+
"title": "合成镜头:跟踪 → 抠像 → 合成 → 渲染",
|
|
259
|
+
"skills": ["artcraft-motion-vfx", "artcraft-ops"],
|
|
260
|
+
"when": "需要在实拍上叠加元素/替换背景/做特效镜头",
|
|
261
|
+
"steps": [
|
|
262
|
+
{ "app": "effectcraft", "cmd": "comp.new", "note": "建合成,尺寸对齐主序列" },
|
|
263
|
+
{ "app": "effectcraft", "cmd": "track.motion", "note": "跟踪参考点;稳定用 track.stabilize(记得缩放补偿)" },
|
|
264
|
+
{ "app": "effectcraft", "cmd": "roto.model.download", "note": "Roto Brush 模型(首次)" },
|
|
265
|
+
{ "app": "effectcraft", "cmd": "roto.stroke", "note": "少量 strokes → roto.propagate 传播 → roto.freeze 修正段" },
|
|
266
|
+
{ "app": "effectcraft", "cmd": "mask.featherPoint.add", "note": "遮罩羽化,避免硬边" },
|
|
267
|
+
{ "app": "effectcraft", "cmd": "effect.apply", "note": "键控/合成/调色(Color Correction 40 个、Keying 12 个等)" },
|
|
268
|
+
{ "app": "effectcraft", "cmd": "keys.easyEase", "note": "所有动画加缓动" },
|
|
269
|
+
{ "app": "effectcraft", "cmd": "render-frame", "note": "先渲单帧复核" },
|
|
270
|
+
{ "app": "effectcraft", "cmd": "render", "params": { "resolution": "half", "quality": "draft" }, "note": "低分辨率预演" },
|
|
271
|
+
{ "app": "effectcraft", "cmd": "render", "note": "定稿全质量渲染(可 --queue)" }
|
|
272
|
+
],
|
|
273
|
+
"verify": ["跟踪无滑移", "抠像无残留边", "合成与实拍光比/颗粒匹配", "成品抽帧复核"]
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"id": "design-system-deliverable",
|
|
277
|
+
"title": "设计系统与 UI 交付(FigCraft)",
|
|
278
|
+
"skills": ["artcraft-shot-language", "artcraft-delivery-qc"],
|
|
279
|
+
"when": "要做界面/图文资产并保证跨集一致、可交付开发",
|
|
280
|
+
"steps": [
|
|
281
|
+
{ "app": "figcraft", "cmd": "style.create", "note": "建样式(颜色/文字/效果),锁死设计令牌" },
|
|
282
|
+
{ "app": "figcraft", "cmd": "variable.createCollection", "note": "变量集合 + 模式(主题/多语言/多尺寸)" },
|
|
283
|
+
{ "app": "figcraft", "cmd": "component.create", "note": "把复用元素做成组件;变体用 combineVariants/addVariant" },
|
|
284
|
+
{ "app": "figcraft", "cmd": "layout.setTrack", "note": "自动布局(add/suggest)" },
|
|
285
|
+
{ "app": "figcraft", "cmd": "proto.interaction.add", "note": "原型交互与流程(flow.add)" },
|
|
286
|
+
{ "app": "figcraft", "cmd": "measure.padding", "note": "标注与间距测量" },
|
|
287
|
+
{ "app": "figcraft", "cmd": "inspect.readyForDev", "note": "交付前自检" },
|
|
288
|
+
{ "app": "figcraft", "cmd": "codeConnect.set", "note": "绑定代码组件(Dev 交付)" },
|
|
289
|
+
{ "app": "figcraft", "cmd": "export", "params": { "format": "pdf" }, "note": "导出交付(印刷加 --bleed/--cmyk)" }
|
|
290
|
+
],
|
|
291
|
+
"verify": ["组件/变量/样式一致", "readyForDev 通过", "导出跨机渲染一致(--no-system-fonts)"]
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"id": "document-delivery",
|
|
295
|
+
"title": "文档 / PDF 交付与无障碍质检",
|
|
296
|
+
"skills": ["artcraft-delivery-qc", "artcraft-ops"],
|
|
297
|
+
"when": "要交付 PDF/Word 文档,且需要无障碍、尺寸与安全合规",
|
|
298
|
+
"steps": [
|
|
299
|
+
{ "app": "pdfcraft", "cmd": "info", "note": "先探文档:页数/尺寸/加密/表单/字体" },
|
|
300
|
+
{ "app": "pdfcraft", "cmd": "ocr.enhance_camera", "note": "扫描件先提质(可选)" },
|
|
301
|
+
{ "app": "pdfcraft", "cmd": "ocr.recognize", "note": "OCR 取文本层(批量用 ocr.recognize_batch)" },
|
|
302
|
+
{ "app": "pdfcraft", "cmd": "edit.edit_text", "note": "勘误与页级整理(配合 page.combine / page.delete)" },
|
|
303
|
+
{ "app": "pdfcraft", "cmd": "a11y.check", "note": "无障碍检查(阅读顺序/标签)" },
|
|
304
|
+
{ "app": "pdfcraft", "cmd": "a11y.alt_text", "note": "补图片替代文本;a11y.reading_options 调阅读顺序" },
|
|
305
|
+
{ "app": "pdfcraft", "cmd": "measure.distance", "note": "尺寸/边距测量(印刷或版式规范)" },
|
|
306
|
+
{ "app": "pdfcraft", "cmd": "form.detect", "note": "表单域检测(需要填写时用 form.prepare / form.merge_data)" },
|
|
307
|
+
{ "app": "pdfcraft", "cmd": "optimize.reduce", "note": "体积优化(交付前;需要更激进用 optimize.advanced)" },
|
|
308
|
+
{ "app": "pdfcraft", "cmd": "protect.password", "note": "如需加密/权限(protect.remove 反向操作)" },
|
|
309
|
+
{ "app": "wordcraft", "cmd": "file.accessibility", "note": "源为 DOCX 时先做 Word 侧无障碍" },
|
|
310
|
+
{ "app": "wordcraft", "cmd": "review.changes", "note": "清点修订/批注,交付前确认无残留" },
|
|
311
|
+
{ "app": "wordcraft", "cmd": "references.bibliography", "note": "文献与引用规范(学术交付)" }
|
|
312
|
+
],
|
|
313
|
+
"verify": ["a11y.check 无致命项", "尺寸/边距符合印刷或平台要求", "修订与批注已处理", "加密与权限符合约定", "体积与页数符合交付限制"]
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
"id": "vertical-batch",
|
|
317
|
+
"title": "批量横转竖(多素材/多平台)",
|
|
318
|
+
"skills": ["artcraft-shot-language", "artcraft-ops", "artcraft-delivery-qc"],
|
|
319
|
+
"when": "一批横屏素材要批量出竖屏版本,且不能逐条手工重排",
|
|
320
|
+
"steps": [
|
|
321
|
+
{ "app": "filmcraft", "cmd": "probe", "note": "先摸清每条素材的画幅/帧率/VFR(决定是否需要统一帧率)" },
|
|
322
|
+
{ "app": "filmcraft", "cmd": "file.newSequence", "params": { "width": 1080, "height": 1920, "fps": 30 }, "note": "目标序列规格一次定好" },
|
|
323
|
+
{ "app": "filmcraft", "cmd": "timeline.place", "note": "逐条放置,或批量脚本(run script.jsonl)按清单铺轨" },
|
|
324
|
+
{ "app": "filmcraft", "cmd": "effects.setParam", "note": "运动/缩放参数保留主体;主体偏侧时用位移而非居中裁切" },
|
|
325
|
+
{ "app": "filmcraft", "cmd": "effects.addKeyframe", "note": "需要跟随主体时打关键帧(配合 keys 缓动逻辑)" },
|
|
326
|
+
{ "app": "photocraft", "cmd": "batch", "params": { "actions": "<项目>/craft/reframe.json", "in": "<项目>/media", "out": "<项目>/out/frames" }, "note": "静帧素材走 PhotoCraft 批量动作" },
|
|
327
|
+
{ "app": "deckcraft", "cmd": "render", "params": { "scale": 1 }, "note": "幻灯片素材渲染成竖屏图(--slide/--all 可选)" },
|
|
328
|
+
{ "app": "filmcraft", "cmd": "file.exportMedia", "params": { "format": "h264", "width": 1080, "height": 1920 }, "note": "统一导出" },
|
|
329
|
+
{ "app": "filmcraft", "cmd": "probe", "note": "产物复核" }
|
|
330
|
+
],
|
|
331
|
+
"verify": ["批量产物画幅一致", "主体未切脸/未切关键信息", "帧率统一(无 VFR 抖动)", "artcraft_qc platform=douyin 通过"]
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
"id": "cover-thumbnail",
|
|
335
|
+
"title": "封面 / 缩略图与图文包装",
|
|
336
|
+
"skills": ["artcraft-shot-language", "artcraft-delivery-qc"],
|
|
337
|
+
"when": "成片要配封面、缩略图、社交长图或图文包",
|
|
338
|
+
"steps": [
|
|
339
|
+
{ "app": "filmcraft", "cmd": "render", "params": { "seconds": 3, "out": "<项目>/craft/cover-base.png" }, "note": "从成片抓一帧作为底图(挑信息量最大的一帧)" },
|
|
340
|
+
{ "app": "photocraft", "cmd": "run", "params": { "cmd": "image.adjustments.curves" }, "note": "底图影调微调(与正片配方一致,见 artcraft-style-bible)" },
|
|
341
|
+
{ "app": "photocraft", "cmd": "run", "params": { "cmd": "filter.sharpen.smartSharpen" }, "note": "缩略图要小尺寸可读:适度锐化" },
|
|
342
|
+
{ "app": "photocraft", "cmd": "run", "params": { "cmd": "layer.newText" }, "note": "标题文字:显式字体(如 Noto Sans SC),层级 ≥ 2 级,四周留 5% 安全边距" },
|
|
343
|
+
{ "app": "figcraft", "cmd": "export", "params": { "format": "png" }, "note": "或改用 FigCraft 用组件/变量批量出多尺寸封面(1:1 / 9:16 / 16:9)" },
|
|
344
|
+
{ "app": "deckcraft", "cmd": "render", "note": "图文轮播:一张一张渲染成图" },
|
|
345
|
+
{ "app": "photocraft", "cmd": "convert", "params": { "format": "jpg", "quality": 92 }, "note": "平台上传用小体积 JPG(质量 90+ 避免糊)" }
|
|
346
|
+
],
|
|
347
|
+
"verify": ["文字在安全区内、无溢出", "缩略图缩小后仍可读", "与正片影调一致", "各平台尺寸齐全"]
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"id": "multilingual-subs",
|
|
351
|
+
"title": "多语言字幕与配音交付",
|
|
352
|
+
"skills": ["artcraft-edit-rhythm", "artcraft-sound-design", "artcraft-delivery-qc"],
|
|
353
|
+
"when": "一条片要出多语言字幕(可切换轨)或外语配音版本",
|
|
354
|
+
"steps": [
|
|
355
|
+
{ "app": "filmcraft", "cmd": "transcript.generate", "params": { "language": "auto" }, "note": "先得到原文时间轴" },
|
|
356
|
+
{ "app": "filmcraft", "cmd": "transcript.createCaptions", "note": "生成原文字幕(maxChars 按语言调整:中文 ≤15,西文 ≤42 字符)" },
|
|
357
|
+
{ "app": "filmcraft", "cmd": "captions.newTrack", "params": { "format": "Subtitle", "language": "en" }, "note": "每种语言一条字幕轨(language 字段用于播放器选择)" },
|
|
358
|
+
{ "app": "filmcraft", "cmd": "captions.import", "params": { "path": "<译文 srt>" }, "note": "导入译文;时间轴复用原文,只换文本" },
|
|
359
|
+
{ "app": "filmcraft", "cmd": "captions.setStyle", "note": "各语言统一字体/字号/描边(非拉丁文字注意字体覆盖)" },
|
|
360
|
+
{ "app": "filmcraft", "cmd": "captions.export", "params": { "format": "srt" }, "note": "同时导出平台所需格式:srt / vtt / scc / mcc / stl / ttml / dfxp" },
|
|
361
|
+
{ "app": "filmcraft", "cmd": "tts.voices", "note": "需要配音时列可用音色(tts.create → tts.render)" },
|
|
362
|
+
{ "app": "filmcraft", "cmd": "essentialSound.autoMatch", "params": { "target": -14 }, "note": "配音混入后重新统一响度" },
|
|
363
|
+
{ "app": "filmcraft", "cmd": "file.exportMedia", "note": "交付:字幕内嵌或外挂(按平台要求)" }
|
|
364
|
+
],
|
|
365
|
+
"verify": ["各语言时间轴一致", "非拉丁文字无缺字/断行错误", "字幕在安全区内", "配音后响度仍达标"]
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"id": "cleanup-restore",
|
|
369
|
+
"title": "素材清理与修复(降噪/稳定/去杂物)",
|
|
370
|
+
"skills": ["artcraft-motion-vfx", "artcraft-color-light", "artcraft-batch-pipeline"],
|
|
371
|
+
"when": "素材有噪声、抖动、脏点或需要局部抹除",
|
|
372
|
+
"steps": [
|
|
373
|
+
{ "app": "filmcraft", "cmd": "probe", "note": "先判断素材问题类型(噪点/抖动/闪烁/压缩块)" },
|
|
374
|
+
{ "app": "effectcraft", "cmd": "track.stabilize", "note": "稳定:先分析再应用,稳定后需缩放补偿黑边" },
|
|
375
|
+
{ "app": "effectcraft", "cmd": "effect.apply", "params": { "effect": "ec.noise.removegrain" }, "note": "去颗粒;与 addGrain 配对(去多了会塑料感)" },
|
|
376
|
+
{ "app": "effectcraft", "cmd": "effect.apply", "params": { "effect": "ec.blur.camerashakedeblur" }, "note": "轻度抖动模糊修复(重,先渲单帧)" },
|
|
377
|
+
{ "app": "effectcraft", "cmd": "effect.apply", "params": { "effect": "ec.distort.rollingshutterrepair" }, "note": "手机/运动相机的卷帘快门果冻效应" },
|
|
378
|
+
{ "app": "effectcraft", "cmd": "mask.new", "note": "局部抹除:先用遮罩圈定区域(配合 mask.featherPoint.add 羽化)" },
|
|
379
|
+
{ "app": "effectcraft", "cmd": "effect.apply", "params": { "effect": "ec.generate.fill" }, "note": "遮罩内填充/克隆修补(复杂处用 ec.distort.meshwarp 精修)" },
|
|
380
|
+
{ "app": "filmcraft", "cmd": "mask.track", "note": "若在剪辑层处理:遮罩跟踪(FilmCraft masks.track)" },
|
|
381
|
+
{ "app": "lightcraft", "cmd": "develop.set", "params": { "control": "detail.nrLuminance" }, "note": "照片类素材用 LightCraft 降噪(detail.nr* 7 项)" },
|
|
382
|
+
{ "app": "effectcraft", "cmd": "render-frame", "note": "先单帧复核,再半分辨率预演,最后全质量" }
|
|
383
|
+
],
|
|
384
|
+
"verify": ["处理前后同一帧对比(去噪未糊细节)", "稳定后无黑边/无呼吸感", "抹除处无可见接缝", "抽帧目检通过"]
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
"id": "social-pack",
|
|
388
|
+
"title": "社交分发包(一源多平台 + 封面)",
|
|
389
|
+
"skills": ["artcraft-delivery-qc", "artcraft-shot-language", "artcraft-edit-rhythm"],
|
|
390
|
+
"when": "一条正片要出多平台版本(横屏 + 竖屏 + 方形)与配套封面/缩略图",
|
|
391
|
+
"steps": [
|
|
392
|
+
{ "app": "filmcraft", "cmd": "probe", "note": "先确认源规格与时长上限(各平台不同)" },
|
|
393
|
+
{ "app": "filmcraft", "cmd": "file.newSequence", "params": { "width": 1080, "height": 1920, "fps": 30 }, "note": "竖屏版(抖音/Reels/Shorts)" },
|
|
394
|
+
{ "app": "filmcraft", "cmd": "timeline.place", "note": "竖屏重排:保留主体,必要处加运动跟随" },
|
|
395
|
+
{ "app": "filmcraft", "cmd": "file.exportMedia", "params": { "format": "h264", "width": 1080, "height": 1920 }, "note": "竖屏导出(-14 LUFS)" },
|
|
396
|
+
{ "app": "filmcraft", "cmd": "file.exportMedia", "params": { "format": "h264", "width": 1920, "height": 1080 }, "note": "横屏导出(B 站/YouTube)" },
|
|
397
|
+
{ "app": "filmcraft", "cmd": "render", "params": { "seconds": 3, "out": "<项目>/craft/cover-frame.png" }, "note": "抓封面底帧(挑信息量最大的一帧)" },
|
|
398
|
+
{ "app": "photocraft", "cmd": "run", "note": "封面加字(显式字体、层级 ≥2 级、留 5% 安全边距)" },
|
|
399
|
+
{ "app": "deckcraft", "cmd": "render", "note": "方形/多尺寸变体:用幻灯片模板一次出 1:1 / 9:16 / 16:9" },
|
|
400
|
+
{ "app": "filmcraft", "cmd": "captions.export", "note": "导出各平台所需字幕格式(srt/vtt/scc/ttml)" },
|
|
401
|
+
{ "app": "filmcraft", "cmd": "metadata.set", "note": "写标题/描述/场景标签(平台上传用)" }
|
|
402
|
+
],
|
|
403
|
+
"verify": ["各平台规格逐个 artcraft_qc 通过", "封面文字在安全区内且缩略图可读", "字幕格式与平台匹配", "响度全平台达标"]
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
"id": "longform-clips",
|
|
407
|
+
"title": "长素材切片(直播/课程/访谈 → 短视频)",
|
|
408
|
+
"skills": ["artcraft-edit-rhythm", "artcraft-delivery-qc", "artcraft-batch-pipeline"],
|
|
409
|
+
"when": "几十分钟到几小时的长录,要切出多个可发布的短片",
|
|
410
|
+
"steps": [
|
|
411
|
+
{ "app": "filmcraft", "cmd": "probe", "note": "长素材先探(注意文件体积与帧率/VFR)" },
|
|
412
|
+
{ "app": "filmcraft", "cmd": "media.createProxies", "note": "长素材先建代理(剪辑流畅),导出前 media.reconnectFullRes" },
|
|
413
|
+
{ "app": "filmcraft", "cmd": "transcript.generate", "note": "先转写:长素材靠文本定位远比拖时间线高效" },
|
|
414
|
+
{ "app": "filmcraft", "cmd": "transcript.search", "params": { "query": "<关键词>" }, "note": "按关键词定位候选片段" },
|
|
415
|
+
{ "app": "filmcraft", "cmd": "transcript.removePauses", "note": "去停顿(口播类大幅压缩时长)" },
|
|
416
|
+
{ "app": "filmcraft", "cmd": "transcript.removeFillers", "note": "去口头禅" },
|
|
417
|
+
{ "app": "filmcraft", "cmd": "transcript.createCaptions", "note": "生成字幕(短视频强制字幕)" },
|
|
418
|
+
{ "app": "filmcraft", "cmd": "timeline.razor", "note": "按定位点切出片段(timeline.place 到新序列)" },
|
|
419
|
+
{ "app": "filmcraft", "cmd": "captions.setStyle", "note": "短视频字幕样式(大字号、安全区)" },
|
|
420
|
+
{ "app": "filmcraft", "cmd": "file.exportMedia", "params": { "format": "h264", "width": 1080, "height": 1920 }, "note": "每个切片独立导出(可批量脚本)" },
|
|
421
|
+
{ "app": "filmcraft", "cmd": "media.reconnectFullRes", "note": "导出后切回全分辨率(若还要继续剪)" }
|
|
422
|
+
],
|
|
423
|
+
"verify": ["每个切片有独立开头与结尾(不留半句)", "字幕完整且与语音同步", "artcraft_qc 逐条通过", "命名规范且分批次存放"]
|
|
424
|
+
}
|
|
142
425
|
]
|
|
143
426
|
}
|
package/skills/README.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# ArtCraft craft skill pack (bundled with @ninkch/dsh-artcraft)
|
|
2
|
+
|
|
3
|
+
Eleven skills ship inside this plugin. They are registered through the plugin's own skill
|
|
4
|
+
provider (`@ninkch/dsh-artcraft/skills`) and load on demand — you never install them separately.
|
|
5
|
+
|
|
6
|
+
Skill bodies are written in Chinese (the maintainer's language and the language of the rest of the
|
|
7
|
+
plugin's knowledge base). Models read both languages natively; this index gives the English summary
|
|
8
|
+
so you know which skill to open.
|
|
9
|
+
|
|
10
|
+
| Skill | What it teaches | Open it when |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| `artcraft-ops` | Which family member to use, the three execution channels (headless CLI / control channel / HTTP job), self-discovery via `commands` · `describe` · `exec app.capabilities`, probe→change→verify discipline, batching, long jobs, failure playbook | Any task that drives the suite; read first |
|
|
13
|
+
| `artcraft-shot-language` | Shot language: shot sizes, camera positions, movement, composition, lighting, 180° axis, coverage and storyboards, each with "when to use / when not to", mapped to family commands | Designing shots, storyboards, framing |
|
|
14
|
+
| `artcraft-edit-rhythm` | Editing rhythm: shot duration vs emotion curve, five reliable cut points, match cuts, J/L cuts, jump cuts, montage, transition dictionary ("the cut is the default"), beat cutting, auto rough-cut via `transcript.*` | Cutting, pacing, transitions |
|
|
15
|
+
| `artcraft-color-light` | Grade order (unify → correct → stylise), primary/secondary, skin-tone priority, cross-shot matching (`lumetri.applyMatch`), scopes as objective evidence, Log/HDR→delivery, look recipes per genre | Grading, matching shots, look development |
|
|
16
|
+
| `artcraft-sound-design` | Dialogue-first audio: cleanup chain, Essential Sound types, loudness targets (−14/−23/−16 LUFS), true peak, music in/out points, ducking, mixing, stems | Mixing, loudness, dialogue repair |
|
|
17
|
+
| `artcraft-motion-vfx` | Which layer to work in (clip effect vs composite), 307 effects by category with usage, keyframes and easing, graphics templates, tracking/stabilising/keying/roto order, 3D cameras, render-cost control | Motion design, compositing, VFX |
|
|
18
|
+
| `artcraft-delivery-qc` | Platform specs, export presets, interchange formats (EDL/XML/FCPXML/OTIO/AAF/OMF), objective QC (scopes, audio health, a11y, validation), subjective review, naming/versioning, delivery checklist | Before handing anything over |
|
|
19
|
+
| `artcraft-style-bible` | Consistency locks: the 7-step look bible, which family mechanism locks which asset (presets, .fcgt templates, symbols, variables, themes), cross-episode checklist, anti-patterns | Starting a project or series; keeping 60 episodes coherent |
|
|
20
|
+
| `artcraft-film-study` | Shot-by-shot film study: 8-step method, shot-table schema, emotion-score criteria, traceable conclusions, report template | Analysing an existing film (review/research) |
|
|
21
|
+
| `artcraft-batch-pipeline` | Batch and pipeline work: headless batch formats, HTTP job queue, in-app queues, proxies and cache, media health/relink, incremental and resumable runs, retries, QC hook-up | Dozens/hundreds of files, a whole season |
|
|
22
|
+
| `artcraft-multicam` | Multicam: build sources, align, grid browsing, `selectCamera*` vs `cutToCamera*`, live switching, audio-follows-video, cross-camera matching, switching rhythm | Interviews, concerts, live cuts |
|
|
23
|
+
|
|
24
|
+
## Reference files (loaded with a skill)
|
|
25
|
+
|
|
26
|
+
| File | Contents |
|
|
27
|
+
|---|---|
|
|
28
|
+
| `artcraft-ops/references/command-families.md` | Measured command families of all 13 apps |
|
|
29
|
+
| `artcraft-color-light/references/develop-controls.md` | All 122 LightCraft develop controls by section |
|
|
30
|
+
| `artcraft-color-light/references/lumetri-and-scopes.md` | Lumetri/LUT/scopes interface (verified) |
|
|
31
|
+
| `artcraft-motion-vfx/references/effect-catalogue.md` | All 307 EffectCraft effects with `ec.*` ids |
|
|
32
|
+
| `artcraft-motion-vfx/references/scene-to-effect.md` | Intent → effect-id lookup |
|
|
33
|
+
| `artcraft-sound-design/references/essential-sound.md` | Essential Sound commands and verified parameter keys |
|
|
34
|
+
| `artcraft-edit-rhythm/references/transitions.md` | Transition interface + selection decision table |
|
|
35
|
+
| `artcraft-shot-language/references/shot-vocabulary.md` | Shot/angle/movement/composition/lighting glossary |
|
|
36
|
+
| `artcraft-delivery-qc/references/platform-specs.md` | Platform, codec, subtitle, print and QC specs |
|
|
37
|
+
|
|
38
|
+
## Want them outside the plugin?
|
|
39
|
+
|
|
40
|
+
Any `SKILL.md`-style pack can also be installed as an ordinary filesystem skill: drop the folder
|
|
41
|
+
into `<dshHome>/skills` (user level), `<project>/.dsh/skills`, or `<project>/.agents/skills`.
|
|
42
|
+
Filesystem skills of the same name take precedence over the bundled ones, so you can fork and
|
|
43
|
+
override any of these without touching the plugin.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: artcraft-batch-pipeline
|
|
3
|
+
description: 批量与流水线——把"一条一条手工做"变成可复跑的生产线:无头批处理(PhotoCraft batch/droplet、FilmCraft run script.jsonl、DeckCraft/DesignCraft/SoundCraft run|script、FigCraft run、GridCraft --script)、HTTP 任务队列(POST /artcraft/api/job 轮询/取消)、应用内队列(jobs.list/jobs.cancel、renderQueue、export --queue)、代理与缓存(media.createProxies/attachProxies/reconnectFullRes、mediaCache.info/clean)、媒体健康与重链(media.status/findMissing/autoRelink/relink/replaceFootage)、增量与断点续跑、失败重试与产物质检挂钩。用于成批素材、整季剧集、批量导出与长任务管理。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 批量与流水线
|
|
7
|
+
|
|
8
|
+
**批量的价值不在"快",而在"可复跑、可校验、可续跑"。** 一次跑 500 个文件却没有校验,等于制造 500 个待排查问题。
|
|
9
|
+
|
|
10
|
+
## 一、四种批量形态(按规模与时长选)
|
|
11
|
+
|
|
12
|
+
| 形态 | 适用 | 入口 |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| **无头批处理** | 同构操作、分钟级 | PhotoCraft `batch --actions` / `droplet`;FilmCraft `run <script.jsonl>`;DeckCraft·DesignCraft·SoundCraft `run [--cmd …]` / `script <file>`;FigCraft `run <script.json|jsonl>`;GridCraft `--script FILE.jsonl` |
|
|
15
|
+
| **HTTP 任务队列** | 单个长任务(渲染/导出),分钟到小时 | `POST /artcraft/api/job {bin,args,outputs}` → 轮询 `GET /job?id=` → `GET /artcraft/api/file` 取产物;`POST /artcraft/api/job/cancel` |
|
|
16
|
+
| **应用内队列** | 已在 App 里的导出/渲染 | FilmCraft `jobs.list` / `jobs.cancel`、导出 `--queue`;EffectCraft `render … --queue` 与 `renderQueue.*` |
|
|
17
|
+
| **外部编排** | 跨成员的长链路 | 由 agent 逐步驱动:每步 CLI + 每步验证(推荐配合 `artcraft_qc`) |
|
|
18
|
+
|
|
19
|
+
**选择口诀**:同一操作 × 多个文件 → 无头批处理;单个文件 × 很久 → HTTP 任务;多条链路 → 外部编排。
|
|
20
|
+
|
|
21
|
+
## 二、写批处理脚本(三种家族格式)
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
# 1) PhotoCraft 动作列表(JSON 数组;也可用 droplet .pcdroplet)
|
|
25
|
+
[{"cmd":"layer.newAdjustmentLayer.curves","params":{"points":[[0,0],[64,48],[192,212],[255,255]]}},
|
|
26
|
+
{"cmd":"filter.sharpen.smartSharpen","params":{"amount":80}}]
|
|
27
|
+
→ photocraft-cli batch --actions <craft/grade.json> --in <media> --out <out> [--format png] [--in-place]
|
|
28
|
+
|
|
29
|
+
# 2) FilmCraft 脚本(JSONL,一行一条,可注释)
|
|
30
|
+
# 调色一批剪辑点
|
|
31
|
+
{"id":"lumetri.applyPreset","params":{"name":"ep01-main"}}
|
|
32
|
+
{"id":"export.presets.list","params":{}}
|
|
33
|
+
→ filmcraft-cli run <craft/pass.jsonl>
|
|
34
|
+
|
|
35
|
+
# 3) 通用:run --cmd 序列(DeckCraft / DesignCraft / SoundCraft / GridCraft / FigCraft)
|
|
36
|
+
→ designcraft-cli run --in <in> --cmd 'style.cell.apply={…}' --cmd 'layout.pages.insert={…}' --export <out>
|
|
37
|
+
→ soundcraft-cli run --in <session.scraft> --cmd 'mix.setStrip={…}' --bounce <out.wav>
|
|
38
|
+
→ figcraft-cli run <script.jsonl> --in <file.figcraft> --out <out>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**纪律**:脚本进 `craft/`、产物进 `out/`、日志进 `reports/`;**输入目录与输出目录必须不同**(家族多数工具默认新文件名,`--in-place` 只在明确要覆盖时用)。
|
|
42
|
+
|
|
43
|
+
## 三、增量与断点续跑
|
|
44
|
+
|
|
45
|
+
| 需求 | 做法 |
|
|
46
|
+
|---|---|
|
|
47
|
+
| 只处理新增/变更 | 比对源文件 mtime/size 与 `reports/` 清单,生成待处理列表后再跑 |
|
|
48
|
+
| 跳过已完成 | 产物存在且 `artcraft_qc` 通过 → 跳过;否则重跑 |
|
|
49
|
+
| 断点续跑 | 脚本按行执行,失败行单独存 `craft/failed.jsonl`,修好后只重跑该文件 |
|
|
50
|
+
| 分段渲染 | EffectCraft `render --start/--end` 分段;失败只重跑该段 |
|
|
51
|
+
| 缓存复用 | `mediaCache.info` 查看缓存;`mediaCache.clean` 释放空间;EffectCraft `render --cache DIR` 复用未变阶段 |
|
|
52
|
+
|
|
53
|
+
## 四、媒体健康与代理(长项目必备)
|
|
54
|
+
|
|
55
|
+
| 命令 | 用途 |
|
|
56
|
+
|---|---|
|
|
57
|
+
| `media.status` / `media.findMissing` | 体检:哪些素材丢失/离线 |
|
|
58
|
+
| `media.autoRelink` / `media.relink` / `media.linkMedia` | 重链素材(换机器/换盘后) |
|
|
59
|
+
| `media.refreshChanged` / `media.replaceFootage` | 源文件已更新 / 替换素材(保留剪辑) |
|
|
60
|
+
| `media.search` | 在素材库里检索 |
|
|
61
|
+
| `media.createProxies` / `media.attachProxies` / `media.toggleProxies` / `media.detachProxies` / `media.reconnectFullRes` | **代理流程**:大素材剪辑用代理,导出前切回全分辨率 |
|
|
62
|
+
| `media.proxyPresets` | 查看代理预设 |
|
|
63
|
+
| `state.inspect` / `history.list` / `events.list` / `events.clear` | 工程状态、历史、事件(排查"为什么变了") |
|
|
64
|
+
|
|
65
|
+
**代理铁律**:导出前必须 `media.reconnectFullRes`(否则交付的是代理画质)。
|
|
66
|
+
|
|
67
|
+
## 五、失败与重试
|
|
68
|
+
|
|
69
|
+
1. **先探后跑**:批处理前对**一个样本**跑通全链路(含质检),再全量。
|
|
70
|
+
2. **失败隔离**:单个文件失败不要终止全批;记录文件+错误+时间,继续下一条。
|
|
71
|
+
3. **重试策略**:区分"可重试"(超时、临时占用)与"不可重试"(素材损坏、路径不存在);后者直接报给调用方。
|
|
72
|
+
4. **产物校验**:每条产物跑 `artcraft_qc { path, platform }`,把 `reports/` 里存 QC 输出。
|
|
73
|
+
5. **超时**:CLI 侧 `--timeoutMs`(本插件工具)/ HTTP 任务自带超时与取消;不要无限等待。
|
|
74
|
+
|
|
75
|
+
## 六、目录与命名(批处理尤其重要)
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
<project>/
|
|
79
|
+
media/ 源素材(只读)
|
|
80
|
+
craft/ 脚本与工程:grade.json · pass.jsonl · failed.jsonl
|
|
81
|
+
out/<批次>/ 产物:<name>_<平台>_<版本>.<ext>
|
|
82
|
+
reports/<批次>/ 清单.json · qc/*.json · 日志
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**批次号进目录名**(`out/2026-10-16-batch1/`),便于回滚与对比。
|
|
86
|
+
|
|
87
|
+
## 七、反模式
|
|
88
|
+
|
|
89
|
+
| 反模式 | 后果 | 纠正 |
|
|
90
|
+
|---|---|---|
|
|
91
|
+
| 全量直接跑、无样本 | 500 个文件一起错 | 先样本,再全量 |
|
|
92
|
+
| 输出目录 = 输入目录 | 覆盖原片(不可逆) | 目录分离;`--in-place` 需显式且先备份 |
|
|
93
|
+
| 无质检 | "跑完了"但对不上规格 | 每条产物 `artcraft_qc` |
|
|
94
|
+
| 忘了切回全分辨率 | 交付代理画质 | 导出前 `media.reconnectFullRes` |
|
|
95
|
+
| 反复全量重渲染 | 浪费时间与电 | 缓存/分段/增量 |
|
|
96
|
+
| 失败即终止全批 | 一个坏文件阻塞全部 | 失败隔离 + 清单 |
|