@bitmagic/asset-core 0.2.21-dev.7 → 0.2.21-dev.9
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/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 +13 -0
- package/dist/generators/speech.d.ts.map +1 -1
- package/dist/generators/speech.js +15 -0
- package/dist/generators/speech.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -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,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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"}
|
|
@@ -7,6 +7,19 @@ import type { AssetResultBase, GenerateDeps } from '../types.js';
|
|
|
7
7
|
export declare const SPEECH_MAX_CHARS = 10000;
|
|
8
8
|
/** The alias table the Forger resolves; a raw Eleven Labs voice_id also works. */
|
|
9
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;
|
|
10
23
|
export declare const speechParamsSchema: z.ZodObject<{
|
|
11
24
|
text: z.ZodString;
|
|
12
25
|
voice: z.ZodOptional<z.ZodString>;
|
|
@@ -1 +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,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"}
|
|
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"}
|
|
@@ -9,6 +9,21 @@ import { formatZodIssues } from '../validation.js';
|
|
|
9
9
|
export const SPEECH_MAX_CHARS = 10000;
|
|
10
10
|
/** The alias table the Forger resolves; a raw Eleven Labs voice_id also works. */
|
|
11
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
|
+
}
|
|
12
27
|
export const speechParamsSchema = z.object({
|
|
13
28
|
text: z.string().min(1).max(SPEECH_MAX_CHARS)
|
|
14
29
|
.describe('The line to speak; billed by the length of the audio it produces'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speech.js","sourceRoot":"","sources":["../../src/generators/speech.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"speech.js","sourceRoot":"","sources":["../../src/generators/speech.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ 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, SPEECH_MAX_CHARS, SPEECH_VOICES } from './generators/speech.js';
|
|
16
|
+
export { generateSpeech, speechParamsSchema, estimateSpeechSeconds, SPEECH_MAX_CHARS, SPEECH_VOICES } from './generators/speech.js';
|
|
17
17
|
export type { SpeechParams, SpeechResult, SpeechUrls } from './generators/speech.js';
|
|
18
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';
|
|
19
19
|
export type { VideoParams, VideoResult, VideoUrls, VideoJobResult, VideoJobRequest } from './generators/video.js';
|
|
@@ -31,6 +31,8 @@ export { generateProp, propParamsSchema } from './generators/prop.js';
|
|
|
31
31
|
export type { PropParams, PropResult } from './generators/prop.js';
|
|
32
32
|
export { generatePropVoxels, propVoxelParamsSchema, propVoxelGrids } from './generators/prop-voxel.js';
|
|
33
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';
|
|
34
36
|
export { generateAnimationAsset, animationParamsSchema, getConfiguredAnimationModel, ANIMATION_MODEL_TEXT_TO_MOTION_3, ANIMATION_MODEL_TEXT_TO_MOTION_2, ANIMATION_MODEL_OLDER, } from './generators/animation.js';
|
|
35
37
|
export type { AnimationParams, AnimationResult } from './generators/animation.js';
|
|
36
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,EACL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACxF,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACtF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
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,EACL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACxF,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACtF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACpI,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACnF,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,iCAAiC,EACjC,uBAAuB,EACvB,cAAc,GACf,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACvG,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EACL,qBAAqB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,GACxG,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,gCAAgC,EAChC,gCAAgC,EAChC,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,EAC9B,4BAA4B,EAC5B,iCAAiC,EACjC,iCAAiC,EACjC,gBAAgB,EAChB,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EAClC,qCAAqC,EACrC,+BAA+B,EAC/B,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EACV,wBAAwB,EACxB,wBAAwB,EACxB,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAChB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,SAAS,EACT,SAAS,GACV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChG,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,6BAA6B,EAC7B,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EACL,kCAAkC,EAClC,yBAAyB,EACzB,+BAA+B,EAC/B,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,uBAAuB,EACvB,eAAe,EACf,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,aAAa,EACb,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,SAAS,EACT,WAAW,EACX,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,yBAAyB,EACzB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ export { generateBackground, backgroundParamsSchema } from './generators/backgro
|
|
|
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, SPEECH_MAX_CHARS, SPEECH_VOICES } from './generators/speech.js';
|
|
9
|
+
export { generateSpeech, speechParamsSchema, estimateSpeechSeconds, SPEECH_MAX_CHARS, SPEECH_VOICES } from './generators/speech.js';
|
|
10
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';
|
|
11
11
|
export { formatZodIssues } from './validation.js';
|
|
12
12
|
export { generateImageAsset, imageAssetParamsSchema } from './generators/image.js';
|
|
@@ -16,6 +16,7 @@ export { findLibraryCharacter, searchLibraryCharacters, getCharacterLibraryMode,
|
|
|
16
16
|
export { isManagedAssetHost, isManagedAssetUrl, MANAGED_HOST_SUFFIXES } from './managed-hosts.js';
|
|
17
17
|
export { generateProp, propParamsSchema } from './generators/prop.js';
|
|
18
18
|
export { generatePropVoxels, propVoxelParamsSchema, propVoxelGrids } from './generators/prop-voxel.js';
|
|
19
|
+
export { smartObjectSpecSchema, smartObjectMotionSchema, smartRequestSchema, smartRequestFrom, isSmartSpecUseful, } from './smart-object.js';
|
|
19
20
|
export { generateAnimationAsset, animationParamsSchema, getConfiguredAnimationModel, ANIMATION_MODEL_TEXT_TO_MOTION_3, ANIMATION_MODEL_TEXT_TO_MOTION_2, ANIMATION_MODEL_OLDER, } from './generators/animation.js';
|
|
20
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';
|
|
21
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,EACL,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAExF,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEtF,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5F,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
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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"}
|