ugly-app 0.1.240 → 0.1.242

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.
Files changed (53) hide show
  1. package/dist/cli/build.d.ts.map +1 -1
  2. package/dist/cli/build.js +19 -0
  3. package/dist/cli/build.js.map +1 -1
  4. package/dist/cli/version.d.ts +1 -1
  5. package/dist/cli/version.js +1 -1
  6. package/dist/three/client/index.d.ts +3 -0
  7. package/dist/three/client/index.d.ts.map +1 -0
  8. package/dist/three/client/index.js +5 -0
  9. package/dist/three/client/index.js.map +1 -0
  10. package/dist/three/server/VideoEncoder.d.ts +132 -0
  11. package/dist/three/server/VideoEncoder.d.ts.map +1 -0
  12. package/dist/three/server/VideoEncoder.js +512 -0
  13. package/dist/three/server/VideoEncoder.js.map +1 -0
  14. package/dist/three/server/index.d.ts +5 -0
  15. package/dist/three/server/index.d.ts.map +1 -0
  16. package/dist/three/server/index.js +6 -0
  17. package/dist/three/server/index.js.map +1 -0
  18. package/dist/three/shared/CameraController.d.ts +89 -0
  19. package/dist/three/shared/CameraController.d.ts.map +1 -0
  20. package/dist/three/shared/CameraController.js +340 -0
  21. package/dist/three/shared/CameraController.js.map +1 -0
  22. package/dist/three/shared/HeadlessEnvironment.d.ts +87 -0
  23. package/dist/three/shared/HeadlessEnvironment.d.ts.map +1 -0
  24. package/dist/three/shared/HeadlessEnvironment.js +646 -0
  25. package/dist/three/shared/HeadlessEnvironment.js.map +1 -0
  26. package/dist/three/shared/PostProcessing.d.ts +65 -0
  27. package/dist/three/shared/PostProcessing.d.ts.map +1 -0
  28. package/dist/three/shared/PostProcessing.js +490 -0
  29. package/dist/three/shared/PostProcessing.js.map +1 -0
  30. package/dist/worker/TaskContext.d.ts +59 -0
  31. package/dist/worker/TaskContext.d.ts.map +1 -0
  32. package/dist/worker/TaskContext.js +2 -0
  33. package/dist/worker/TaskContext.js.map +1 -0
  34. package/dist/worker/TaskHost.d.ts +74 -0
  35. package/dist/worker/TaskHost.d.ts.map +1 -0
  36. package/dist/worker/TaskHost.js +187 -0
  37. package/dist/worker/TaskHost.js.map +1 -0
  38. package/dist/worker/index.d.ts +3 -0
  39. package/dist/worker/index.d.ts.map +1 -0
  40. package/dist/worker/index.js +2 -0
  41. package/dist/worker/index.js.map +1 -0
  42. package/package.json +4 -1
  43. package/src/cli/build.ts +23 -0
  44. package/src/cli/version.ts +1 -1
  45. package/src/three/client/index.ts +10 -0
  46. package/src/three/server/VideoEncoder.ts +719 -0
  47. package/src/three/server/index.ts +23 -0
  48. package/src/three/shared/CameraController.ts +477 -0
  49. package/src/three/shared/HeadlessEnvironment.ts +808 -0
  50. package/src/three/shared/PostProcessing.ts +561 -0
  51. package/src/worker/TaskContext.ts +74 -0
  52. package/src/worker/TaskHost.ts +261 -0
  53. package/src/worker/index.ts +13 -0
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAIA,wBAAgB,QAAQ,IAAI,IAAI,CA+C/B"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAIA,wBAAgB,QAAQ,IAAI,IAAI,CAsE/B"}
package/dist/cli/build.js CHANGED
@@ -33,6 +33,25 @@ export const buildId = '${buildId}';
33
33
  fs.mkdirSync(serverOutDir, { recursive: true });
34
34
  execSync(`npx esbuild server/index.ts --bundle --platform=node --format=esm --outfile=dist/server/index.mjs --external:ugly-app --external:ugly-app/*`, { stdio: 'inherit', cwd: process.cwd() });
35
35
  }
