@genex-ai/cli-demo 0.60.0 → 0.62.0-dev.143
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 +5 -2
- package/dist/index.js +997 -798
- package/package.json +1 -1
- package/templates/controllers/character/meshy/meshy-loader.ts +15 -1
- package/templates/skills/genex-ai-character/SKILL.md +19 -4
- package/templates/skills/genex-ai-hud/SKILL.md +1 -1
- package/templates/skills/genex-ai-image/SKILL.md +1 -1
- package/templates/skills/genex-ai-menu/SKILL.md +1 -1
- package/templates/skills/genex-ai-model/SKILL.md +1 -1
- package/templates/skills/genex-ai-sfx/SKILL.md +1 -1
- package/templates/skills/genex-ai-skybox/SKILL.md +1 -1
- package/templates/skills/genex-ai-texture/SKILL.md +1 -1
- package/templates/skills/genex-ai-video/SKILL.md +1 -1
- package/templates/skills/genex-explore/SKILL.md +1 -1
- package/templates/skills/genex-getting-started/SKILL.md +2 -2
- package/templates/skills/genex-threejs-character-controller/SKILL.md +11 -0
- package/templates/skills/genex-threejs-character-controller/references/animations.md +5 -0
- package/templates/skills/genex-threejs-visual-validation/SKILL.md +4 -0
- package/templates/skills/genex-updates/SKILL.md +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@genex-ai/cli-demo",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.62.0-dev.143",
|
|
4
4
|
"description": "Set up your project's agent workspace (.claude/.codex/.cursor in the game folder), authorize, create a game project, generate AI assets, and publish (genex CLI).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -12,6 +12,7 @@ export type MeshyMotionPolicy =
|
|
|
12
12
|
export type MeshyLocomotionBindingMode = "loop" | "one-shot" | "pose";
|
|
13
13
|
|
|
14
14
|
export interface MeshyLocomotionBinding {
|
|
15
|
+
actionId?: number;
|
|
15
16
|
clip: string;
|
|
16
17
|
mode: MeshyLocomotionBindingMode;
|
|
17
18
|
phase?: number;
|
|
@@ -23,7 +24,20 @@ export interface MeshyCharacterManifest {
|
|
|
23
24
|
revision: number;
|
|
24
25
|
manifestVersion: number;
|
|
25
26
|
rig: "meshy-biped";
|
|
26
|
-
controllerPack?: {
|
|
27
|
+
controllerPack?: {
|
|
28
|
+
key: string;
|
|
29
|
+
version: number;
|
|
30
|
+
fingerprint?: string;
|
|
31
|
+
actionIds?: number[];
|
|
32
|
+
};
|
|
33
|
+
provenance?: {
|
|
34
|
+
provider: "meshy";
|
|
35
|
+
aiModel: "meshy-6";
|
|
36
|
+
apiVersion?: string;
|
|
37
|
+
poseMode: "a-pose" | "t-pose";
|
|
38
|
+
shouldRemesh: boolean;
|
|
39
|
+
targetPolycount: number;
|
|
40
|
+
};
|
|
27
41
|
model: {
|
|
28
42
|
url: string;
|
|
29
43
|
heightMeters: number | null;
|
|
@@ -16,10 +16,12 @@ crossfades, transition rules, and multiplayer authority contract.
|
|
|
16
16
|
npx genex character "stylized desert courier, practical layered clothing"
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
The default request uses Meshy 6 to generate and
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
The default request uses Meshy 6 to generate, texture, remesh, and rig an
|
|
20
|
+
A-pose humanoid. It generates the required controller-pack actions for that
|
|
21
|
+
candidate and rejects bad structural or native motion instead of repairing it.
|
|
22
|
+
If any required check fails, it retries the complete workflow once in a strict
|
|
23
|
+
T-pose; optional actions start only after a full candidate passes. It remeshes
|
|
24
|
+
and rigs the accepted model, adds the immutable preview-reviewed neutral-v3
|
|
23
25
|
idle/walk/run/crouch/jump controller pack,
|
|
24
26
|
and stores every successful model
|
|
25
27
|
and clip at permanent Genex asset URLs. It prints the complete Genex-credit
|
|
@@ -83,6 +85,17 @@ after preview without asking the player to disable cache.
|
|
|
83
85
|
`playOneShot()` returns false and emits one warning when a requested clip is
|
|
84
86
|
absent; treat that as an installation failure, not a successful action.
|
|
85
87
|
|
|
88
|
+
Meshy limb rotations are played unchanged. Never freeze hand tracks or apply
|
|
89
|
+
post-mixer arm, leg, or foot corrections. A bad native rig or clip must be
|
|
90
|
+
rejected and regenerated. Only horizontal root/hip translation is normalized
|
|
91
|
+
so Rapier remains authoritative.
|
|
92
|
+
|
|
93
|
+
A controller pack is an immutable exact action set. If a required binding is
|
|
94
|
+
absent, installation fails instead of substituting Meshy's rig-basic Walking
|
|
95
|
+
or Running animation. During Meshy validation, record the action ID actually
|
|
96
|
+
bound to every slot. A public preview is not evidence when the game is playing
|
|
97
|
+
a different clip or a rig-basic fallback.
|
|
98
|
+
|
|
86
99
|
Load `$genex-threejs-character-controller` for the actual wiring. The install
|
|
87
100
|
command copies the shared controller plus `character/meshy/meshy-loader.ts`.
|
|
88
101
|
The manifest points at the current rigged model and compact animation-only GLBs
|
|
@@ -93,6 +106,8 @@ durations, nominal speeds, trajectories, and gameplay requirements.
|
|
|
93
106
|
|
|
94
107
|
- Meshy clips play only on the exact character revision whose skeleton
|
|
95
108
|
signature matches. There is no runtime retargeting in this lane.
|
|
109
|
+
- Do not repair hands, arms, or legs at runtime. Verify the installed manifest's
|
|
110
|
+
exact slot-to-action mappings; stop and regenerate when a native pose is bad.
|
|
96
111
|
- Rapier owns the player transform. Animation tracks are normalized
|
|
97
112
|
horizontally in place; never move the rendered character root separately.
|
|
98
113
|
- `controller-loop` clips follow controller-local intent and measured speed.
|
|
@@ -409,7 +409,7 @@ after a bad single costs the whole chain).
|
|
|
409
409
|
|
|
410
410
|
## Troubleshooting
|
|
411
411
|
|
|
412
|
-
- **"Not authorized"** — run `npx @genex-ai/cli-demo@
|
|
412
|
+
- **"Not authorized"** — run `npx @genex-ai/cli-demo@dev init` first (it
|
|
413
413
|
writes your `GENEX_TOKEN`).
|
|
414
414
|
- **"Prompt rejected"** — the provider's content-safety filter blocked the
|
|
415
415
|
prompt. Non-retryable; rewrite the wording.
|
|
@@ -194,7 +194,7 @@ set belongs to `$genex-ai-hud` — both build on this command.
|
|
|
194
194
|
|
|
195
195
|
## Troubleshooting
|
|
196
196
|
|
|
197
|
-
- **"Not authorized"** — run `npx @genex-ai/cli-demo@
|
|
197
|
+
- **"Not authorized"** — run `npx @genex-ai/cli-demo@dev init` first (it writes your `GENEX_TOKEN`).
|
|
198
198
|
- **"Prompt rejected"** — the provider's content-safety filter blocked the prompt.
|
|
199
199
|
This is non-retryable; retrying the same wording fails again. Rewrite the prompt.
|
|
200
200
|
- **Decal is an opaque rectangle** — the image has no alpha. Regenerate with
|
|
@@ -321,7 +321,7 @@ upgrades, in order of effort:
|
|
|
321
321
|
|
|
322
322
|
## Troubleshooting
|
|
323
323
|
|
|
324
|
-
- **"Not authorized"** — run `npx @genex-ai/cli-demo@
|
|
324
|
+
- **"Not authorized"** — run `npx @genex-ai/cli-demo@dev init` first (it
|
|
325
325
|
writes your `GENEX_TOKEN`).
|
|
326
326
|
- **"Prompt rejected"** — the provider's content-safety filter blocked the
|
|
327
327
|
prompt. Non-retryable; rewrite the wording.
|
|
@@ -107,7 +107,7 @@ scene is a ghost: players and objects pass straight through it.
|
|
|
107
107
|
|
|
108
108
|
## Troubleshooting
|
|
109
109
|
|
|
110
|
-
- **"Not authorized"** — run `npx @genex-ai/cli-demo@
|
|
110
|
+
- **"Not authorized"** — run `npx @genex-ai/cli-demo@dev init` first (it writes your `GENEX_TOKEN`).
|
|
111
111
|
- **"Out of credits" (`insufficient_credits`)** — the account has no credits left for
|
|
112
112
|
this model generation. Tell the user the facts the CLI printed: their balance, this
|
|
113
113
|
generation's cost, and when their credits refill. Then offer to continue the build
|
|
@@ -72,7 +72,7 @@ Reuse one loaded `buffer` across many plays; create a fresh `Audio`/`PositionalA
|
|
|
72
72
|
|
|
73
73
|
## Troubleshooting
|
|
74
74
|
|
|
75
|
-
- **"Not authorized"** — run `npx @genex-ai/cli-demo@
|
|
75
|
+
- **"Not authorized"** — run `npx @genex-ai/cli-demo@dev init` first (it writes your `GENEX_TOKEN`).
|
|
76
76
|
- **"Out of credits" (`insufficient_credits`)** — the account has no credits left for
|
|
77
77
|
this sound generation. Tell the user the facts the CLI printed: their balance, this
|
|
78
78
|
generation's cost, and when their credits refill. Then offer to continue the build
|
|
@@ -76,7 +76,7 @@ scene.background = texture; // keep the raw texture for the visible sky
|
|
|
76
76
|
|
|
77
77
|
## Troubleshooting
|
|
78
78
|
|
|
79
|
-
- **"Not authorized"** — run `npx @genex-ai/cli-demo@
|
|
79
|
+
- **"Not authorized"** — run `npx @genex-ai/cli-demo@dev init` first (it writes your `GENEX_TOKEN`).
|
|
80
80
|
- **"Out of credits" (`insufficient_credits`)** — the account has no credits left for
|
|
81
81
|
this skybox generation. Tell the user the facts the CLI printed: their balance, this
|
|
82
82
|
generation's cost, and when their credits refill. Then offer to continue the build
|
|
@@ -225,7 +225,7 @@ first one is the one a screenshot of the whole arena will not show you.
|
|
|
225
225
|
|
|
226
226
|
## Troubleshooting
|
|
227
227
|
|
|
228
|
-
- **"Not authorized"** — run `npx @genex-ai/cli-demo@
|
|
228
|
+
- **"Not authorized"** — run `npx @genex-ai/cli-demo@dev init` first (it writes your `GENEX_TOKEN`).
|
|
229
229
|
- **"Out of credits" (`insufficient_credits`)** — the account has no credits left for
|
|
230
230
|
this texture generation. Tell the user the facts the CLI printed: their balance,
|
|
231
231
|
this generation's cost, and when their credits refill. Then offer to continue the
|
|
@@ -145,7 +145,7 @@ set belongs to `$genex-ai-hud` — both build on `npx genex image`/`video`.
|
|
|
145
145
|
|
|
146
146
|
## Troubleshooting
|
|
147
147
|
|
|
148
|
-
- **"Not authorized"** — run `npx @genex-ai/cli-demo@
|
|
148
|
+
- **"Not authorized"** — run `npx @genex-ai/cli-demo@dev init` first (it writes your `GENEX_TOKEN`).
|
|
149
149
|
- **"Prompt rejected"** — the provider's content-safety filter blocked the prompt.
|
|
150
150
|
This is non-retryable; retrying the same wording fails again. Rewrite the prompt.
|
|
151
151
|
- **Nothing plays / black surface** — the first `video.play()` must run inside a user
|
|
@@ -43,7 +43,7 @@ Add `--json` for machine-readable output.
|
|
|
43
43
|
**As a NEW game (start from the whole project):**
|
|
44
44
|
|
|
45
45
|
1. `git clone <clone URL from the output> <name>` — pick a short one-word name.
|
|
46
|
-
2. `cd <name>`, then `npx @genex-ai/cli-demo@
|
|
46
|
+
2. `cd <name>`, then `npx @genex-ai/cli-demo@dev init <name>` — never use
|
|
47
47
|
`--force`. This creates your own project; the original is untouched.
|
|
48
48
|
3. `npm install`, keep `base: './'` in `vite.config`, then build your changes
|
|
49
49
|
and ship with `npx genex preview`.
|
|
@@ -130,7 +130,7 @@ and re-link the clone to the same live game:
|
|
|
130
130
|
```bash
|
|
131
131
|
git clone <the game's repo url> my-game && cd my-game
|
|
132
132
|
npm install
|
|
133
|
-
npx @genex-ai/cli-demo@
|
|
133
|
+
npx @genex-ai/cli-demo@dev link <slug> # slug = the name in the play URL
|
|
134
134
|
```
|
|
135
135
|
|
|
136
136
|
Don't know the slug? **`npx genex list`** prints every game on your account —
|
|
@@ -157,7 +157,7 @@ Safe to run any time — genex-owned skills are refreshed to the latest version,
|
|
|
157
157
|
and your own files are never touched:
|
|
158
158
|
|
|
159
159
|
```bash
|
|
160
|
-
npx @genex-ai/cli-demo@
|
|
160
|
+
npx @genex-ai/cli-demo@dev init
|
|
161
161
|
```
|
|
162
162
|
|
|
163
163
|
Use `--force` only if you intentionally want your own existing files overwritten
|
|
@@ -50,6 +50,13 @@ after preview without asking the player to disable cache. `playOneShot()`
|
|
|
50
50
|
returns false and emits one warning when a requested clip is absent; treat
|
|
51
51
|
that as an installation failure, not a successful action.
|
|
52
52
|
|
|
53
|
+
Meshy limb rotations are played unchanged. Never freeze hand tracks or apply
|
|
54
|
+
post-mixer arm, leg, or foot corrections. A bad native rig or clip must be
|
|
55
|
+
rejected and regenerated. Only horizontal root/hip translation is normalized
|
|
56
|
+
so Rapier remains authoritative. A controller pack is an immutable exact
|
|
57
|
+
action set: if a required binding is absent, installation fails instead of
|
|
58
|
+
substituting Meshy's rig-basic Walking or Running animation.
|
|
59
|
+
|
|
53
60
|
Because these files are game-owned, never run `genex controller character --force` over an edited
|
|
54
61
|
fork as a migration strategy. Install a fresh copy elsewhere and port only the named changes.
|
|
55
62
|
|
|
@@ -200,6 +207,10 @@ slots, fallbacks, and cadence data. UAL clips still land in
|
|
|
200
207
|
genre hints, `playOneShot` options, overrides, foot IK, and remote-player
|
|
201
208
|
animation.
|
|
202
209
|
|
|
210
|
+
For Meshy characters, do not repair hands, arms, or legs at runtime. Verify
|
|
211
|
+
that the installed manifest binds the expected action IDs; if a native pose
|
|
212
|
+
is bad or a required binding is missing, stop and regenerate the character.
|
|
213
|
+
|
|
203
214
|
## Crouch (built in)
|
|
204
215
|
|
|
205
216
|
`C` toggles crouch (capsule shrinks, speed drops to `crouchSpeedRatio ×
|
|
@@ -110,6 +110,11 @@ const anims = new CharacterAnimations(native.scene, native.clips, {
|
|
|
110
110
|
});
|
|
111
111
|
```
|
|
112
112
|
|
|
113
|
+
During Meshy validation, record the action ID actually bound to every slot.
|
|
114
|
+
A public preview is not evidence when the game is playing a different clip or
|
|
115
|
+
a rig-basic fallback. The native loader plays every limb quaternion unchanged;
|
|
116
|
+
never freeze hand tracks or add post-mixer arm, leg, or foot corrections.
|
|
117
|
+
|
|
113
118
|
The loader rejects clips whose manifest skeleton signature differs from the
|
|
114
119
|
current model revision or whose tracks target missing bones. This is deliberate
|
|
115
120
|
same-rig playback, not runtime retargeting. After adding an action, rerun the
|
|
@@ -54,6 +54,10 @@ everything twice.
|
|
|
54
54
|
visibly crouched pose both respond. If a control calls `playOneShot()`, a
|
|
55
55
|
false result or missing-clip warning is an installation failure even when
|
|
56
56
|
locomotion continues normally.
|
|
57
|
+
During Meshy validation, record the action ID actually bound to every slot.
|
|
58
|
+
A public preview is not evidence when the game is playing a different clip
|
|
59
|
+
or a rig-basic fallback. Do not repair hands, arms, or legs at runtime: if a
|
|
60
|
+
native pose is bad or a required binding is missing, stop and regenerate.
|
|
57
61
|
3. Capture one screenshot of live gameplay — of the **game**, not a sign-in
|
|
58
62
|
gate or loading screen. A capture of the SDK's "Sign in to play" overlay is
|
|
59
63
|
NOT gameplay evidence. Evidence captured in local test mode must be labeled
|
|
@@ -38,7 +38,7 @@ update, so update immediately.)
|
|
|
38
38
|
Run exactly the command the nudge printed, from the game project root:
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
|
-
npm i -D @genex-ai/cli-demo@
|
|
41
|
+
npm i -D @genex-ai/cli-demo@dev # the genex CLI (a dev dependency)
|
|
42
42
|
npm i @genex-ai/embed-sdk@latest # identity/saves SDK (ships inside the game)
|
|
43
43
|
npm i @genex-ai/multiplayer@latest # multiplayer SDK (only if the game uses it)
|
|
44
44
|
```
|