@bitmagic/asset-core 0.2.21-dev.6 → 0.2.21-dev.8
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/dist/forger-client.d.ts.map +1 -1
- package/dist/forger-client.js +0 -2
- package/dist/forger-client.js.map +1 -1
- package/dist/generators/animation.d.ts +2 -2
- package/dist/generators/prop-voxel.d.ts +28 -0
- package/dist/generators/prop-voxel.d.ts.map +1 -1
- package/dist/generators/prop-voxel.js +33 -1
- package/dist/generators/prop-voxel.js.map +1 -1
- package/dist/generators/speech.d.ts +71 -0
- package/dist/generators/speech.d.ts.map +1 -0
- package/dist/generators/speech.js +112 -0
- package/dist/generators/speech.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/smart-object.d.ts +331 -0
- package/dist/smart-object.d.ts.map +1 -0
- package/dist/smart-object.js +83 -0
- package/dist/smart-object.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forger-client.d.ts","sourceRoot":"","sources":["../src/forger-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;GAKG;AAEH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AAErD,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiF;IACzG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;gBAErB,MAAM,EAAE,UAAU;IAgBvB,cAAc,IAAI,OAAO;IAIzB,4BAA4B,IAAI,MAAM;IAI7C,OAAO,CAAC,UAAU;YAMJ,QAAQ;IAgCtB;;;;;;;;;;;;;;;OAeG;IACU,GAAG,CAAC,CAAC,GAAG,OAAO,EAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,EAC5D,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IA2Bb;;;;;;;OAOG;IACU,IAAI,CAAC,CAAC,GAAG,OAAO,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IAMb;;;;;;;;;OASG;IACU,cAAc,CAAC,CAAC,GAAG,OAAO,EACrC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"forger-client.d.ts","sourceRoot":"","sources":["../src/forger-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;GAKG;AAEH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AAErD,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiF;IACzG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;gBAErB,MAAM,EAAE,UAAU;IAgBvB,cAAc,IAAI,OAAO;IAIzB,4BAA4B,IAAI,MAAM;IAI7C,OAAO,CAAC,UAAU;YAMJ,QAAQ;IAgCtB;;;;;;;;;;;;;;;OAeG;IACU,GAAG,CAAC,CAAC,GAAG,OAAO,EAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,EAC5D,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IA2Bb;;;;;;;OAOG;IACU,IAAI,CAAC,CAAC,GAAG,OAAO,EAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,CAAC;IAMb;;;;;;;;;OASG;IACU,cAAc,CAAC,CAAC,GAAG,OAAO,EACrC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,CAAC,CAAC;CA6Ed"}
|
package/dist/forger-client.js
CHANGED
|
@@ -133,8 +133,6 @@ export class AssetForgerClient {
|
|
|
133
133
|
}
|
|
134
134
|
this.log.info(`[${loggerName}] Job ${jobId} accepted, polling ${statusUrl}...`);
|
|
135
135
|
const statusFullUrl = `${this.baseUrl}${statusUrl}`;
|
|
136
|
-
// Upstream's Python wrapper retries once after a per-attempt 300s timeout,
|
|
137
|
-
// so legitimate slow successes can take ~380s. Must exceed that ceiling.
|
|
138
136
|
const overallTimeoutMs = options.overallTimeoutMs ?? DEFAULT_JOB_TIMEOUT_MS;
|
|
139
137
|
const basePollMs = 5000;
|
|
140
138
|
const minPollMs = 2000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forger-client.js","sourceRoot":"","sources":["../src/forger-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"forger-client.js","sourceRoot":"","sources":["../src/forger-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,16 +51,16 @@ export declare const animationParamsSchema: z.ZodObject<{
|
|
|
51
51
|
length?: number | undefined;
|
|
52
52
|
loop?: boolean | undefined;
|
|
53
53
|
assetId?: string | undefined;
|
|
54
|
-
seed?: number | undefined;
|
|
55
54
|
model?: string | undefined;
|
|
55
|
+
seed?: number | undefined;
|
|
56
56
|
inPlace?: boolean | undefined;
|
|
57
57
|
}, {
|
|
58
58
|
description: string;
|
|
59
59
|
length?: number | undefined;
|
|
60
60
|
loop?: boolean | undefined;
|
|
61
61
|
assetId?: string | undefined;
|
|
62
|
-
seed?: number | undefined;
|
|
63
62
|
model?: string | undefined;
|
|
63
|
+
seed?: number | undefined;
|
|
64
64
|
cfgScale?: number | undefined;
|
|
65
65
|
footIk?: boolean | undefined;
|
|
66
66
|
inPlace?: boolean | undefined;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { AssetResultBase, GenerateDeps } from '../types.js';
|
|
3
|
+
import { type SmartObjectSpec } from '../smart-object.js';
|
|
3
4
|
/**
|
|
4
5
|
* A 3D prop as VOXELS, from a prompt — with no mesh in between.
|
|
5
6
|
*
|
|
@@ -48,12 +49,33 @@ export declare const propVoxelParamsSchema: z.ZodObject<{
|
|
|
48
49
|
* remain for a caller that deliberately wants a working-size grid rather than a source.
|
|
49
50
|
*/
|
|
50
51
|
grid: z.ZodDefault<z.ZodOptional<z.ZodUnion<[z.ZodLiteral<0>, z.ZodLiteral<32>, z.ZodLiteral<64>, z.ZodLiteral<128>, z.ZodLiteral<256>, z.ZodLiteral<512>]>>>;
|
|
52
|
+
/**
|
|
53
|
+
* Also analyse the master for moving parts and lights (a windmill's blades, a
|
|
54
|
+
* lamp post's bulb), so the host can bake a smart object. `true`, or
|
|
55
|
+
* `{ hint }` with the designer's intent ("the blades should spin") — the hint
|
|
56
|
+
* is the single biggest quality lever, pass it whenever the request says what
|
|
57
|
+
* should move. The analysis is a vision call on top of the forge; a static
|
|
58
|
+
* prop answers with no parts and costs nothing further downstream.
|
|
59
|
+
*/
|
|
60
|
+
smart: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodObject<{
|
|
61
|
+
hint: z.ZodOptional<z.ZodString>;
|
|
62
|
+
}, "strict", z.ZodTypeAny, {
|
|
63
|
+
hint?: string | undefined;
|
|
64
|
+
}, {
|
|
65
|
+
hint?: string | undefined;
|
|
66
|
+
}>]>>;
|
|
51
67
|
}, "strict", z.ZodTypeAny, {
|
|
52
68
|
prompt: string;
|
|
53
69
|
grid: 0 | 64 | 32 | 256 | 512 | 128;
|
|
70
|
+
smart?: boolean | {
|
|
71
|
+
hint?: string | undefined;
|
|
72
|
+
} | undefined;
|
|
54
73
|
}, {
|
|
55
74
|
prompt: string;
|
|
56
75
|
grid?: 0 | 64 | 32 | 256 | 512 | 128 | undefined;
|
|
76
|
+
smart?: boolean | {
|
|
77
|
+
hint?: string | undefined;
|
|
78
|
+
} | undefined;
|
|
57
79
|
}>;
|
|
58
80
|
export type PropVoxelParams = z.input<typeof propVoxelParamsSchema>;
|
|
59
81
|
export type PropVoxelResult = AssetResultBase & {
|
|
@@ -63,6 +85,12 @@ export type PropVoxelResult = AssetResultBase & {
|
|
|
63
85
|
resolution?: number;
|
|
64
86
|
voxelCount?: number;
|
|
65
87
|
billable?: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* The smart-object analysis, when `smart` was asked for and the Forger
|
|
90
|
+
* produced one. Passed to the host's bake as-is. Absent when the analysis
|
|
91
|
+
* failed — the master is still good, and the host bakes it static.
|
|
92
|
+
*/
|
|
93
|
+
smartObject?: SmartObjectSpec;
|
|
66
94
|
};
|
|
67
95
|
export declare function generatePropVoxels(params: PropVoxelParams, deps: GenerateDeps): Promise<PropVoxelResult>;
|
|
68
96
|
//# sourceMappingURL=prop-voxel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prop-voxel.d.ts","sourceRoot":"","sources":["../../src/generators/prop-voxel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"prop-voxel.d.ts","sourceRoot":"","sources":["../../src/generators/prop-voxel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGjE,OAAO,EAA6C,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErG;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,qCAAsC,CAAC;AAElE,eAAO,MAAM,qBAAqB;;IAIhC;;;;;;;;;;;OAWG;;IAKH;;;;;;;OAOG;;;;;;;;;;;;;;;;;;;;EAEM,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG;IAC9C,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B,CAAC;AAkBF,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,eAAe,CAAC,CAyE1B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { fail, ok } from '../result.js';
|
|
3
3
|
import { formatZodIssues } from '../validation.js';
|
|
4
|
+
import { smartObjectSpecSchema, smartRequestSchema } from '../smart-object.js';
|
|
4
5
|
/**
|
|
5
6
|
* A 3D prop as VOXELS, from a prompt — with no mesh in between.
|
|
6
7
|
*
|
|
@@ -54,6 +55,15 @@ export const propVoxelParamsSchema = z.object({
|
|
|
54
55
|
z.literal(0), z.literal(32), z.literal(64),
|
|
55
56
|
z.literal(128), z.literal(256), z.literal(512),
|
|
56
57
|
]).optional().default(512),
|
|
58
|
+
/**
|
|
59
|
+
* Also analyse the master for moving parts and lights (a windmill's blades, a
|
|
60
|
+
* lamp post's bulb), so the host can bake a smart object. `true`, or
|
|
61
|
+
* `{ hint }` with the designer's intent ("the blades should spin") — the hint
|
|
62
|
+
* is the single biggest quality lever, pass it whenever the request says what
|
|
63
|
+
* should move. The analysis is a vision call on top of the forge; a static
|
|
64
|
+
* prop answers with no parts and costs nothing further downstream.
|
|
65
|
+
*/
|
|
66
|
+
smart: smartRequestSchema.optional(),
|
|
57
67
|
}).strict();
|
|
58
68
|
/**
|
|
59
69
|
* The async job route, not the synchronous one. A cold GPU container compiles CUDA kernels and
|
|
@@ -77,7 +87,7 @@ export async function generatePropVoxels(params, deps) {
|
|
|
77
87
|
logger.info(`[prop-voxel] Starting forge-voxels for "${input.prompt}" at grid ${input.grid}`);
|
|
78
88
|
let response;
|
|
79
89
|
try {
|
|
80
|
-
response = await forger.postJobAndWait(ENDPOINT, { prompt: input.prompt, grid: input.grid }, 'prop-voxel');
|
|
90
|
+
response = await forger.postJobAndWait(ENDPOINT, { prompt: input.prompt, grid: input.grid, ...(input.smart ? { smart: input.smart } : {}) }, 'prop-voxel');
|
|
81
91
|
}
|
|
82
92
|
catch (error) {
|
|
83
93
|
const message = error instanceof Error ? error.message : 'Unknown error occurred';
|
|
@@ -91,6 +101,27 @@ export async function generatePropVoxels(params, deps) {
|
|
|
91
101
|
}
|
|
92
102
|
const { resolution, voxelCount } = response.data ?? {};
|
|
93
103
|
logger.info(`[prop-voxel] Generated ${masterUrl} (${voxelCount ?? '?'} voxels)`);
|
|
104
|
+
// The analysis rides beside the master and is validated here because it crosses
|
|
105
|
+
// a service boundary and then drives a bake. A failed or malformed analysis is
|
|
106
|
+
// logged and dropped: the master is good and bakes static, which is what the
|
|
107
|
+
// caller would have got without `smart`.
|
|
108
|
+
let smartObject;
|
|
109
|
+
const smart = response.data?.smartObject;
|
|
110
|
+
if (input.smart && smart) {
|
|
111
|
+
if (smart.error) {
|
|
112
|
+
logger.warn(`[prop-voxel] Smart-object analysis failed: ${smart.error}`);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const parsed = smartObjectSpecSchema.safeParse(smart.spec);
|
|
116
|
+
if (parsed.success) {
|
|
117
|
+
smartObject = parsed.data;
|
|
118
|
+
logger.info(`[prop-voxel] Smart object: ${parsed.data.parts.length} part(s), ${parsed.data.lights.length} light(s)`);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
logger.warn(`[prop-voxel] Smart-object spec did not validate: ${formatZodIssues(parsed.error)}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
94
125
|
return ok(`Voxels generated: ${masterUrl}`,
|
|
95
126
|
// Deliberately empty — see the file header. The asset does not exist until the host has baked
|
|
96
127
|
// this master, and writing a half-made entry would leave world.json describing an asset the
|
|
@@ -99,6 +130,7 @@ export async function generatePropVoxels(params, deps) {
|
|
|
99
130
|
masterUrl,
|
|
100
131
|
...(resolution === undefined ? {} : { resolution }),
|
|
101
132
|
...(voxelCount === undefined ? {} : { voxelCount }),
|
|
133
|
+
...(smartObject === undefined ? {} : { smartObject }),
|
|
102
134
|
billable: true,
|
|
103
135
|
});
|
|
104
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prop-voxel.js","sourceRoot":"","sources":["../../src/generators/prop-voxel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"prop-voxel.js","sourceRoot":"","sources":["../../src/generators/prop-voxel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { AssetResultBase, GenerateDeps } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The Forger route's own cap (asset-forger `src/clients/elevenlabs-tts.ts`),
|
|
5
|
+
* restated so an over-long ask fails here rather than after a round trip.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SPEECH_MAX_CHARS = 10000;
|
|
8
|
+
/** The alias table the Forger resolves; a raw Eleven Labs voice_id also works. */
|
|
9
|
+
export declare const SPEECH_VOICES: readonly ["narrator", "male", "female"];
|
|
10
|
+
/**
|
|
11
|
+
* Roughly how many seconds of audio a line of text becomes, for when the real
|
|
12
|
+
* length is not known: the CLI's pre-generation floor price, and the agent tool's
|
|
13
|
+
* charge for a line the Forger could not probe.
|
|
14
|
+
*
|
|
15
|
+
* 15 characters per second, measured against the real endpoint (2026-09): a
|
|
16
|
+
* 35-character sentence came back as 2.28 s on `eleven_multilingual_v2`, i.e.
|
|
17
|
+
* 15.4 char/s, which matches the docs' "~1,000 characters is 60-75 seconds".
|
|
18
|
+
* Rate varies with `speed`, language and punctuation, so this is an estimate by
|
|
19
|
+
* construction — the measured `lengthSeconds` is what prices a line whenever
|
|
20
|
+
* there is one.
|
|
21
|
+
*/
|
|
22
|
+
export declare function estimateSpeechSeconds(text: string): number;
|
|
23
|
+
export declare const speechParamsSchema: z.ZodObject<{
|
|
24
|
+
text: z.ZodString;
|
|
25
|
+
voice: z.ZodOptional<z.ZodString>;
|
|
26
|
+
model: z.ZodOptional<z.ZodString>;
|
|
27
|
+
stability: z.ZodOptional<z.ZodNumber>;
|
|
28
|
+
similarityBoost: z.ZodOptional<z.ZodNumber>;
|
|
29
|
+
style: z.ZodOptional<z.ZodNumber>;
|
|
30
|
+
speed: z.ZodOptional<z.ZodNumber>;
|
|
31
|
+
assetId: z.ZodOptional<z.ZodString>;
|
|
32
|
+
}, "strict", z.ZodTypeAny, {
|
|
33
|
+
text: string;
|
|
34
|
+
assetId?: string | undefined;
|
|
35
|
+
voice?: string | undefined;
|
|
36
|
+
model?: string | undefined;
|
|
37
|
+
stability?: number | undefined;
|
|
38
|
+
similarityBoost?: number | undefined;
|
|
39
|
+
style?: number | undefined;
|
|
40
|
+
speed?: number | undefined;
|
|
41
|
+
}, {
|
|
42
|
+
text: string;
|
|
43
|
+
assetId?: string | undefined;
|
|
44
|
+
voice?: string | undefined;
|
|
45
|
+
model?: string | undefined;
|
|
46
|
+
stability?: number | undefined;
|
|
47
|
+
similarityBoost?: number | undefined;
|
|
48
|
+
style?: number | undefined;
|
|
49
|
+
speed?: number | undefined;
|
|
50
|
+
}>;
|
|
51
|
+
export type SpeechParams = z.input<typeof speechParamsSchema>;
|
|
52
|
+
/** Where the line landed, carried on the result so a caller that never writes world.json still has it. */
|
|
53
|
+
export interface SpeechUrls {
|
|
54
|
+
speechUrl: string;
|
|
55
|
+
originalUrl: string;
|
|
56
|
+
speechId: string;
|
|
57
|
+
durationSeconds: number;
|
|
58
|
+
}
|
|
59
|
+
export type SpeechResult = AssetResultBase & {
|
|
60
|
+
/**
|
|
61
|
+
* The line's length, and what per-second billing reads. Always set on success:
|
|
62
|
+
* the Forger's probed length. A line the Forger could not probe reports 0, which
|
|
63
|
+
* lets the biller's own floor apply rather than charging for a duration nothing
|
|
64
|
+
* measured — unlike music, there is no requested duration to fall back on.
|
|
65
|
+
*/
|
|
66
|
+
lengthSeconds?: number;
|
|
67
|
+
speech?: SpeechUrls;
|
|
68
|
+
sizeBytes?: number;
|
|
69
|
+
};
|
|
70
|
+
export declare function generateSpeech(params: SpeechParams, deps: GenerateDeps): Promise<SpeechResult>;
|
|
71
|
+
//# sourceMappingURL=speech.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speech.d.ts","sourceRoot":"","sources":["../../src/generators/speech.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKjE;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAEvC,kFAAkF;AAClF,eAAO,MAAM,aAAa,yCAA0C,CAAC;AAErE;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAapB,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,0GAA0G;AAC1G,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG;IAC3C;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAsBF,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,YAAY,CAAC,CA0EvB"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { fail, ok } from '../result.js';
|
|
3
|
+
import { fetchContentLength } from '../http.js';
|
|
4
|
+
import { formatZodIssues } from '../validation.js';
|
|
5
|
+
/**
|
|
6
|
+
* The Forger route's own cap (asset-forger `src/clients/elevenlabs-tts.ts`),
|
|
7
|
+
* restated so an over-long ask fails here rather than after a round trip.
|
|
8
|
+
*/
|
|
9
|
+
export const SPEECH_MAX_CHARS = 10000;
|
|
10
|
+
/** The alias table the Forger resolves; a raw Eleven Labs voice_id also works. */
|
|
11
|
+
export const SPEECH_VOICES = ['narrator', 'male', 'female'];
|
|
12
|
+
/**
|
|
13
|
+
* Roughly how many seconds of audio a line of text becomes, for when the real
|
|
14
|
+
* length is not known: the CLI's pre-generation floor price, and the agent tool's
|
|
15
|
+
* charge for a line the Forger could not probe.
|
|
16
|
+
*
|
|
17
|
+
* 15 characters per second, measured against the real endpoint (2026-09): a
|
|
18
|
+
* 35-character sentence came back as 2.28 s on `eleven_multilingual_v2`, i.e.
|
|
19
|
+
* 15.4 char/s, which matches the docs' "~1,000 characters is 60-75 seconds".
|
|
20
|
+
* Rate varies with `speed`, language and punctuation, so this is an estimate by
|
|
21
|
+
* construction — the measured `lengthSeconds` is what prices a line whenever
|
|
22
|
+
* there is one.
|
|
23
|
+
*/
|
|
24
|
+
export function estimateSpeechSeconds(text) {
|
|
25
|
+
return Math.max(1, Math.ceil(text.length / 15));
|
|
26
|
+
}
|
|
27
|
+
export const speechParamsSchema = z.object({
|
|
28
|
+
text: z.string().min(1).max(SPEECH_MAX_CHARS)
|
|
29
|
+
.describe('The line to speak; billed by the length of the audio it produces'),
|
|
30
|
+
voice: z.string().min(1).optional()
|
|
31
|
+
.describe(`Voice alias (${SPEECH_VOICES.join(' / ')}) or a raw Eleven Labs voice_id`),
|
|
32
|
+
model: z.string().min(1).optional()
|
|
33
|
+
.describe('Eleven Labs model id; the Forger default (eleven_multilingual_v2) when omitted'),
|
|
34
|
+
stability: z.number().min(0).max(1).optional().describe('Lower is more expressive, higher is more consistent'),
|
|
35
|
+
similarityBoost: z.number().min(0).max(1).optional().describe('How closely to match the original voice'),
|
|
36
|
+
style: z.number().min(0).max(1).optional().describe('Style exaggeration'),
|
|
37
|
+
speed: z.number().min(0.7).max(1.2).optional().describe('Speaking rate'),
|
|
38
|
+
assetId: z.string().min(1).optional()
|
|
39
|
+
.describe('Pre-generated asset id; the generator id is used when absent'),
|
|
40
|
+
}).strict();
|
|
41
|
+
const ENDPOINT = '/ai/v1/generate-speech-as-opus-url';
|
|
42
|
+
/** The asset name is the line itself, trimmed to something readable in a list. */
|
|
43
|
+
const NAME_MAX_CHARS = 40;
|
|
44
|
+
function assetNameFor(text) {
|
|
45
|
+
const collapsed = text.replace(/\s+/g, ' ').trim();
|
|
46
|
+
return collapsed.length <= NAME_MAX_CHARS ? collapsed : `${collapsed.slice(0, NAME_MAX_CHARS - 1)}…`;
|
|
47
|
+
}
|
|
48
|
+
export async function generateSpeech(params, deps) {
|
|
49
|
+
const { forger, logger, onProgress } = deps;
|
|
50
|
+
const parsed = speechParamsSchema.safeParse(params);
|
|
51
|
+
if (!parsed.success) {
|
|
52
|
+
logger.warn({ err: parsed.error }, '[speech] Invalid parameters');
|
|
53
|
+
return fail(formatZodIssues(parsed.error));
|
|
54
|
+
}
|
|
55
|
+
const input = parsed.data;
|
|
56
|
+
if (!forger.hasCredentials()) {
|
|
57
|
+
logger.error('[speech] Missing Asset Forger credentials');
|
|
58
|
+
return fail(forger.getMissingCredentialsMessage());
|
|
59
|
+
}
|
|
60
|
+
onProgress(`Speaking as ${input.voice ?? 'narrator'}: ${assetNameFor(input.text)}`);
|
|
61
|
+
logger.info(`[speech] Starting synthesis of ${input.text.length} characters`);
|
|
62
|
+
const payload = { text: input.text };
|
|
63
|
+
for (const key of ['voice', 'model', 'stability', 'similarityBoost', 'style', 'speed']) {
|
|
64
|
+
if (input[key] !== undefined)
|
|
65
|
+
payload[key] = input[key];
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const response = await forger.post(ENDPOINT, payload, 'speech');
|
|
69
|
+
if (!response.speechUrl) {
|
|
70
|
+
throw new Error('No speechUrl in API response');
|
|
71
|
+
}
|
|
72
|
+
logger.info(`[speech] Successfully synthesized: ${response.speechUrl}`);
|
|
73
|
+
const sizeBytes = await fetchContentLength(response.speechUrl, logger);
|
|
74
|
+
const assetId = input.assetId ?? response.speechId;
|
|
75
|
+
const durationSeconds = typeof response.durationSeconds === 'number' && response.durationSeconds > 0
|
|
76
|
+
? response.durationSeconds
|
|
77
|
+
: 0;
|
|
78
|
+
return ok(`Speech generated: ${response.speechUrl}`, [{
|
|
79
|
+
type: 'pushRoot',
|
|
80
|
+
path: ['assets'],
|
|
81
|
+
value: {
|
|
82
|
+
id: assetId,
|
|
83
|
+
name: assetNameFor(input.text),
|
|
84
|
+
url: response.speechUrl,
|
|
85
|
+
type: 'audio',
|
|
86
|
+
format: response.format,
|
|
87
|
+
prompt: input.text,
|
|
88
|
+
source: 'generated',
|
|
89
|
+
// A spoken line is a one-shot, the opposite default from a music bed
|
|
90
|
+
// and the same as a sound effect.
|
|
91
|
+
loop: false,
|
|
92
|
+
size: sizeBytes ?? 0,
|
|
93
|
+
durationSeconds,
|
|
94
|
+
},
|
|
95
|
+
}], {
|
|
96
|
+
lengthSeconds: durationSeconds,
|
|
97
|
+
speech: {
|
|
98
|
+
speechUrl: response.speechUrl,
|
|
99
|
+
originalUrl: response.originalUrl,
|
|
100
|
+
speechId: assetId,
|
|
101
|
+
durationSeconds,
|
|
102
|
+
},
|
|
103
|
+
sizeBytes,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
const message = error instanceof Error ? error.message : 'Unknown error occurred';
|
|
108
|
+
logger.error({ err: error }, '[speech] Error during synthesis');
|
|
109
|
+
return fail(message);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=speech.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speech.js","sourceRoot":"","sources":["../../src/generators/speech.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type { AssetResultBase, CoreLogger, DataWorldPatch, ForgerClient, GenerateDeps, JobWaitOptions, UpsertRootPatch, WorldPatch, } from './types.js';
|
|
2
2
|
export { buildUpsertPredicate, isUpsertRootPatch, validateWorldPatch } from './world-patch.js';
|
|
3
3
|
export { fail, ok } from './result.js';
|
|
4
|
-
export { AssetForgerClient } from './forger-client.js';
|
|
4
|
+
export { AssetForgerClient, } from './forger-client.js';
|
|
5
5
|
export type { AssetForgerCredentials } from './forger-client.js';
|
|
6
6
|
export { generateSkybox, skyboxParamsSchema } from './generators/skybox.js';
|
|
7
7
|
export type { SkyboxParams, SkyboxResult } from './generators/skybox.js';
|
|
@@ -13,6 +13,8 @@ export { generateSoundEffect, soundEffectParamsSchema } from './generators/sound
|
|
|
13
13
|
export type { SoundEffectParams, SoundEffectResult } from './generators/sound-effect.js';
|
|
14
14
|
export { generateMusic, musicParamsSchema, MUSIC_MIN_SECONDS, MUSIC_MAX_SECONDS, MUSIC_DEFAULT_SECONDS, } from './generators/music.js';
|
|
15
15
|
export type { MusicParams, MusicResult, MusicUrls } from './generators/music.js';
|
|
16
|
+
export { generateSpeech, speechParamsSchema, estimateSpeechSeconds, SPEECH_MAX_CHARS, SPEECH_VOICES } from './generators/speech.js';
|
|
17
|
+
export type { SpeechParams, SpeechResult, SpeechUrls } from './generators/speech.js';
|
|
16
18
|
export { generateVideo, videoParamsSchema, buildVideoJobRequest, buildVideoPatch, describeVideoFailure, VIDEO_MIN_SECONDS, VIDEO_MAX_SECONDS, VIDEO_DEFAULT_SECONDS, VIDEO_JOBS_ENDPOINT, VIDEO_TIMEOUT_MS, } from './generators/video.js';
|
|
17
19
|
export type { VideoParams, VideoResult, VideoUrls, VideoJobResult, VideoJobRequest } from './generators/video.js';
|
|
18
20
|
export { formatZodIssues } from './validation.js';
|
|
@@ -29,6 +31,8 @@ export { generateProp, propParamsSchema } from './generators/prop.js';
|
|
|
29
31
|
export type { PropParams, PropResult } from './generators/prop.js';
|
|
30
32
|
export { generatePropVoxels, propVoxelParamsSchema, propVoxelGrids } from './generators/prop-voxel.js';
|
|
31
33
|
export type { PropVoxelParams, PropVoxelResult } from './generators/prop-voxel.js';
|
|
34
|
+
export { smartObjectSpecSchema, smartObjectMotionSchema, smartRequestSchema, smartRequestFrom, isSmartSpecUseful, } from './smart-object.js';
|
|
35
|
+
export type { SmartObjectSpec, SmartObjectMotion, SmartRequest } from './smart-object.js';
|
|
32
36
|
export { generateAnimationAsset, animationParamsSchema, getConfiguredAnimationModel, ANIMATION_MODEL_TEXT_TO_MOTION_3, ANIMATION_MODEL_TEXT_TO_MOTION_2, ANIMATION_MODEL_OLDER, } from './generators/animation.js';
|
|
33
37
|
export type { AnimationParams, AnimationResult } from './generators/animation.js';
|
|
34
38
|
export { generateAnimationFromVideoAsset, animationFromVideoParamsSchema, buildAnimationFromVideoPatch, buildAnimationFromVideoJobRequest, describeAnimationFromVideoFailure, describeAutoTrim, EDITING_ONLY_ASSET_FIELDS, stripEditingOnlyAssetFields, ANIMATION_FROM_VIDEO_JOBS_ENDPOINT, ANIMATION_TRIM_ANALYSIS_JOBS_ENDPOINT, ANIMATION_FROM_VIDEO_TIMEOUT_MS, MIN_TRIM_KEPT_SECONDS, VIDEO_TO_MOTION_MODELS, LOCOMOTION_STATES, MOTION_SOURCE_FRAMING, MOTION_SOURCE_MIN_SECONDS, MOTION_SOURCE_DEFAULT_SECONDS, buildMotionSourcePrompt, } from './generators/animation-from-video.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
export { buildUpsertPredicate, isUpsertRootPatch, validateWorldPatch } from './world-patch.js';
|
|
2
2
|
export { fail, ok } from './result.js';
|
|
3
|
-
export { AssetForgerClient } from './forger-client.js';
|
|
3
|
+
export { AssetForgerClient, } from './forger-client.js';
|
|
4
4
|
export { generateSkybox, skyboxParamsSchema } from './generators/skybox.js';
|
|
5
5
|
export { generateBackground, backgroundParamsSchema } from './generators/background.js';
|
|
6
6
|
export { generateBlockType, blockTypeParamsSchema } from './generators/block-type.js';
|
|
7
7
|
export { generateSoundEffect, soundEffectParamsSchema } from './generators/sound-effect.js';
|
|
8
8
|
export { generateMusic, musicParamsSchema, MUSIC_MIN_SECONDS, MUSIC_MAX_SECONDS, MUSIC_DEFAULT_SECONDS, } from './generators/music.js';
|
|
9
|
+
export { generateSpeech, speechParamsSchema, estimateSpeechSeconds, SPEECH_MAX_CHARS, SPEECH_VOICES } from './generators/speech.js';
|
|
9
10
|
export { generateVideo, videoParamsSchema, buildVideoJobRequest, buildVideoPatch, describeVideoFailure, VIDEO_MIN_SECONDS, VIDEO_MAX_SECONDS, VIDEO_DEFAULT_SECONDS, VIDEO_JOBS_ENDPOINT, VIDEO_TIMEOUT_MS, } from './generators/video.js';
|
|
10
11
|
export { formatZodIssues } from './validation.js';
|
|
11
12
|
export { generateImageAsset, imageAssetParamsSchema } from './generators/image.js';
|
|
@@ -15,6 +16,7 @@ export { findLibraryCharacter, searchLibraryCharacters, getCharacterLibraryMode,
|
|
|
15
16
|
export { isManagedAssetHost, isManagedAssetUrl, MANAGED_HOST_SUFFIXES } from './managed-hosts.js';
|
|
16
17
|
export { generateProp, propParamsSchema } from './generators/prop.js';
|
|
17
18
|
export { generatePropVoxels, propVoxelParamsSchema, propVoxelGrids } from './generators/prop-voxel.js';
|
|
19
|
+
export { smartObjectSpecSchema, smartObjectMotionSchema, smartRequestSchema, smartRequestFrom, isSmartSpecUseful, } from './smart-object.js';
|
|
18
20
|
export { generateAnimationAsset, animationParamsSchema, getConfiguredAnimationModel, ANIMATION_MODEL_TEXT_TO_MOTION_3, ANIMATION_MODEL_TEXT_TO_MOTION_2, ANIMATION_MODEL_OLDER, } from './generators/animation.js';
|
|
19
21
|
export { generateAnimationFromVideoAsset, animationFromVideoParamsSchema, buildAnimationFromVideoPatch, buildAnimationFromVideoJobRequest, describeAnimationFromVideoFailure, describeAutoTrim, EDITING_ONLY_ASSET_FIELDS, stripEditingOnlyAssetFields, ANIMATION_FROM_VIDEO_JOBS_ENDPOINT, ANIMATION_TRIM_ANALYSIS_JOBS_ENDPOINT, ANIMATION_FROM_VIDEO_TIMEOUT_MS, MIN_TRIM_KEPT_SECONDS, VIDEO_TO_MOTION_MODELS, LOCOMOTION_STATES, MOTION_SOURCE_FRAMING, MOTION_SOURCE_MIN_SECONDS, MOTION_SOURCE_DEFAULT_SECONDS, buildMotionSourcePrompt, } from './generators/animation-from-video.js';
|
|
20
22
|
export { fetchContentLength } from './http.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const smartObjectMotionSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
|
|
3
|
+
kind: z.ZodLiteral<"spin">;
|
|
4
|
+
axis: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
5
|
+
rpm: z.ZodNumber;
|
|
6
|
+
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
kind: "spin";
|
|
8
|
+
axis: [number, number, number];
|
|
9
|
+
rpm: number;
|
|
10
|
+
}, {
|
|
11
|
+
kind: "spin";
|
|
12
|
+
axis: [number, number, number];
|
|
13
|
+
rpm: number;
|
|
14
|
+
}>, z.ZodObject<{
|
|
15
|
+
kind: z.ZodLiteral<"upright">;
|
|
16
|
+
}, "strip", z.ZodTypeAny, {
|
|
17
|
+
kind: "upright";
|
|
18
|
+
}, {
|
|
19
|
+
kind: "upright";
|
|
20
|
+
}>, z.ZodObject<{
|
|
21
|
+
kind: z.ZodLiteral<"pendulum">;
|
|
22
|
+
axis: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
23
|
+
amplitudeDeg: z.ZodNumber;
|
|
24
|
+
periodS: z.ZodNumber;
|
|
25
|
+
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
kind: "pendulum";
|
|
27
|
+
axis: [number, number, number];
|
|
28
|
+
amplitudeDeg: number;
|
|
29
|
+
periodS: number;
|
|
30
|
+
}, {
|
|
31
|
+
kind: "pendulum";
|
|
32
|
+
axis: [number, number, number];
|
|
33
|
+
amplitudeDeg: number;
|
|
34
|
+
periodS: number;
|
|
35
|
+
}>, z.ZodObject<{
|
|
36
|
+
kind: z.ZodLiteral<"none">;
|
|
37
|
+
}, "strip", z.ZodTypeAny, {
|
|
38
|
+
kind: "none";
|
|
39
|
+
}, {
|
|
40
|
+
kind: "none";
|
|
41
|
+
}>]>;
|
|
42
|
+
export declare const smartObjectSpecSchema: z.ZodObject<{
|
|
43
|
+
version: z.ZodLiteral<1>;
|
|
44
|
+
grid: z.ZodNumber;
|
|
45
|
+
bounds: z.ZodOptional<z.ZodObject<{
|
|
46
|
+
min: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
47
|
+
max: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
48
|
+
}, "strip", z.ZodTypeAny, {
|
|
49
|
+
min: [number, number, number];
|
|
50
|
+
max: [number, number, number];
|
|
51
|
+
}, {
|
|
52
|
+
min: [number, number, number];
|
|
53
|
+
max: [number, number, number];
|
|
54
|
+
}>>;
|
|
55
|
+
object: z.ZodOptional<z.ZodString>;
|
|
56
|
+
parts: z.ZodArray<z.ZodObject<{
|
|
57
|
+
name: z.ZodString;
|
|
58
|
+
/** Another part's name; absent means the static body. */
|
|
59
|
+
parent: z.ZodOptional<z.ZodString>;
|
|
60
|
+
box: z.ZodObject<{
|
|
61
|
+
min: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
62
|
+
max: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
63
|
+
}, "strip", z.ZodTypeAny, {
|
|
64
|
+
min: [number, number, number];
|
|
65
|
+
max: [number, number, number];
|
|
66
|
+
}, {
|
|
67
|
+
min: [number, number, number];
|
|
68
|
+
max: [number, number, number];
|
|
69
|
+
}>;
|
|
70
|
+
exclude: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
71
|
+
min: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
72
|
+
max: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
73
|
+
}, "strip", z.ZodTypeAny, {
|
|
74
|
+
min: [number, number, number];
|
|
75
|
+
max: [number, number, number];
|
|
76
|
+
}, {
|
|
77
|
+
min: [number, number, number];
|
|
78
|
+
max: [number, number, number];
|
|
79
|
+
}>, "many">>;
|
|
80
|
+
/** Grid coordinates, may be fractional (cell centres are at +0.5). */
|
|
81
|
+
pivot: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
82
|
+
motion: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
|
|
83
|
+
kind: z.ZodLiteral<"spin">;
|
|
84
|
+
axis: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
85
|
+
rpm: z.ZodNumber;
|
|
86
|
+
}, "strip", z.ZodTypeAny, {
|
|
87
|
+
kind: "spin";
|
|
88
|
+
axis: [number, number, number];
|
|
89
|
+
rpm: number;
|
|
90
|
+
}, {
|
|
91
|
+
kind: "spin";
|
|
92
|
+
axis: [number, number, number];
|
|
93
|
+
rpm: number;
|
|
94
|
+
}>, z.ZodObject<{
|
|
95
|
+
kind: z.ZodLiteral<"upright">;
|
|
96
|
+
}, "strip", z.ZodTypeAny, {
|
|
97
|
+
kind: "upright";
|
|
98
|
+
}, {
|
|
99
|
+
kind: "upright";
|
|
100
|
+
}>, z.ZodObject<{
|
|
101
|
+
kind: z.ZodLiteral<"pendulum">;
|
|
102
|
+
axis: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
103
|
+
amplitudeDeg: z.ZodNumber;
|
|
104
|
+
periodS: z.ZodNumber;
|
|
105
|
+
}, "strip", z.ZodTypeAny, {
|
|
106
|
+
kind: "pendulum";
|
|
107
|
+
axis: [number, number, number];
|
|
108
|
+
amplitudeDeg: number;
|
|
109
|
+
periodS: number;
|
|
110
|
+
}, {
|
|
111
|
+
kind: "pendulum";
|
|
112
|
+
axis: [number, number, number];
|
|
113
|
+
amplitudeDeg: number;
|
|
114
|
+
periodS: number;
|
|
115
|
+
}>, z.ZodObject<{
|
|
116
|
+
kind: z.ZodLiteral<"none">;
|
|
117
|
+
}, "strip", z.ZodTypeAny, {
|
|
118
|
+
kind: "none";
|
|
119
|
+
}, {
|
|
120
|
+
kind: "none";
|
|
121
|
+
}>]>;
|
|
122
|
+
voxelCount: z.ZodOptional<z.ZodNumber>;
|
|
123
|
+
}, "strip", z.ZodTypeAny, {
|
|
124
|
+
name: string;
|
|
125
|
+
box: {
|
|
126
|
+
min: [number, number, number];
|
|
127
|
+
max: [number, number, number];
|
|
128
|
+
};
|
|
129
|
+
pivot: [number, number, number];
|
|
130
|
+
motion: {
|
|
131
|
+
kind: "spin";
|
|
132
|
+
axis: [number, number, number];
|
|
133
|
+
rpm: number;
|
|
134
|
+
} | {
|
|
135
|
+
kind: "upright";
|
|
136
|
+
} | {
|
|
137
|
+
kind: "pendulum";
|
|
138
|
+
axis: [number, number, number];
|
|
139
|
+
amplitudeDeg: number;
|
|
140
|
+
periodS: number;
|
|
141
|
+
} | {
|
|
142
|
+
kind: "none";
|
|
143
|
+
};
|
|
144
|
+
parent?: string | undefined;
|
|
145
|
+
exclude?: {
|
|
146
|
+
min: [number, number, number];
|
|
147
|
+
max: [number, number, number];
|
|
148
|
+
}[] | undefined;
|
|
149
|
+
voxelCount?: number | undefined;
|
|
150
|
+
}, {
|
|
151
|
+
name: string;
|
|
152
|
+
box: {
|
|
153
|
+
min: [number, number, number];
|
|
154
|
+
max: [number, number, number];
|
|
155
|
+
};
|
|
156
|
+
pivot: [number, number, number];
|
|
157
|
+
motion: {
|
|
158
|
+
kind: "spin";
|
|
159
|
+
axis: [number, number, number];
|
|
160
|
+
rpm: number;
|
|
161
|
+
} | {
|
|
162
|
+
kind: "upright";
|
|
163
|
+
} | {
|
|
164
|
+
kind: "pendulum";
|
|
165
|
+
axis: [number, number, number];
|
|
166
|
+
amplitudeDeg: number;
|
|
167
|
+
periodS: number;
|
|
168
|
+
} | {
|
|
169
|
+
kind: "none";
|
|
170
|
+
};
|
|
171
|
+
parent?: string | undefined;
|
|
172
|
+
exclude?: {
|
|
173
|
+
min: [number, number, number];
|
|
174
|
+
max: [number, number, number];
|
|
175
|
+
}[] | undefined;
|
|
176
|
+
voxelCount?: number | undefined;
|
|
177
|
+
}>, "many">;
|
|
178
|
+
lights: z.ZodArray<z.ZodObject<{
|
|
179
|
+
name: z.ZodString;
|
|
180
|
+
position: z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>;
|
|
181
|
+
/** `#rrggbb` */
|
|
182
|
+
color: z.ZodString;
|
|
183
|
+
intensity: z.ZodOptional<z.ZodNumber>;
|
|
184
|
+
distance: z.ZodOptional<z.ZodNumber>;
|
|
185
|
+
flicker: z.ZodOptional<z.ZodBoolean>;
|
|
186
|
+
/** When set, the light rides this part. */
|
|
187
|
+
part: z.ZodOptional<z.ZodString>;
|
|
188
|
+
}, "strip", z.ZodTypeAny, {
|
|
189
|
+
name: string;
|
|
190
|
+
position: [number, number, number];
|
|
191
|
+
color: string;
|
|
192
|
+
intensity?: number | undefined;
|
|
193
|
+
distance?: number | undefined;
|
|
194
|
+
flicker?: boolean | undefined;
|
|
195
|
+
part?: string | undefined;
|
|
196
|
+
}, {
|
|
197
|
+
name: string;
|
|
198
|
+
position: [number, number, number];
|
|
199
|
+
color: string;
|
|
200
|
+
intensity?: number | undefined;
|
|
201
|
+
distance?: number | undefined;
|
|
202
|
+
flicker?: boolean | undefined;
|
|
203
|
+
part?: string | undefined;
|
|
204
|
+
}>, "many">;
|
|
205
|
+
/** Inside a part's box, components smaller than this fraction of the largest are body slivers. */
|
|
206
|
+
minComponentFraction: z.ZodOptional<z.ZodNumber>;
|
|
207
|
+
bodyVoxelCount: z.ZodOptional<z.ZodNumber>;
|
|
208
|
+
warnings: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
209
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
210
|
+
model: z.ZodOptional<z.ZodString>;
|
|
211
|
+
}, "strip", z.ZodTypeAny, {
|
|
212
|
+
version: 1;
|
|
213
|
+
grid: number;
|
|
214
|
+
parts: {
|
|
215
|
+
name: string;
|
|
216
|
+
box: {
|
|
217
|
+
min: [number, number, number];
|
|
218
|
+
max: [number, number, number];
|
|
219
|
+
};
|
|
220
|
+
pivot: [number, number, number];
|
|
221
|
+
motion: {
|
|
222
|
+
kind: "spin";
|
|
223
|
+
axis: [number, number, number];
|
|
224
|
+
rpm: number;
|
|
225
|
+
} | {
|
|
226
|
+
kind: "upright";
|
|
227
|
+
} | {
|
|
228
|
+
kind: "pendulum";
|
|
229
|
+
axis: [number, number, number];
|
|
230
|
+
amplitudeDeg: number;
|
|
231
|
+
periodS: number;
|
|
232
|
+
} | {
|
|
233
|
+
kind: "none";
|
|
234
|
+
};
|
|
235
|
+
parent?: string | undefined;
|
|
236
|
+
exclude?: {
|
|
237
|
+
min: [number, number, number];
|
|
238
|
+
max: [number, number, number];
|
|
239
|
+
}[] | undefined;
|
|
240
|
+
voxelCount?: number | undefined;
|
|
241
|
+
}[];
|
|
242
|
+
lights: {
|
|
243
|
+
name: string;
|
|
244
|
+
position: [number, number, number];
|
|
245
|
+
color: string;
|
|
246
|
+
intensity?: number | undefined;
|
|
247
|
+
distance?: number | undefined;
|
|
248
|
+
flicker?: boolean | undefined;
|
|
249
|
+
part?: string | undefined;
|
|
250
|
+
}[];
|
|
251
|
+
object?: string | undefined;
|
|
252
|
+
model?: string | undefined;
|
|
253
|
+
bounds?: {
|
|
254
|
+
min: [number, number, number];
|
|
255
|
+
max: [number, number, number];
|
|
256
|
+
} | undefined;
|
|
257
|
+
minComponentFraction?: number | undefined;
|
|
258
|
+
bodyVoxelCount?: number | undefined;
|
|
259
|
+
warnings?: string[] | undefined;
|
|
260
|
+
notes?: string | undefined;
|
|
261
|
+
}, {
|
|
262
|
+
version: 1;
|
|
263
|
+
grid: number;
|
|
264
|
+
parts: {
|
|
265
|
+
name: string;
|
|
266
|
+
box: {
|
|
267
|
+
min: [number, number, number];
|
|
268
|
+
max: [number, number, number];
|
|
269
|
+
};
|
|
270
|
+
pivot: [number, number, number];
|
|
271
|
+
motion: {
|
|
272
|
+
kind: "spin";
|
|
273
|
+
axis: [number, number, number];
|
|
274
|
+
rpm: number;
|
|
275
|
+
} | {
|
|
276
|
+
kind: "upright";
|
|
277
|
+
} | {
|
|
278
|
+
kind: "pendulum";
|
|
279
|
+
axis: [number, number, number];
|
|
280
|
+
amplitudeDeg: number;
|
|
281
|
+
periodS: number;
|
|
282
|
+
} | {
|
|
283
|
+
kind: "none";
|
|
284
|
+
};
|
|
285
|
+
parent?: string | undefined;
|
|
286
|
+
exclude?: {
|
|
287
|
+
min: [number, number, number];
|
|
288
|
+
max: [number, number, number];
|
|
289
|
+
}[] | undefined;
|
|
290
|
+
voxelCount?: number | undefined;
|
|
291
|
+
}[];
|
|
292
|
+
lights: {
|
|
293
|
+
name: string;
|
|
294
|
+
position: [number, number, number];
|
|
295
|
+
color: string;
|
|
296
|
+
intensity?: number | undefined;
|
|
297
|
+
distance?: number | undefined;
|
|
298
|
+
flicker?: boolean | undefined;
|
|
299
|
+
part?: string | undefined;
|
|
300
|
+
}[];
|
|
301
|
+
object?: string | undefined;
|
|
302
|
+
model?: string | undefined;
|
|
303
|
+
bounds?: {
|
|
304
|
+
min: [number, number, number];
|
|
305
|
+
max: [number, number, number];
|
|
306
|
+
} | undefined;
|
|
307
|
+
minComponentFraction?: number | undefined;
|
|
308
|
+
bodyVoxelCount?: number | undefined;
|
|
309
|
+
warnings?: string[] | undefined;
|
|
310
|
+
notes?: string | undefined;
|
|
311
|
+
}>;
|
|
312
|
+
export type SmartObjectMotion = z.infer<typeof smartObjectMotionSchema>;
|
|
313
|
+
export type SmartObjectSpec = z.infer<typeof smartObjectSpecSchema>;
|
|
314
|
+
/**
|
|
315
|
+
* The `smart` request field: `true` for analysis with no designer hint, or the
|
|
316
|
+
* hint itself ("the blades should spin"). Shared by every generator that can
|
|
317
|
+
* ask for it, so the CLI, the agent and the api-server accept one shape.
|
|
318
|
+
*/
|
|
319
|
+
export declare const smartRequestSchema: z.ZodUnion<[z.ZodBoolean, z.ZodObject<{
|
|
320
|
+
hint: z.ZodOptional<z.ZodString>;
|
|
321
|
+
}, "strict", z.ZodTypeAny, {
|
|
322
|
+
hint?: string | undefined;
|
|
323
|
+
}, {
|
|
324
|
+
hint?: string | undefined;
|
|
325
|
+
}>]>;
|
|
326
|
+
export type SmartRequest = z.infer<typeof smartRequestSchema>;
|
|
327
|
+
/** Normalise the ways a caller says "smart" into what the Forger takes. */
|
|
328
|
+
export declare function smartRequestFrom(value: boolean | string | SmartRequest | undefined): SmartRequest | undefined;
|
|
329
|
+
/** True when a spec declares anything at all — a static prop with no parts and no lights is not smart. */
|
|
330
|
+
export declare function isSmartSpecUseful(spec: SmartObjectSpec): boolean;
|
|
331
|
+
//# sourceMappingURL=smart-object.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-object.d.ts","sourceRoot":"","sources":["../src/smart-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsBxB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAMlC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;QAO9B,yDAAyD;;;;;;;;;;;;;;;;;;;;;;QAIzD,sEAAsE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAQtE,gBAAgB;;;;;QAKhB,2CAA2C;;;;;;;;;;;;;;;;;;;IAG7C,kGAAkG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMlG,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;IAG7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,CAK7G;AAED,0GAA0G;AAC1G,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAEhE"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* SmartObjectSpec — the Asset Forger's verdict on what parts of a voxel prop
|
|
4
|
+
* MOVE and where it emits LIGHT, in the master's grid space.
|
|
5
|
+
*
|
|
6
|
+
* Produced by `/ai/v1/voxel-smart-object` (or by `/ai/v1/forge-voxels` with
|
|
7
|
+
* `smart`), stored beside the master, and baked by the engine into the `.vxl`
|
|
8
|
+
* part channel. The engine's own copy of this shape is
|
|
9
|
+
* `game/src/types/smartObject.ts`; the Forger's is `src/lib/smart-object.ts`.
|
|
10
|
+
* This one is the wire contract the generators hand to the host, validated
|
|
11
|
+
* because it crosses a service boundary and then drives a bake.
|
|
12
|
+
*
|
|
13
|
+
* Grid space rather than metres because the bake is what decides the metre
|
|
14
|
+
* scale, and a re-voxelize at another size must re-split the same voxels
|
|
15
|
+
* without a second vision call.
|
|
16
|
+
*/
|
|
17
|
+
const vec3 = z.tuple([z.number(), z.number(), z.number()]);
|
|
18
|
+
const gridBoxSchema = z.object({ min: vec3, max: vec3 });
|
|
19
|
+
export const smartObjectMotionSchema = z.discriminatedUnion('kind', [
|
|
20
|
+
z.object({ kind: z.literal('spin'), axis: vec3, rpm: z.number() }),
|
|
21
|
+
/** Hangs from a hinge on its parent and stays level while the parent turns. */
|
|
22
|
+
z.object({ kind: z.literal('upright') }),
|
|
23
|
+
z.object({ kind: z.literal('pendulum'), axis: vec3, amplitudeDeg: z.number(), periodS: z.number() }),
|
|
24
|
+
z.object({ kind: z.literal('none') }),
|
|
25
|
+
]);
|
|
26
|
+
export const smartObjectSpecSchema = z.object({
|
|
27
|
+
version: z.literal(1),
|
|
28
|
+
grid: z.number().int().positive(),
|
|
29
|
+
bounds: gridBoxSchema.optional(),
|
|
30
|
+
object: z.string().optional(),
|
|
31
|
+
parts: z.array(z.object({
|
|
32
|
+
name: z.string().min(1),
|
|
33
|
+
/** Another part's name; absent means the static body. */
|
|
34
|
+
parent: z.string().optional(),
|
|
35
|
+
box: gridBoxSchema,
|
|
36
|
+
exclude: z.array(gridBoxSchema).optional(),
|
|
37
|
+
/** Grid coordinates, may be fractional (cell centres are at +0.5). */
|
|
38
|
+
pivot: vec3,
|
|
39
|
+
motion: smartObjectMotionSchema,
|
|
40
|
+
voxelCount: z.number().optional(),
|
|
41
|
+
})),
|
|
42
|
+
lights: z.array(z.object({
|
|
43
|
+
name: z.string().min(1),
|
|
44
|
+
position: vec3,
|
|
45
|
+
/** `#rrggbb` */
|
|
46
|
+
color: z.string(),
|
|
47
|
+
intensity: z.number().optional(),
|
|
48
|
+
distance: z.number().optional(),
|
|
49
|
+
flicker: z.boolean().optional(),
|
|
50
|
+
/** When set, the light rides this part. */
|
|
51
|
+
part: z.string().optional(),
|
|
52
|
+
})),
|
|
53
|
+
/** Inside a part's box, components smaller than this fraction of the largest are body slivers. */
|
|
54
|
+
minComponentFraction: z.number().optional(),
|
|
55
|
+
bodyVoxelCount: z.number().optional(),
|
|
56
|
+
warnings: z.array(z.string()).optional(),
|
|
57
|
+
notes: z.string().optional(),
|
|
58
|
+
model: z.string().optional(),
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* The `smart` request field: `true` for analysis with no designer hint, or the
|
|
62
|
+
* hint itself ("the blades should spin"). Shared by every generator that can
|
|
63
|
+
* ask for it, so the CLI, the agent and the api-server accept one shape.
|
|
64
|
+
*/
|
|
65
|
+
export const smartRequestSchema = z.union([
|
|
66
|
+
z.boolean(),
|
|
67
|
+
z.object({ hint: z.string().max(500).optional() }).strict(),
|
|
68
|
+
]);
|
|
69
|
+
/** Normalise the ways a caller says "smart" into what the Forger takes. */
|
|
70
|
+
export function smartRequestFrom(value) {
|
|
71
|
+
if (value === undefined || value === false)
|
|
72
|
+
return undefined;
|
|
73
|
+
if (value === true)
|
|
74
|
+
return true;
|
|
75
|
+
if (typeof value === 'string')
|
|
76
|
+
return value.trim() ? { hint: value.trim() } : true;
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
/** True when a spec declares anything at all — a static prop with no parts and no lights is not smart. */
|
|
80
|
+
export function isSmartSpecUseful(spec) {
|
|
81
|
+
return spec.parts.length > 0 || spec.lights.length > 0;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=smart-object.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-object.js","sourceRoot":"","sources":["../src/smart-object.ts"],"names":[],"mappings":"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"}
|