36
+ // Bundle task.ts if it exists (for cron/worker/GPU tasks)
37
+ const taskEntry = path.join(process.cwd(), 'server', 'task.ts');
38
+ if (fs.existsSync(taskEntry)) {
39
+ console.log('[Build] Bundling server/task.ts...');
40
+ const tasksOutDir = path.join(distDir, 'tasks');
41
+ fs.mkdirSync(tasksOutDir, { recursive: true });
42
+ // Externalize allowlisted packages — they'll be installed on the task host
43
+ const externals = [
44
+ 'ugly-app', 'ugly-app/*',
45
+ 'three', '@types/three', 'jsdom', 'gl',
46
+ '@ffmpeg-installer/ffmpeg', 'fluent-ffmpeg', 'sharp',
47
+ '@anthropic-ai/sdk', 'openai',
48
+ 'zod', 'date-fns', 'lodash',
49
+ 'mediasoup', 'mediasoup-client',
50
+ ];
51
+ const externalFlags = externals.map(e => `--external:${e}`).join(' ');
52
+ execSync(`npx esbuild server/task.ts --bundle --platform=node --format=esm --outfile=dist/tasks/task.js ${externalFlags}`, { stdio: 'inherit', cwd: process.cwd() });
53
+ console.log('[Build] Task bundle: dist/tasks/task.js');
54
+ }
36
55
  // Run tsc for typecheck
37
56
  console.log('[Build] Running tsc...');
