@ai-game-assets/dev 0.1.0

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/server.js ADDED
@@ -0,0 +1,450 @@
1
+ import { createServer } from "node:http";
2
+ import { resolveAiAsset } from "@ai-game-assets/core";
3
+ import { readManifest, saveGeneratedOption, saveStyleGuide } from "./asset-store.js";
4
+ import { readFile } from "node:fs/promises";
5
+ import path from "node:path";
6
+ export function createAiAssetDevServer(options) {
7
+ const server = createServer(async (request, response) => {
8
+ try {
9
+ await routeRequest(options, request, response);
10
+ }
11
+ catch (error) {
12
+ sendJson(response, 500, {
13
+ error: error instanceof Error ? error.message : String(error)
14
+ });
15
+ }
16
+ });
17
+ return {
18
+ listen() {
19
+ const port = options.port ?? 3977;
20
+ const host = options.host ?? "127.0.0.1";
21
+ return new Promise((resolve) => {
22
+ server.listen(port, host, () => resolve({ port, host }));
23
+ });
24
+ },
25
+ close() {
26
+ return new Promise((resolve, reject) => {
27
+ server.close((error) => error ? reject(error) : resolve());
28
+ });
29
+ },
30
+ server
31
+ };
32
+ }
33
+ async function routeRequest(options, request, response) {
34
+ const url = new URL(request.url ?? "/", "http://localhost");
35
+ if (request.method === "OPTIONS") {
36
+ response.writeHead(204, corsHeaders());
37
+ response.end();
38
+ return;
39
+ }
40
+ if (request.method === "GET" && url.pathname === "/__ai-assets/manifest") {
41
+ sendJson(response, 200, await readManifest(options.manifestPath));
42
+ return;
43
+ }
44
+ if (request.method === "POST" && url.pathname === "/__ai-assets/generate") {
45
+ const body = await readJson(request);
46
+ const manifest = await readManifest(options.manifestPath);
47
+ const asset = applyGenerationOverrides(getAsset(manifest, body.assetId), {
48
+ dimensions: body.dimensions,
49
+ frameCount: body.frameCount
50
+ });
51
+ const generated = isAudioAsset(asset)
52
+ ? await generateAudio(options, manifest, asset, body)
53
+ : await generateImage(options, manifest, asset, body);
54
+ sendJson(response, 200, {
55
+ options: generated.map((option, index) => serializeGeneratedOption(option, index))
56
+ });
57
+ return;
58
+ }
59
+ if (request.method === "POST" && url.pathname === "/__ai-assets/generate-stream") {
60
+ const body = await readJson(request);
61
+ const manifest = await readManifest(options.manifestPath);
62
+ const asset = applyGenerationOverrides(getAsset(manifest, body.assetId), {
63
+ dimensions: body.dimensions,
64
+ frameCount: body.frameCount
65
+ });
66
+ response.writeHead(200, {
67
+ ...corsHeaders(),
68
+ "Content-Type": "application/x-ndjson; charset=utf-8",
69
+ "Cache-Control": "no-store"
70
+ });
71
+ let sentOptions = 0;
72
+ const onOption = (option, index) => {
73
+ sentOptions += 1;
74
+ response.write(`${JSON.stringify({
75
+ type: "option",
76
+ option: serializeGeneratedOption(option, index)
77
+ })}\n`);
78
+ };
79
+ try {
80
+ const generated = isAudioAsset(asset)
81
+ ? await generateAudio(options, manifest, asset, body, onOption)
82
+ : await generateImage(options, manifest, asset, body, onOption);
83
+ if (sentOptions === 0) {
84
+ generated.forEach((option, index) => {
85
+ response.write(`${JSON.stringify({
86
+ type: "option",
87
+ option: serializeGeneratedOption(option, index)
88
+ })}\n`);
89
+ });
90
+ }
91
+ response.write(`${JSON.stringify({ type: "done" })}\n`);
92
+ }
93
+ catch (error) {
94
+ response.write(`${JSON.stringify({
95
+ type: "error",
96
+ error: error instanceof Error ? error.message : String(error)
97
+ })}\n`);
98
+ }
99
+ response.end();
100
+ return;
101
+ }
102
+ if (request.method === "POST" && url.pathname === "/__ai-assets/ensure-first-drafts") {
103
+ const body = await readJson(request);
104
+ let manifest = await readManifest(options.manifestPath);
105
+ const requestedAssetIds = body.assetIds ?? Object.keys(manifest.assets);
106
+ const assetIdsToGenerate = planFirstDraftGeneration(manifest, requestedAssetIds);
107
+ const generated = [];
108
+ let generatedIndex = 0;
109
+ for (const assetId of assetIdsToGenerate) {
110
+ const asset = manifest.assets[assetId];
111
+ if (!asset ||
112
+ asset.kind === "collection" ||
113
+ isAudioAsset(asset) ||
114
+ Object.keys(asset.versions).length > 0 ||
115
+ !options.provider) {
116
+ continue;
117
+ }
118
+ const optionsForAsset = await options.provider.generate({
119
+ asset,
120
+ count: 1,
121
+ references: await getReferenceImages(options, manifest, asset.settings?.referenceAssetIds),
122
+ stylePrompt: manifest.styleGuide?.prompt,
123
+ styleReferences: await getStyleReferenceImages(options, manifest.styleGuide)
124
+ });
125
+ const option = optionsForAsset[0];
126
+ if (!option)
127
+ continue;
128
+ const versionName = `first-draft-${Date.now()}-${generatedIndex + 1}`;
129
+ const result = await saveGeneratedOption(options, {
130
+ assetId,
131
+ versionName,
132
+ option,
133
+ activate: true,
134
+ notes: "Auto-generated first draft for a missing asset."
135
+ });
136
+ manifest = result.manifest;
137
+ generated.push({ assetId, versionName });
138
+ generatedIndex += 1;
139
+ }
140
+ sendJson(response, 200, { manifest, generated });
141
+ return;
142
+ }
143
+ if (request.method === "POST" && url.pathname === "/__ai-assets/style") {
144
+ const body = await readJson(request);
145
+ const manifest = await saveStyleGuide(options, {
146
+ prompt: body.prompt,
147
+ images: referencesFromDataUrls(body.images).map((reference) => ({
148
+ name: reference.fileName,
149
+ mimeType: reference.mimeType,
150
+ image: reference.image
151
+ }))
152
+ });
153
+ sendJson(response, 200, { styleGuide: manifest.styleGuide });
154
+ return;
155
+ }
156
+ if (request.method === "POST" && url.pathname === "/__ai-assets/save") {
157
+ const body = await readJson(request);
158
+ let option = optionFromDataUrl(body.dataUrl, {
159
+ prompt: body.prompt,
160
+ model: body.model,
161
+ revisedPrompt: body.revisedPrompt,
162
+ dimensions: body.dimensions,
163
+ frameGrid: body.frameGrid,
164
+ animations: body.animations,
165
+ settings: body.settings
166
+ ? body.settings
167
+ : undefined,
168
+ audioSettings: body.audioSettings,
169
+ audioPlayback: body.audioPlayback,
170
+ voiceSettings: body.voiceSettings,
171
+ durationSeconds: body.durationSeconds
172
+ });
173
+ const asset = getAsset(await readManifest(options.manifestPath), body.assetId);
174
+ if (asset.kind === "voice" && options.audioProvider?.createVoice) {
175
+ const voiceSettings = await options.audioProvider.createVoice({
176
+ asset,
177
+ option,
178
+ versionName: body.versionName
179
+ });
180
+ option = {
181
+ ...option,
182
+ voiceSettings: {
183
+ ...option.voiceSettings,
184
+ ...voiceSettings
185
+ }
186
+ };
187
+ }
188
+ const result = await saveGeneratedOption(options, {
189
+ assetId: body.assetId,
190
+ versionName: body.versionName,
191
+ option,
192
+ activate: body.activate,
193
+ notes: body.notes
194
+ });
195
+ sendJson(response, 200, {
196
+ version: result.version,
197
+ filePath: result.filePath
198
+ });
199
+ return;
200
+ }
201
+ sendJson(response, 404, { error: "Not found" });
202
+ }
203
+ async function generateImage(options, manifest, asset, body, onOption) {
204
+ if (!options.provider) {
205
+ throw new Error("OPENAI_API_KEY is required to generate graphical assets. Audio generation can still be used without it when ELEVENLABS_API_KEY is configured.");
206
+ }
207
+ return options.provider.generate({
208
+ asset,
209
+ prompt: body.prompt,
210
+ count: body.count,
211
+ settings: body.format ? { format: body.format } : undefined,
212
+ references: await getReferenceImages(options, manifest, asset.settings?.referenceAssetIds),
213
+ stylePrompt: body.styleGuide
214
+ ? body.styleGuide.prompt?.trim() || undefined
215
+ : manifest.styleGuide?.prompt,
216
+ styleReferences: body.styleGuide
217
+ ? referencesFromDataUrls(body.styleGuide.images)
218
+ : await getStyleReferenceImages(options, manifest.styleGuide)
219
+ }, onOption);
220
+ }
221
+ async function generateAudio(options, manifest, asset, body, onOption) {
222
+ if (!options.audioProvider) {
223
+ throw new Error("ELEVENLABS_API_KEY is required to generate audio assets. Graphical asset generation can still be used without it when OPENAI_API_KEY is configured.");
224
+ }
225
+ return options.audioProvider.generate({
226
+ asset,
227
+ prompt: body.prompt,
228
+ count: body.count,
229
+ audioSettings: body.audioSettings,
230
+ voiceSettings: body.voiceSettings,
231
+ resolveVoiceId: (voiceAssetId) => {
232
+ const voiceAsset = manifest.assets[voiceAssetId];
233
+ const activeVoice = voiceAsset?.versions[voiceAsset.activeVersion];
234
+ return activeVoice?.voiceSettings?.voiceId ?? voiceAsset?.voiceSettings?.voiceId;
235
+ }
236
+ }, onOption);
237
+ }
238
+ function serializeGeneratedOption(option, index) {
239
+ return {
240
+ index,
241
+ mimeType: option.mimeType,
242
+ prompt: option.prompt,
243
+ model: option.model,
244
+ revisedPrompt: option.revisedPrompt,
245
+ dimensions: option.dimensions,
246
+ frameGrid: option.frameGrid,
247
+ animations: option.animations,
248
+ settings: option.settings,
249
+ audioSettings: option.audioSettings,
250
+ audioPlayback: option.audioPlayback,
251
+ voiceSettings: option.voiceSettings,
252
+ durationSeconds: option.durationSeconds,
253
+ dataUrl: `data:${option.mimeType};base64,${Buffer.from(option.image).toString("base64")}`
254
+ };
255
+ }
256
+ function isAudioAsset(asset) {
257
+ return asset.kind === "sound" ||
258
+ asset.kind === "music" ||
259
+ asset.kind === "voice" ||
260
+ asset.kind === "voice-line";
261
+ }
262
+ export function planFirstDraftGeneration(manifest, requestedAssetIds) {
263
+ const planned = [];
264
+ const visited = new Set();
265
+ const visiting = new Set();
266
+ const visit = (assetId) => {
267
+ if (visited.has(assetId))
268
+ return;
269
+ const asset = manifest.assets[assetId];
270
+ if (!asset || asset.kind === "collection" || Object.keys(asset.versions).length > 0) {
271
+ return;
272
+ }
273
+ if (visiting.has(assetId)) {
274
+ throw new Error(`AI asset first-draft references contain a cycle at "${assetId}".`);
275
+ }
276
+ visiting.add(assetId);
277
+ for (const referenceAssetId of asset.settings?.referenceAssetIds ?? []) {
278
+ visit(referenceAssetId);
279
+ }
280
+ visiting.delete(assetId);
281
+ visited.add(assetId);
282
+ planned.push(assetId);
283
+ };
284
+ for (const assetId of requestedAssetIds) {
285
+ visit(assetId);
286
+ }
287
+ return planned;
288
+ }
289
+ async function getReferenceImages(options, manifest, referenceAssetIds) {
290
+ if (!referenceAssetIds?.length)
291
+ return undefined;
292
+ return Promise.all(referenceAssetIds.map(async (assetId) => {
293
+ const asset = manifest.assets[assetId];
294
+ if (!asset || asset.kind === "collection" || Object.keys(asset.versions).length === 0) {
295
+ return undefined;
296
+ }
297
+ const resolved = resolveAiAsset(manifest, assetId);
298
+ const fileName = path.basename(resolved.version.file);
299
+ const filePath = path.join(options.assetsDir, fileName);
300
+ return {
301
+ image: await readFile(filePath),
302
+ mimeType: mimeTypeFromFile(fileName),
303
+ fileName
304
+ };
305
+ })).then((references) => references.filter((reference) => reference !== undefined));
306
+ }
307
+ async function getStyleReferenceImages(options, styleGuide) {
308
+ return Promise.all((styleGuide?.images ?? []).map(async (image) => {
309
+ const fileName = path.basename(image.file);
310
+ return {
311
+ image: await readFile(path.join(options.assetsDir, fileName)),
312
+ mimeType: image.mimeType ?? mimeTypeFromFile(fileName),
313
+ fileName: image.name
314
+ };
315
+ }));
316
+ }
317
+ function referencesFromDataUrls(images = []) {
318
+ return images.map((image) => {
319
+ const match = /^data:(.+);base64,(.+)$/.exec(image.dataUrl);
320
+ if (!match) {
321
+ throw new Error(`Style image "${image.name}" is not a base64 data URL.`);
322
+ }
323
+ return {
324
+ image: Buffer.from(match[2], "base64"),
325
+ mimeType: match[1],
326
+ fileName: image.name
327
+ };
328
+ });
329
+ }
330
+ function mimeTypeFromFile(fileName) {
331
+ if (/\.png$/i.test(fileName))
332
+ return "image/png";
333
+ if (/\.webp$/i.test(fileName))
334
+ return "image/webp";
335
+ if (/\.jpe?g$/i.test(fileName))
336
+ return "image/jpeg";
337
+ if (/\.svg$/i.test(fileName))
338
+ return "image/svg+xml";
339
+ return "application/octet-stream";
340
+ }
341
+ function getAsset(manifest, assetId) {
342
+ const asset = manifest.assets[assetId];
343
+ if (!asset) {
344
+ throw new Error(`Unknown AI asset "${assetId}".`);
345
+ }
346
+ return asset;
347
+ }
348
+ function applyGenerationOverrides(asset, overrides) {
349
+ if (!asset.frameGrid) {
350
+ const dimensions = sanitizeDimensions(overrides.dimensions) ?? asset.dimensions;
351
+ return {
352
+ ...asset,
353
+ dimensions
354
+ };
355
+ }
356
+ const frameDimensions = sanitizeDimensions(overrides.dimensions) ?? {
357
+ width: asset.frameGrid.frameWidth,
358
+ height: asset.frameGrid.frameHeight
359
+ };
360
+ const frameCount = sanitizePositiveInteger(overrides.frameCount) ??
361
+ asset.frameGrid.frameCount ??
362
+ asset.frameGrid.columns * asset.frameGrid.rows;
363
+ const frameGrid = createFrameGrid(asset.frameGrid, frameDimensions, frameCount);
364
+ const dimensions = {
365
+ width: frameGrid.frameWidth * frameGrid.columns,
366
+ height: frameGrid.frameHeight * frameGrid.rows
367
+ };
368
+ return {
369
+ ...asset,
370
+ dimensions,
371
+ frameGrid,
372
+ animations: asset.animations?.map((animation) => ({
373
+ ...animation,
374
+ frames: Array.from({ length: frameCount }, (_, index) => index),
375
+ frameTimings: animation.frameTimings
376
+ ? Array.from({ length: frameCount }, (_, index) => animation.frameTimings?.[index] ?? {})
377
+ : undefined
378
+ }))
379
+ };
380
+ }
381
+ function createFrameGrid(baseFrameGrid, frameDimensions, frameCount) {
382
+ const columns = Math.min(frameCount, Math.ceil(Math.sqrt(frameCount)));
383
+ const rows = Math.ceil(frameCount / columns);
384
+ return {
385
+ ...baseFrameGrid,
386
+ frameCount,
387
+ columns,
388
+ rows,
389
+ frameWidth: frameDimensions.width,
390
+ frameHeight: frameDimensions.height
391
+ };
392
+ }
393
+ function sanitizeDimensions(dimensions) {
394
+ const width = sanitizePositiveInteger(dimensions?.width);
395
+ const height = sanitizePositiveInteger(dimensions?.height);
396
+ if (!width || !height)
397
+ return undefined;
398
+ return { width, height };
399
+ }
400
+ function sanitizePositiveInteger(value) {
401
+ if (value === undefined)
402
+ return undefined;
403
+ if (!Number.isFinite(value))
404
+ return undefined;
405
+ return Math.max(1, Math.floor(value));
406
+ }
407
+ async function readJson(request) {
408
+ const chunks = [];
409
+ for await (const chunk of request) {
410
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
411
+ }
412
+ return JSON.parse(Buffer.concat(chunks).toString("utf8"));
413
+ }
414
+ function optionFromDataUrl(dataUrl, metadata) {
415
+ const match = /^data:(.+);base64,(.+)$/.exec(dataUrl);
416
+ if (!match) {
417
+ throw new Error("Expected a base64 data URL.");
418
+ }
419
+ return {
420
+ image: Buffer.from(match[2], "base64"),
421
+ mimeType: match[1],
422
+ prompt: metadata.prompt,
423
+ model: metadata.model,
424
+ revisedPrompt: metadata.revisedPrompt,
425
+ dimensions: metadata.dimensions,
426
+ frameGrid: metadata.frameGrid,
427
+ animations: metadata.animations,
428
+ settings: metadata.settings,
429
+ audioSettings: metadata.audioSettings,
430
+ audioPlayback: metadata.audioPlayback,
431
+ voiceSettings: metadata.voiceSettings,
432
+ durationSeconds: metadata.durationSeconds
433
+ };
434
+ }
435
+ function sendJson(response, status, body) {
436
+ response.writeHead(status, {
437
+ ...corsHeaders(),
438
+ "Content-Type": "application/json"
439
+ });
440
+ response.end(JSON.stringify(body));
441
+ }
442
+ function corsHeaders() {
443
+ return {
444
+ "Content-Type": "application/json",
445
+ "Access-Control-Allow-Origin": "*",
446
+ "Access-Control-Allow-Headers": "Content-Type",
447
+ "Access-Control-Allow-Methods": "GET,POST,OPTIONS"
448
+ };
449
+ }
450
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@ai-game-assets/dev",
3
+ "version": "0.1.0",
4
+ "description": "Development server and AI providers for prompt-aware AI game assets.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ }
12
+ },
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "scripts": {
20
+ "build": "tsc -p tsconfig.json",
21
+ "typecheck": "tsc -p tsconfig.json --noEmit"
22
+ },
23
+ "dependencies": {
24
+ "@ai-game-assets/core": "0.1.0",
25
+ "@types/pngjs": "^6.0.5",
26
+ "pngjs": "^7.0.0"
27
+ },
28
+ "peerDependencies": {
29
+ "openai": ">=5"
30
+ },
31
+ "peerDependenciesMeta": {
32
+ "openai": {
33
+ "optional": true
34
+ }
35
+ }
36
+ }