@ninkch/dsh-artcraft 0.3.0 → 0.3.2
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/CHANGELOG.md +158 -0
- package/README.md +11 -29
- package/README.zh-CN.md +7 -19
- package/apps/catalog.json +14 -14
- package/artcraft.config.json.example +2 -2
- package/client.js +26 -0
- package/index.js +44 -8
- package/package.json +5 -1
- package/skills/artcraft-color-light/SKILL.md +3 -1
- package/skills/artcraft-delivery-qc/references/platform-specs.md +5 -2
- package/skills/artcraft-motion-vfx/SKILL.md +1 -1
- package/skills/artcraft-motion-vfx/references/scene-to-effect.md +1 -1
- package/skills/artcraft-ops/references/command-families.md +25 -25
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
Format: `## [X.Y.Z] -- date`. Entries are rebuilt from git tags and commit
|
|
5
|
+
history; where the record is incomplete the entry says so instead of guessing.
|
|
6
|
+
|
|
7
|
+
Released versions are exactly the git tags listed below. Versions without a
|
|
8
|
+
tag (planned but never published) are **not** given entries.
|
|
9
|
+
|
|
10
|
+
## [0.3.1] -- 2026-10-17
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- `fix(tools)`: pass the computed fallback `output` through to
|
|
14
|
+
`ctx.tools.register()` -- fixes issue #1, where every agent tool failed to
|
|
15
|
+
register on DSH 44.0.0 ("must declare output { schema, render,
|
|
16
|
+
presentationMeta? }") while the HTTP API kept working.
|
|
17
|
+
|
|
18
|
+
## [0.3.0] -- 2026-10-16
|
|
19
|
+
|
|
20
|
+
First minor bump, explicitly approved by the maintainer (recorded in
|
|
21
|
+
RELEASING.md); includes everything accumulated since 0.2.10.
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
- `feat`: FigCraft as the 13th family member (bins whitelist, catalog card,
|
|
25
|
+
capability stats) + the first bundled craft skill pack (7 skills).
|
|
26
|
+
- `feat(skills+chains)`: batch-pipeline and multicam skills, 3 more
|
|
27
|
+
task-to-command chains, English skill index, frontend contract docs.
|
|
28
|
+
- `feat(qc-v2+refs)`: app-side QC checks and five deeper craft references.
|
|
29
|
+
- `feat(live)`: control-channel liveness probe (`artcraft_live` +
|
|
30
|
+
`GET /artcraft/api/live`).
|
|
31
|
+
- `feat(ui+recipes)`: plugins-page card shows the bundled skill pack; 3 more
|
|
32
|
+
orchestration chains.
|
|
33
|
+
- `feat(api)`: capability stats and bundled skill pack over HTTP.
|
|
34
|
+
- `feat(qc+skills)`: deterministic delivery QC tool (`artcraft_qc`) + 2 more
|
|
35
|
+
craft skills + deep reference files.
|
|
36
|
+
- `chore(release)`: 0.3.0 release commit.
|
|
37
|
+
|
|
38
|
+
## [0.2.10] -- 2026-10-12
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
- `fix(update UX)`: persistent "restart Harness to finish update" state --
|
|
42
|
+
`/update/check` reports disk-vs-running version mismatch
|
|
43
|
+
(`pendingRestart`/`pendingVersion`/`diskVersion`); the client keeps the note
|
|
44
|
+
across re-mounts and suppresses the misleading "update available" state
|
|
45
|
+
while a restart is pending.
|
|
46
|
+
- `docs(RELEASING)`: GitHub-facing text must be English/ASCII-only --
|
|
47
|
+
`Invoke-RestMethod` string bodies mangled non-ASCII into `?` (Latin-1
|
|
48
|
+
fallback); always send UTF-8 bytes + charset and read the body back.
|
|
49
|
+
|
|
50
|
+
## [0.2.9] -- 2026-10-12
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
- `feat`: family expanded to 12 apps -- WordCraft, DeckCraft, GridCraft,
|
|
54
|
+
CADCraft, SoundCraft (bins whitelist, CLI defaults, display labels, client
|
|
55
|
+
card, auto-discovery, example config, docs).
|
|
56
|
+
- `feat`: capability catalog for all 12 family apps -- `apps/catalog.json`
|
|
57
|
+
(subcommands / control ports / MCP / repos from official docs and local
|
|
58
|
+
`--help`), `artcraft_apps` tool + `GET /artcraft/api/apps`, control channel
|
|
59
|
+
extended to vectorcraft (7979) and lightcraft (7980) + port passthrough.
|
|
60
|
+
|
|
61
|
+
## [0.2.8] -- 2026-10-12
|
|
62
|
+
|
|
63
|
+
Note: 0.2.7 was planned during this cycle but never published (no tag) -- the
|
|
64
|
+
minor bump was reverted to patch-level increments; the number was reused for
|
|
65
|
+
this release.
|
|
66
|
+
|
|
67
|
+
### Added
|
|
68
|
+
- `feat!`: bridge semantics -- no `dataRoot`; callers decide paths (chat =
|
|
69
|
+
conversation workspace, canvas = project dir); the plugins-page card shows
|
|
70
|
+
the config directory instead. (Breaking API change, shipped as a patch per
|
|
71
|
+
the versioning rule.)
|
|
72
|
+
- `feat(update)`: registry fallback chain (npmjs -> npmmirror) for update
|
|
73
|
+
checks and tarball downloads -- unblocks machines without a proxy.
|
|
74
|
+
- `feat`: first-run auto-discovery of family CLI installs (bootstrap config)
|
|
75
|
+
+ `POST /artcraft/api/discover` + `artcraft_discover` tool.
|
|
76
|
+
- `feat`: the refresh button doubles as family-install discovery (creates /
|
|
77
|
+
repairs the config); `/discover` auto-corrects stale paths.
|
|
78
|
+
- `feat`: built-in expert recipes -- 8 professional workflows with
|
|
79
|
+
principles/steps/checks + the `artcraft_recipes` tool.
|
|
80
|
+
|
|
81
|
+
### Changed
|
|
82
|
+
- `ci`: publish via GitHub Release (OIDC) -- the maintainer pushes, no direct
|
|
83
|
+
pushes from automation.
|
|
84
|
+
- `docs(RELEASING)`: forbid "Frankenstein patches" -- installed copies must
|
|
85
|
+
come from npm only.
|
|
86
|
+
|
|
87
|
+
## [0.2.6] -- 2026-10-11
|
|
88
|
+
|
|
89
|
+
### Added
|
|
90
|
+
- `feat(update)`: deterministic tarball updater v2 (sha512 from
|
|
91
|
+
`dist.integrity` + atomic swap, bypasses the pnpm age-gate); config now
|
|
92
|
+
persists at `~/.dsh/artcraft.config.json`.
|
|
93
|
+
|
|
94
|
+
### Fixed
|
|
95
|
+
- `ci(guard)`: tolerate push-order races -- the main-ancestor check retries 3x
|
|
96
|
+
before failing.
|
|
97
|
+
|
|
98
|
+
## [0.2.5] -- 2026-10-10
|
|
99
|
+
|
|
100
|
+
### Added
|
|
101
|
+
- `feat(update)`: npm-mode self-update pins the official registry; docs cover
|
|
102
|
+
the install-mode switch to npm.
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
- `fix(tools)`: `output` declaration `{ schema, render }` -- matches the host
|
|
106
|
+
requirement; verified through the poster/video integration session.
|
|
107
|
+
|
|
108
|
+
### Changed
|
|
109
|
+
- `ci`: new guard -- `package.json` version must match the release tag.
|
|
110
|
+
- `docs(RELEASING)`: record version/tag mismatch and update-semantics lessons.
|
|
111
|
+
- `fix(release)`: bump `package.json` 0.2.4 -> 0.2.5 (the version guard
|
|
112
|
+
correctly intercepted the missing bump).
|
|
113
|
+
|
|
114
|
+
## [0.2.4] -- 2026-10-10
|
|
115
|
+
|
|
116
|
+
### Added
|
|
117
|
+
- `feat(ui)`: status card on the plugins page via the `plugins.bundle.config`
|
|
118
|
+
keyed slot; 7-family bins; EffectCraft path resolution.
|
|
119
|
+
- `chore`: release governance -- dev/main branching, main-tag guard,
|
|
120
|
+
RELEASING.md rules.
|
|
121
|
+
|
|
122
|
+
### Fixed
|
|
123
|
+
- `fix(release)`: bump `package.json` 0.2.3 -> 0.2.4 (tag/version mismatch
|
|
124
|
+
had broken publishing).
|
|
125
|
+
|
|
126
|
+
## [0.2.3] -- 2026-10-10
|
|
127
|
+
|
|
128
|
+
### Fixed
|
|
129
|
+
- `fix`: strip the UTF-8 BOM from `package.json` (the DSH loader's
|
|
130
|
+
`JSON.parse` rejects BOMs; the package loaded as broken).
|
|
131
|
+
|
|
132
|
+
## [0.2.2] -- 2026-10-10
|
|
133
|
+
|
|
134
|
+
### Fixed
|
|
135
|
+
- `fix(tools)`: declare the `output` schema (the registry requires
|
|
136
|
+
`{ schema, render?, presentationMeta? }`).
|
|
137
|
+
|
|
138
|
+
## [0.2.1] -- 2026-10-10
|
|
139
|
+
|
|
140
|
+
### Changed
|
|
141
|
+
- `feat(ui)`: move status/update into the Plugins page detail card; the
|
|
142
|
+
sidebar panel is dropped (the bridge does not belong in the main panel).
|
|
143
|
+
|
|
144
|
+
## [0.2.0] -- 2026-10-10
|
|
145
|
+
|
|
146
|
+
### Added
|
|
147
|
+
- `feat`: self-update (check/apply) + a sidebar panel with toolchain status.
|
|
148
|
+
- `ci`: npm Trusted Publishing workflow (OIDC, release-triggered).
|
|
149
|
+
|
|
150
|
+
## [0.1.1] -- 2026-10-10
|
|
151
|
+
|
|
152
|
+
### Added
|
|
153
|
+
- `feat`: initial plugin -- PhotoCraft / FilmCraft / EffectCraft automation
|
|
154
|
+
via headless CLIs and JSON control channels (as `@local/artcraft 0.1.1`).
|
|
155
|
+
- `docs`: bilingual product README (English-first + zh-CN), npm metadata.
|
|
156
|
+
- `docs(license)`: Apache-2.0 for the plugin; ArtCraft apps are fair-source
|
|
157
|
+
(verbatim notice in NOTICE.md).
|
|
158
|
+
- `chore!`: rename to `@ninkch/dsh-artcraft` for npm + profile registration.
|
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ for agents from day one.
|
|
|
27
27
|
This plugin brings that surface into DeepSeek Harness, so an AI agent can *operate* the apps —
|
|
28
28
|
not just talk about them:
|
|
29
29
|
|
|
30
|
-
- **In chat** —
|
|
30
|
+
- **In chat** — ten agent tools let any Harness session check the toolchain, run CLI commands,
|
|
31
31
|
send control-channel commands to a running app, do bridged file operations, run delivery QC,
|
|
32
32
|
and consult a per-app capability catalog.
|
|
33
33
|
- **A bundled craft skill pack** — eleven skills (`artcraft-ops`, `artcraft-shot-language`,
|
|
@@ -43,9 +43,6 @@ not just talk about them:
|
|
|
43
43
|
- **Paths belong to the caller** — this plugin is a bridge and owns no data directory. Files read
|
|
44
44
|
or written go wherever the caller points: chat invocations default to the current conversation
|
|
45
45
|
workspace (or any path named in the prompt); the canvas writes under its own project folder.
|
|
46
|
-
- **Paths belong to the caller** — this plugin is a bridge and owns no data directory. Files read
|
|
47
|
-
or written go wherever the caller points: chat invocations default to the current conversation
|
|
48
|
-
workspace (or any path named in the prompt); the canvas writes under its own project folder.
|
|
49
46
|
|
|
50
47
|
A typical AI short-drama loop looks like this: generate storyboard frames with a model →
|
|
51
48
|
batch color-grade and sharpen them in PhotoCraft → render an animated title in EffectCraft →
|
|
@@ -81,7 +78,7 @@ Everything runs locally. No cloud round-trips, no accounts, no telemetry.
|
|
|
81
78
|
- **ArtCraft apps** — grab what you need from [getartcraft.com](https://getartcraft.com/apps)
|
|
82
79
|
or the [storytold GitHub releases](https://github.com/storytold). The portable/installer builds
|
|
83
80
|
ship the CLI binaries on Windows and Linux (`photocraft-cli.exe` …); macOS ships them as a
|
|
84
|
-
separate notarized zip. Versions tested: PhotoCraft 0.
|
|
81
|
+
separate notarized zip. Versions tested: PhotoCraft 0.9, FilmCraft 0.8, EffectCraft (early).
|
|
85
82
|
- Nothing else. No Python, no FFmpeg — the ArtCraft apps bring their own codecs.
|
|
86
83
|
|
|
87
84
|
## Setup
|
|
@@ -127,8 +124,8 @@ re-read on every request — no restart needed for path changes:
|
|
|
127
124
|
"bins": {
|
|
128
125
|
// three accepted forms: a directory (the <name>-cli binary is appended),
|
|
129
126
|
// a full path to the executable, or a bare name looked up on PATH
|
|
130
|
-
"photocraft": "C:/craft
|
|
131
|
-
"filmcraft": "C:/craft
|
|
127
|
+
"photocraft": "C:/craft/<PhotoCraft portable folder>",
|
|
128
|
+
"filmcraft": "C:/craft/<FilmCraft portable folder>",
|
|
132
129
|
"effectcraft": "C:/Program Files/EffectCraft"
|
|
133
130
|
},
|
|
134
131
|
"control": { "filmcraft": 9876, "effectcraft": 9877 }
|
|
@@ -140,7 +137,7 @@ re-read on every request — no restart needed for path changes:
|
|
|
140
137
|
|
|
141
138
|
## Driving it from chat
|
|
142
139
|
|
|
143
|
-
The plugin registers
|
|
140
|
+
The plugin registers ten tools. The agent composes them, so plain language works:
|
|
144
141
|
|
|
145
142
|
> *"Color-grade every PNG in `demo/media` with a soft S-curve and smart sharpening at 80, put the
|
|
146
143
|
> results in `demo/out/graded`."*
|
|
@@ -154,7 +151,7 @@ artcraft_cli { bin:"photocraft", args:["batch","--actions","demo/craft/grade.js
|
|
|
154
151
|
|
|
155
152
|
| Tool | What it does |
|
|
156
153
|
|---|---|
|
|
157
|
-
| `artcraft_status` | Toolchain health check: which of the
|
|
154
|
+
| `artcraft_status` | Toolchain health check: which of the 13 CLIs resolved, config location, control ports, running jobs |
|
|
158
155
|
| `artcraft_cli` | Run any CLI subcommand synchronously (`photocraft-cli run/batch`, `wordcraft-cli convert`, …) |
|
|
159
156
|
| `artcraft_control` | One command over the JSON control channel of a *running* app (filmcraft 9876 / effectcraft 9877 / vectorcraft 7979 / lightcraft 7980, or pass `port`) |
|
|
160
157
|
| `artcraft_fs` | Bridged file ops — list / stat / read / write / mkdir at caller-decided absolute paths |
|
|
@@ -198,7 +195,7 @@ Full route list:
|
|
|
198
195
|
| `POST /artcraft/api/control` | Synchronous control-channel call (`app` or `port`) |
|
|
199
196
|
| `GET /artcraft/api/apps[?id=…]` | Family capability catalog (13 apps + command-family stats) |
|
|
200
197
|
| `GET /artcraft/api/qc?path=…[&platform=…][&kind=…]` | Delivery QC: platform-spec checks with fix commands |
|
|
201
|
-
| `GET /artcraft/api/skills` | Bundled skill pack listing (
|
|
198
|
+
| `GET /artcraft/api/skills` | Bundled skill pack listing (11 skills + their reference files) |
|
|
202
199
|
| `GET /artcraft/api/live[?ports=app:port,…]` | Control-channel liveness (which apps are running) |
|
|
203
200
|
| `POST /artcraft/api/discover` | Family install discovery + config self-repair |
|
|
204
201
|
| `GET /artcraft/api/update/check` · `POST /artcraft/api/update/apply` | The plugin's own update |
|
|
@@ -332,22 +329,7 @@ explicit approval.
|
|
|
332
329
|
|
|
333
330
|
## License
|
|
334
331
|
|
|
335
|
-
|
|
336
|
-
ArtCraft apps' code
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
**The ArtCraft apps themselves** are *not* OSI open source: they are distributed under the
|
|
340
|
-
**ArtCraft License (WIP)**, a "fair source" license ([verbatim text](NOTICE.md)). The short
|
|
341
|
-
version for anyone building on them:
|
|
342
|
-
|
|
343
|
-
- ✅ free to use; back up, copy, modify and compile for private purposes
|
|
344
|
-
- ✅ **every piece of media you create with the apps is yours** — your rendered episodes are
|
|
345
|
-
commercial assets, full stop
|
|
346
|
-
- ❌ no selling the apps as your own software, no competing products built from their code
|
|
347
|
-
- ❌ no stripping community/donation links from a fork; no using the ArtCraft name, logo or
|
|
348
|
-
mascots to promote a business without permission
|
|
349
|
-
- 🤝 the team's public promise: if the business ever ends, the software transitions to an
|
|
350
|
-
OSI-approved open-source license
|
|
351
|
-
|
|
352
|
-
Practical reading for an AI short-drama studio: run the apps locally, leave their community
|
|
353
|
-
links alone, and sell your films — not the apps.
|
|
332
|
+
This plugin (`@ninkch/dsh-artcraft`): **Apache-2.0** — see [LICENSE](LICENSE). It ships none of the
|
|
333
|
+
ArtCraft apps' code; it only drives their public automation surfaces (headless CLI + JSON control
|
|
334
|
+
channel). The ArtCraft apps themselves are separate projects by the ArtCraft team — the apps' own
|
|
335
|
+
licenses apply to the apps.
|
package/README.zh-CN.md
CHANGED
|
@@ -25,7 +25,7 @@ Adobe 对标工具,共 **13 个应用**:**PhotoCraft**(Photoshop)、**Ve
|
|
|
25
25
|
|
|
26
26
|
本插件把这套自动化面接进 DeepSeek Harness,让 AI 不只是"谈论"这些软件,而是真的**操作**它们:
|
|
27
27
|
|
|
28
|
-
- **对话里** ——
|
|
28
|
+
- **对话里** —— 十个 Agent 工具,任何 Harness 会话都能检查工具链、执行 CLI 命令、向运行中的
|
|
29
29
|
App 发控制通道命令、做桥接文件操作、跑交付质检、查每个应用的能力目录。
|
|
30
30
|
- **随插件分发的技能包** —— 十一个技能(`artcraft-ops`、`artcraft-shot-language`、
|
|
31
31
|
`artcraft-edit-rhythm`、`artcraft-color-light`、`artcraft-sound-design`、`artcraft-motion-vfx`、
|
|
@@ -70,7 +70,7 @@ FilmCraft 剪辑、调色、混音、烧字幕 → 导出 H.264。"生成"之后
|
|
|
70
70
|
- **ArtCraft 应用** —— 从 [getartcraft.com](https://getartcraft.com/apps) 或
|
|
71
71
|
[storytold GitHub Releases](https://github.com/storytold) 按需下载。Windows 与 Linux 的
|
|
72
72
|
portable/安装包内置 CLI(`photocraft-cli.exe` 等);macOS 的 CLI 是单独的公证 zip。
|
|
73
|
-
已验证版本:PhotoCraft 0.
|
|
73
|
+
已验证版本:PhotoCraft 0.9、FilmCraft 0.8、EffectCraft(早期构建)。
|
|
74
74
|
- 其他什么都不需要:无 Python、无 FFmpeg —— ArtCraft 自带编解码器。
|
|
75
75
|
|
|
76
76
|
## 安装
|
|
@@ -112,8 +112,8 @@ pnpm install --dir C:/Users/<你>/.dsh/profiles/desktop
|
|
|
112
112
|
{
|
|
113
113
|
"bins": {
|
|
114
114
|
// 三种写法:目录(自动拼接 <名>-cli 可执行文件)、完整 exe 路径、或走 PATH 的裸命令名
|
|
115
|
-
"photocraft": "C:/craft
|
|
116
|
-
"filmcraft": "C:/craft
|
|
115
|
+
"photocraft": "C:/craft/<PhotoCraft 便携目录>",
|
|
116
|
+
"filmcraft": "C:/craft/<FilmCraft 便携目录>",
|
|
117
117
|
"effectcraft": "C:/Program Files/EffectCraft"
|
|
118
118
|
},
|
|
119
119
|
"control": { "filmcraft": 9876, "effectcraft": 9877 }
|
|
@@ -124,7 +124,7 @@ pnpm install --dir C:/Users/<你>/.dsh/profiles/desktop
|
|
|
124
124
|
|
|
125
125
|
## 在对话里驱动
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
插件注册十个工具,agent 自行编排,所以自然语言直接可用:
|
|
128
128
|
|
|
129
129
|
> *"把 `demo/media` 里的 PNG 都用柔和 S 曲线调色、智能锐化 80,结果放进 `demo/out/graded`。"*
|
|
130
130
|
|
|
@@ -137,7 +137,7 @@ artcraft_cli { bin:"photocraft", args:["batch","--actions","demo/craft/grade.js
|
|
|
137
137
|
|
|
138
138
|
| 工具 | 用途 |
|
|
139
139
|
|---|---|
|
|
140
|
-
| `artcraft_status` | 工具体检:
|
|
140
|
+
| `artcraft_status` | 工具体检:13 个 CLI 是否找到、配置目录、控制端口、进行中的任务 |
|
|
141
141
|
| `artcraft_cli` | 同步执行任意 CLI 子命令(`photocraft-cli run/batch`、`wordcraft-cli convert` 等) |
|
|
142
142
|
| `artcraft_control` | 向**运行中**的 App 控制通道发一条命令(filmcraft 9876 / effectcraft 9877 / vectorcraft 7979 / lightcraft 7980,或 port 直连) |
|
|
143
143
|
| `artcraft_fs` | 桥接文件操作 —— list / stat / 读 / 写 / 建目录,路径由调用方绝对指定 |
|
|
@@ -306,16 +306,4 @@ GitHub 上传本仓库即可:`README.md` 英文优先,附
|
|
|
306
306
|
|
|
307
307
|
## 许可
|
|
308
308
|
|
|
309
|
-
**本插件(`@ninkch/dsh-artcraft`):Apache-2.0**(见 [LICENSE](LICENSE))。不包含 ArtCraft
|
|
310
|
-
(无头 CLI + JSON 控制通道)。
|
|
311
|
-
|
|
312
|
-
**ArtCraft 各应用本身并非 OSI 开源**:它们采用 **ArtCraft License (WIP)** —— 一种 "fair source"
|
|
313
|
-
(公平源代码)许可([全文见 NOTICE.md](NOTICE.md))。给构建在其上的使用者划重点:
|
|
314
|
-
|
|
315
|
-
- ✅ 免费使用;可为私人目的备份、复制、修改、编译
|
|
316
|
-
- ✅ **用这些应用创作的所有媒体完全归你** —— 渲染出的短剧成片就是你的商业资产,没有附加条件
|
|
317
|
-
- ❌ 不得把应用当作自己的软件出售;不得用其代码开发竞品
|
|
318
|
-
- ❌ 不得在 fork 中移除社区/捐赠链接;未经许可不得用 ArtCraft 名称、Logo 或吉祥物做商业宣传
|
|
319
|
-
- 🤝 团队公开承诺:若业务终结,软件将转为 OSI 认可的开源许可
|
|
320
|
-
|
|
321
|
-
对 AI 短剧工作室的务实解读:本地随便用,别动应用里的社区链接,卖你的片子——而不是卖应用。
|
|
309
|
+
**本插件(`@ninkch/dsh-artcraft`):Apache-2.0**(见 [LICENSE](LICENSE))。不包含 ArtCraft 应用的任何代码——只调用其公开自动化面(无头 CLI + JSON 控制通道)。ArtCraft 各应用本身是 ArtCraft 团队的独立项目,应用自身的条款以其许可为准。
|
package/apps/catalog.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"note": "ArtCraft 家族
|
|
3
|
+
"note": "ArtCraft 家族 13 应用的自动化能力目录。来源:官方 getartcraft.com/apps、各应用 GitHub 仓库(storytold/*)、本机 13 个 <app>-cli --help 实测(2026-10 时点)。要拿某应用的实时命令注册表,用 artcraft_cli 跑该应用的 commands 子命令。",
|
|
4
4
|
"controlProtocol": "家族共用 JSON-lines 控制协议(127.0.0.1:<port>,请求 {\"id\",\"method\",\"params\"},方法如 engine.execute / engine.commands / ui.inspect / ui.screenshot)。App 需以 --control 启动。artcraft_control 已代理有固定默认端口的应用;其余应用端口动态(app --port 启动时指定),可用 artcraft_control 的 port 参数直连。",
|
|
5
5
|
"apps": [
|
|
6
6
|
{
|
|
@@ -325,21 +325,21 @@
|
|
|
325
325
|
}
|
|
326
326
|
],
|
|
327
327
|
"capabilityStats": {
|
|
328
|
-
"note": "2026-10
|
|
328
|
+
"note": "2026-10-21 实测(家族全量更新后:photocraft 0.11.1 / vectorcraft 0.14.0 / filmcraft 0.10.0 / lightcraft 0.10.0 / pdfcraft 0.10.1 / effectcraft 0.13.0 / designcraft 0.10.0 / wordcraft 0.9.0 / deckcraft 0.9.0 / gridcraft 0.9.0 / cadcraft 0.10.0 / soundcraft 0.10.0 / figcraft 0.8.0)。JSON 注册表入口(filmcraft / effectcraft / photocraft / gridcraft / wordcraft / figcraft 用 commands --json)为精确条目数,其余为 id 扫描值(近似)。用 artcraft_cli 跑 commands 可随时复核。",
|
|
329
329
|
"apps": {
|
|
330
|
-
"photocraft": { "commands":
|
|
331
|
-
"vectorcraft": { "commands":
|
|
330
|
+
"photocraft": { "commands": 918, "topFamilies": ["filter 62(gallery 47 / blur 11 / stylize 9 / distort 9 / render 9)", "image.adjustments 9", "layer 26", "edit 31", "select 19", "paint 12", "brush 13", "gradient 12", "type 9", "shape 9", "path 9", "pattern 10", "file.automate 18", "channel 18", "actions 14", "swatches 9", "history 3", "slice 6", "jobs 2", "plugin 5"] },
|
|
331
|
+
"vectorcraft": { "commands": 401, "topFamilies": ["object 71", "perspective 24", "select 18", "text 10", "variable 9", "brush 9", "library 9", "print 9", "pdf.preset 5", "flattener 6", "swatch 15", "document 12", "layer 11", "path 11", "symbol 10", "dataset 10", "shaper 4"] },
|
|
332
332
|
"filmcraft": { "commands": 701, "topFamilies": ["graphics 82", "clip 57", "file 57", "timeline 56", "sequence 45", "project 40", "edit 39", "multicam 35", "markers 32", "trim 24", "captions 22", "mixer 20", "export 19", "effects 16", "transcript 14", "masks 12", "essentialSound 9", "lumetri 7", "tts 7", "lut 4"] },
|
|
333
|
-
"lightcraft": { "commands":
|
|
334
|
-
"pdfcraft": { "commands":
|
|
335
|
-
"effectcraft": { "commands": 731, "effects": 307, "topFamilies": ["layer 121", "view 78", "file 61", "keys 36", "comp 31", "edit 27", "track 22", "essential 22", "renderQueue 20", "effect 19", "camera 19", "prop 18", "mask 17", "time 17", "roto 14", "text 13", "puppet 10"], "exportFormats": ["H264", "Hevc", "Av1", "ProRes", "Uncompressed", "WebM", "PngSequence", "JpegSequence", "TiffSequence", "ExrSequence", "Gif", "Wav", "Aiff"], "expressions": true, "scripting": true },
|
|
336
|
-
"designcraft": { "commands":
|
|
337
|
-
"wordcraft": { "commands":
|
|
338
|
-
"deckcraft": { "commands":
|
|
339
|
-
"gridcraft": { "commands":
|
|
340
|
-
"cadcraft": { "commands": 139, "topFamilies": ["table 11", "arc 10", "zoom 9", "dimstyle 7", "blocks 6", "grip 6", "layout 6", "layerstate 5", "vports 5", "circle 5", "dimtedit 5"] },
|
|
341
|
-
"soundcraft": { "commands":
|
|
342
|
-
"figcraft": { "commands":
|
|
333
|
+
"lightcraft": { "commands": 227, "developControls": 122, "topFamilies": ["print 17(打印版式模板:cell/layout/template)", "slideshow.export", "library 20", "faces 17", "denoise 16", "develop 16(122 个控制 / 14 分区)", "photo 14", "mask 12", "keyword 12", "preset 9", "crop 6", "stack 6"] },
|
|
334
|
+
"pdfcraft": { "commands": 77, "topFamilies": ["edit 13", "page 10", "measure 7", "a11y 5", "export 4", "ocr 3", "form 3", "comment 3", "protect 2", "sign 2", "create 1(新建 PDF)", "text_edit 1"] },
|
|
335
|
+
"effectcraft": { "commands": 731, "effects": 307, "topFamilies": ["layer 121", "view 78", "file 61", "keys 36", "comp 31", "edit 27", "track 22", "essential 22", "renderQueue 20", "effect 19", "camera 19", "prop 18(0.13.0 起属性读写统一走 prop.get/set,effect.setParam 已移除)", "mask 17", "time 17", "roto 14", "text 13", "puppet 10", "face 5(0.13 新增)", "learn 5(0.13 新增)"], "exportFormats": ["H264", "Hevc", "Av1", "ProRes", "Uncompressed", "WebM", "PngSequence", "JpegSequence", "TiffSequence", "ExrSequence", "Gif", "Wav", "Aiff"], "expressions": true, "scripting": true },
|
|
336
|
+
"designcraft": { "commands": 309, "topFamilies": ["object 22", "style 17", "file 15", "transform 10", "data 10", "type 10", "toc 3(目录)", "footnote 4(脚注)", "xref 3(交叉引用)", "index 3(索引)", "preflight.run(印前检查)", "condition 5(条件样式)", "flex 5", "layout 7", "book 7", "article 6"] },
|
|
337
|
+
"wordcraft": { "commands": 633, "topFamilies": ["para 28", "format 25", "file 18", "review 16", "caret 7", "edit 10", "outline 8", "layout 7", "fields 6", "arrange 9", "draw 9", "canvas 4", "chart 3", "shape 6", "equation 15", "insert 15", "table 14", "styles 11", "references 10"] },
|
|
338
|
+
"deckcraft": { "commands": 209, "topFamilies": ["format 32", "shape 19", "slide 15", "file 13", "animation 10", "text 10", "picture 9", "comment 7", "review 7", "table 5", "chart 3", "design 5", "transition 4", "handout 1", "master 2"] },
|
|
339
|
+
"gridcraft": { "commands": 341, "topFamilies": ["home 12", "pivot 11", "insert 10", "data 10", "cell 2", "range 1", "table 3", "object 2", "link 1", "draw 4", "arrange 3", "review 2", "formulas 5", "chart 3", "window 1"] },
|
|
340
|
+
"cadcraft": { "commands": 139, "topFamilies": ["table 11", "arc 10", "zoom 9", "dimstyle 7", "blocks 6", "grip 6", "layout 6", "layerstate 5", "vports 5", "circle 5", "dimtedit 5", "compare 2", "quickcalc 1"] },
|
|
341
|
+
"soundcraft": { "commands": 480, "topFamilies": ["view 96", "edit 93", "track 65", "event 35", "options 35", "clip 31", "mix 29", "setup 20", "file 17", "transport 13", "session 11(含 audio_health)", "automation 10", "midi 6(0.10 新增)", "video 3(0.10 新增)", "audiosuite 1"] },
|
|
342
|
+
"figcraft": { "commands": 569, "topFamilies": ["text 52", "view 48", "vector 40", "object 27", "tool 21", "select 21", "component 21", "collab 20", "file 20", "proto 20", "library 18", "variable 18", "edit 15", "comment 14", "plugin 11", "style 10"] }
|
|
343
343
|
}
|
|
344
344
|
}
|
|
345
345
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bins": {
|
|
3
|
-
"photocraft": "
|
|
3
|
+
"photocraft": "C:/craft/<PhotoCraft portable folder>",
|
|
4
4
|
"vectorcraft": "C:/Program Files/VectorCraft",
|
|
5
|
-
"filmcraft": "
|
|
5
|
+
"filmcraft": "C:/craft/<FilmCraft portable folder>",
|
|
6
6
|
"lightcraft": "C:/Program Files/LightCraft",
|
|
7
7
|
"pdfcraft": "C:/Program Files/PdfCraft",
|
|
8
8
|
"effectcraft": "C:/Program Files/EffectCraft",
|
package/client.js
CHANGED
|
@@ -118,6 +118,29 @@ window.__ModuleLoader__.load({
|
|
|
118
118
|
finally { if (alive.current) setBusy(''); }
|
|
119
119
|
}, []);
|
|
120
120
|
|
|
121
|
+
// 一键自动探测(AC-04):POST /discover 做缺失项填空 + 失效路径纠正;
|
|
122
|
+
// 用户显式配置有效则原样不动(服务端保证),失败/无动作都有明确文案,不静默。
|
|
123
|
+
const runDiscover = useCallback(async () => {
|
|
124
|
+
setBusy('discover'); setOut(''); setDone(false);
|
|
125
|
+
try {
|
|
126
|
+
const r = await api('/discover', { method: 'POST', headers: { 'content-type': 'application/json' }, body: '{}' });
|
|
127
|
+
if (!alive.current) return;
|
|
128
|
+
const applied = r.applied ?? {};
|
|
129
|
+
const appliedNames = Object.keys(applied).map((k) => LABELS[k] || k);
|
|
130
|
+
setOut(
|
|
131
|
+
(r.note || '') + '\n' +
|
|
132
|
+
(appliedNames.length
|
|
133
|
+
? '本次写入配置:' + appliedNames.join('、') + '\n'
|
|
134
|
+
: '没有需要更新的家族程序(已有配置均有效)\n') +
|
|
135
|
+
'已探测到本机安装:' + (Object.keys(r.discovered ?? {}).map((k) => LABELS[k] || k).join('、') || '(无)') + '\n' +
|
|
136
|
+
'配置文件:' + (r.configPath || '(未知)'),
|
|
137
|
+
);
|
|
138
|
+
loadStatus(); // 探测写盘后立即重读 bins 状态,灯色即变
|
|
139
|
+
} catch (e) {
|
|
140
|
+
if (alive.current) setOut('自动探测失败:' + String(e.message || e) + '(可检查插件是否注册、或手动编辑 artcraft.config.json)');
|
|
141
|
+
} finally { if (alive.current) setBusy(''); }
|
|
142
|
+
}, [loadStatus]);
|
|
143
|
+
|
|
121
144
|
useEffect(() => { loadStatus(); checkUpdate(); }, [loadStatus, checkUpdate]);
|
|
122
145
|
|
|
123
146
|
const bins = status?.bins ?? {};
|
|
@@ -153,6 +176,9 @@ window.__ModuleLoader__.load({
|
|
|
153
176
|
(upd?.pendingRestart ? '(磁盘已是 v' + (upd.pendingVersion ?? upd.diskVersion ?? '?') + ',待重启)' : '') +
|
|
154
177
|
(upd ? ' · npm latest v' + (upd.latest ?? '—') : '') +
|
|
155
178
|
(upd?.mode ? '(' + (upd.mode === 'git' ? 'git 仓库' + (upd.gitClean === false ? ' · 有本地改动' : '') : 'npm 安装') + ')' : '')),
|
|
179
|
+
h('button', { className: 'dshac-btn', onClick: runDiscover, disabled: busy !== '',
|
|
180
|
+
title: '自动探测本机 ArtCraft 家族安装位置:缺失项填入配置,已失效的路径被纠正;你的显式有效配置不会被覆盖' },
|
|
181
|
+
busy === 'discover' ? '探测中…' : '自动探测'),
|
|
156
182
|
h('button', { className: 'dshac-btn primary', onClick: checkUpdate, disabled: busy !== '' },
|
|
157
183
|
busy === 'check' ? '检查中…' : '检查更新'),
|
|
158
184
|
h('button', {
|
package/index.js
CHANGED
|
@@ -55,7 +55,7 @@ import crypto from 'node:crypto';
|
|
|
55
55
|
import { fileURLToPath } from 'node:url';
|
|
56
56
|
|
|
57
57
|
const NAME = 'artcraft';
|
|
58
|
-
const VERSION = '0.3.
|
|
58
|
+
const VERSION = '0.3.2';
|
|
59
59
|
const HERE = path.dirname(fileURLToPath(import.meta.url));
|
|
60
60
|
|
|
61
61
|
const BINS = [
|
|
@@ -183,11 +183,13 @@ function resolveCallerPath(p) {
|
|
|
183
183
|
let s = String(p ?? '').trim();
|
|
184
184
|
if (!s) throw new Error('缺少路径参数');
|
|
185
185
|
if (s === '~' || s.startsWith('~/') || s.startsWith('~\\')) s = path.join(os.homedir(), s.slice(1));
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
186
|
+
if (!path.isAbsolute(s)) {
|
|
187
|
+
throw new Error(
|
|
188
|
+
`需要绝对路径,收到相对路径 "${s}" —— 本插件不持有数据目录,不会按进程 cwd 解析;`
|
|
189
|
+
+ '请改传绝对 path=<绝对路径>,或用 base=<绝对目录> + rel=<相对路径>。',
|
|
190
|
+
);
|
|
189
191
|
}
|
|
190
|
-
return
|
|
192
|
+
return path.normalize(s);
|
|
191
193
|
}
|
|
192
194
|
|
|
193
195
|
function resolveBaseRel(base, rel) {
|
|
@@ -364,7 +366,7 @@ async function statOutputs(outputs, cwd) {
|
|
|
364
366
|
try {
|
|
365
367
|
abs = base ? path.resolve(base, spec) : resolveCallerPath(spec);
|
|
366
368
|
} catch {
|
|
367
|
-
out.push({ rel: spec, exists: false, dir: false, size: null, mtime: null });
|
|
369
|
+
out.push({ rel: spec, exists: false, dir: false, size: null, mtime: null, reason: 'relative-output-without-cwd' });
|
|
368
370
|
continue;
|
|
369
371
|
}
|
|
370
372
|
try {
|
|
@@ -1038,6 +1040,9 @@ async function updateApply() {
|
|
|
1038
1040
|
const toolNames = [];
|
|
1039
1041
|
const toolErrors = [];
|
|
1040
1042
|
|
|
1043
|
+
/** 单测钩子:只暴露纯函数,不改运行时行为(scripts/test-fs-paths.mjs 使用) */
|
|
1044
|
+
export const __testables = { resolveCallerPath, resolveBaseRel, statOutputs };
|
|
1045
|
+
|
|
1041
1046
|
export const inject = ['tools', 'webServer'];
|
|
1042
1047
|
|
|
1043
1048
|
export function apply(ctx) {
|
|
@@ -1045,13 +1050,15 @@ export function apply(ctx) {
|
|
|
1045
1050
|
ctx.effect(() => {
|
|
1046
1051
|
const disposers = [];
|
|
1047
1052
|
const attempt = (def) => {
|
|
1053
|
+
// 44.0.0 起注册器强制要求 output(缺了整工具拒注册,见 RELEASING.md 教训与 issue #1):
|
|
1054
|
+
// 兜底 output 必须随 shape 一起传入,两个命名约定都要带。
|
|
1048
1055
|
const output = def.output ?? {
|
|
1049
1056
|
schema: { type: 'object', additionalProperties: true },
|
|
1050
1057
|
render: (_args, value) => [{ type: 'text', text: JSON.stringify(value, null, 2) }],
|
|
1051
1058
|
};
|
|
1052
1059
|
for (const shape of [
|
|
1053
|
-
{ name: def.name, description: def.description, parameters: def.schema, execute: def.execute },
|
|
1054
|
-
{ name: def.name, description: def.description, inputSchema: def.schema, handler: def.execute },
|
|
1060
|
+
{ name: def.name, description: def.description, parameters: def.schema, execute: def.execute, output },
|
|
1061
|
+
{ name: def.name, description: def.description, inputSchema: def.schema, handler: def.execute, output },
|
|
1055
1062
|
]) {
|
|
1056
1063
|
try {
|
|
1057
1064
|
const d = ctx.tools.register(shape);
|
|
@@ -1302,6 +1309,22 @@ export function apply(ctx) {
|
|
|
1302
1309
|
attempt({
|
|
1303
1310
|
name: 'artcraft_qc',
|
|
1304
1311
|
description: '交付质检(确定性规则):对产物跑家族探针并按平台规格核对,返回 PASS/WARN/FAIL/MANUAL 清单与修复命令。支持 video/audio/image/pdf/doc/sheet/deck/fig/cad。用法:path=产物绝对路径;platform 可选(bilibili|youtube|douyin|reels|shorts|wechat|broadcast|podcast)核对画幅/帧率/响度目标;kind 可选,强制指定类型;live 默认 true——若检测到运行中的 App,会额外取示波器读数(filmcraft scopes.read)、Essential Sound 体检、字幕长度与 EffectCraft 能力表(结果在 appChecks)。只报事实与实测值,判定留给调用方。',
|
|
1312
|
+
output: {
|
|
1313
|
+
schema: { type: 'object', additionalProperties: true },
|
|
1314
|
+
render: (_args, v) => {
|
|
1315
|
+
if (!v || !Array.isArray(v.checks)) return [{ type: 'text', text: JSON.stringify(v, null, 2) }];
|
|
1316
|
+
const lines = [`QC ${String(v.verdict || '').toUpperCase()} ${v.path ?? ''}`,
|
|
1317
|
+
`kind=${v.kind ?? '?'} bin=${v.bin ?? '-'} platform=${v.platform?.id ?? '-'} 计数=${JSON.stringify(v.counts ?? {})}`];
|
|
1318
|
+
for (const c of v.checks) {
|
|
1319
|
+
lines.push(`[${String(c.level).toUpperCase().padEnd(6)}] ${c.id}: ${c.detail}`);
|
|
1320
|
+
if (c.fix) lines.push(` fix: ${c.fix}`);
|
|
1321
|
+
}
|
|
1322
|
+
if (Array.isArray(v.appChecks) && v.appChecks.length) {
|
|
1323
|
+
lines.push('appChecks: ' + JSON.stringify(v.appChecks));
|
|
1324
|
+
}
|
|
1325
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
1326
|
+
},
|
|
1327
|
+
},
|
|
1305
1328
|
schema: {
|
|
1306
1329
|
type: 'object',
|
|
1307
1330
|
properties: {
|
|
@@ -1322,6 +1345,19 @@ export function apply(ctx) {
|
|
|
1322
1345
|
attempt({
|
|
1323
1346
|
name: 'artcraft_live',
|
|
1324
1347
|
description: '探测哪些 ArtCraft App 正在运行(控制通道活性):对已知端口逐个调用 engine.commands 作为活性证据,返回 live 列表、耗时与当前可用命令数。用于"边看边调"前的准备——确认目标 App 已以 --control 启动。可用 ports 追加自定义端口(如 [{app:"designcraft",port:8000}])。',
|
|
1348
|
+
output: {
|
|
1349
|
+
schema: { type: 'object', additionalProperties: true },
|
|
1350
|
+
render: (_args, v) => {
|
|
1351
|
+
if (!v || !Array.isArray(v.apps)) return [{ type: 'text', text: JSON.stringify(v, null, 2) }];
|
|
1352
|
+
const lines = [`LIVE ${v.live}/${v.total} ${v.note ?? ''}`];
|
|
1353
|
+
for (const a of v.apps) {
|
|
1354
|
+
lines.push(a.live
|
|
1355
|
+
? `[LIVE ] ${String(a.app).padEnd(13)} :${a.port} ${a.commands ?? '?'} cmds, ${a.ms}ms`
|
|
1356
|
+
: `[— ] ${String(a.app).padEnd(13)} :${a.port} ${(a.error || '').slice(0, 90)}`);
|
|
1357
|
+
}
|
|
1358
|
+
return [{ type: 'text', text: lines.join('\n') }];
|
|
1359
|
+
},
|
|
1360
|
+
},
|
|
1325
1361
|
schema: {
|
|
1326
1362
|
type: 'object',
|
|
1327
1363
|
properties: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ninkch/dsh-artcraft",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Drive the open-source ArtCraft studio suite (13 family apps: PhotoCraft, VectorCraft, FilmCraft, LightCraft, PdfCraft, EffectCraft, DesignCraft, WordCraft, DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft) from DeepSeek Harness: agent tools, a same-origin HTTP API, a bundled craft skill pack, and plugins-page status with self-update.",
|
|
6
6
|
"keywords": [
|
|
@@ -26,6 +26,9 @@
|
|
|
26
26
|
"engines": {
|
|
27
27
|
"node": ">=18"
|
|
28
28
|
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"selftest": "node scripts/selftest.mjs"
|
|
31
|
+
},
|
|
29
32
|
"exports": {
|
|
30
33
|
".": "./index.js",
|
|
31
34
|
"./client": "./client.js",
|
|
@@ -41,6 +44,7 @@
|
|
|
41
44
|
"artcraft.config.json.example",
|
|
42
45
|
"apps",
|
|
43
46
|
"recipes",
|
|
47
|
+
"CHANGELOG.md",
|
|
44
48
|
"README.md",
|
|
45
49
|
"README.zh-CN.md",
|
|
46
50
|
"NOTICE.md"
|
|
@@ -16,7 +16,7 @@ description: 影调与调色决策——一级(曝光/对比/白平衡/饱和
|
|
|
16
16
|
| 3 | 白平衡(色温/色调) | 矢量示波器:肤色线附近 | 偏黄/偏青不察 |
|
|
17
17
|
| 4 | 饱和 / 自然饱和度 | 矢量示波器不越界 | 过饱和→溢出结块 |
|
|
18
18
|
|
|
19
|
-
**LightCraft 落点(122 控制 / 14
|
|
19
|
+
**LightCraft 落点(122 控制 / 14 分区,0.10 未变)**——标准冲洗顺序:
|
|
20
20
|
|
|
21
21
|
```
|
|
22
22
|
profile.amount → wb.temp / wb.tint → light.exposure / light.contrast /
|
|
@@ -32,6 +32,8 @@ geometry.*(透视/旋转/裁切)→ effects.texture/clarity/dehaze → grain
|
|
|
32
32
|
|
|
33
33
|
**PhotoCraft 落点**:`image.adjustments.exposure/levels/curves/vibrance/desaturate`;RAW 走 `filter.cameraRaw`;批量一致性用 `actions.record → actions.save → file.automate.batch`。
|
|
34
34
|
|
|
35
|
+
**打印版式(LightCraft 0.10 新增)**:`print.template.list/apply/save` + `print.cell.*` + `print.layout`——把冲洗结果按版式模板排进打印页;`slideshow.export` 直接出幻灯片。
|
|
36
|
+
|
|
35
37
|
## 二、二级校色与局部
|
|
36
38
|
|
|
37
39
|
| 手法 | 何时用 | 落点 |
|
|
@@ -44,13 +44,16 @@
|
|
|
44
44
|
| 交付物 | 检查项 | 命令 |
|
|
45
45
|
|---|---|---|
|
|
46
46
|
| PDF(阅读) | 无障碍(标签/阅读顺序/替代文本) | `pdfcraft run a11y.check` · `a11y.report` · `a11y.alt_text` |
|
|
47
|
-
| PDF
|
|
47
|
+
| PDF(新建) | 0.10 新增 `create`:从零生成 PDF | `pdfcraft-cli run create …`(先 `pdfcraft-cli tools` 查参数) |
|
|
48
|
+
| PDF(文本勘误) | 直接改文本层 | `pdfcraft run text_edit`(0.10 新增)/ `edit.edit_text` |
|
|
49
|
+
| PDF(印刷) | 出血、裁切标记、CMYK、尺寸;**印前检查** | FigCraft `export --bleed 3mm --crop-marks --cmyk`;DesignCraft `layout/type` + **`preflight.run`**(0.10 新增) |
|
|
48
50
|
| PDF(长期存档) | PDF/A 合规 | `pdfcraft run standards.pdfa` |
|
|
49
51
|
| PDF(传输) | 体积 | `pdfcraft run optimize.reduce`(或 `optimize.advanced`) |
|
|
50
52
|
| PDF(安全) | 口令/权限 | `pdfcraft protect.password` / `protect.remove` |
|
|
51
53
|
| Word 文档 | 无障碍、批注、修订、文献 | `wordcraft run --cmd file.accessibility` · `review.changes` · `references.bibliography` |
|
|
52
54
|
| 表格 | 数据校验、公式、图表 | `gridcraft data.validate` / `data.validation` · `formulas.evaluate` |
|
|
53
|
-
| 演示 |
|
|
55
|
+
| 演示 | 转场/动画时长、备注;讲义/母版 | `deckcraft transition.set` · `animation.timing` · `handout`(0.9 新增)/ `master` |
|
|
56
|
+
| 矢量印刷交付 | 打印预设与拼版 | VectorCraft `print.setup` · `print.tiling` · `pdf.preset.*`(0.14 新增) |
|
|
54
57
|
|
|
55
58
|
## 五、命名与目录约定
|
|
56
59
|
|
|
@@ -36,7 +36,7 @@ description: 动效与特效选择——何时在剪辑内做效果(FilmCraft
|
|
|
36
36
|
| Time | 8 | 时间重映射、残影、像素运动模糊 | 变速优先在剪辑层做 |
|
|
37
37
|
| 3D Channel / Expression Controls / Matte / Text / Utility / Obsolete | 8/9/6/2/9/9 | 深度合成、表达式控制、遮罩工具 | Obsolete 类避免新项目使用 |
|
|
38
38
|
|
|
39
|
-
**查询**:`artcraft_cli { bin:"effectcraft", args:["commands","--json"] }` 取全部 id;`exec app.capabilities` 看效果总数与导出格式;`effect.apply {layer, effect}`
|
|
39
|
+
**查询**:`artcraft_cli { bin:"effectcraft", args:["commands","--json"] }` 取全部 id;`exec app.capabilities` 看效果总数与导出格式;`effect.apply {layer, effect}` 施加;调参用 **`prop.set`**(0.13.0 起 `effect.setParam` 已移除,属性读写统一走 `prop.get/set/toggleAnimation/addKey`,参数路径形如 `effects/#1/<param>`)。
|
|
40
40
|
|
|
41
41
|
## 三、关键帧与缓动(动效"贵不贵"就看这里)
|
|
42
42
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 效果 id 来自官方注册表(`ec.<类别>.<名称>`),共 307 个;完整清单见同目录 `effect-catalogue.md`。
|
|
4
4
|
> 用法:`artcraft_cli { bin:"effectcraft", args:["exec","effect.apply","--params","{\"layer\":N,\"effect\":\"<id>\"}"] }`
|
|
5
|
-
> 参数走 `effect.setParam {
|
|
5
|
+
> 参数走 **`prop.set`**(0.13.0 起 `effect.setParam` 已移除):`artcraft_cli { bin:"effectcraft", args:["exec","prop.set","--params","{\"layer\":N,\"property\":\"effects/#1/<param>\",\"value\":…}"] }`;读用 `prop.get`,打点用 `prop.addKey`,表达式用 `prop.setExpression`。
|
|
6
6
|
> 表中 id 均为**已验证存在**;没有把握的不要写死,先 `describe` 或查目录。
|
|
7
7
|
|
|
8
8
|
## 一、光效与氛围
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ArtCraft 13 成员命令族总表(实测)
|
|
2
2
|
|
|
3
|
-
> 来源:2026-10 在本机对 13 个成员 CLI 的 `commands`
|
|
3
|
+
> 来源:2026-10-21 在本机对 13 个成员 CLI 的 `commands` 注册表实测(家族全量更新后版本,见规模总览)。
|
|
4
4
|
> 精确条目数来自 JSON 注册表(`commands --json`:filmcraft / effectcraft / photocraft / gridcraft / wordcraft / figcraft),其余为 id 扫描值(近似)。
|
|
5
5
|
> 随时复核:`artcraft_cli { bin:"<app>", args:["commands","--json"] }`(不支持 `--json` 的成员直接 `commands`)。
|
|
6
6
|
|
|
@@ -8,37 +8,37 @@
|
|
|
8
8
|
|
|
9
9
|
| 成员 | 命令数 | 版本实测 | 定位 |
|
|
10
10
|
|---|---:|---|---|
|
|
11
|
-
| EffectCraft | 731(含 **307
|
|
12
|
-
|
|
|
13
|
-
| FigCraft |
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
| DeckCraft |
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
11
|
+
| EffectCraft | 731(含 **307 效果**;**`effect.setParam` 已移除,属性读写走 `prop.*`**) | 0.13.0 | 合成 / 动效 / VFX |
|
|
12
|
+
| PhotoCraft | 918(**62 滤镜**;0.11 编辑器命令大量上引擎) | 0.11.1 | 图像 / 影调 |
|
|
13
|
+
| FigCraft | 569 | 0.8.0 | 界面设计与原型 |
|
|
14
|
+
| WordCraft | 633 | 0.9.0 | 写作 / 文档 |
|
|
15
|
+
| SoundCraft | 480(**0.10 新增 `midi.*`/`video.*`/`audiosuite`**) | 0.10.0 | 音频后期 / 混音 |
|
|
16
|
+
| VectorCraft | 401(**0.14 新增 `text`/`variable`/`pdf.preset`/`print`**) | 0.14.0 | 矢量插画 |
|
|
17
|
+
| FilmCraft | 701 | 0.10.0 | 剪辑 / 字幕 / 调色 / 混音 |
|
|
18
|
+
| LightCraft | 227(**122 develop 控制**;**0.10 新增 `print.*` 模板与 `slideshow.export`**) | 0.10.0 | 照片 / RAW 冲洗 |
|
|
19
|
+
| DesignCraft | 309(**0.10 新增 `toc`/`footnote`/`xref`/`index`/`preflight`**) | 0.10.0 | 页面排版 / 出版 |
|
|
20
|
+
| DeckCraft | 209 | 0.9.0 | 演示 / 幻灯片 |
|
|
21
|
+
| PdfCraft | 77(**86 个可运行工具**;新增 `create`/`text_edit`) | 0.10.1 | PDF / 文档质检 |
|
|
22
|
+
| CADCraft | 139 | 0.10.0 | 制图 |
|
|
23
|
+
| GridCraft | 341 | 0.9.0 | 表格 / 数据 |
|
|
24
24
|
|
|
25
25
|
## 各成员主要命令族
|
|
26
26
|
|
|
27
27
|
| 成员 | 主要族(数量) |
|
|
28
28
|
|---|---|
|
|
29
29
|
| FilmCraft | `graphics` 82 · `clip` 57 · `file` 57 · **`timeline` 56** · `sequence` 45 · `project` 40 · `edit` 39 · **`multicam` 35** · `markers` 32 · **`trim` 24** · **`captions` 22** · `mixer` 20 · `export` 19 · `effects` 16 · **`transcript` 14** · `masks` 12 · `essentialSound` 9 · **`lumetri` 7** · **`tts` 7** · `lut` 4 · `scopes` 1 · `color` 1 |
|
|
30
|
-
| EffectCraft | `layer` 121 · `view` 78 · `file` 61 · **`keys` 36** · `comp` 31 · `edit` 27 · **`track` 22** · **`essential` 22** · `renderQueue` 20 · `effect` 19 · **`camera` 19** ·
|
|
30
|
+
| EffectCraft | `layer` 121 · `view` 78 · `file` 61 · **`keys` 36** · `comp` 31 · `edit` 27 · **`track` 22** · **`essential` 22** · `renderQueue` 20 · `effect` 19 · **`camera` 19** · **`prop` 18(替代已移除的 `effect.setParam`)** · `mask` 17 · `time` 17 · **`roto` 14** · `text` 13 · `footage` 12 · **`puppet` 10** · `face` 5(0.13 新增) · `learn` 5(0.13 新增) |
|
|
31
31
|
| FigCraft | `text` 52 · `view` 48 · `vector` 40 · `object` 27 · `tool` 21 · `select` 21 · **`component` 21** · `collab` 20 · `file` 20 · **`proto` 20** · `library` 18 · **`variable` 18** · `edit` 15 · `comment` 14 · `plugin` 11 · **`style` 10** · `version` 8 · `instance` 8 · `annotation` 8 · `branch` 7 |
|
|
32
|
-
| SoundCraft | `view` 96 · `edit` 93 · **`track` 65** · `event` 35(含 **`beat_detective`/`identify_beat`/`extract_chords`**) · `options` 35 · `clip` 31 · **`mix` 29** · `setup` 20 · `file` 17(**`bounce_mix`/`bounce_stems`**) · `transport` 13 · **`session` 11(含 `audio_health`)** · **`automation` 10** |
|
|
33
|
-
| VectorCraft | **`object` 71** · **`perspective` 24** · `select` 18 · `file` 17 · `swatch` 15 · `document` 12 · `layer` 11 · `path` 11 · **`symbol` 10** · **`dataset` 10** |
|
|
34
|
-
| PhotoCraft | **`filter` 62**(gallery 47 / blur 11 / stylize 9 / distort 9 / render 9 / pixelate 7 / blurGallery 5 / noise 5 / sharpen 5 …) · `edit` 31 · `layer` 26 · `select` 19 · `file.automate` 18 · `channel` 18 · **`actions` 14** · `brush` 13 · `paint` 12 · `gradient` 12 · **`image.adjustments` 9** |
|
|
35
|
-
| WordCraft | `para` 28 · `format` 25 · `file` 18(含 `accessibility`) · **`review` 16** · `equation` 15 · `insert` 15 · `table` 14 · `
|
|
36
|
-
| DesignCraft | `object` 22 · **`style` 17** · `file` 15 · `transform` 10 · `data` 10 · `type` 10 · `
|
|
37
|
-
| LightCraft | `library` 20 · **`faces` 17** · **`denoise` 16** · **`develop` 16(122 控制 / 14
|
|
38
|
-
| DeckCraft | `format` 32 · `shape` 19 · `slide` 15 · `file` 13 · **`animation` 10** · `text` 10 · `
|
|
39
|
-
| CADCraft | `table` 11 · `arc` 10 · `zoom` 9 · **`dimstyle` 7** · `blocks` 6 · `grip` 6 · `layout` 6 · `layerstate` 5 · `vports` 5 · `circle` 5 |
|
|
40
|
-
| GridCraft | `home` 12 · **`pivot` 11** · `insert` 10 · **`data` 10** · `view` 9 · `sheet` 8 · `edit` 7 · `file` 7 · `selection` 6 · **`formulas` 5** · `chart` 3
|
|
41
|
-
| PdfCraft | `edit` 13 · `page` 10 · **`measure` 7** · **`a11y` 5** · `export` 4 · `ocr` 3 · `form` 3 · `comment` 3 · `protect` 2 · `sign` 2
|
|
32
|
+
| SoundCraft | `view` 96 · `edit` 93 · **`track` 65** · `event` 35(含 **`beat_detective`/`identify_beat`/`extract_chords`**) · `options` 35 · `clip` 31 · **`mix` 29** · `setup` 20 · `file` 17(**`bounce_mix`/`bounce_stems`**) · `transport` 13 · **`session` 11(含 `audio_health`)** · **`automation` 10** · **`midi` 6 · `video` 3 · `audiosuite` 1(0.10 新增)** |
|
|
33
|
+
| VectorCraft | **`object` 71** · **`perspective` 24** · `select` 18 · `file` 17 · `swatch` 15 · `document` 12 · **`text` 10 · `variable` 9 · `brush` 9 · `library` 9 · `print` 9(0.14 新增)** · `layer` 11 · `path` 11 · **`symbol` 10** · **`dataset` 10** · **`pdf.preset` 5 · `flattener` 6(0.14 新增)** |
|
|
34
|
+
| PhotoCraft | **`filter` 62**(gallery 47 / blur 11 / stylize 9 / distort 9 / render 9 / pixelate 7 / blurGallery 5 / noise 5 / sharpen 5 …) · `edit` 31 · `layer` 26 · `select` 19 · `file.automate` 18 · `channel` 18 · **`actions` 14** · `brush` 13 · `paint` 12 · `gradient` 12 · **`image.adjustments` 9** · **0.11 新增引擎化:`type` 9 · `shape` 9 · `path` 9 · `pattern` 10 · `swatches` 9 · `slice` 6 · `variables`/`jobs`/`plugin`** |
|
|
35
|
+
| WordCraft | `para` 28 · `format` 25 · `file` 18(含 `accessibility`) · **`review` 16** · `equation` 15 · `insert` 15 · `table` 14 · **0.9 新增:`edit` 10 · `outline` 8 · `caret` 7 · `layout` 7 · `arrange` 9 · `draw` 9 · `shape` 6 · `canvas` 4 · `fields` 6 · `design` 4 · `hf` 3 · `developer` 3** |
|
|
36
|
+
| DesignCraft | `object` 22 · **`style` 17** · `file` 15 · `transform` 10 · `data` 10 · `type` 10 · **0.10 新增:`toc` 3 · `footnote` 4 · `xref` 3 · `index` 3 · `preflight.run` · `condition` 5 · `flex` 5 · `xml` 4 · `variables` 4 · `spelling` 3 · `hyperlink` 4** · `layout` 7 · `book` 7 · `article` 6 |
|
|
37
|
+
| LightCraft | `library` 20 · **`faces` 17** · **`denoise` 16** · **`develop` 16(122 控制 / 14 分区,未变)** · **0.10 新增:`print` 17(版式模板 cell/layout/template)· `slideshow.export`** · `photo` 14 · `mask` 12 · `keyword` 12 · `preset` 9 · `crop` 6 · `stack` 6 · `version` 5 · `history` 5 |
|
|
38
|
+
| DeckCraft | `format` 32 · `shape` 19 · `slide` 15 · `file` 13 · **`animation` 10** · `text` 10 · **0.9 新增:`picture` 9 · `comment` 7 · `review` 7 · `table` 5 · `chart` 3 · `master` 2 · `handout` 1** · `media` 7 · `insert` 7 · `arrange` 7 · **`design` 5** · **`transition` 4** |
|
|
39
|
+
| CADCraft | `table` 11 · `arc` 10 · `zoom` 9 · **`dimstyle` 7** · `blocks` 6 · `grip` 6 · `layout` 6 · `layerstate` 5 · `vports` 5 · `circle` 5 · **0.10 新增:`compare` 2 · `quickcalc` · `revcloud` 2 · `constraints` 2** |
|
|
40
|
+
| GridCraft | `home` 12 · **`pivot` 11** · `insert` 10 · **`data` 10** · **0.9 新增:`cell` 2 · `range` · `table` 3 · `object` 2 · `link` · `draw` 4 · `review` 2 · `window`** · `view` 9 · `sheet` 8 · `edit` 7 · `file` 7 · `selection` 6 · **`formulas` 5** · `chart` 3 |
|
|
41
|
+
| PdfCraft | `edit` 13 · `page` 10 · **`measure` 7** · **`a11y` 5** · `export` 4 · `ocr` 3 · `form` 3 · `comment` 3 · `protect` 2 · `sign` 2 · **0.10 新增:`create`(新建 PDF)· `text_edit` · `form_fields` · `standards`**(另有 86+ 个可 `run` 的工具,含 `a11y.check`/`a11y.report`/`measure.info`/`optimize.reduce`/`standards.pdfa`/`doc.compare`) |
|
|
42
42
|
|
|
43
43
|
## 自发现三件套
|
|
44
44
|
|