@genex-ai/cli-demo 1.32.3 → 1.33.0-dev.684
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 +16 -10
- package/dist/{blender-mcp-X66ZZ4TN.js → blender-mcp-Q6PSFYSE.js} +2 -2
- package/dist/{blender-serve-PVVCH3S6.js → blender-serve-BF4FZ55Z.js} +1 -1
- package/dist/{chunk-OJAXYQ5L.js → chunk-2COG4P3T.js} +1 -1
- package/dist/{chunk-5FA2WLM7.js → chunk-HYCSNWYX.js} +1 -1
- package/dist/index.js +17 -13
- package/package.json +1 -1
- package/templates/skills/genex-ai-hud/SKILL.md +7 -6
- package/templates/skills/genex-ai-hud/references/stage1-prompt-template.md +1 -1
- package/templates/skills/genex-ai-image/SKILL.md +3 -1
- package/templates/skills/genex-ai-menu/SKILL.md +4 -2
- package/templates/skills/genex-ai-music/SKILL.md +8 -3
- package/templates/skills/genex-ai-sfx/SKILL.md +7 -0
- package/templates/skills/genex-ai-texture/SKILL.md +1 -1
- package/templates/skills/genex-ai-video/SKILL.md +1 -1
- package/templates/skills/genex-ai-voice/SKILL.md +5 -2
- package/templates/skills/genex-getting-started/SKILL.md +2 -2
- package/templates/skills/genex-tool-audio/SKILL.md +5 -1
- package/templates/skills/genex-tool-image/SKILL.md +7 -6
- package/templates/skills/genex-tool-texture/SKILL.md +1 -1
- package/templates/skills/genex-updates/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @genex-ai/cli-demo
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Install the Genex skills into your project's agent workspaces, authorize, create a game project, and publish.
|
|
4
4
|
This is the `cli` app of the [genex monorepo](../../README.md).
|
|
5
5
|
|
|
6
6
|
```bash
|
|
@@ -55,9 +55,11 @@ as the latest available snapshot.
|
|
|
55
55
|
`genex init` does four things:
|
|
56
56
|
|
|
57
57
|
1. **Installs the skills for your coding agents** — copies the bundled templates
|
|
58
|
-
into every agent it detects: Claude Code
|
|
59
|
-
agents/ + commands/), Codex
|
|
60
|
-
(
|
|
58
|
+
PROJECT-LOCALLY into every agent workspace it detects: Claude Code
|
|
59
|
+
(`<project>/.claude`, full set incl. agents/ + commands/), Codex
|
|
60
|
+
(`<project>/.codex/skills`), and Cursor (`<project>/.cursor/skills`). The
|
|
61
|
+
CLI never writes agent state into your home directory — only the token and
|
|
62
|
+
caches live in `~/.genex`. genex-owned skills (`genex-*`) are **always refreshed**
|
|
61
63
|
to the package version so a stale copy can't linger; your own files are never
|
|
62
64
|
overwritten. After init, **every** `genex` command re-syncs them to the
|
|
63
65
|
installed CLI version automatically (printing `🔄 Genex skills updated to
|
|
@@ -113,15 +115,19 @@ downloaded or committed:
|
|
|
113
115
|
| Command | Provider | Prints (role) |
|
|
114
116
|
| --- | --- | --- |
|
|
115
117
|
| `genex model "<prompt>"` | Tripo | `…/generations/<id>/model-glb` |
|
|
118
|
+
| `genex character "<direction>"` | Meshy | a concept sheet, then a rigged character |
|
|
119
|
+
| `genex character import <file.glb>` | Uthana | a rigged character from your own mesh |
|
|
116
120
|
| `genex sfx "<prompt>" [--duration <s>]` | ElevenLabs | `…/generations/<id>/audio-sfx` |
|
|
117
|
-
| `genex
|
|
118
|
-
| `genex
|
|
119
|
-
| `genex
|
|
121
|
+
| `genex music "<prompt>" [--duration <s>]` | ElevenLabs | `…/generations/<id>/audio-music` |
|
|
122
|
+
| `genex voice "<line>" [--voice <cast>]` | ElevenLabs | `…/generations/<id>/audio-voice` |
|
|
123
|
+
| `genex texture "<prompt>" [--terrain]` | Gemini (Nano Banana 2) | `…/generations/<id>/texture-basecolor` |
|
|
124
|
+
| `genex image "<prompt>" [--transparent] [--aspect <ratio>]` | fal.ai (GPT Image 2.5) | `…/generations/<id>/image-main` |
|
|
125
|
+
| `genex video "<prompt>" [--duration <s>] [--loop]` | fal.ai (MiniMax H3 family; Luma for `--loop`) | `…/generations/<id>/video-mp4` |
|
|
120
126
|
|
|
121
127
|
`genex image` and `genex video` also power the game-UI pipeline (menus + HUD
|
|
122
128
|
sprite sets — see the `genex-ai-menu` / `genex-ai-hud` skills):
|
|
123
129
|
|
|
124
|
-
- **image** — `--quality <low|medium|high>` (
|
|
130
|
+
- **image** — `--quality <low|medium|high|xhigh|max>` (GPT Image 2.5 quality tiers),
|
|
125
131
|
`--size <WxH>` (exact pixel size, e.g. `2560x1440`), `--edit <url|file>`
|
|
126
132
|
(edit an existing image with the prompt — a generated-asset URL or a LOCAL
|
|
127
133
|
image file, inlined as a data URI up to ~4 MB: a user's reference
|
|
@@ -169,7 +175,7 @@ genex character finalize <preview-id> --user-approved --approve-remesh 10000
|
|
|
169
175
|
|
|
170
176
|
The first command produces exactly three full-body neutral-A-pose concept
|
|
171
177
|
images and a contact sheet, then stops. The second converts only the selected
|
|
172
|
-
image into an unremeshed, textured Meshy
|
|
178
|
+
image into an unremeshed, textured Meshy 7 high-detail GLB, preserves it in R2,
|
|
173
179
|
and returns front/back/left/right views plus its measured face count. The final
|
|
174
180
|
command requires another explicit approval, creates a separate 10,000-face
|
|
175
181
|
triangle remesh, rigs that exact remesh, and installs the immutable
|
|
@@ -403,7 +409,7 @@ src/
|
|
|
403
409
|
env.ts read/modify/write .env safely
|
|
404
410
|
auth.ts loopback server + browser opener
|
|
405
411
|
utils/ logger + colors (zero runtime deps)
|
|
406
|
-
templates/ copied into
|
|
412
|
+
templates/ copied into the project's agent workspaces (.claude, .codex/skills, .cursor/skills) by `genex init`
|
|
407
413
|
```
|
|
408
414
|
|
|
409
415
|
## Publishing
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
isRenderMode,
|
|
8
8
|
sceneSummary,
|
|
9
9
|
sheetOf
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-2COG4P3T.js";
|
|
11
11
|
import {
|
|
12
12
|
getCliVersion
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-HYCSNWYX.js";
|
|
14
14
|
|
|
15
15
|
// src/commands/blender-mcp.ts
|
|
16
16
|
import fs from "fs/promises";
|
|
@@ -3,7 +3,7 @@ import fs from "fs";
|
|
|
3
3
|
import os from "os";
|
|
4
4
|
import path from "path";
|
|
5
5
|
import { fileURLToPath } from "url";
|
|
6
|
-
var RAW_CHANNEL = "
|
|
6
|
+
var RAW_CHANNEL = "dev";
|
|
7
7
|
var CLI_CHANNEL = RAW_CHANNEL === "dev" ? "dev" : "latest";
|
|
8
8
|
var STANDS = {
|
|
9
9
|
prod: { api: "https://api.genex.games", dashboard: "https://genex.games" },
|
package/dist/index.js
CHANGED
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
writeProject,
|
|
43
43
|
writeUserToken,
|
|
44
44
|
writeWorkspace
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-2COG4P3T.js";
|
|
46
46
|
import {
|
|
47
47
|
CLI_CHANNEL,
|
|
48
48
|
DEFAULT_API_URL,
|
|
@@ -59,7 +59,7 @@ import {
|
|
|
59
59
|
getGenexEnvPath,
|
|
60
60
|
getTemplatesDir,
|
|
61
61
|
resolveAgentTargets
|
|
62
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-HYCSNWYX.js";
|
|
63
63
|
|
|
64
64
|
// src/instrument.ts
|
|
65
65
|
import * as Sentry from "@sentry/node";
|
|
@@ -8489,6 +8489,7 @@ function buildGenOptions(kind, opts) {
|
|
|
8489
8489
|
}
|
|
8490
8490
|
if (kind === "texture" && opts.terrain) options.terrain = true;
|
|
8491
8491
|
if ((kind === "sfx" || kind === "music") && opts.duration) options.durationSeconds = opts.duration;
|
|
8492
|
+
if (kind === "sfx" && opts.loop) options.loop = true;
|
|
8492
8493
|
if (kind === "voice") {
|
|
8493
8494
|
if (opts.voice) options.voice = opts.voice;
|
|
8494
8495
|
if (opts.voiceId) options.voiceId = opts.voiceId;
|
|
@@ -22296,7 +22297,7 @@ async function runBlender(opts) {
|
|
|
22296
22297
|
return 1;
|
|
22297
22298
|
}
|
|
22298
22299
|
if (sub === "serve") {
|
|
22299
|
-
const { serveLocalBlender } = await import("./blender-serve-
|
|
22300
|
+
const { serveLocalBlender } = await import("./blender-serve-BF4FZ55Z.js");
|
|
22300
22301
|
const port = Number(process.env.GENEX_BLENDER_PORT ?? 8088);
|
|
22301
22302
|
log.step(`Starting a local Blender service on port ${port}`);
|
|
22302
22303
|
log.plain(
|
|
@@ -22305,7 +22306,7 @@ async function runBlender(opts) {
|
|
|
22305
22306
|
return serveLocalBlender({ port, log });
|
|
22306
22307
|
}
|
|
22307
22308
|
if (sub === "mcp") {
|
|
22308
|
-
const { runBlenderMcp } = await import("./blender-mcp-
|
|
22309
|
+
const { runBlenderMcp } = await import("./blender-mcp-Q6PSFYSE.js");
|
|
22309
22310
|
return runBlenderMcp();
|
|
22310
22311
|
}
|
|
22311
22312
|
if (sub === "seat") {
|
|
@@ -23203,7 +23204,7 @@ import path34 from "path";
|
|
|
23203
23204
|
var BUDGET_SOURCE_LINE = "Live from your account; prices can change without a deploy.";
|
|
23204
23205
|
var BUDGET_APPROVAL_REQUIRED = "STOP: raising the asset allowance requires the player's explicit approval. Re-run with --user-approved only after they agreed to the number.";
|
|
23205
23206
|
function internalKind(kind) {
|
|
23206
|
-
return kind === "agent_session" || kind === "blender_seat" || kind === "avatar_look" || kind.startsWith("
|
|
23207
|
+
return kind === "agent_session" || kind === "blender_seat" || kind === "avatar_look" || kind.startsWith("cover_");
|
|
23207
23208
|
}
|
|
23208
23209
|
async function isGenexProject(cwd) {
|
|
23209
23210
|
try {
|
|
@@ -23359,9 +23360,10 @@ async function runBudget(opts = {}) {
|
|
|
23359
23360
|
var TYPICAL_CREDITS = {
|
|
23360
23361
|
model: 35,
|
|
23361
23362
|
// 46 from a reference image; --texture standard 23, --no-texture 12, --geometry detailed 58, --quad 41, --low-poly 46, --parts 58 quote off the estimate
|
|
23362
|
-
image:
|
|
23363
|
-
//
|
|
23364
|
-
texture:
|
|
23363
|
+
image: 7,
|
|
23364
|
+
// GPT Image 2.5 at high, the default; --quality xhigh/max, --candidates, --edit and 4K quote higher, --quality low/medium and --transparent quote lower
|
|
23365
|
+
texture: 9,
|
|
23366
|
+
// gemini-3.1-flash-image, 1K square
|
|
23365
23367
|
sfx: 2,
|
|
23366
23368
|
music: 27,
|
|
23367
23369
|
// 90 s; up to 87 for a 300 s track
|
|
@@ -23635,7 +23637,8 @@ ${c.bold("Options for the generators (`model` `sfx` `music` `voice` `texture` `i
|
|
|
23635
23637
|
--open (image/video) open the finished asset in the user's browser +
|
|
23636
23638
|
print a link \u2014 show them the concept frame / anything they approve.
|
|
23637
23639
|
--aspect <ratio> (image) aspect preset (e.g. square, landscape, portrait).
|
|
23638
|
-
--quality <q> (image) quality preset: low | medium | high
|
|
23640
|
+
--quality <q> (image) quality preset: low | medium | high | xhigh | max
|
|
23641
|
+
(xhigh and max: hero art \u2014 slower and dearer).
|
|
23639
23642
|
--candidates <n> (image) generate 2-4 variants in ONE call and print every
|
|
23640
23643
|
URL \u2014 pick the best instead of re-rolling. Needs
|
|
23641
23644
|
--quality or --size; not with --remove-bg/--transparent.
|
|
@@ -23655,7 +23658,8 @@ ${c.bold("Options for the generators (`model` `sfx` `music` `voice` `texture` `i
|
|
|
23655
23658
|
--remove-bg (image) chain ML background removal after the gen/edit.
|
|
23656
23659
|
--bg-mode <mode> (image) background-removal model: sprite | glyph | sheet |
|
|
23657
23660
|
matte (BiRefNet soft alpha \u2014 hair/glow/smoke edges).
|
|
23658
|
-
--loop (video) generate a seamless loop
|
|
23661
|
+
--loop (video) generate a seamless loop; (sfx) an ambient bed
|
|
23662
|
+
generated to close on itself, for setLoop(true).
|
|
23659
23663
|
--resolution <r> (video) 480p | 768p | 2k | 4k (default 768p \u2014 the top
|
|
23660
23664
|
native mode; 2k/4k are upscales of the same base and
|
|
23661
23665
|
cost more; 480p is the cost opt-down; loop clips ignore
|
|
@@ -23984,7 +23988,7 @@ resumes it without creating another project. Existing source credits/licenses re
|
|
|
23984
23988
|
Use the dev CLI channel for dev.genex.games links. After setup, work in the returned
|
|
23985
23989
|
folder and follow the user's request to decide what to reuse, change or replace.
|
|
23986
23990
|
`,
|
|
23987
|
-
video: `${c.bold("genex video")} \u2014 generate a video clip (mp4, MiniMax H3 Max
|
|
23991
|
+
video: `${c.bold("genex video")} \u2014 generate a video clip (mp4, MiniMax H3 Max Turbo by default; H3 Max for --ref; plain H3 for seamless loops and 2k/4k; native stereo audio on every non-loop clip).
|
|
23988
23992
|
|
|
23989
23993
|
${c.bold("Modes")}
|
|
23990
23994
|
genex video "<prompt>" text-to-video (16:9).
|
|
@@ -24595,8 +24599,8 @@ function applyValueFlag(options, flag, value) {
|
|
|
24595
24599
|
options.aspect = value;
|
|
24596
24600
|
break;
|
|
24597
24601
|
case "--quality":
|
|
24598
|
-
if (!["low", "medium", "high"].includes(value)) {
|
|
24599
|
-
throw new Error(`Invalid --quality value: ${value} (expected low|medium|high)`);
|
|
24602
|
+
if (!["low", "medium", "high", "xhigh", "max"].includes(value)) {
|
|
24603
|
+
throw new Error(`Invalid --quality value: ${value} (expected low|medium|high|xhigh|max)`);
|
|
24600
24604
|
}
|
|
24601
24605
|
options.quality = value;
|
|
24602
24606
|
break;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@genex-ai/cli-demo",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.33.0-dev.684",
|
|
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": {
|
|
@@ -272,8 +272,8 @@ to the same standard.
|
|
|
272
272
|
# Stage 1 — the HUD mockup: this game's full HUD over its own scene.
|
|
273
273
|
# TEXT-described; add `--edit <url-or-local-file>` to anchor it to an
|
|
274
274
|
# existing reference image so the HUD inherits its exact style.
|
|
275
|
-
# ONE mockup; save its URL:
|
|
276
|
-
npx genex image "<filled stage-1 prompt>" --size 2560x1440 --quality
|
|
275
|
+
# ONE mockup; save its URL (xhigh: the mockup is the reference every sprite is cut from):
|
|
276
|
+
npx genex image "<filled stage-1 prompt>" --size 2560x1440 --quality xhigh
|
|
277
277
|
|
|
278
278
|
# Stage 2 — deconstruct the mockup into an asset sheet on white:
|
|
279
279
|
npx genex image "<filled stage-2 prompt>" --edit <mockup-url> --quality high
|
|
@@ -311,7 +311,7 @@ you verify the final HUD against.
|
|
|
311
311
|
To fix ONE sprite, don't re-run the pipeline:
|
|
312
312
|
|
|
313
313
|
- **Regenerate it** in the house style:
|
|
314
|
-
`npx genex image "<style brief + sprite subject>" --quality
|
|
314
|
+
`npx genex image "<style brief + sprite subject>" --quality high --remove-bg`
|
|
315
315
|
— add `--bg-mode glyph` for digits and closed shapes (an `8` or `$` otherwise
|
|
316
316
|
comes back with its loops hollowed out). Use the mandatory cutout sentence.
|
|
317
317
|
- **Or region-edit the sheet**: `npx genex image "<targeted change>" --edit <sheet-url>`
|
|
@@ -336,7 +336,7 @@ To fix ONE sprite, don't re-run the pipeline:
|
|
|
336
336
|
whitespace between the STACKED meter cells specifically (measured on a
|
|
337
337
|
live run: the tools hard-refuse the resulting neighbor-in-crop defect, so
|
|
338
338
|
spacing up front saves a sheet re-roll).
|
|
339
|
-
- **
|
|
339
|
+
- **GPT Image 2.5 silently squashes past 3:1** — never request a canvas with
|
|
340
340
|
aspect beyond 3:1. For thin strips (a wide bar frame), generate inside a
|
|
341
341
|
≤3:1 canvas with margins, then `genex ui trim` down to the art.
|
|
342
342
|
- **Fix-up recrop, never a Stage-2 re-run for one sprite.** One bad crop:
|
|
@@ -654,8 +654,9 @@ stages land, and never sit in a foreground wait.
|
|
|
654
654
|
## Options
|
|
655
655
|
|
|
656
656
|
- `npx genex image` — `--size <WxH>` exact pixels (multiples of 16, each side
|
|
657
|
-
≤ 3840, aspect at most 3:1); `--quality <low|medium|high>` (
|
|
658
|
-
mockup
|
|
657
|
+
≤ 3840, aspect at most 3:1); `--quality <low|medium|high|xhigh|max>` (xhigh for
|
|
658
|
+
the stage-1 mockup, high for the stage-2 sheet and for single sprites; max is
|
|
659
|
+
a hero-art tier the HUD pipeline does not need); `--candidates <2|3|4>` several
|
|
659
660
|
variants in ONE call (one mockup is the default; use candidates when the
|
|
660
661
|
player asks for variants or you genuinely want options to judge); `--edit <url|file>` image-to-image edit of an
|
|
661
662
|
R2 URL or a local image file (≤4 MB, inlined); `--clean <url>`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Stage 1 prompt template — the full-HUD mockup
|
|
2
2
|
|
|
3
3
|
Fill the placeholders, then pass the whole text as the prompt to
|
|
4
|
-
`npx genex image "<filled prompt>" --size 2560x1440 --quality
|
|
4
|
+
`npx genex image "<filled prompt>" --size 2560x1440 --quality xhigh`.
|
|
5
5
|
One mockup is the default; generate candidate variants when the player asks
|
|
6
6
|
for them or you genuinely want options to judge. Every
|
|
7
7
|
sprite the HUD ships is cut out of this frame, so the scene half deserves the
|
|
@@ -209,7 +209,9 @@ See `$genex-threejs-multiplayer` for the `shared` channel rules and the room API
|
|
|
209
209
|
generation and that is billed per image, so generate candidates with
|
|
210
210
|
`--quality`/`--size`, pick one, then cut it with `--clean <url>`.
|
|
211
211
|
- `--aspect <ratio>` — image shape (e.g. `square`, `16:9`, `9:16`); default is square.
|
|
212
|
-
- `--quality <low|medium|high>` — quality preset; higher
|
|
212
|
+
- `--quality <low|medium|high|xhigh|max>` — GPT Image 2.5 quality preset; higher
|
|
213
|
+
costs more and takes longer. `xhigh` and `max` are for hero art (a title
|
|
214
|
+
wordmark, a key-art backdrop), not for sprites and icons.
|
|
213
215
|
- `--size <WxH>` — exact pixel size (multiples of 16, each side ≤ 3840, aspect ≤ 3:1).
|
|
214
216
|
- `--edit <url>` — edit THAT generated image with the prompt (image-to-image).
|
|
215
217
|
- `--inpaint <mask.png|url>` — with `--edit`: a region mask (local PNG or
|
|
@@ -37,7 +37,9 @@ hard rules for the frame prompt:
|
|
|
37
37
|
|
|
38
38
|
- **Full-bleed cinematic 16:9.** The frame is a filmic establishing shot,
|
|
39
39
|
edge to edge. End the prompt with: `Edge-to-edge cinematic composition.
|
|
40
|
-
Full-bleed 16:9 frame.
|
|
40
|
+
Full-bleed 16:9 frame. The frame is pure scenery: no UI elements, no text,
|
|
41
|
+
no buttons in the frame.` Ask for `--quality xhigh`: a still the player
|
|
42
|
+
stares at every time the menu opens earns the top tier.
|
|
41
43
|
- **NO UI in the frame — ever.** No buttons, no title text, no logos, no
|
|
42
44
|
menus baked into the image. All of that is DOM on top. If the image model
|
|
43
45
|
draws UI into the frame, the prompt was wrong — rewrite and regenerate.
|
|
@@ -123,7 +125,7 @@ references/style-capsules.md) — a lean, not a rule.
|
|
|
123
125
|
# If the menu should match an image that already exists, add --edit <url> so
|
|
124
126
|
# the two share one palette and light. The still stays UI-free — an image
|
|
125
127
|
# with interface in it is never the video frame:
|
|
126
|
-
npx genex image "windswept alpine meadow at golden hour, wildflowers leaning in the gusts, painterly light, cinematic wide shot. Edge-to-edge cinematic composition. Full-bleed 16:9 frame.
|
|
128
|
+
npx genex image "windswept alpine meadow at golden hour, wildflowers leaning in the gusts, painterly light, cinematic wide shot. Edge-to-edge cinematic composition. Full-bleed 16:9 frame. The frame is pure scenery: no UI elements, no text, no buttons in the frame." --aspect 16:9 --quality xhigh
|
|
127
129
|
# -> https://assets.genex.technology/generations/<id>/image-main
|
|
128
130
|
|
|
129
131
|
# 2. Animate it into a seamless loop (same image as first AND last frame).
|
|
@@ -42,14 +42,19 @@ dev, published game, and remixes alike).
|
|
|
42
42
|
|
|
43
43
|
## Prompt recipe for loopable game music
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
Genre + mood + instrumentation + tempo + loop wording:
|
|
46
46
|
|
|
47
47
|
- Name the game's emotional register and 2–3 instruments ("brooding synthwave,
|
|
48
48
|
analog pads and arpeggio", "cozy acoustic folk, fingerpicked guitar and soft
|
|
49
49
|
strings").
|
|
50
|
+
- Give it a tempo, and a key when the mood needs one ("96 BPM, in D minor"):
|
|
51
|
+
the model reads musical terms as exactly as words, and a stated tempo holds
|
|
52
|
+
every bar of a loop at the same pace. Keep the whole prompt short; more
|
|
53
|
+
adjectives do not buy a better track.
|
|
50
54
|
- Always end with: **"seamless loop, consistent energy, no intro, no outro"** —
|
|
51
|
-
|
|
52
|
-
`setLoop(true)` inaudible. A
|
|
55
|
+
the music API has no loop flag (the sfx lane does; music is prompt-shaped);
|
|
56
|
+
consistent energy at both ends is what makes `setLoop(true)` inaudible. A
|
|
57
|
+
track with a big intro pops every cycle.
|
|
53
58
|
- Don't ask for vocals — the lane forces instrumental regardless.
|
|
54
59
|
|
|
55
60
|
## Wire it in Three.js
|
|
@@ -15,6 +15,13 @@ npx genex sfx "punchy laser zap, short and dry" --duration 2
|
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
`--duration <sec>` (0.5–22) sets a target length; omit it to let the model pick.
|
|
18
|
+
Describe ONE sound, concretely, in the vendor's own vocabulary where it fits:
|
|
19
|
+
"impact" for a hit, "whoosh" for movement through air, "ambience" for a room
|
|
20
|
+
or weather bed, "drone" for a continuous suspense texture. A sequence is
|
|
21
|
+
written in order: "footsteps on gravel, then a metal door opens".
|
|
22
|
+
For an ambient bed the game will play on repeat (rain, a crowd, a machine
|
|
23
|
+
hum), pass `--loop`: the clip is generated to close on itself, so
|
|
24
|
+
`setLoop(true)` has no pop at the wrap. Never on a one-shot.
|
|
18
25
|
Blocks until ready, then prints its public URL:
|
|
19
26
|
|
|
20
27
|
```
|
|
@@ -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
|
|
228
|
+
- **"Not authorized"** — run `npx genex init` first (in the project — it resolves this project's own CLI; 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
|
|
@@ -203,7 +203,7 @@ evidence detective game, a video-book. The pattern that makes it hold together:
|
|
|
203
203
|
|
|
204
204
|
## Troubleshooting
|
|
205
205
|
|
|
206
|
-
- **"Not authorized"** — run `npx
|
|
206
|
+
- **"Not authorized"** — run `npx genex init` first (in the project — it resolves this project's own CLI; it writes your `GENEX_TOKEN`).
|
|
207
207
|
- **"Prompt rejected"** — the provider's content-safety filter blocked the prompt.
|
|
208
208
|
This is non-retryable; retrying the same wording fails again. Rewrite the prompt.
|
|
209
209
|
The measured false-positive class is anatomy being pierced or entered
|
|
@@ -58,8 +58,11 @@ voice id (overrides `--voice`) — for when the user has a specific voice in
|
|
|
58
58
|
mind. The cast covers the normal cases; don't browse ids speculatively.
|
|
59
59
|
|
|
60
60
|
Pick ONE voice per character and stay with it — a guard who changes voice
|
|
61
|
-
between barks breaks the character. The model is multilingual:
|
|
62
|
-
game's language comes back spoken in that language.
|
|
61
|
+
between barks breaks the character. The model (ElevenLabs v3) is multilingual:
|
|
62
|
+
text in the game's language comes back spoken in that language. It also reads
|
|
63
|
+
stage directions in square brackets and punctuation for pacing: `[whispers]
|
|
64
|
+
Stay close.`, `[sighs] Not again...`, an ellipsis for a pause, CAPITALS for
|
|
65
|
+
emphasis. Use them sparingly; a bark rarely needs more than one.
|
|
63
66
|
|
|
64
67
|
## Limits
|
|
65
68
|
|
|
@@ -161,7 +161,7 @@ downloads the game too, binary assets and all:
|
|
|
161
161
|
|
|
162
162
|
```bash
|
|
163
163
|
mkdir my-game && cd my-game
|
|
164
|
-
npx @genex-ai/cli-demo@
|
|
164
|
+
npx @genex-ai/cli-demo@dev link <slug> # slug = the name in the play URL
|
|
165
165
|
npm install
|
|
166
166
|
```
|
|
167
167
|
|
|
@@ -225,7 +225,7 @@ Safe to run any time — genex-owned skills are refreshed to the latest version,
|
|
|
225
225
|
and your own files are never touched:
|
|
226
226
|
|
|
227
227
|
```bash
|
|
228
|
-
npx @genex-ai/cli-demo@
|
|
228
|
+
npx @genex-ai/cli-demo@dev init
|
|
229
229
|
```
|
|
230
230
|
|
|
231
231
|
Use `--force` only if you intentionally want your own existing files overwritten
|
|
@@ -15,7 +15,11 @@ npx genex sfx "heavy wooden door creaking open" --duration 3
|
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
`--duration <sec>` targets a clip length; leave it off and the model decides.
|
|
18
|
-
Generate each sound separately — one prompt, one sound
|
|
18
|
+
Generate each sound separately — one prompt, one sound, in the vendor's own
|
|
19
|
+
vocabulary where it fits ("impact", "whoosh", "ambience", "drone"); a sequence
|
|
20
|
+
is written in order ("footsteps on gravel, then a metal door opens"). For an
|
|
21
|
+
ambient bed the game plays on repeat, add `--loop`: the clip is generated to
|
|
22
|
+
close on itself, so it wraps without a pop.
|
|
19
23
|
|
|
20
24
|
## Music
|
|
21
25
|
|
|
@@ -34,7 +34,7 @@ Wire the **local path**. The URL is provenance — never fetch it at runtime.
|
|
|
34
34
|
- `--bg-mode <sprite|glyph|sheet|matte>` — which removal model. `matte` gives soft alpha for hair, glow and smoke edges.
|
|
35
35
|
- `--clean <url>` — remove the background of an existing image, no generation.
|
|
36
36
|
- `--upscale <url>` — 2× an existing image.
|
|
37
|
-
- `--aspect <ratio>` · `--size <WxH>` · `--quality <low|medium|high>` — framing and fidelity.
|
|
37
|
+
- `--aspect <ratio>` · `--size <WxH>` · `--quality <low|medium|high|xhigh|max>` — framing and fidelity (GPT Image 2.5 tiers; `xhigh` and `max` are for hero art and cost the most).
|
|
38
38
|
- `--candidates <2-4>` — several variants in ONE call, so you pick instead of re-rolling. Needs `--quality` or `--size`.
|
|
39
39
|
- `--open` — also open it in a browser, for something the user must look at and approve.
|
|
40
40
|
- `--out-dir <dir>` — where the file lands (default `./assets`).
|
|
@@ -43,10 +43,11 @@ Wire the **local path**. The URL is provenance — never fetch it at runtime.
|
|
|
43
43
|
|
|
44
44
|
## Cost
|
|
45
45
|
|
|
46
|
-
From **
|
|
47
|
-
`--
|
|
48
|
-
`--
|
|
49
|
-
prices and your balance:
|
|
46
|
+
From **7 credits** per image at the default high quality (1 credit = $0.01);
|
|
47
|
+
`--quality xhigh`, `--quality max` and 4K canvases cost more, `--quality low`,
|
|
48
|
+
`--quality medium` and `--transparent` cost less, and `--candidates` bills per
|
|
49
|
+
variant - the command prints the exact quote. Live prices and your balance:
|
|
50
|
+
`npx genex doctor`.
|
|
50
51
|
|
|
51
52
|
## Waiting
|
|
52
53
|
|
|
@@ -59,4 +60,4 @@ prices and your balance: `npx genex doctor`.
|
|
|
59
60
|
- **Out of credits** — the error prints your balance, the price, and when credits refill. Say that plainly to the user; don't retry.
|
|
60
61
|
- **"Email not verified"** — the printed link unlocks the free credits; generation works right after.
|
|
61
62
|
- **Anything else** — `npx genex doctor` reports sign-in, credits, and whether the image lane is live on this account.
|
|
62
|
-
- A prompt that keeps producing the wrong thing is a prompt problem, not a lane problem — name the subject, the medium and the framing concretely ("vintage travel poster, screen-printed, three flat colours"), rather than adding adjectives.
|
|
63
|
+
- A prompt that keeps producing the wrong thing is a prompt problem, not a lane problem — name the subject, the medium and the framing concretely ("vintage travel poster, screen-printed, three flat colours"), rather than adding adjectives. Put the subject first and say what you want, never what to leave out: the image model reads the opening words hardest and does not take negative prompts.
|
|
@@ -39,7 +39,7 @@ repeat — the file names carry the role, so the mapping is unambiguous.
|
|
|
39
39
|
|
|
40
40
|
## Cost
|
|
41
41
|
|
|
42
|
-
From **
|
|
42
|
+
From **9 credits** for the whole set (1 credit = $0.01). Live prices and
|
|
43
43
|
your balance: `npx genex doctor`.
|
|
44
44
|
|
|
45
45
|
## Waiting
|
|
@@ -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
|
```
|