@wji.ai/cli 0.5.0 → 0.6.0
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 +22 -2
- package/dist/commands/canvas.js +52 -5
- package/dist/commands/fsnode.js +13 -6
- package/dist/commands/gen.js +3 -2
- package/dist/commands/model.js +4 -2
- package/dist/commands/workspace.js +6 -3
- package/dist/core/output.js +29 -0
- package/dist/index.js +5 -2
- package/package.json +1 -1
- package/skill/ads/SKILL.md +176 -0
- package/skill/ads/reference/ai-consistency.md +109 -0
- package/skill/ads/reference/brief-template.md +103 -0
- package/skill/ads/reference/compliance.md +66 -0
- package/skill/ads/reference/formats-image.md +108 -0
- package/skill/ads/reference/formats-video.md +121 -0
- package/skill/ads/reference/models.md +95 -0
- package/skill/ads/reference/product-photography.md +119 -0
- package/skill/ads/reference/styles.md +70 -0
- package/skill/short-drama/SKILL.md +4 -0
- package/skill/short-drama/reference/canvas-recipes.md +18 -0
- package/skill/short-drama/reference/operations-cli.md +1 -0
- package/skill/short-drama/reference/operations-wji.md +27 -4
- package/skill/short-drama/reference/stage-storyboard.md +6 -0
- package/skill/social-media/SKILL.md +152 -0
- package/skill/social-media/reference/content-craft.md +124 -0
- package/skill/social-media/reference/plan-template.md +171 -0
- package/skill/social-media/reference/platforms-china.md +94 -0
- package/skill/social-media/reference/platforms-global.md +122 -0
- package/skill/social-media/reference/ratio-map.md +100 -0
- package/skill/social-media/reference/repurpose.md +119 -0
- package/skill/wji/SKILL.md +30 -2
- package/skill/wji/reference/commands.md +27 -12
package/skill/wji/SKILL.md
CHANGED
|
@@ -9,6 +9,12 @@ description: Drive the WJI AI platform from the terminal with the `wji` CLI —
|
|
|
9
9
|
`--json`, so prefer `--json` piped through `jq` when you need to read a value,
|
|
10
10
|
and the human table output when you are showing the user a result.
|
|
11
11
|
|
|
12
|
+
`--json` prints the **`standard`** detail level: ids, names, status, media urls,
|
|
13
|
+
long text clipped to 200 chars and `content` reduced to a summary marked
|
|
14
|
+
`truncated: true`. Add `--detail full` whenever you need the whole `content`,
|
|
15
|
+
`form` or `settings` (always before a read-modify-write), and `--detail brief`
|
|
16
|
+
when you only want ids. `WJI_DETAIL=full` sets it for a whole session.
|
|
17
|
+
|
|
12
18
|
## Before anything else
|
|
13
19
|
|
|
14
20
|
```bash
|
|
@@ -94,7 +100,7 @@ wji ws fs # whole workspace tree
|
|
|
94
100
|
wji ws fs --app <appId> # one app's tree
|
|
95
101
|
wji fs tree <nodeId> --depth 2
|
|
96
102
|
wji fs ls <folderId>
|
|
97
|
-
wji fs get <nodeId> --json | jq .content
|
|
103
|
+
wji fs get <nodeId> --json --detail full | jq .content # --detail full: the summary is not the content
|
|
98
104
|
|
|
99
105
|
wji fs mkdir <parentId> characters --nickname 角色
|
|
100
106
|
wji dataset new <folderId> "Ada" -t character -d "a tired detective"
|
|
@@ -211,6 +217,25 @@ balanced default; **Seedance 2.0 Fast / MiniMax H3 Max** for drafts, tests and
|
|
|
211
217
|
large batches. The ranking is a guide — quote the real number from
|
|
212
218
|
`wji gen cost` / `wji canvas gen` before spending.
|
|
213
219
|
|
|
220
|
+
**Uncensored (無審核) models.** Use these only when the user asks for
|
|
221
|
+
uncensored output or a censored model refused the content. They carry the
|
|
222
|
+
`uncensored` tag in `wji models list --json`, and their names end in
|
|
223
|
+
`-uncensored`. The Wan 3.0 family has a Ref and a first/last-frame variant of
|
|
224
|
+
each tier, like the censored Wan 3.0.
|
|
225
|
+
|
|
226
|
+
| Job | Model (`name`) | Inputs |
|
|
227
|
+
| --- | --- | --- |
|
|
228
|
+
| Video, Ref | `wan-3.0-ref-uncensored`, `wan-3.0-prime-ref-uncensored` (480p–1080p); `wan-3.0-pro-ref-uncensored`, `wan-3.0-prime-pro-ref-uncensored` (1080p / 2k / 4k) | ≤ 10 images + ≤ 5 videos + ≤ 5 audios, freely mixed (video/audio ≤ 15 s total) |
|
|
229
|
+
| Video, first/last frame | `wan-3.0-uncensored`, `wan-3.0-prime-uncensored`, `wan-3.0-pro-uncensored`, `wan-3.0-prime-pro-uncensored` | text only, or start and/or end image; 2–30 s |
|
|
230
|
+
| Image → video | `wan-2.7-i2v-uncensored` (720p/1080p, 2–15 s; optional 1 driving audio for lip-sync via `--ref-audio`), `wan-2.2-i2v-uncensored` (cheapest; 480p/720p, 5 or 8 s, optional end frame) | start image |
|
|
231
|
+
| Animate a character | `wan-animate-uncensored` (`--set mode=animate\|replace`) | exactly 1 image + 1 video; output is as long as the video |
|
|
232
|
+
| Text → image | `z-image-uncensored` (long edge ≤ 1536), `z-image-pro-uncensored` (≤ 2560, `--set long_edge=`) | prompt + ratio |
|
|
233
|
+
| Edit an image | `qwen-image-edit-uncensored` | 1–3 images: the **first** is the image to edit |
|
|
234
|
+
| Face / head swap | `face-swap-uncensored`, `head-swap-uncensored` | exactly 2 images, **order matters**: 1st = target picture, 2nd = the face / head to put on it |
|
|
235
|
+
| Video upscale | `flashvsr-uncensored` (`--set resolution=720p\|1080p\|2k\|4k`) | 1 MP4 ≤ 120 s; billed per input second |
|
|
236
|
+
|
|
237
|
+
"Prime" variants are faster and cost more; "Pro" variants output 1080p–4K.
|
|
238
|
+
|
|
214
239
|
### Limits (per account)
|
|
215
240
|
|
|
216
241
|
| Limit | Value | When exceeded |
|
|
@@ -248,7 +273,7 @@ headshot and sheet as image references and the voice as an audio reference to
|
|
|
248
273
|
a Ref model.
|
|
249
274
|
|
|
250
275
|
```bash
|
|
251
|
-
wji fs get <datasetId> --
|
|
276
|
+
wji fs get <datasetId> --json --detail full | jq '{images: [.images[]? | {id, type}], icon, primaryAudio}'
|
|
252
277
|
wji fs set <datasetId> --add-images <headshot> <sheet> <voice> --icon <headshot> --set primaryAudio=<voice>
|
|
253
278
|
```
|
|
254
279
|
|
|
@@ -549,6 +574,9 @@ wji org list && wji org use <orgId>
|
|
|
549
574
|
- **Lists are paginated.** `--limit` is capped at 100; `--limit -1` returns at
|
|
550
575
|
most 500 on most endpoints. Page with `--page` instead of assuming you got
|
|
551
576
|
everything.
|
|
577
|
+
- **Lists are trimmed.** `--json` is the `standard` level; read `content`,
|
|
578
|
+
`form` or `settings` with `--detail full`, and never write back a `content`
|
|
579
|
+
that carries `truncated: true`.
|
|
552
580
|
- **Report failures honestly.** A failed generation surfaces as a non-zero exit
|
|
553
581
|
with the provider's message — pass it on rather than retrying silently.
|
|
554
582
|
|
|
@@ -10,7 +10,8 @@ Global flags (accepted before any subcommand):
|
|
|
10
10
|
| `--org <orgId>` | organization context (`X-Org-Id`) |
|
|
11
11
|
| `--no-org` | force personal context for this call |
|
|
12
12
|
| `--locale <locale>` | response language: `cht`, `chs`, `en` |
|
|
13
|
-
| `--json` | print
|
|
13
|
+
| `--json` | print JSON instead of tables (`standard` detail unless `--detail` is given) |
|
|
14
|
+
| `--detail <level>` | `brief` / `standard` / `full` for list and get reads; `full` is the raw API response. Env `WJI_DETAIL` |
|
|
14
15
|
|
|
15
16
|
Value conventions: `@file` reads a file, `-` reads stdin, `--set key=value`
|
|
16
17
|
repeats and nests on dots, references are `assetId[:label[:weight]]`.
|
|
@@ -64,8 +65,8 @@ switch endpoint.
|
|
|
64
65
|
|
|
65
66
|
| Command | API |
|
|
66
67
|
| --- | --- |
|
|
67
|
-
| `ws list [-k keyword] [-s all\|me\|shared\|favorite] [--page] [--limit]` | `GET /workspace/search` — `--limit` max 100, `-1` returns at most 500 |
|
|
68
|
-
| `ws get [id]` | `GET /workspace/list/:id` |
|
|
68
|
+
| `ws list [-k keyword] [-s all\|me\|shared\|favorite] [--page] [--limit]` | `GET /workspace/search` — `--limit` max 100, `-1` returns at most 500; sends `detail` |
|
|
69
|
+
| `ws get [id]` | `GET /workspace/list/:id` — sends `detail` (`settings` and full members need `--detail full`) |
|
|
69
70
|
| `ws use <id>` | stores the default workspace locally |
|
|
70
71
|
| `ws create <name> [-d] [-r ratio] [-l lang] [-t type] [-a app...] [--no-apps]` | `POST /workspace/create` — without `-a` the workspace gets the default template `dataset datasetimagegeneration canvas`; `--no-apps` creates it empty (the API itself adds nothing) |
|
|
71
72
|
| `ws update [id] [-n] [-d] [-r] [-l] [--set]` | `PUT /workspace/list/:id` |
|
|
@@ -96,10 +97,10 @@ Restriction from the backend: `Dataset`, `Draw`, `DatasetImageGeneration` and
|
|
|
96
97
|
|
|
97
98
|
| Command | API |
|
|
98
99
|
| --- | --- |
|
|
99
|
-
| `fs root [key] [-d depth]` | `GET /fsnode/root[/:key]` — key defaults to your drive; pass a workspace id for its root |
|
|
100
|
-
| `fs ls <id> [--limit] [--scope]` | `GET /fsnode/list/:id/children` |
|
|
101
|
-
| `fs tree <id> [-d depth]` | `GET /fsnode/list/:id/tree` |
|
|
102
|
-
| `fs get <id> [--scope]` | `GET /fsnode/list/:id` (comma-separated ids allowed) |
|
|
100
|
+
| `fs root [key] [-d depth]` | `GET /fsnode/root[/:key]` — key defaults to your drive; pass a workspace id for its root; sends `detail` |
|
|
101
|
+
| `fs ls <id> [--limit] [--scope]` | `GET /fsnode/list/:id/children` — sends `detail`; at `standard` each `content` is a summary |
|
|
102
|
+
| `fs tree <id> [-d depth]` | `GET /fsnode/list/:id/tree` — sends `detail` |
|
|
103
|
+
| `fs get <id> [--scope]` | `GET /fsnode/list/:id` (comma-separated ids allowed) — sends `detail`; `--detail full` for the whole `content` |
|
|
103
104
|
| `fs path <id>` | `GET /fsnode/list/:id/path` |
|
|
104
105
|
| `fs mkdir <parent> <name> [--nickname] [--content]` | `POST /fsnode/create` type=folder |
|
|
105
106
|
| `fs touch <parent> <name> [--mimetype] [--asset] [--content]` | `POST /fsnode/create` type=file |
|
|
@@ -118,7 +119,7 @@ characters, nicknames at 200, and `fs batch` at 100 items per call.
|
|
|
118
119
|
| Command | Notes |
|
|
119
120
|
| --- | --- |
|
|
120
121
|
| `dataset new <parent> <name> [-t type] [-d description] [--images] [--nickname]` | creates an fsnode with mimetype `workspace/dataset` |
|
|
121
|
-
| `dataset list <folderId>` | dataset nodes in a folder |
|
|
122
|
+
| `dataset list <folderId>` | dataset nodes in a folder (sends `detail`) |
|
|
122
123
|
| `dataset get <key>` | `GET /dataset/list/:key` (vector-store record) |
|
|
123
124
|
| `dataset rm <key> [-y]` | `DELETE /dataset/list/:key` |
|
|
124
125
|
|
|
@@ -150,6 +151,11 @@ Model parameters worth knowing (`--set`, see `wji models get`):
|
|
|
150
151
|
`gpt-image-2.5-*` `background=transparent` returns a PNG with alpha;
|
|
151
152
|
`bytedance-seedream-5-pro` `layer_decomposition=true` splits one reference
|
|
152
153
|
image into separate PNG layer assets (exactly 1 reference, `size=1K|2K`).
|
|
154
|
+
`face-swap-uncensored` / `head-swap-uncensored` take exactly 2 references in
|
|
155
|
+
order (target picture, then the face / head); `qwen-image-edit-uncensored`
|
|
156
|
+
edits the first reference; `z-image-*-uncensored` `long_edge=<px>`;
|
|
157
|
+
`wan-animate-uncensored` `mode=animate|replace`; `flashvsr-uncensored`
|
|
158
|
+
`resolution=720p|1080p|2k|4k`.
|
|
153
159
|
|
|
154
160
|
Uploads of `.html`, `.xhtml`, `.svg`, `.js` and `.xml` are stored as
|
|
155
161
|
`application/octet-stream` with `Content-Disposition: attachment`.
|
|
@@ -171,7 +177,7 @@ updates live.
|
|
|
171
177
|
| `canvas copy [nodeIds...] --to <canvasIds...> [-c] [--selected] [--at x,y] [--same-position] [-y]` | the canvas's own copy-paste: new nodes (no position, `generate.historyId/pendingAssetId` dropped, finished asset shared via `file`), edges among them re-created oldest first so `@image1…` numbering holds, color tags kept and a missing label carried to the target. Edges from nodes outside the copy are left out. Default placement: right of what is already on the target |
|
|
172
178
|
| `canvas nodes [-c] [-k kind] [-n regex] [--tag tags…\|--untagged]` | `GET /fsnode/list/:canvasId/children?limit=-1` + `POST /assets/check-status`. `-n` matches the node name as a case-insensitive regex (`/re/flags` to set flags yourself). `--tag` takes a label (`C01`, case-insensitive), a color (`red`) or a color id (`rose`); several values match any. Filters combine (AND) |
|
|
173
179
|
| `canvas tags [-c] [-a]` | the canvas's color tags: color, label, node count (`-a` also unused, unlabelled colors) |
|
|
174
|
-
| `canvas get <nodeId> [-c]` | same load; one node with references (`@image1 ← id`) and frame slots |
|
|
180
|
+
| `canvas get <nodeId> [-c]` | same load; one node with references (`@image1 ← id`) and frame slots. Canvas commands always load the full canvas; `--detail` trims only the JSON they print (`standard` clips `text` / `generate.prompt` and drops `generate.values`) |
|
|
175
181
|
| `canvas edges [-c] [--node]` | the `canvas/edge` children |
|
|
176
182
|
| `canvas add <kind> [-c] [-n] [-t\|--text-file] [--plain] [--size w,h] [--asset] [--dataset] [-p\|--prompt-file] [-m] [-r] [--resolution] [-d] [--set] [--from ids…] [--at x,y]` | `POST /fsnode/create` (`canvas/node/<kind>`), then one `canvas/edge` per `--from`. Kinds: text, title, comment, image, video, audio, dataset. `add dataset --dataset <fsnodeId>` writes `content {datasetId, datasetName, datasetType, datasetParentName, description}` from the dataset node (must be `workspace/dataset`); it takes no `--from`. Text kinds are Markdown on the web; `--plain` turns every single line break into a Markdown hard break (`" \n"`, fenced code untouched), and without it the CLI warns when a single break would be joined. `--size` writes `content.width/height` |
|
|
177
183
|
| `canvas set <nodeId> [-c] [-n] [-t\|--text-file] [--plain] [--move x,y] [--size w,h] [-p] [-m] [-r] [--resolution] [-d] [--set]` | read → merge → `PATCH /fsnode/list/:id` with `contentPatch` of only the top-level keys that changed, so a concurrent browser edit of another key survives (falls back to a whole-content write on a backend without `contentPatch`) |
|
|
@@ -320,7 +326,7 @@ parameters are range-checked against the model's `min`/`max`.
|
|
|
320
326
|
## history
|
|
321
327
|
|
|
322
328
|
`history list [-w] [--mode image|video|audio] [--fsnode] [--scope] [--scope-id] [--tags] [--bookmarked]` →
|
|
323
|
-
`GET /ai/assets/history/search`
|
|
329
|
+
`GET /ai/assets/history/search` (sends `detail`; `standard` clips `prompt` and summarises `form`)
|
|
324
330
|
|
|
325
331
|
`history get <id> [--wait] [--timeout] [--interval]` ·
|
|
326
332
|
`history bookmark <id> [--off]` · `history rm <id> [-y]` ·
|
|
@@ -329,12 +335,15 @@ parameters are range-checked against the model's `min`/`max`.
|
|
|
329
335
|
## models
|
|
330
336
|
|
|
331
337
|
`models list [-f feature...] [-w] [-k keyword] [--all]` →
|
|
332
|
-
`GET /ai/model/list/:features`
|
|
338
|
+
`GET /ai/model/list/:features` (sends `detail`; at `standard` the `form` keeps
|
|
339
|
+
only ratios, batch, reference caps and `other` options — `--detail full` for the
|
|
340
|
+
whole schema)
|
|
333
341
|
|
|
334
342
|
The endpoint matches with `features.some(...)`, so an empty feature list returns
|
|
335
343
|
nothing; with no `-f` the CLI asks for every feature instead.
|
|
336
344
|
|
|
337
|
-
The response is a curated view — no `id`, `rate
|
|
345
|
+
The response is a curated view — no `id`, `rate` or `protocol` (`tags` is
|
|
346
|
+
included; uncensored models carry `uncensored`) — and it
|
|
338
347
|
is de-duplicated by **`nickname`**, which is therefore the unique selector.
|
|
339
348
|
`name` is not unique (`seedance-2.0` exists twice under different providers).
|
|
340
349
|
Pass the `MODEL` column (the nickname) to `-m`.
|
|
@@ -467,6 +476,12 @@ Pass `null` to clear a nullable field. Password minimum is 6 characters.
|
|
|
467
476
|
asset carrying `error` is also a failure.
|
|
468
477
|
- Some GETs are cached per user for 10s, keyed on the full URL including the
|
|
469
478
|
query string.
|
|
479
|
+
- Workspace, fsnode, model and history reads accept `?detail=brief|standard|full`.
|
|
480
|
+
The API defaults to `full` (the website relies on it); the CLI sends the
|
|
481
|
+
`--detail` value, or `standard` under `--json`. `standard` clips long text to
|
|
482
|
+
200 chars, turns media into `{id, url, thumbnail, status, …}` and reduces an
|
|
483
|
+
fsnode `content` to a summary carrying `truncated: true`; never PATCH such a
|
|
484
|
+
summary back.
|
|
470
485
|
- Paginated endpoints return `{ data, pagination: { total, page, limit, next,
|
|
471
486
|
hasNext, hasPrev, totalPages } }`. An explicit `limit` is capped at **100**.
|
|
472
487
|
`limit: -1` returns everything only on endpoints that opt in (`fs ls` does);
|