@bitmagic/asset-core 0.2.19-dev.0 → 0.2.19-dev.10
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/art-style.d.ts +32 -0
- package/dist/art-style.d.ts.map +1 -0
- package/dist/art-style.js +42 -0
- package/dist/art-style.js.map +1 -0
- package/dist/cover-prompt.d.ts +26 -2
- package/dist/cover-prompt.d.ts.map +1 -1
- package/dist/cover-prompt.js +40 -4
- package/dist/cover-prompt.js.map +1 -1
- package/dist/forger-client.d.ts +14 -0
- package/dist/forger-client.d.ts.map +1 -1
- package/dist/forger-client.js +14 -1
- package/dist/forger-client.js.map +1 -1
- package/dist/generators/animation-from-video.d.ts +26 -0
- package/dist/generators/animation-from-video.d.ts.map +1 -1
- package/dist/generators/animation-from-video.js +32 -0
- package/dist/generators/animation-from-video.js.map +1 -1
- package/dist/generators/animation.d.ts +2 -2
- package/dist/generators/character.d.ts +33 -0
- package/dist/generators/character.d.ts.map +1 -1
- package/dist/generators/character.js +69 -8
- package/dist/generators/character.js.map +1 -1
- package/dist/generators/video.d.ts +112 -0
- package/dist/generators/video.d.ts.map +1 -0
- package/dist/generators/video.js +157 -0
- package/dist/generators/video.js.map +1 -0
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/reference-prompt.d.ts +24 -2
- package/dist/reference-prompt.d.ts.map +1 -1
- package/dist/reference-prompt.js +10 -6
- package/dist/reference-prompt.js.map +1 -1
- package/dist/terminal-failure.d.ts +31 -7
- package/dist/terminal-failure.d.ts.map +1 -1
- package/dist/terminal-failure.js +11 -19
- package/dist/terminal-failure.js.map +1 -1
- package/dist/types.d.ts +3 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -1
|
@@ -45,8 +45,44 @@ export const characterParamsSchema = z.object({
|
|
|
45
45
|
.optional()
|
|
46
46
|
.default(true)
|
|
47
47
|
.describe('Search the ready-made rigged-character library first and use a close match instead of forging a new one (default). Set false to always forge. Ignored when headScale is not the default 150 — a library body has its head scale baked in.'),
|
|
48
|
+
voxelize: z.boolean()
|
|
49
|
+
.optional()
|
|
50
|
+
.default(true)
|
|
51
|
+
.describe('Voxelize the rigged body (default — the voxel house style). false keeps the textured low-poly rig the forger makes first, for a game whose artStyle is low-poly; the voxel-only library is skipped.'),
|
|
52
|
+
meshModel: z.string()
|
|
53
|
+
.min(1)
|
|
54
|
+
.optional()
|
|
55
|
+
.describe("Asset Forger image-to-mesh model; the Forger default (unified-trellis) when absent. 'runware-meshy-6' forges a true low-poly body — an even remesh in an enforced A-pose rather than a decimated reconstruction — for ~$0.80 and ~5 minutes, so it is for hero characters, not bulk."),
|
|
48
56
|
}).strict();
|
|
49
57
|
const ENDPOINT = '/ai/v1/generate-rigged-character/jobs';
|
|
58
|
+
/**
|
|
59
|
+
* The Asset Forger mesh model that forges a true low-poly body: an even remesh in
|
|
60
|
+
* an enforced A-pose rather than a decimated photoreal reconstruction.
|
|
61
|
+
*
|
|
62
|
+
* This is the DEFAULT for a low-poly character (`voxelize: false`) — see
|
|
63
|
+
* {@link meshModelFor}. It is deliberately not the default for a voxel one:
|
|
64
|
+
* there the body is rebuilt out of cubes, so the remesh, the A-pose and the
|
|
65
|
+
* texture are all discarded, and the money buys nothing.
|
|
66
|
+
*/
|
|
67
|
+
export const MESHY_MESH_MODEL = 'runware-meshy-6';
|
|
68
|
+
/**
|
|
69
|
+
* Which mesh model forges this character.
|
|
70
|
+
*
|
|
71
|
+
* A low-poly game ships the textured rig itself, so the geometry is the product
|
|
72
|
+
* and Meshy is worth its price: an even remesh in an enforced A-pose, against a
|
|
73
|
+
* TRELLIS reconstruction that is only as low-poly as its concept image happened
|
|
74
|
+
* to be. A voxel game re-voxelizes the body, which throws all of that away.
|
|
75
|
+
*
|
|
76
|
+
* The cost is real and worth stating plainly: ~$0.80 and ~6 minutes per low-poly
|
|
77
|
+
* character, against fractions of a cent and ~40 s on the Forger default. An
|
|
78
|
+
* explicit `meshModel` overrides this in both directions — pass
|
|
79
|
+
* `unified-trellis` to opt a low-poly character back onto the cheap lane.
|
|
80
|
+
*/
|
|
81
|
+
export function meshModelFor(input) {
|
|
82
|
+
if (input.meshModel)
|
|
83
|
+
return input.meshModel;
|
|
84
|
+
return input.voxelize ? undefined : MESHY_MESH_MODEL;
|
|
85
|
+
}
|
|
50
86
|
export async function generateCharacter(params, deps) {
|
|
51
87
|
const { forger, logger, onProgress } = deps;
|
|
52
88
|
const parsed = characterParamsSchema.safeParse(params);
|
|
@@ -68,8 +104,23 @@ export async function generateCharacter(params, deps) {
|
|
|
68
104
|
// its head scale baked in, and silently ignoring a parameter the caller set is
|
|
69
105
|
// worse than forging. (zod fills the default, so "explicitly 150" and
|
|
70
106
|
// "omitted" are indistinguishable here — and identical in effect.)
|
|
107
|
+
//
|
|
108
|
+
// An unvoxelized request skips it too: every stored body is a voxel one, so the
|
|
109
|
+
// closest match would be in the wrong medium.
|
|
110
|
+
//
|
|
111
|
+
// An explicit meshModel suppresses it for the same reason a non-default
|
|
112
|
+
// headScale does: a library body was forged by whatever model made it, so
|
|
113
|
+
// handing one back would silently ignore the model the caller asked for --
|
|
114
|
+
// and on the Meshy lane that is the entire point of the request.
|
|
71
115
|
const libraryMode = getCharacterLibraryMode();
|
|
72
|
-
const librarySearchable = libraryMode !== 'off'
|
|
116
|
+
const librarySearchable = libraryMode !== 'off'
|
|
117
|
+
&& input.useLibrary
|
|
118
|
+
&& input.headScale === DEFAULT_HEAD_SCALE
|
|
119
|
+
&& input.voxelize
|
|
120
|
+
&& input.meshModel === undefined;
|
|
121
|
+
if (!input.voxelize && libraryMode !== 'off' && input.useLibrary) {
|
|
122
|
+
logger.info('[character] Library skipped: it holds voxel bodies only and this request keeps the low-poly rig');
|
|
123
|
+
}
|
|
73
124
|
if (librarySearchable) {
|
|
74
125
|
onProgress('Searching the character library…');
|
|
75
126
|
const outcome = await findLibraryCharacter(input.prompt, { forger, logger });
|
|
@@ -93,15 +144,20 @@ export async function generateCharacter(params, deps) {
|
|
|
93
144
|
// Proven recipe for an engine-ready character: rerigTarget 'default' => Mixamo
|
|
94
145
|
// Y-up rig the engine retarget drives correctly (NEVER 'ue5' — that rig renders
|
|
95
146
|
// mangled), voxelize => returns the rigged voxel GLB directly (no browser
|
|
96
|
-
// voxelization needed).
|
|
147
|
+
// voxelization needed). A low-poly game asks for voxelize:false and takes the
|
|
148
|
+
// textured rig the forger makes before voxelizing.
|
|
149
|
+
const meshModel = meshModelFor(input);
|
|
150
|
+
if (meshModel)
|
|
151
|
+
logger.info({ meshModel }, '[character] Forging with a non-default mesh model');
|
|
97
152
|
let forgeResult;
|
|
98
153
|
try {
|
|
99
154
|
forgeResult = await forger.postJobAndWait(ENDPOINT, {
|
|
100
155
|
prompt: input.prompt,
|
|
101
156
|
rerigTarget: 'default',
|
|
102
|
-
voxelize
|
|
103
|
-
|
|
104
|
-
|
|
157
|
+
...(input.voxelize
|
|
158
|
+
? { voxelize: true, voxelsTall: 80, voxelMode: 'blended' }
|
|
159
|
+
: { voxelize: false }),
|
|
160
|
+
...(meshModel ? { meshModel } : {}),
|
|
105
161
|
headScale: input.headScale,
|
|
106
162
|
...(characterMaterialClassesEnabled() ? { materialClasses: true } : {}),
|
|
107
163
|
}, 'CharacterGeneration');
|
|
@@ -120,9 +176,14 @@ export async function generateCharacter(params, deps) {
|
|
|
120
176
|
// variant sitting alongside it in the same bucket dir but not listed in the
|
|
121
177
|
// response. So: prefer an explicit variant URL; otherwise derive it from the
|
|
122
178
|
// returned URL's directory and probe `output-variant-N.glb`.
|
|
179
|
+
//
|
|
180
|
+
// Unvoxelized, the textured rig IS the deliverable: `output-low.glb` when the
|
|
181
|
+
// forger lists it, else whatever it returned — and never a voxel variant probe.
|
|
123
182
|
const outputs = forgeResult.data?.additionalOutputFileUrls ?? [];
|
|
124
|
-
let characterUrl = outputs.find((u) => /output-variant-\d+\.glb/i.test(u));
|
|
125
183
|
const baseUrl = outputs[0] ?? forgeResult.data?.fileUrl;
|
|
184
|
+
let characterUrl = input.voxelize
|
|
185
|
+
? outputs.find((u) => /output-variant-\d+\.glb/i.test(u))
|
|
186
|
+
: outputs.find((u) => /output-low\.glb/i.test(u)) ?? baseUrl;
|
|
126
187
|
if (!characterUrl && baseUrl) {
|
|
127
188
|
const dir = baseUrl.replace(/[^/]+$/, '');
|
|
128
189
|
const probes = await Promise.all([1, 2, 3, 4].map(async (n) => {
|
|
@@ -142,11 +203,11 @@ export async function generateCharacter(params, deps) {
|
|
|
142
203
|
}
|
|
143
204
|
if (!characterUrl) {
|
|
144
205
|
return {
|
|
145
|
-
...fail(
|
|
206
|
+
...fail(`Asset Forger returned no character URL. Ensure rerigTarget:"default" + voxelize:${input.voxelize} are supported by the configured ASSET_FORGER_URL.`),
|
|
146
207
|
billable,
|
|
147
208
|
};
|
|
148
209
|
}
|
|
149
|
-
logger.info({ characterUrl, outputs }, '[character] Resolved
|
|
210
|
+
logger.info({ characterUrl, outputs, voxelize: input.voxelize }, '[character] Resolved character URL');
|
|
150
211
|
// Classify + rename the mechanical colour groups the flag asked for, when
|
|
151
212
|
// the host can (model + storage — see `GenerateDeps.refineCharacterGlb`).
|
|
152
213
|
// Fail-soft: a refusal or failure serves the unclassified file, which
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"character.js","sourceRoot":"","sources":["../../src/generators/character.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;AACnD,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEvF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAEtC;;;;;;;;GAQG;AACH,MAAM,UAAU,+BAA+B;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;SACb,GAAG,CAAC,CAAC,CAAC;SACN,KAAK,CAAC,yBAAyB,EAAE,2EAA2E,CAAC;SAC7G,QAAQ,CAAC,kEAAkE,CAAC;IAC/E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACf,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,kFAAkF,CAAC;IAC/F,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE;SACvB,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,iKAAiK,CAAC;IAC9K,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;SAClB,GAAG,CAAC,EAAE,CAAC;SACP,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,kBAAkB,CAAC;SAC3B,QAAQ,CAAC,4HAA4H,CAAC;IACzI,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;SAChB,QAAQ,EAAE;SACV,QAAQ,CAAC,wKAAwK,CAAC;IACrL,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;SACpB,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;SACb,QAAQ,CAAC,2OAA2O,CAAC;
|
|
1
|
+
{"version":3,"file":"character.js","sourceRoot":"","sources":["../../src/generators/character.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { AssetResultBase, GenerateDeps, WorldPatch } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Runware video: a prompt (and optionally a first frame) becomes a short 720p
|
|
5
|
+
* clip — a cutscene stinger, an animated cover, a background loop.
|
|
6
|
+
*
|
|
7
|
+
* The asset row this writes is `type: 'video'`, which the engine already knows
|
|
8
|
+
* how to play: `engine.playVideo(assetId)` mounts a fullscreen overlay and
|
|
9
|
+
* resolves the URL out of `assets[]`. That API shipped with no way to produce
|
|
10
|
+
* anything for it; this is the producer.
|
|
11
|
+
*
|
|
12
|
+
* ALWAYS a job. asset-forger's route has no synchronous sibling because Runware
|
|
13
|
+
* video has none — `deliveryMethod` accepts nothing but `async` — and a run
|
|
14
|
+
* takes 40 s to several minutes. Same shape as video-to-motion, for the same
|
|
15
|
+
* reason.
|
|
16
|
+
*/
|
|
17
|
+
/** The Forger route's own bounds (asset-forger `src/routes/video.ts`), restated so a bad ask fails here. */
|
|
18
|
+
export declare const VIDEO_MIN_SECONDS = 1;
|
|
19
|
+
export declare const VIDEO_MAX_SECONDS = 10;
|
|
20
|
+
export declare const VIDEO_DEFAULT_SECONDS = 5;
|
|
21
|
+
export declare const VIDEO_JOBS_ENDPOINT = "/ai/v1/generate-video/jobs";
|
|
22
|
+
/**
|
|
23
|
+
* Measured 2026-09 against the live Forger: 37-44 s for text-to-video, ~200 s
|
|
24
|
+
* with a first frame. Ten minutes is far past both while staying under the
|
|
25
|
+
* video-to-motion lane's twenty, so a wedged job is given up on rather than
|
|
26
|
+
* held open for a third of an hour.
|
|
27
|
+
*/
|
|
28
|
+
export declare const VIDEO_TIMEOUT_MS: number;
|
|
29
|
+
export declare const videoParamsSchema: z.ZodObject<{
|
|
30
|
+
prompt: z.ZodString;
|
|
31
|
+
durationSeconds: z.ZodDefault<z.ZodNumber>;
|
|
32
|
+
name: z.ZodOptional<z.ZodString>;
|
|
33
|
+
imageUrl: z.ZodOptional<z.ZodString>;
|
|
34
|
+
seed: z.ZodOptional<z.ZodNumber>;
|
|
35
|
+
assetId: z.ZodOptional<z.ZodString>;
|
|
36
|
+
}, "strict", z.ZodTypeAny, {
|
|
37
|
+
prompt: string;
|
|
38
|
+
durationSeconds: number;
|
|
39
|
+
name?: string | undefined;
|
|
40
|
+
assetId?: string | undefined;
|
|
41
|
+
imageUrl?: string | undefined;
|
|
42
|
+
seed?: number | undefined;
|
|
43
|
+
}, {
|
|
44
|
+
prompt: string;
|
|
45
|
+
name?: string | undefined;
|
|
46
|
+
durationSeconds?: number | undefined;
|
|
47
|
+
assetId?: string | undefined;
|
|
48
|
+
imageUrl?: string | undefined;
|
|
49
|
+
seed?: number | undefined;
|
|
50
|
+
}>;
|
|
51
|
+
export type VideoParams = z.input<typeof videoParamsSchema>;
|
|
52
|
+
/** Where the clip landed, carried on the result so a caller that never writes world.json still has it. */
|
|
53
|
+
export interface VideoUrls {
|
|
54
|
+
/** The MP4 — H.264, faststart-remuxed, and what the engine plays. */
|
|
55
|
+
videoUrl: string;
|
|
56
|
+
/** The VP9 sibling, ~4x smaller. Absent if the Forger did not make one. */
|
|
57
|
+
webmUrl?: string;
|
|
58
|
+
videoId: string;
|
|
59
|
+
durationSeconds: number;
|
|
60
|
+
width?: number;
|
|
61
|
+
height?: number;
|
|
62
|
+
}
|
|
63
|
+
export type VideoResult = AssetResultBase & {
|
|
64
|
+
/**
|
|
65
|
+
* The clip's length, and what per-second billing reads (api-server's cli-assets.ts prices
|
|
66
|
+
* `lengthSeconds ?? 1`). Always set on success: the Forger's probed length, or the requested
|
|
67
|
+
* length when the Forger did not report one — never left for the biller to default to a second.
|
|
68
|
+
*/
|
|
69
|
+
lengthSeconds?: number;
|
|
70
|
+
video?: VideoUrls;
|
|
71
|
+
sizeBytes?: number;
|
|
72
|
+
/** True once the Forger reported a stored video URL. Unset on any failure. */
|
|
73
|
+
billable?: boolean;
|
|
74
|
+
};
|
|
75
|
+
/** What asset-forger's job status carries in `result` once it succeeds. */
|
|
76
|
+
export interface VideoJobResult {
|
|
77
|
+
videoUrl: string;
|
|
78
|
+
webmUrl?: string;
|
|
79
|
+
videoId: string;
|
|
80
|
+
format: string;
|
|
81
|
+
durationSeconds: number;
|
|
82
|
+
width?: number;
|
|
83
|
+
height?: number;
|
|
84
|
+
model?: string;
|
|
85
|
+
cost?: number;
|
|
86
|
+
seed?: number;
|
|
87
|
+
}
|
|
88
|
+
/** Wire body of the asset-forger job POST. */
|
|
89
|
+
export interface VideoJobRequest {
|
|
90
|
+
prompt: string;
|
|
91
|
+
durationSeconds: number;
|
|
92
|
+
imageUrl?: string;
|
|
93
|
+
seed?: number;
|
|
94
|
+
}
|
|
95
|
+
export declare function buildVideoJobRequest(input: z.output<typeof videoParamsSchema>): VideoJobRequest;
|
|
96
|
+
/**
|
|
97
|
+
* The world.json row a finished job produces. Exported on its own so a host
|
|
98
|
+
* that polls the Forger job itself builds the same asset row as the in-process
|
|
99
|
+
* path — the same split `buildAnimationFromVideoPatch` exists for.
|
|
100
|
+
*
|
|
101
|
+
* `id` is what game code passes to `engine.playVideo()`, so a pre-minted
|
|
102
|
+
* `assetId` makes `engine.playVideo('intro')` resolve.
|
|
103
|
+
*/
|
|
104
|
+
export declare function buildVideoPatch(input: z.output<typeof videoParamsSchema>, result: VideoJobResult, sizeBytes?: number): WorldPatch;
|
|
105
|
+
/**
|
|
106
|
+
* Turn the Forger's failure into copy the creator can act on. The job's
|
|
107
|
+
* `error.kind` travels inside the thrown message (postJobAndWait stringifies
|
|
108
|
+
* it), so match on that rather than parsing the JSON back out.
|
|
109
|
+
*/
|
|
110
|
+
export declare function describeVideoFailure(error: Error): string;
|
|
111
|
+
export declare function generateVideo(params: VideoParams, deps: GenerateDeps): Promise<VideoResult>;
|
|
112
|
+
//# sourceMappingURL=video.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/generators/video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK7E;;;;;;;;;;;;;GAaG;AAEH,4GAA4G;AAC5G,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAEvC,eAAO,MAAM,mBAAmB,+BAA+B,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QAAiB,CAAC;AAE/C,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;EAanB,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,0GAA0G;AAC1G,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG;IAC1C;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,GAAG,eAAe,CAO/F;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,EACzC,MAAM,EAAE,cAAc,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,UAAU,CAmBZ;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAiBzD;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,WAAW,CAAC,CAqEtB"}
|
|
@@ -0,0 +1,157 @@
|
|
|
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
|
+
* Runware video: a prompt (and optionally a first frame) becomes a short 720p
|
|
7
|
+
* clip — a cutscene stinger, an animated cover, a background loop.
|
|
8
|
+
*
|
|
9
|
+
* The asset row this writes is `type: 'video'`, which the engine already knows
|
|
10
|
+
* how to play: `engine.playVideo(assetId)` mounts a fullscreen overlay and
|
|
11
|
+
* resolves the URL out of `assets[]`. That API shipped with no way to produce
|
|
12
|
+
* anything for it; this is the producer.
|
|
13
|
+
*
|
|
14
|
+
* ALWAYS a job. asset-forger's route has no synchronous sibling because Runware
|
|
15
|
+
* video has none — `deliveryMethod` accepts nothing but `async` — and a run
|
|
16
|
+
* takes 40 s to several minutes. Same shape as video-to-motion, for the same
|
|
17
|
+
* reason.
|
|
18
|
+
*/
|
|
19
|
+
/** The Forger route's own bounds (asset-forger `src/routes/video.ts`), restated so a bad ask fails here. */
|
|
20
|
+
export const VIDEO_MIN_SECONDS = 1;
|
|
21
|
+
export const VIDEO_MAX_SECONDS = 10;
|
|
22
|
+
export const VIDEO_DEFAULT_SECONDS = 5;
|
|
23
|
+
export const VIDEO_JOBS_ENDPOINT = '/ai/v1/generate-video/jobs';
|
|
24
|
+
/**
|
|
25
|
+
* Measured 2026-09 against the live Forger: 37-44 s for text-to-video, ~200 s
|
|
26
|
+
* with a first frame. Ten minutes is far past both while staying under the
|
|
27
|
+
* video-to-motion lane's twenty, so a wedged job is given up on rather than
|
|
28
|
+
* held open for a third of an hour.
|
|
29
|
+
*/
|
|
30
|
+
export const VIDEO_TIMEOUT_MS = 10 * 60 * 1000;
|
|
31
|
+
export const videoParamsSchema = z.object({
|
|
32
|
+
prompt: z.string().min(1)
|
|
33
|
+
.describe('What happens in the clip (subject, motion, camera, mood)'),
|
|
34
|
+
durationSeconds: z.number().min(VIDEO_MIN_SECONDS).max(VIDEO_MAX_SECONDS).default(VIDEO_DEFAULT_SECONDS)
|
|
35
|
+
.describe('Clip length in seconds; billed per second'),
|
|
36
|
+
name: z.string().min(1).max(80).optional()
|
|
37
|
+
.describe('Display name of the asset, and what game code passes to engine.playVideo(). Defaults to the prompt.'),
|
|
38
|
+
imageUrl: z.string().url().optional()
|
|
39
|
+
.describe('Public URL of a first frame (image-to-video). Much slower than text-to-video, and the output aspect ratio follows the image rather than the 16:9 default.'),
|
|
40
|
+
seed: z.number().int().optional()
|
|
41
|
+
.describe('Fixed seed, to re-roll the same clip'),
|
|
42
|
+
assetId: z.string().min(1).optional()
|
|
43
|
+
.describe('Pre-generated asset id; the generator id is used when absent'),
|
|
44
|
+
}).strict();
|
|
45
|
+
export function buildVideoJobRequest(input) {
|
|
46
|
+
return {
|
|
47
|
+
prompt: input.prompt,
|
|
48
|
+
durationSeconds: input.durationSeconds,
|
|
49
|
+
...(input.imageUrl !== undefined && { imageUrl: input.imageUrl }),
|
|
50
|
+
...(input.seed !== undefined && { seed: input.seed }),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The world.json row a finished job produces. Exported on its own so a host
|
|
55
|
+
* that polls the Forger job itself builds the same asset row as the in-process
|
|
56
|
+
* path — the same split `buildAnimationFromVideoPatch` exists for.
|
|
57
|
+
*
|
|
58
|
+
* `id` is what game code passes to `engine.playVideo()`, so a pre-minted
|
|
59
|
+
* `assetId` makes `engine.playVideo('intro')` resolve.
|
|
60
|
+
*/
|
|
61
|
+
export function buildVideoPatch(input, result, sizeBytes) {
|
|
62
|
+
return {
|
|
63
|
+
type: 'pushRoot',
|
|
64
|
+
path: ['assets'],
|
|
65
|
+
value: {
|
|
66
|
+
id: input.assetId ?? result.videoId,
|
|
67
|
+
name: input.name ?? input.prompt,
|
|
68
|
+
url: result.videoUrl,
|
|
69
|
+
type: 'video',
|
|
70
|
+
format: result.format,
|
|
71
|
+
prompt: input.prompt,
|
|
72
|
+
source: 'generated',
|
|
73
|
+
size: sizeBytes ?? 0,
|
|
74
|
+
durationSeconds: result.durationSeconds,
|
|
75
|
+
...(result.webmUrl !== undefined && { webmUrl: result.webmUrl }),
|
|
76
|
+
...(result.width !== undefined && { width: result.width }),
|
|
77
|
+
...(result.height !== undefined && { height: result.height }),
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Turn the Forger's failure into copy the creator can act on. The job's
|
|
83
|
+
* `error.kind` travels inside the thrown message (postJobAndWait stringifies
|
|
84
|
+
* it), so match on that rather than parsing the JSON back out.
|
|
85
|
+
*/
|
|
86
|
+
export function describeVideoFailure(error) {
|
|
87
|
+
const text = error.message;
|
|
88
|
+
// Runware's own moderation, seen live on a bland test prompt: worth naming,
|
|
89
|
+
// because the creator's instinct is otherwise to retry the same words.
|
|
90
|
+
if (text.includes('invalidProviderContent')) {
|
|
91
|
+
return 'The video provider\'s content filter rejected this prompt. Rephrase it — describing a '
|
|
92
|
+
+ 'scene and its motion works better than naming people, brands or styles.';
|
|
93
|
+
}
|
|
94
|
+
if (text.includes('invalid-request')) {
|
|
95
|
+
const detail = text.match(/"message":"([^"]*)"/)?.[1];
|
|
96
|
+
return detail ? `The video could not be generated: ${detail}` : 'The video request was refused as invalid.';
|
|
97
|
+
}
|
|
98
|
+
if (text.includes('exceeded client timeout') || text.includes('timeout')) {
|
|
99
|
+
return 'Video generation timed out. A first frame (--image) is much slower than a prompt alone; '
|
|
100
|
+
+ 'try a shorter clip, or the same prompt without an image.';
|
|
101
|
+
}
|
|
102
|
+
return text;
|
|
103
|
+
}
|
|
104
|
+
export async function generateVideo(params, deps) {
|
|
105
|
+
const { forger, logger, onProgress } = deps;
|
|
106
|
+
const parsed = videoParamsSchema.safeParse(params);
|
|
107
|
+
if (!parsed.success) {
|
|
108
|
+
logger.warn({ err: parsed.error }, '[video] Invalid parameters');
|
|
109
|
+
return fail(formatZodIssues(parsed.error));
|
|
110
|
+
}
|
|
111
|
+
const input = parsed.data;
|
|
112
|
+
if (!forger.hasCredentials()) {
|
|
113
|
+
logger.error('[video] Missing Asset Forger credentials');
|
|
114
|
+
return fail(forger.getMissingCredentialsMessage());
|
|
115
|
+
}
|
|
116
|
+
onProgress(input.imageUrl
|
|
117
|
+
? `Animating the image into ${input.durationSeconds}s of video (this takes a few minutes): ${input.prompt}`
|
|
118
|
+
: `Generating ${input.durationSeconds}s of video: ${input.prompt}`);
|
|
119
|
+
const request = buildVideoJobRequest(input);
|
|
120
|
+
logger.info({ payload: request }, '[video] Submitting job');
|
|
121
|
+
let result;
|
|
122
|
+
try {
|
|
123
|
+
result = await forger.postJobAndWait(VIDEO_JOBS_ENDPOINT, request, 'Video', { overallTimeoutMs: VIDEO_TIMEOUT_MS });
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
127
|
+
logger.error({ err }, '[video] Job failed');
|
|
128
|
+
return fail(describeVideoFailure(err));
|
|
129
|
+
}
|
|
130
|
+
if (!result?.videoUrl || !result.videoId) {
|
|
131
|
+
logger.error({ result }, '[video] Job succeeded without a video URL');
|
|
132
|
+
return fail('Video generation finished but returned no clip');
|
|
133
|
+
}
|
|
134
|
+
const sizeBytes = await fetchContentLength(result.videoUrl, logger);
|
|
135
|
+
// The Forger probes the finished file, so this is the real length rather than
|
|
136
|
+
// the requested one — and it is what the per-second charge is priced off.
|
|
137
|
+
const durationSeconds = typeof result.durationSeconds === 'number' && result.durationSeconds > 0
|
|
138
|
+
? result.durationSeconds
|
|
139
|
+
: input.durationSeconds;
|
|
140
|
+
const patch = buildVideoPatch(input, { ...result, durationSeconds }, sizeBytes);
|
|
141
|
+
const assetId = patch.value.id;
|
|
142
|
+
logger.info({ videoUrl: result.videoUrl, assetId, cost: result.cost }, '[video] Video stored');
|
|
143
|
+
return ok(`Video generated: ${result.videoUrl}`, [patch], {
|
|
144
|
+
lengthSeconds: durationSeconds,
|
|
145
|
+
video: {
|
|
146
|
+
videoUrl: result.videoUrl,
|
|
147
|
+
...(result.webmUrl !== undefined && { webmUrl: result.webmUrl }),
|
|
148
|
+
videoId: assetId,
|
|
149
|
+
durationSeconds,
|
|
150
|
+
...(result.width !== undefined && { width: result.width }),
|
|
151
|
+
...(result.height !== undefined && { height: result.height }),
|
|
152
|
+
},
|
|
153
|
+
sizeBytes,
|
|
154
|
+
billable: true,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/generators/video.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,9 @@ 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 { 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
|
+
export type { VideoParams, VideoResult, VideoUrls, VideoJobResult, VideoJobRequest } from './generators/video.js';
|
|
18
|
+
export { formatZodIssues } from './validation.js';
|
|
16
19
|
export { generateImageAsset, imageAssetParamsSchema } from './generators/image.js';
|
|
17
20
|
export type { ImageAssetParams, ImageAssetResult } from './generators/image.js';
|
|
18
21
|
export { generateReferenceImage, referenceImageParamsSchema, REFERENCE_IMAGE_WIDTH, REFERENCE_IMAGE_HEIGHT, } from './generators/reference.js';
|
|
@@ -27,10 +30,12 @@ export { generatePropVoxels, propVoxelParamsSchema, propVoxelGrids } from './gen
|
|
|
27
30
|
export type { PropVoxelParams, PropVoxelResult } from './generators/prop-voxel.js';
|
|
28
31
|
export { generateAnimationAsset, animationParamsSchema, getConfiguredAnimationModel, ANIMATION_MODEL_TEXT_TO_MOTION_3, ANIMATION_MODEL_TEXT_TO_MOTION_2, ANIMATION_MODEL_OLDER, } from './generators/animation.js';
|
|
29
32
|
export type { AnimationParams, AnimationResult } from './generators/animation.js';
|
|
30
|
-
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, } from './generators/animation-from-video.js';
|
|
33
|
+
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';
|
|
31
34
|
export type { AnimationFromVideoParams, AnimationFromVideoResult, AnimationFromVideoJobResult, AnimationFromVideoJobRequest, TrimAnalysisJobResult, VideoToMotionModel, LocomotionState, } from './generators/animation-from-video.js';
|
|
32
35
|
export { fetchContentLength } from './http.js';
|
|
33
|
-
export { PIXAR_VOXEL_STYLE, VOXEL_STYLE_LEAD, MAX_COVER_DESIGN_CHARS, buildCoverArtPrompt } from './cover-prompt.js';
|
|
36
|
+
export { LOW_POLY_STYLE_LEAD, PIXAR_LOW_POLY_STYLE, PIXAR_VOXEL_STYLE, VOXEL_STYLE_LEAD, MAX_COVER_DESIGN_CHARS, buildCoverArtPrompt, styleLead, styleTail, } from './cover-prompt.js';
|
|
37
|
+
export { ART_STYLES, DEFAULT_ART_STYLE, describeArtStyle, parseArtStyle } from './art-style.js';
|
|
38
|
+
export type { ArtStyle } from './art-style.js';
|
|
34
39
|
export { VOXEL_ART_IMAGE_MODEL } from './image-models.js';
|
|
35
40
|
export { MAX_REFERENCE_DESIGN_CHARS, buildReferenceImagePrompt } from './reference-prompt.js';
|
|
36
41
|
export { JUDGE_DIMENSIONS, deriveOverall, judgeModelResponseSchema, judgeScorecardSchema, } from './judge-scorecard.js';
|
|
@@ -42,5 +47,5 @@ export type { MaterialClassifierInput, MaterialVerdict, VoxelMaterialClassName,
|
|
|
42
47
|
export { TRIM_LABEL_MIN_FRACTION, formatTrimmedEnds, trimBadgeAt, trimNote, trimSegmentAt, trimSegments, } from './trim-layout.js';
|
|
43
48
|
export type { TrimInput, TrimSegment, TrimSegmentKind, } from './trim-layout.js';
|
|
44
49
|
export { TERMINAL_FAILURE_CODES, TERMINAL_FAILURE_VERSION, buildTerminalFailure, isTerminalFailureCode, legacyErrorTypeFor, parseTerminalFailure, } from './terminal-failure.js';
|
|
45
|
-
export type { BuildTerminalFailureInput, LegacyErrorType, TerminalFailure, TerminalFailureCode, TerminalFailureDetail, } from './terminal-failure.js';
|
|
50
|
+
export type { BuildTerminalFailureInput, LegacyErrorType, ProviderErrorFacts, TerminalFailure, TerminalFailureCode, TerminalFailureDetail, } from './terminal-failure.js';
|
|
46
51
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
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,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,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,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,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACrF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,mCAAmC,CAAC;AAC3C,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,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,6 +6,8 @@ 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 { 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
|
+
export { formatZodIssues } from './validation.js';
|
|
9
11
|
export { generateImageAsset, imageAssetParamsSchema } from './generators/image.js';
|
|
10
12
|
export { generateReferenceImage, referenceImageParamsSchema, REFERENCE_IMAGE_WIDTH, REFERENCE_IMAGE_HEIGHT, } from './generators/reference.js';
|
|
11
13
|
export { generateCharacter, characterParamsSchema } from './generators/character.js';
|
|
@@ -13,9 +15,11 @@ export { findLibraryCharacter, getCharacterLibraryMode, getCharacterLibraryThres
|
|
|
13
15
|
export { generateProp, propParamsSchema } from './generators/prop.js';
|
|
14
16
|
export { generatePropVoxels, propVoxelParamsSchema, propVoxelGrids } from './generators/prop-voxel.js';
|
|
15
17
|
export { generateAnimationAsset, animationParamsSchema, getConfiguredAnimationModel, ANIMATION_MODEL_TEXT_TO_MOTION_3, ANIMATION_MODEL_TEXT_TO_MOTION_2, ANIMATION_MODEL_OLDER, } from './generators/animation.js';
|
|
16
|
-
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, } from './generators/animation-from-video.js';
|
|
18
|
+
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';
|
|
17
19
|
export { fetchContentLength } from './http.js';
|
|
18
|
-
export { PIXAR_VOXEL_STYLE, VOXEL_STYLE_LEAD, MAX_COVER_DESIGN_CHARS, buildCoverArtPrompt } from './cover-prompt.js';
|
|
20
|
+
export { LOW_POLY_STYLE_LEAD, PIXAR_LOW_POLY_STYLE, PIXAR_VOXEL_STYLE, VOXEL_STYLE_LEAD, MAX_COVER_DESIGN_CHARS, buildCoverArtPrompt, styleLead, styleTail, } from './cover-prompt.js';
|
|
21
|
+
// Also published as the `@bitmagic/asset-core/art-style` subpath for browser consumers.
|
|
22
|
+
export { ART_STYLES, DEFAULT_ART_STYLE, describeArtStyle, parseArtStyle } from './art-style.js';
|
|
19
23
|
export { VOXEL_ART_IMAGE_MODEL } from './image-models.js';
|
|
20
24
|
export { MAX_REFERENCE_DESIGN_CHARS, buildReferenceImagePrompt } from './reference-prompt.js';
|
|
21
25
|
export { JUDGE_DIMENSIONS, deriveOverall, judgeModelResponseSchema, judgeScorecardSchema, } from './judge-scorecard.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,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,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,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAEnF,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAErF,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,mCAAmC,CAAC;AAO3C,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEvG,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC3B,gCAAgC,EAChC,gCAAgC,EAChC,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAEnC,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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reference-image prompt composition — the concept shot of a game's WORLD that
|
|
3
|
+
* `bitmagic reference make` generates and, once the creator accepts one, every
|
|
4
|
+
* later image generation and world forge takes as its visual reference.
|
|
5
|
+
*
|
|
6
|
+
* Beside `cover-prompt.ts` on purpose: a reference and a cover are the two
|
|
7
|
+
* pictures a game is judged by, and they must read as the same product. Both
|
|
8
|
+
* therefore open with the style's lead and end in its tail (`VOXEL_STYLE_LEAD` /
|
|
9
|
+
* `PIXAR_VOXEL_STYLE` for a voxel game, the low-poly pair for a low-poly one), which
|
|
10
|
+
* also carries the no-text directive — a reference with a caption baked in would teach every skybox
|
|
11
|
+
* and block texture downstream to render letters.
|
|
12
|
+
*
|
|
13
|
+
* What differs is the framing. A cover is a composed illustration of the game
|
|
14
|
+
* (a hero, a moment, a mood). A reference is an ESTABLISHING SHOT of the place
|
|
15
|
+
* — the terrain, landmarks, vegetation, architecture, palette and weather —
|
|
16
|
+
* because that is what a skybox, a block texture and the world-forger's
|
|
17
|
+
* designer can actually take from it. Characters in focus would pull the
|
|
18
|
+
* img2img generators towards figures the assets do not want.
|
|
19
|
+
*
|
|
20
|
+
* No network, no credentials: this module composes strings.
|
|
21
|
+
*/
|
|
22
|
+
import { type ArtStyle } from './art-style.js';
|
|
1
23
|
/** How much of the design text reaches the image model; the rest is dropped. Same cap as covers. */
|
|
2
24
|
export declare const MAX_REFERENCE_DESIGN_CHARS = 1500;
|
|
3
25
|
/**
|
|
4
26
|
* Compose the image prompt for a reference image from a game's design text
|
|
5
27
|
* (GAME-DESIGN.md content or a one-off `--prompt`). Falls back to a generic
|
|
6
|
-
*
|
|
28
|
+
* world in the style when none is present.
|
|
7
29
|
*
|
|
8
30
|
* As with covers, the game NAME is never injected: image models render a name
|
|
9
31
|
* as on-image text.
|
|
10
32
|
*/
|
|
11
|
-
export declare function buildReferenceImagePrompt(gameDesign: string): string;
|
|
33
|
+
export declare function buildReferenceImagePrompt(gameDesign: string, artStyle?: ArtStyle): string;
|
|
12
34
|
//# sourceMappingURL=reference-prompt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-prompt.d.ts","sourceRoot":"","sources":["../src/reference-prompt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reference-prompt.d.ts","sourceRoot":"","sources":["../src/reference-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGlE,oGAAoG;AACpG,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAO/C;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAE,QAA4B,GAAG,MAAM,CAU5G"}
|