38
57
  execSync('npx tsc --noEmit', { stdio: 'inherit', cwd: process.cwd() });
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,QAAQ;IACtB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAEnC,wBAAwB;IACxB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACrE,MAAM,gBAAgB,GAAG;0BACD,OAAO;CAChC,CAAC;IAEA,4BAA4B;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAE3C,8BAA8B;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IACjD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACvC,CAAC;IAED,iBAAiB;IACjB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAErE,oFAAoF;IACpF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACnE,MAAM,oBAAoB,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAC9F,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClD,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,QAAQ,CACN,6IAA6I,EAC7I,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CACzC,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAEvE,OAAO,CAAC,GAAG,CAAC,2BAA2B,OAAO,GAAG,CAAC,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/cli/build.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.240";
1
+ export declare const CLI_VERSION = "0.1.242";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.240";
2
+ export const CLI_VERSION = "0.1.242";
3
3
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,3 @@
1
+ export { PostProcessingManager, } from '../shared/PostProcessing.js';
2
+ export { DynamicCameraController, } from '../shared/CameraController.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/three/client/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,uBAAuB,GACxB,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Client-side Three.js utilities
2
+ // Currently re-exports shared modules that work in browser context
3
+ export { PostProcessingManager, } from '../shared/PostProcessing.js';
4
+ export { DynamicCameraController, } from '../shared/CameraController.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/three/client/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,mEAAmE;AAEnE,OAAO,EACL,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,uBAAuB,GACxB,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * VideoEncoder - FFmpeg-based video encoding for server-side rendering
3
+ *
4
+ * Handles:
5
+ * - Receiving raw RGBA frames from AvatarScene.captureFrameResult()
6
+ * - Encoding to H.264/MP4 via FFmpeg
7
+ * - Muxing with audio (MP3/PCM)
8
+ * - Output to file or buffer
9
+ */
10
+ declare let captureServerError: (msg: string, err: unknown, ctx?: Record<string, unknown>) => void;
11
+ export declare function setVideoEncoderErrorHandler(handler: typeof captureServerError): void;
12
+ /**
13
+ * Check if the FFmpeg `ass` filter (libass) is available.
14
+ * Result is cached for the lifetime of the process.
15
+ */
16
+ export declare function checkLibassAvailable(): Promise<boolean>;
17
+ /**
18
+ * Check if NVIDIA NVENC hardware encoder is available.
19
+ * Result is cached for the lifetime of the process.
20
+ */
21
+ export declare function checkNvencAvailable(): Promise<boolean>;
22
+ export interface VideoEncoderOptions {
23
+ /** Output width in pixels */
24
+ width: number;
25
+ /** Output height in pixels */
26
+ height: number;
27
+ /** Frames per second (default: 30) */
28
+ fps?: number;
29
+ /** Video bitrate (default: '4M') */
30
+ videoBitrate?: string;
31
+ /** Audio bitrate (default: '192k') */
32
+ audioBitrate?: string;
33
+ /** Output format (default: 'mp4') */
34
+ outputFormat?: 'mp4' | 'webm';
35
+ /** Output file path (if not provided, uses temp file) */
36
+ outputPath?: string;
37
+ /** Audio input file path (optional - will be muxed with video) */
38
+ audioPath?: string;
39
+ /** H.264 encoding preset (default: 'fast') */
40
+ preset?: 'ultrafast' | 'superfast' | 'veryfast' | 'faster' | 'fast' | 'medium';
41
+ /** CRF quality (0-51, default: 23, lower = better quality) */
42
+ crf?: number;
43
+ /** Path to ASS subtitle file to burn into the video */
44
+ subtitlePath?: string;
45
+ }
46
+ export interface VideoEncoderStats {
47
+ framesWritten: number;
48
+ bytesWritten: number;
49
+ durationMs: number;
50
+ }
51
+ /**
52
+ * FFmpeg-based video encoder for server-side avatar rendering.
53
+ *
54
+ * Usage:
55
+ * ```typescript
56
+ * const encoder = new VideoEncoder({
57
+ * width: 1280,
58
+ * height: 720,
59
+ * fps: 30,
60
+ * audioPath: '/path/to/audio.mp3',
61
+ * });
62
+ *
63
+ * await encoder.start();
64
+ *
65
+ * // For each frame:
66
+ * const result = scene.captureFrameResult();
67
+ * if (result.type === 'raw') {
68
+ * encoder.writeFrame(result.raw!);
69
+ * }
70
+ *
71
+ * const output = await encoder.finalize();
72
+ * // output.buffer contains the MP4 data
73
+ * // output.path contains the temp file path
74
+ * ```
75
+ */
76
+ export declare class VideoEncoder {
77
+ private options;
78
+ private ffmpeg;
79
+ private outputPath;
80
+ private framesWritten;
81
+ private startTime;
82
+ private isFinalized;
83
+ private stderrOutput;
84
+ private useNvenc;
85
+ private ffmpegExitPromise;
86
+ constructor(options: VideoEncoderOptions);
87
+ /**
88
+ * Start the FFmpeg encoding process.
89
+ */
90
+ start(): Promise<void>;
91
+ /**
92
+ * Build FFmpeg command arguments.
93
+ */
94
+ private buildFFmpegArgs;
95
+ /**
96
+ * Write a frame to the encoder.
97
+ *
98
+ * @param rgba - Raw RGBA pixel data (Uint8Array from captureFrameResult)
99
+ * @returns Promise that resolves when frame is written (handles backpressure)
100
+ */
101
+ writeFrame(rgba: Uint8Array): Promise<void>;
102
+ /**
103
+ * Finalize encoding and return the output.
104
+ */
105
+ finalize(): Promise<{
106
+ buffer: Buffer;
107
+ path: string;
108
+ stats: VideoEncoderStats;
109
+ }>;
110
+ /**
111
+ * Abort encoding and clean up.
112
+ */
113
+ abort(): void;
114
+ /**
115
+ * Get encoding statistics.
116
+ */
117
+ getStats(): VideoEncoderStats;
118
+ /**
119
+ * Clean up the output file (call after uploading to storage).
120
+ */
121
+ cleanup(): void;
122
+ }
123
+ /**
124
+ * Check if FFmpeg is available on the system.
125
+ */
126
+ export declare function checkFFmpegAvailable(): Promise<boolean>;
127
+ /**
128
+ * Get FFmpeg version string.
129
+ */
130
+ export declare function getFFmpegVersion(): Promise<string | null>;
131
+ export {};
132
+ //# sourceMappingURL=VideoEncoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoEncoder.d.ts","sourceRoot":"","sources":["../../../src/three/server/VideoEncoder.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAMH,QAAA,IAAI,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IACrC,CAAC;AAElD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,kBAAkB,GAAG,IAAI,CAEpF;AAgBD;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CA4C7D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAmD5D;AAMD,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC9B,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,MAAM,CAAC,EACH,WAAW,GACX,WAAW,GACX,UAAU,GACV,QAAQ,GACR,MAAM,GACN,QAAQ,CAAC;IACb,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAMb;IAEF,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,iBAAiB,CAGR;gBAEL,OAAO,EAAE,mBAAmB;IA2BxC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiF5B;;OAEG;IACH,OAAO,CAAC,eAAe;IA2IvB;;;;;OAKG;IACG,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwEjD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,iBAAiB,CAAC;KAC1B,CAAC;IA8DF;;OAEG;IACH,KAAK,IAAI,IAAI;IAcb;;OAEG;IACH,QAAQ,IAAI,iBAAiB;IAQ7B;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB;AAMD;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC,CAU7D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwB/D"}