@purpleschool/gptbot 0.14.11 → 0.14.13-avatar-studio

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 (145) hide show
  1. package/api/controllers/http/avatar-studio.ts +40 -0
  2. package/api/controllers/http/index.ts +1 -0
  3. package/api/routes.ts +59 -0
  4. package/build/api/controllers/http/avatar-studio.js +36 -0
  5. package/build/api/controllers/http/index.js +1 -0
  6. package/build/api/routes.js +32 -0
  7. package/build/commands/avatar-studio/clip/create-avatar-studio-clip.command.js +17 -0
  8. package/build/commands/avatar-studio/clip/delete-avatar-studio-clip.command.js +12 -0
  9. package/build/commands/avatar-studio/clip/find-avatar-studio-clips.query.js +13 -0
  10. package/build/commands/avatar-studio/clip/get-avatar-studio-clip.query.js +13 -0
  11. package/build/commands/avatar-studio/clip/index.js +21 -0
  12. package/build/commands/avatar-studio/clip/update-avatar-studio-clip.command.js +19 -0
  13. package/build/commands/avatar-studio/export-job/find-avatar-studio-export-jobs.query.js +11 -0
  14. package/build/commands/avatar-studio/export-job/get-avatar-studio-export-job.query.js +13 -0
  15. package/build/commands/avatar-studio/export-job/index.js +19 -0
  16. package/build/commands/avatar-studio/export-job/start-avatar-studio-export.command.js +21 -0
  17. package/build/commands/avatar-studio/generation-job/find-avatar-studio-generation-jobs.query.js +14 -0
  18. package/build/commands/avatar-studio/generation-job/generate-avatar-studio-frame.command.js +21 -0
  19. package/build/commands/avatar-studio/generation-job/generate-avatar-studio-library-image.command.js +20 -0
  20. package/build/commands/avatar-studio/generation-job/generate-avatar-studio-scene-video.command.js +14 -0
  21. package/build/commands/avatar-studio/generation-job/generate-avatar-studio-scene-voice.command.js +19 -0
  22. package/build/commands/avatar-studio/generation-job/generate-avatar-studio-talking-avatar.command.js +17 -0
  23. package/build/commands/avatar-studio/generation-job/generate-avatar-studio-voice-timings.command.js +18 -0
  24. package/build/commands/avatar-studio/generation-job/get-avatar-studio-generation-job.query.js +13 -0
  25. package/build/commands/avatar-studio/generation-job/index.js +24 -0
  26. package/build/commands/avatar-studio/index.js +24 -0
  27. package/build/commands/avatar-studio/media/create-avatar-studio-media-from-file.command.js +27 -0
  28. package/build/commands/avatar-studio/media/delete-avatar-studio-media.command.js +12 -0
  29. package/build/commands/avatar-studio/media/find-avatar-studio-media.query.js +17 -0
  30. package/build/commands/avatar-studio/media/index.js +20 -0
  31. package/build/commands/avatar-studio/media/update-avatar-studio-media.command.js +21 -0
  32. package/build/commands/avatar-studio/scene/create-avatar-studio-scene.command.js +14 -0
  33. package/build/commands/avatar-studio/scene/delete-avatar-studio-scene.command.js +12 -0
  34. package/build/commands/avatar-studio/scene/index.js +20 -0
  35. package/build/commands/avatar-studio/scene/reorder-avatar-studio-scenes.command.js +19 -0
  36. package/build/commands/avatar-studio/scene/update-avatar-studio-scene.command.js +14 -0
  37. package/build/commands/avatar-studio/scriptwriter/apply-avatar-studio-scriptwriter-message.command.js +19 -0
  38. package/build/commands/avatar-studio/scriptwriter/create-avatar-studio-scriptwriter-message.command.js +53 -0
  39. package/build/commands/avatar-studio/scriptwriter/index.js +18 -0
  40. package/build/commands/avatar-studio/shared/avatar-studio-common.schema.js +48 -0
  41. package/build/commands/avatar-studio/shared/index.js +17 -0
  42. package/build/commands/avatar-studio/voice/design-avatar-studio-voice.command.js +24 -0
  43. package/build/commands/avatar-studio/voice/find-avatar-studio-clip-voices.query.js +11 -0
  44. package/build/commands/avatar-studio/voice/find-avatar-studio-voices.query.js +13 -0
  45. package/build/commands/avatar-studio/voice/index.js +20 -0
  46. package/build/commands/avatar-studio/voice/update-avatar-studio-clip-voice.command.js +16 -0
  47. package/build/commands/index.js +1 -0
  48. package/build/constants/avatar-studio/enums/avatar-studio-export-status.enum.js +10 -0
  49. package/build/constants/avatar-studio/enums/avatar-studio-image-style.enum.js +9 -0
  50. package/build/constants/avatar-studio/enums/avatar-studio-job-phase.enum.js +12 -0
  51. package/build/constants/avatar-studio/enums/avatar-studio-job-status.enum.js +10 -0
  52. package/build/constants/avatar-studio/enums/avatar-studio-job-type.enum.js +16 -0
  53. package/build/constants/avatar-studio/enums/avatar-studio-media-kind.enum.js +9 -0
  54. package/build/constants/avatar-studio/enums/avatar-studio-media-role.enum.js +14 -0
  55. package/build/constants/avatar-studio/enums/avatar-studio-media-source.enum.js +13 -0
  56. package/build/constants/avatar-studio/enums/avatar-studio-scene-kind.enum.js +7 -0
  57. package/build/constants/avatar-studio/enums/avatar-studio-scriptwriter-role.enum.js +9 -0
  58. package/build/constants/avatar-studio/enums/avatar-studio-slot.enum.js +15 -0
  59. package/build/constants/avatar-studio/enums/avatar-studio-subtitle-font.enum.js +10 -0
  60. package/build/constants/avatar-studio/enums/avatar-studio-subtitle-mode.enum.js +9 -0
  61. package/build/constants/avatar-studio/enums/avatar-studio-video-mode.enum.js +8 -0
  62. package/build/constants/avatar-studio/enums/avatar-studio-video-quality.enum.js +8 -0
  63. package/build/constants/avatar-studio/enums/avatar-studio-voice-source.enum.js +9 -0
  64. package/build/constants/avatar-studio/enums/index.js +32 -0
  65. package/build/constants/avatar-studio/index.js +17 -0
  66. package/build/constants/canvas-node/enums/canvas-node-error-kind.enum.js +8 -0
  67. package/build/constants/canvas-node/enums/index.js +1 -0
  68. package/build/constants/index.js +1 -0
  69. package/build/models/avatar-studio/avatar-studio.schema.js +178 -0
  70. package/build/models/avatar-studio/index.js +17 -0
  71. package/build/models/canvas-node.schema.js +8 -2
  72. package/build/models/file.schema.js +1 -1
  73. package/build/models/index.js +1 -0
  74. package/build/models/tools/video/video-job.schema.js +2 -0
  75. package/build/models/tools/video/video-model.schema.js +9 -0
  76. package/commands/avatar-studio/clip/create-avatar-studio-clip.command.ts +17 -0
  77. package/commands/avatar-studio/clip/delete-avatar-studio-clip.command.ts +12 -0
  78. package/commands/avatar-studio/clip/find-avatar-studio-clips.query.ts +16 -0
  79. package/commands/avatar-studio/clip/get-avatar-studio-clip.query.ts +13 -0
  80. package/commands/avatar-studio/clip/index.ts +5 -0
  81. package/commands/avatar-studio/clip/update-avatar-studio-clip.command.ts +21 -0
  82. package/commands/avatar-studio/export-job/find-avatar-studio-export-jobs.query.ts +18 -0
  83. package/commands/avatar-studio/export-job/get-avatar-studio-export-job.query.ts +13 -0
  84. package/commands/avatar-studio/export-job/index.ts +3 -0
  85. package/commands/avatar-studio/export-job/start-avatar-studio-export.command.ts +23 -0
  86. package/commands/avatar-studio/generation-job/find-avatar-studio-generation-jobs.query.ts +20 -0
  87. package/commands/avatar-studio/generation-job/generate-avatar-studio-frame.command.ts +26 -0
  88. package/commands/avatar-studio/generation-job/generate-avatar-studio-library-image.command.ts +25 -0
  89. package/commands/avatar-studio/generation-job/generate-avatar-studio-scene-video.command.ts +19 -0
  90. package/commands/avatar-studio/generation-job/generate-avatar-studio-scene-voice.command.ts +21 -0
  91. package/commands/avatar-studio/generation-job/generate-avatar-studio-talking-avatar.command.ts +22 -0
  92. package/commands/avatar-studio/generation-job/generate-avatar-studio-voice-timings.command.ts +20 -0
  93. package/commands/avatar-studio/generation-job/get-avatar-studio-generation-job.query.ts +13 -0
  94. package/commands/avatar-studio/generation-job/index.ts +8 -0
  95. package/commands/avatar-studio/index.ts +8 -0
  96. package/commands/avatar-studio/media/create-avatar-studio-media-from-file.command.ts +33 -0
  97. package/commands/avatar-studio/media/delete-avatar-studio-media.command.ts +12 -0
  98. package/commands/avatar-studio/media/find-avatar-studio-media.query.ts +23 -0
  99. package/commands/avatar-studio/media/index.ts +4 -0
  100. package/commands/avatar-studio/media/update-avatar-studio-media.command.ts +23 -0
  101. package/commands/avatar-studio/scene/create-avatar-studio-scene.command.ts +16 -0
  102. package/commands/avatar-studio/scene/delete-avatar-studio-scene.command.ts +12 -0
  103. package/commands/avatar-studio/scene/index.ts +4 -0
  104. package/commands/avatar-studio/scene/reorder-avatar-studio-scenes.command.ts +23 -0
  105. package/commands/avatar-studio/scene/update-avatar-studio-scene.command.ts +19 -0
  106. package/commands/avatar-studio/scriptwriter/apply-avatar-studio-scriptwriter-message.command.ts +21 -0
  107. package/commands/avatar-studio/scriptwriter/create-avatar-studio-scriptwriter-message.command.ts +64 -0
  108. package/commands/avatar-studio/scriptwriter/index.ts +2 -0
  109. package/commands/avatar-studio/shared/avatar-studio-common.schema.ts +59 -0
  110. package/commands/avatar-studio/shared/index.ts +1 -0
  111. package/commands/avatar-studio/voice/design-avatar-studio-voice.command.ts +30 -0
  112. package/commands/avatar-studio/voice/find-avatar-studio-clip-voices.query.ts +18 -0
  113. package/commands/avatar-studio/voice/find-avatar-studio-voices.query.ts +16 -0
  114. package/commands/avatar-studio/voice/index.ts +4 -0
  115. package/commands/avatar-studio/voice/update-avatar-studio-clip-voice.command.ts +18 -0
  116. package/commands/index.ts +1 -0
  117. package/constants/avatar-studio/enums/avatar-studio-export-status.enum.ts +6 -0
  118. package/constants/avatar-studio/enums/avatar-studio-image-style.enum.ts +5 -0
  119. package/constants/avatar-studio/enums/avatar-studio-job-phase.enum.ts +8 -0
  120. package/constants/avatar-studio/enums/avatar-studio-job-status.enum.ts +6 -0
  121. package/constants/avatar-studio/enums/avatar-studio-job-type.enum.ts +12 -0
  122. package/constants/avatar-studio/enums/avatar-studio-media-kind.enum.ts +5 -0
  123. package/constants/avatar-studio/enums/avatar-studio-media-role.enum.ts +10 -0
  124. package/constants/avatar-studio/enums/avatar-studio-media-source.enum.ts +9 -0
  125. package/constants/avatar-studio/enums/avatar-studio-scene-kind.enum.ts +3 -0
  126. package/constants/avatar-studio/enums/avatar-studio-scriptwriter-role.enum.ts +5 -0
  127. package/constants/avatar-studio/enums/avatar-studio-slot.enum.ts +11 -0
  128. package/constants/avatar-studio/enums/avatar-studio-subtitle-font.enum.ts +6 -0
  129. package/constants/avatar-studio/enums/avatar-studio-subtitle-mode.enum.ts +5 -0
  130. package/constants/avatar-studio/enums/avatar-studio-video-mode.enum.ts +4 -0
  131. package/constants/avatar-studio/enums/avatar-studio-video-quality.enum.ts +4 -0
  132. package/constants/avatar-studio/enums/avatar-studio-voice-source.enum.ts +5 -0
  133. package/constants/avatar-studio/enums/index.ts +16 -0
  134. package/constants/avatar-studio/index.ts +1 -0
  135. package/constants/canvas-node/enums/canvas-node-error-kind.enum.ts +4 -0
  136. package/constants/canvas-node/enums/index.ts +1 -0
  137. package/constants/index.ts +1 -0
  138. package/models/avatar-studio/avatar-studio.schema.ts +221 -0
  139. package/models/avatar-studio/index.ts +1 -0
  140. package/models/canvas-node.schema.ts +9 -2
  141. package/models/file.schema.ts +1 -1
  142. package/models/index.ts +1 -0
  143. package/models/tools/video/video-job.schema.ts +2 -0
  144. package/models/tools/video/video-model.schema.ts +9 -0
  145. package/package.json +1 -1
@@ -0,0 +1,5 @@
1
+ export enum AVATAR_STUDIO_VOICE_SOURCE {
2
+ UPLOAD = 'upload',
3
+ TTS = 'tts',
4
+ VOICE_DESIGN = 'voice_design',
5
+ }
@@ -0,0 +1,16 @@
1
+ export * from './avatar-studio-export-status.enum';
2
+ export * from './avatar-studio-image-style.enum';
3
+ export * from './avatar-studio-job-phase.enum';
4
+ export * from './avatar-studio-job-status.enum';
5
+ export * from './avatar-studio-job-type.enum';
6
+ export * from './avatar-studio-media-kind.enum';
7
+ export * from './avatar-studio-media-role.enum';
8
+ export * from './avatar-studio-media-source.enum';
9
+ export * from './avatar-studio-scene-kind.enum';
10
+ export * from './avatar-studio-scriptwriter-role.enum';
11
+ export * from './avatar-studio-slot.enum';
12
+ export * from './avatar-studio-subtitle-font.enum';
13
+ export * from './avatar-studio-subtitle-mode.enum';
14
+ export * from './avatar-studio-video-mode.enum';
15
+ export * from './avatar-studio-video-quality.enum';
16
+ export * from './avatar-studio-voice-source.enum';
@@ -0,0 +1 @@
1
+ export * from './enums';
@@ -0,0 +1,4 @@
1
+ export enum CANVAS_NODE_ERROR_KIND {
2
+ RUNTIME_VALIDATION = 'RUNTIME_VALIDATION',
3
+ EXECUTION_ERROR = 'EXECUTION_ERROR',
4
+ }
@@ -1,2 +1,3 @@
1
+ export * from './canvas-node-error-kind.enum';
1
2
  export * from './canvas-node-type.enum';
2
3
  export * from './node-run-status.enum';
@@ -1,6 +1,7 @@
1
1
  export * from './ai-model';
2
2
  export * from './b2b';
3
3
  export * from './api-key';
4
+ export * from './avatar-studio';
4
5
  export * from './agents';
5
6
  export * from './blog';
6
7
  export * from './billing';
@@ -0,0 +1,221 @@
1
+ import { z } from 'zod';
2
+ import {
3
+ AVATAR_STUDIO_EXPORT_STATUS,
4
+ AVATAR_STUDIO_IMAGE_STYLE,
5
+ AVATAR_STUDIO_JOB_PHASE,
6
+ AVATAR_STUDIO_JOB_STATUS,
7
+ AVATAR_STUDIO_JOB_TYPE,
8
+ AVATAR_STUDIO_MEDIA_KIND,
9
+ AVATAR_STUDIO_MEDIA_ROLE,
10
+ AVATAR_STUDIO_MEDIA_SOURCE,
11
+ AVATAR_STUDIO_SCRIPTWRITER_ROLE,
12
+ AVATAR_STUDIO_SLOT,
13
+ AVATAR_STUDIO_SUBTITLE_FONT,
14
+ AVATAR_STUDIO_SUBTITLE_MODE,
15
+ AVATAR_STUDIO_VIDEO_MODE,
16
+ AVATAR_STUDIO_VIDEO_QUALITY,
17
+ AVATAR_STUDIO_VOICE_SOURCE,
18
+ } from '../../constants';
19
+ import { FileSchema } from '../file.schema';
20
+ import { JsonObjectSchema, JsonValueSchema } from '../json-value.schema';
21
+
22
+ export const AvatarStudioAspectRatioSchema = z.enum(['9:16', '16:9', '1:1', '4:5']);
23
+ export type AvatarStudioAspectRatio = z.infer<typeof AvatarStudioAspectRatioSchema>;
24
+
25
+ const AvatarStudioSubtitleColorSchema = z.string().regex(/^#[0-9A-Fa-f]{6}$/);
26
+
27
+ export const AvatarStudioSubtitleSettingsSchema = z
28
+ .object({
29
+ mode: z.nativeEnum(AVATAR_STUDIO_SUBTITLE_MODE).default(AVATAR_STUDIO_SUBTITLE_MODE.NONE),
30
+ font: z
31
+ .nativeEnum(AVATAR_STUDIO_SUBTITLE_FONT)
32
+ .default(AVATAR_STUDIO_SUBTITLE_FONT.ROBOTO_REGULAR),
33
+ textColor: AvatarStudioSubtitleColorSchema.default('#FFFFFF'),
34
+ backgroundColor: AvatarStudioSubtitleColorSchema.default('#000000'),
35
+ })
36
+ .strict();
37
+ export type AvatarStudioSubtitleSettings = z.infer<typeof AvatarStudioSubtitleSettingsSchema>;
38
+
39
+ export const AvatarStudioWordTimingSchema = z.object({
40
+ word: z.string(),
41
+ start: z.number().min(0),
42
+ end: z.number().min(0),
43
+ });
44
+ export type AvatarStudioWordTiming = z.infer<typeof AvatarStudioWordTimingSchema>;
45
+
46
+ export const AvatarStudioMediaSchema = z.object({
47
+ uuid: z.string().uuid(),
48
+ userId: z.string().uuid(),
49
+ clipId: z.string().uuid().nullable(),
50
+ sceneId: z.string().uuid().nullable(),
51
+ fileId: z.string().uuid(),
52
+ kind: z.nativeEnum(AVATAR_STUDIO_MEDIA_KIND),
53
+ source: z.nativeEnum(AVATAR_STUDIO_MEDIA_SOURCE),
54
+ role: z.nativeEnum(AVATAR_STUDIO_MEDIA_ROLE),
55
+ prompt: z.string().nullable(),
56
+ toolJobId: z.string().uuid().nullable(),
57
+ durationSeconds: z.number().nullable(),
58
+ transcript: z.string().nullable(),
59
+ file: FileSchema.optional(),
60
+ createdAt: z.date(),
61
+ updatedAt: z.date(),
62
+ });
63
+ export type AvatarStudioMedia = z.infer<typeof AvatarStudioMediaSchema>;
64
+
65
+ export const AvatarStudioSceneReferenceMediaSchema = z.object({
66
+ uuid: z.string().uuid(),
67
+ sceneId: z.string().uuid(),
68
+ mediaId: z.string().uuid(),
69
+ position: z.number().int().min(0),
70
+ media: AvatarStudioMediaSchema.optional(),
71
+ createdAt: z.date(),
72
+ });
73
+ export type AvatarStudioSceneReferenceMedia = z.infer<typeof AvatarStudioSceneReferenceMediaSchema>;
74
+
75
+ export const AvatarStudioSceneVoiceConfigSchema = z.object({
76
+ text: z.string().default(''),
77
+ mediaId: z.string().uuid().nullable().default(null),
78
+ });
79
+ export type AvatarStudioSceneVoiceConfig = z.infer<typeof AvatarStudioSceneVoiceConfigSchema>;
80
+
81
+ export const AvatarStudioSceneImageConfigSchema = z.object({
82
+ prompt: z.string().nullable().default(null),
83
+ style: z.nativeEnum(AVATAR_STUDIO_IMAGE_STYLE).default(AVATAR_STUDIO_IMAGE_STYLE.UGC),
84
+ });
85
+ export type AvatarStudioSceneImageConfig = z.infer<typeof AvatarStudioSceneImageConfigSchema>;
86
+
87
+ export const AvatarStudioSceneVideoConfigSchema = z.object({
88
+ prompt: z.string().nullable().default(null),
89
+ durationSeconds: z.number().positive().default(5),
90
+ videoMode: z.nativeEnum(AVATAR_STUDIO_VIDEO_MODE).default(AVATAR_STUDIO_VIDEO_MODE.B_ROLL),
91
+ quality: z.nativeEnum(AVATAR_STUDIO_VIDEO_QUALITY).default(AVATAR_STUDIO_VIDEO_QUALITY.P720),
92
+ sound: z.boolean().default(false),
93
+ });
94
+ export type AvatarStudioSceneVideoConfig = z.infer<typeof AvatarStudioSceneVideoConfigSchema>;
95
+
96
+ export const AvatarStudioSceneSchema = z.object({
97
+ uuid: z.string().uuid(),
98
+ clipId: z.string().uuid(),
99
+ position: z.number().int().min(0),
100
+ voiceConfig: AvatarStudioSceneVoiceConfigSchema,
101
+ imageConfig: AvatarStudioSceneImageConfigSchema,
102
+ videoConfig: AvatarStudioSceneVideoConfigSchema,
103
+ frameMediaId: z.string().uuid().nullable(),
104
+ sceneVideoMediaId: z.string().uuid().nullable(),
105
+ voiceMediaId: z.string().uuid().nullable(),
106
+ avatarVideoMediaId: z.string().uuid().nullable(),
107
+ frameStatus: z.nativeEnum(AVATAR_STUDIO_JOB_STATUS),
108
+ videoStatus: z.nativeEnum(AVATAR_STUDIO_JOB_STATUS),
109
+ voiceStatus: z.nativeEnum(AVATAR_STUDIO_JOB_STATUS),
110
+ avatarStatus: z.nativeEnum(AVATAR_STUDIO_JOB_STATUS),
111
+ frameError: z.string().nullable(),
112
+ videoError: z.string().nullable(),
113
+ voiceError: z.string().nullable(),
114
+ avatarError: z.string().nullable(),
115
+ wordTimings: z.array(AvatarStudioWordTimingSchema).nullable(),
116
+ transcript: z.string().nullable(),
117
+ subtitles: JsonValueSchema.nullable(),
118
+ frameMedia: AvatarStudioMediaSchema.nullable().optional(),
119
+ sceneVideoMedia: AvatarStudioMediaSchema.nullable().optional(),
120
+ voiceMedia: AvatarStudioMediaSchema.nullable().optional(),
121
+ avatarVideoMedia: AvatarStudioMediaSchema.nullable().optional(),
122
+ referenceMedia: z.array(AvatarStudioSceneReferenceMediaSchema).optional(),
123
+ createdAt: z.date(),
124
+ updatedAt: z.date(),
125
+ });
126
+ export type AvatarStudioScene = z.infer<typeof AvatarStudioSceneSchema>;
127
+
128
+ export const AvatarStudioVoiceSchema = z.object({
129
+ uuid: z.string().uuid(),
130
+ userId: z.string().uuid(),
131
+ clipId: z.string().uuid().nullable(),
132
+ title: z.string(),
133
+ source: z.nativeEnum(AVATAR_STUDIO_VOICE_SOURCE),
134
+ sampleMediaId: z.string().uuid().nullable(),
135
+ sampleText: z.string().nullable(),
136
+ metadata: JsonObjectSchema.nullable(),
137
+ sampleMedia: AvatarStudioMediaSchema.nullable().optional(),
138
+ createdAt: z.date(),
139
+ updatedAt: z.date(),
140
+ deletedAt: z.date().nullable(),
141
+ });
142
+ export type AvatarStudioVoice = z.infer<typeof AvatarStudioVoiceSchema>;
143
+
144
+ export const AvatarStudioGenerationJobBaseSchema = z.object({
145
+ uuid: z.string().uuid(),
146
+ userId: z.string().uuid(),
147
+ clipId: z.string().uuid().nullable(),
148
+ sceneId: z.string().uuid().nullable(),
149
+ parentJobId: z.string().uuid().nullable(),
150
+ toolJobId: z.string().uuid().nullable(),
151
+ type: z.nativeEnum(AVATAR_STUDIO_JOB_TYPE),
152
+ phase: z.nativeEnum(AVATAR_STUDIO_JOB_PHASE).nullable(),
153
+ targetSlot: z.nativeEnum(AVATAR_STUDIO_SLOT),
154
+ status: z.nativeEnum(AVATAR_STUDIO_JOB_STATUS),
155
+ request: JsonObjectSchema.nullable(),
156
+ resultMediaId: z.string().uuid().nullable(),
157
+ tokenReservationUuid: z.string().uuid().nullable(),
158
+ price: z.number().nullable(),
159
+ error: z.string().nullable(),
160
+ resultMedia: AvatarStudioMediaSchema.nullable().optional(),
161
+ startedAt: z.date().nullable(),
162
+ completedAt: z.date().nullable(),
163
+ createdAt: z.date(),
164
+ updatedAt: z.date(),
165
+ });
166
+
167
+ export const AvatarStudioGenerationJobSchema = AvatarStudioGenerationJobBaseSchema.extend({
168
+ children: z.array(AvatarStudioGenerationJobBaseSchema).optional(),
169
+ });
170
+ export type AvatarStudioGenerationJob = z.infer<typeof AvatarStudioGenerationJobSchema>;
171
+
172
+ export const AvatarStudioExportJobSchema = z.object({
173
+ uuid: z.string().uuid(),
174
+ userId: z.string().uuid(),
175
+ clipId: z.string().uuid(),
176
+ status: z.nativeEnum(AVATAR_STUDIO_EXPORT_STATUS),
177
+ resultMediaId: z.string().uuid().nullable(),
178
+ error: z.string().nullable(),
179
+ request: JsonObjectSchema.nullable(),
180
+ resultMedia: AvatarStudioMediaSchema.nullable().optional(),
181
+ startedAt: z.date().nullable(),
182
+ completedAt: z.date().nullable(),
183
+ createdAt: z.date(),
184
+ updatedAt: z.date(),
185
+ });
186
+ export type AvatarStudioExportJob = z.infer<typeof AvatarStudioExportJobSchema>;
187
+
188
+ export const AvatarStudioScriptwriterMessageSchema = z.object({
189
+ uuid: z.string().uuid(),
190
+ userId: z.string().uuid(),
191
+ clipId: z.string().uuid(),
192
+ sceneId: z.string().uuid().nullable(),
193
+ role: z.nativeEnum(AVATAR_STUDIO_SCRIPTWRITER_ROLE),
194
+ content: z.string(),
195
+ tokenReservationUuid: z.string().uuid().nullable(),
196
+ price: z.number().nullable(),
197
+ metadata: JsonObjectSchema.nullable(),
198
+ createdAt: z.date(),
199
+ });
200
+ export type AvatarStudioScriptwriterMessage = z.infer<typeof AvatarStudioScriptwriterMessageSchema>;
201
+
202
+ export const AvatarStudioClipSchema = z.object({
203
+ uuid: z.string().uuid(),
204
+ userId: z.string().uuid(),
205
+ title: z.string(),
206
+ subtitleSettings: AvatarStudioSubtitleSettingsSchema,
207
+ selectedVoiceId: z.string().uuid().nullable(),
208
+ exportMediaId: z.string().uuid().nullable(),
209
+ selectedVoice: AvatarStudioVoiceSchema.nullable().optional(),
210
+ exportMedia: AvatarStudioMediaSchema.nullable().optional(),
211
+ scenes: z.array(AvatarStudioSceneSchema).optional(),
212
+ media: z.array(AvatarStudioMediaSchema).optional(),
213
+ voices: z.array(AvatarStudioVoiceSchema).optional(),
214
+ generationJobs: z.array(AvatarStudioGenerationJobSchema).optional(),
215
+ exportJobs: z.array(AvatarStudioExportJobSchema).optional(),
216
+ scriptwriterMessages: z.array(AvatarStudioScriptwriterMessageSchema).optional(),
217
+ deletedAt: z.date().nullable(),
218
+ createdAt: z.date(),
219
+ updatedAt: z.date(),
220
+ });
221
+ export type AvatarStudioClip = z.infer<typeof AvatarStudioClipSchema>;
@@ -0,0 +1 @@
1
+ export * from './avatar-studio.schema';
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { CANVAS_NODE_TYPE, NODE_RUN_STATUS } from '../constants';
2
+ import { CANVAS_NODE_ERROR_KIND, CANVAS_NODE_TYPE, NODE_RUN_STATUS } from '../constants';
3
3
 
4
4
  const strictObject = <T extends z.ZodRawShape>(shape: T): z.ZodObject<T, 'strict'> =>
5
5
  z.object(shape).strict();
@@ -226,10 +226,17 @@ export const CanvasNodeOutputSchemaByType = {
226
226
  [CANVAS_NODE_TYPE.audioBlock]: AudioBlockOutputSchema,
227
227
  } as const;
228
228
 
229
+ export const CanvasNodeErrorDetailsSchema = z
230
+ .object({
231
+ nodeId: z.string().uuid().optional(),
232
+ errorKind: z.nativeEnum(CANVAS_NODE_ERROR_KIND).optional(),
233
+ })
234
+ .catchall(z.unknown());
235
+
229
236
  export const CanvasNodeErrorSchema = z.object({
230
237
  code: z.string(),
231
238
  message: z.string(),
232
- details: z.record(z.unknown()).optional(),
239
+ details: CanvasNodeErrorDetailsSchema.optional(),
233
240
  retryable: z.boolean().optional(),
234
241
  });
235
242
  export type CanvasNodeError = z.infer<typeof CanvasNodeErrorSchema>;
@@ -18,7 +18,7 @@ export const FileSchema = z.object({
18
18
  key: z.string(),
19
19
  type: z.nativeEnum(FILE_TYPE),
20
20
  duration: z.number().nullable(),
21
- attachmentCost: z.number(),
21
+ attachmentCost: z.number().default(0),
22
22
  contentLength: z.number().nullable(),
23
23
  createdAt: z.date(),
24
24
  updatedAt: z.date(),
package/models/index.ts CHANGED
@@ -4,6 +4,7 @@ export * from './ai-model-config.schema';
4
4
  export * from './ai-model-formatted.schema';
5
5
  export * from './ai-model.schema';
6
6
  export * from './ai-vendor.schema';
7
+ export * from './avatar-studio';
7
8
  export * from './canvas.schema';
8
9
  export * from './canvas-node-definition.schema';
9
10
  export * from './canvas-node.schema';
@@ -9,6 +9,8 @@ export const VideoJobParamsSchema = z.object({
9
9
  referenceImageIds: z.array(z.string()).optional(),
10
10
  firstFrameUrl: z.string().optional(),
11
11
  lastFrameUrl: z.string().optional(),
12
+ audioUrl: z.string().url().optional(),
13
+ audioId: z.string().uuid().optional(),
12
14
  firstFrameId: z.string().optional(),
13
15
  lastFrameId: z.string().optional(),
14
16
  duration: z.number().optional(),
@@ -34,6 +34,12 @@ export const VideoModelParamsSchema = z.object({
34
34
  options: z.array(z.boolean()),
35
35
  })
36
36
  .optional(),
37
+ audioAttachment: z
38
+ .object({
39
+ supported: z.boolean(),
40
+ maxAudioUrls: z.number(),
41
+ })
42
+ .optional(),
37
43
  multiShots: z
38
44
  .object({
39
45
  options: z.array(z.boolean()),
@@ -52,6 +58,7 @@ export const VideoGenerationRequestParamsSchema = z.object({
52
58
  referenceImages: z.string().uuid().array().optional(),
53
59
  firstFrameImageId: z.string().uuid().optional(),
54
60
  lastFrameImageId: z.string().uuid().optional(),
61
+ audioId: z.string().uuid().optional(),
55
62
  duration: z.number(),
56
63
  aspectRatio: z.string().optional(),
57
64
  quality: z.string().optional(),
@@ -64,6 +71,8 @@ export type VideoGenerationRequestParams = z.infer<typeof VideoGenerationRequest
64
71
 
65
72
  export const VideoModelPricingRuleConditionSchema = z.object({
66
73
  aspectRatio: z.string().optional(),
74
+ duration: z.number().optional(),
75
+ quality: z.string().optional(),
67
76
  resolution: z.string().optional(),
68
77
  sound: z.boolean().optional(),
69
78
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpleschool/gptbot",
3
- "version": "0.14.11",
3
+ "version": "0.14.13-avatar-studio",
4
4
  "description": "",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",