@agentmedia/schema 0.2.1 → 0.3.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/video.js CHANGED
@@ -166,13 +166,38 @@ export const SubtitleSchema = z.object({
166
166
  video_url: z.string().url(),
167
167
  style: z.enum(SUBTITLE_STYLES).optional(),
168
168
  });
169
- export const ProductReviewSchema = z.object({
170
- product_url: z.string().url(),
169
+ export const SaasReviewSchema = z.preprocess(flattenGroupedParams, z.object({
170
+ script: z.string().min(50).max(3000).optional(),
171
+ prompt: z.string().min(1).max(1000).optional(),
172
+ product_url: z.string().url().optional(),
171
173
  angle: z.enum(REVIEW_ANGLES).optional(),
172
- tone: z.enum(TONES).optional(),
173
174
  actor_slug: z.string().min(1).max(100).optional(),
175
+ persona_slug: z.string().min(1).max(100).optional(),
176
+ face_photo_url: z.string().url().optional(),
177
+ voice: z.string().max(100).optional(),
174
178
  target_duration: z.number().refine((v) => DURATIONS.includes(v), { message: 'target_duration must be 5, 10, or 15' }).optional(),
175
- });
179
+ style: z.string().max(50).optional(),
180
+ tone: z.enum(TONES).optional(),
181
+ voice_speed: z.number().min(0.7).max(1.5).optional(),
182
+ music: z.enum(MUSIC_GENRES).optional(),
183
+ cta: z.string().max(100).optional(),
184
+ aspect_ratio: z.enum(ASPECT_RATIOS).optional(),
185
+ template: z.string().max(50).optional(),
186
+ composition_mode: z.literal('pip').optional(),
187
+ pip_options: PipOptionsSchema.optional(),
188
+ allow_broll: z.boolean().optional(),
189
+ broll_model: z.enum(BROLL_MODELS).optional(),
190
+ broll_images: z.array(z.string().url()).max(10).optional(),
191
+ dub_language: z.string().max(10).optional(),
192
+ webhook_url: z.string().url().optional(),
193
+ scenes: z.array(z.object({
194
+ type: z.enum(SCENE_TYPES).optional(),
195
+ }).passthrough()).max(30).optional(),
196
+ }).refine((data) => data.script !== undefined || data.prompt !== undefined || data.product_url !== undefined, { message: 'script, prompt, or product_url is required' }));
197
+ /**
198
+ * @deprecated Use SaasReviewSchema. Kept for API/SDK compatibility.
199
+ */
200
+ export const ProductReviewSchema = SaasReviewSchema;
176
201
  export const SHOW_YOUR_APP_WORDS_PER_SECOND = 3;
177
202
  export const SHOW_YOUR_APP_DURATIONS = [5, 10, 15];
178
203
  export const ShowYourAppSchema = z.object({
@@ -194,4 +219,108 @@ export const ShowYourAppSchema = z.object({
194
219
  });
195
220
  }
196
221
  });
222
+ // ── Laptop UGC ──────────────────────────────────────────────────────────────
223
+ export const LAPTOP_UGC_WORDS_PER_SECOND = 3;
224
+ export const LAPTOP_UGC_DURATIONS = [15, 20];
225
+ export const LAPTOP_UGC_MAX_RECORDING_BYTES = 10 * 1024 * 1024; // 10 MB
226
+ export const LAPTOP_UGC_MAX_RECORDING_SECONDS = 10;
227
+ export const LAPTOP_UGC_RECORDING_MIME_TYPES = ['video/mp4', 'video/quicktime'];
228
+ export const LAPTOP_UGC_MAX_IMAGE_BYTES = 5 * 1024 * 1024; // 5 MB
229
+ export const LAPTOP_UGC_IMAGE_MIME_TYPES = ['image/png', 'image/jpeg', 'image/webp'];
230
+ export const LaptopUgcSchema = z.object({
231
+ app_screen_recording_url: z.string().url().optional().describe('Public URL of a screen recording of your app (mp4 or mov). Max 10 MB, max 10 seconds. Provide this OR app_screen_image_url, not both.'),
232
+ app_screen_image_url: z.string().url().optional().describe('Public URL of a static screenshot of your app (png, jpeg, or webp). Max 5 MB. Provide this OR app_screen_recording_url, not both.'),
233
+ actor_slug: z.string().min(1).max(100).optional().describe('Actor slug from GET /v1/actors. Random actor if omitted.'),
234
+ script: z.string().min(5).max(3000).describe('Full voiceover script. Auto-split at sentence boundary into two halves for the two face shots.'),
235
+ duration: z.number().refine((v) => LAPTOP_UGC_DURATIONS.includes(v), { message: 'duration must be 15 or 20' }).optional().default(20),
236
+ subtitle_style: z.enum(['hormozi', 'none']).optional().default('hormozi'),
237
+ webhook_url: z.string().url().optional(),
238
+ }).superRefine((val, ctx) => {
239
+ // Exactly one of recording / image must be provided
240
+ const hasRecording = !!val.app_screen_recording_url;
241
+ const hasImage = !!val.app_screen_image_url;
242
+ if (hasRecording && hasImage) {
243
+ ctx.addIssue({
244
+ code: z.ZodIssueCode.custom,
245
+ path: ['app_screen_recording_url'],
246
+ message: 'Provide app_screen_recording_url OR app_screen_image_url, not both',
247
+ });
248
+ }
249
+ if (!hasRecording && !hasImage) {
250
+ ctx.addIssue({
251
+ code: z.ZodIssueCode.custom,
252
+ path: ['app_screen_recording_url'],
253
+ message: 'Either app_screen_recording_url or app_screen_image_url is required',
254
+ });
255
+ }
256
+ // Word-count cap
257
+ const duration = val.duration ?? 20;
258
+ const maxWords = duration * LAPTOP_UGC_WORDS_PER_SECOND;
259
+ const wordCount = val.script.trim().split(/\s+/).filter(Boolean).length;
260
+ if (wordCount > maxWords) {
261
+ ctx.addIssue({
262
+ code: z.ZodIssueCode.custom,
263
+ path: ['script'],
264
+ message: `Script has ${wordCount} words; max ${maxWords} for ${duration}s at ${LAPTOP_UGC_WORDS_PER_SECOND} words/sec`,
265
+ });
266
+ }
267
+ });
268
+ export const PRODUCT_ACTING_WORDS_PER_SECOND = 3;
269
+ export const PRODUCT_ACTING_DURATIONS = [5, 10, 15];
270
+ export const PRODUCT_ACTING_TEMPLATES = [
271
+ 'product-in-hand',
272
+ 'mirror-selfie',
273
+ 'bathroom-reaction',
274
+ 'kitchen-counter',
275
+ 'car-selfie',
276
+ 'couch-review',
277
+ 'expert-interview',
278
+ 'product-closeup',
279
+ ];
280
+ export const PRODUCT_ACTING_STYLES = [
281
+ 'raw-selfie',
282
+ 'shocked',
283
+ 'angry',
284
+ 'excited',
285
+ 'dramatic',
286
+ 'weird-hook',
287
+ 'casual-demo',
288
+ 'honest-review',
289
+ ];
290
+ export const ProductActingSchema = z.object({
291
+ product_image_url: z.string().url().describe('Public URL of the product image to place in the actor scene. PNG, JPEG, or WebP recommended.'),
292
+ actor_slug: z.string().min(1).max(100).describe('Actor slug from GET /v1/actors. This actor is used as the creator reference.'),
293
+ actor_variant_id: z.string().uuid().optional().describe('Optional actor variant UUID for a specific outfit, framing, expression, or background.'),
294
+ product_name: z.string().min(1).max(120).optional().describe('Optional product name used for prompt/script context.'),
295
+ product_description: z.string().min(1).max(1000).optional().describe('Product context used to generate a short script when script is omitted. Required when script is omitted.'),
296
+ script: z.string().min(5).max(3000).optional().describe('Exact words the actor should say. If omitted, the API generates a short script from product_description.'),
297
+ template: z.enum(PRODUCT_ACTING_TEMPLATES).optional().default('product-in-hand').describe('UGC scenario template for the generated frame and motion.'),
298
+ acting_style: z.enum(PRODUCT_ACTING_STYLES).optional().default('raw-selfie').describe('Acting energy and delivery style.'),
299
+ visual_style: z.string().max(200).optional().describe('Extra camera, pose, environment, or framing direction.'),
300
+ duration: z.number().refine((v) => PRODUCT_ACTING_DURATIONS.includes(v), { message: 'duration must be 5, 10, or 15' }).optional().default(5).describe('Video duration in seconds. Valid values: 5, 10, or 15.'),
301
+ subtitles: z.boolean().optional().default(true).describe('Whether to burn word-level synced subtitles into the final video.'),
302
+ subtitle_style: z.enum(['hormozi', 'none']).optional().default('hormozi').describe('Subtitle style. Use none to disable subtitle rendering.'),
303
+ webhook_url: z.string().url().optional().describe('HTTPS URL to receive a callback when the job completes or fails.'),
304
+ }).superRefine((val, ctx) => {
305
+ if (!val.script && !val.product_description) {
306
+ ctx.addIssue({
307
+ code: z.ZodIssueCode.custom,
308
+ path: ['product_description'],
309
+ message: 'Either script or product_description is required',
310
+ });
311
+ return;
312
+ }
313
+ if (!val.script)
314
+ return;
315
+ const duration = val.duration ?? 5;
316
+ const maxWords = duration * PRODUCT_ACTING_WORDS_PER_SECOND;
317
+ const wordCount = val.script.trim().split(/\s+/).filter(Boolean).length;
318
+ if (wordCount > maxWords) {
319
+ ctx.addIssue({
320
+ code: z.ZodIssueCode.custom,
321
+ path: ['script'],
322
+ message: `Script has ${wordCount} words; max ${maxWords} for ${duration}s at ${PRODUCT_ACTING_WORDS_PER_SECOND} words/sec`,
323
+ });
324
+ }
325
+ });
197
326
  //# sourceMappingURL=video.js.map
package/dist/video.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"video.js","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"video.js","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentmedia/schema",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Type-safe schema definitions for AI UGC video generation — enums, Zod validation, and generator registry. Single source of truth for the agent-media platform.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -22,6 +22,8 @@
22
22
  "developer-tools",
23
23
  "text-to-video",
24
24
  "talking-head",
25
+ "product-video",
26
+ "product-ugc",
25
27
  "openapi",
26
28
  "mcp",
27
29
  "agent-media"
@@ -54,6 +56,6 @@
54
56
  "generate:edge-schema": "tsx scripts/generate-edge-schema.ts",
55
57
  "generate:openapi": "tsx scripts/generate-openapi.ts",
56
58
  "check:spec": "tsx scripts/check-spec-freshness.ts",
57
- "check:sdk-types": "npx openapi-typescript generated/openapi.json -o generated/api-types.d.ts && echo '✓ SDK types generated'"
59
+ "check:sdk-types": "npx openapi-typescript ../../generated/openapi.json -o ../../generated/api-types.d.ts && echo '✓ SDK types generated'"
58
60
  }
59
61
  }
@@ -21,7 +21,7 @@ const outputPath = resolve(outputDir, 'openapi.json');
21
21
  const FIELD_DESCRIPTIONS: Record<string, string> = {
22
22
  script: 'Narration script for the video. Must be 50-3000 characters. Either script or prompt is required.',
23
23
  prompt: 'AI generates a script from this description. 1-1000 characters. Either script or prompt is required.',
24
- product_url: 'Product URL for context during AI script generation.',
24
+ product_url: 'SaaS product URL for context during AI script generation.',
25
25
  actor_slug: 'AI actor slug for talking head. Run GET /v1/actors to browse. Example: "sofia", "marcus".',
26
26
  persona_slug: 'Custom persona slug (cloned voice + face). Mutually exclusive with actor_slug.',
27
27
  face_photo_url: 'Direct URL to a face photo. Mutually exclusive with actor_slug.',
@@ -33,7 +33,7 @@ const FIELD_DESCRIPTIONS: Record<string, string> = {
33
33
  music: 'Background music genre.',
34
34
  cta: 'End screen call-to-action text. Max 100 characters. Example: "Follow for more".',
35
35
  aspect_ratio: 'Video aspect ratio.',
36
- template: 'Script structure template. Options: monologue, testimonial, product-review, problem-solution, saas-review, before-after, listicle, product-demo.',
36
+ template: 'Script structure template. Options: monologue, testimonial, problem-solution, saas-review, before-after, listicle, product-demo.',
37
37
  composition_mode: 'Set to "pip" for picture-in-picture overlay mode.',
38
38
  allow_broll: 'Enable AI-generated B-roll cutaway scenes mixed with talking head.',
39
39
  broll_model: 'Deprecated. Backend auto-selects the best model. Accepted but ignored.',
@@ -44,13 +44,23 @@ const FIELD_DESCRIPTIONS: Record<string, string> = {
44
44
  webhook_url: 'URL to receive a POST callback when the job completes or fails.',
45
45
  video_url: 'URL of the video to add subtitles to.',
46
46
  angle: 'Review angle/perspective.',
47
+ product_image_url: 'Public URL of the product image to place in the actor scene. PNG, JPEG, or WebP recommended.',
48
+ actor_variant_id: 'Optional actor variant UUID for a specific outfit, framing, expression, or background.',
49
+ product_name: 'Optional product name used for prompt/script context.',
50
+ product_description: 'Product context used to generate a short script when script is omitted.',
51
+ duration: 'Video duration in seconds. Must be 5, 10, or 15.',
52
+ subtitles: 'Whether to burn word-level synced subtitles into the final video.',
53
+ subtitle_style: 'Subtitle style. Use "none" to disable subtitle rendering.',
54
+ template: 'Product Acting UGC scenario template.',
55
+ acting_style: 'Product Acting UGC delivery style.',
56
+ visual_style: 'Extra camera, pose, environment, or framing direction.',
47
57
  };
48
58
 
49
59
  // ── Build spec ──────────────────────────────────────────────────────────────
50
60
 
51
61
  const paths: Record<string, unknown> = {};
52
62
 
53
- for (const [id, gen] of Object.entries(GENERATORS)) {
63
+ for (const [id, gen] of Object.entries(GENERATORS).filter(([, gen]) => !(gen as { legacy?: boolean }).legacy)) {
54
64
  const jsonSchema = zodToJsonSchema(gen.inputSchema, {
55
65
  name: `${id}_input`,
56
66
  $refStrategy: 'none',
@@ -96,10 +106,24 @@ for (const [id, gen] of Object.entries(GENERATORS)) {
96
106
  } : id === 'subtitle' ? {
97
107
  video_url: 'https://example.com/video.mp4',
98
108
  style: 'hormozi',
99
- } : id === 'product_review' ? {
109
+ } : id === 'saas_review' ? {
100
110
  product_url: 'https://example.com/product',
101
111
  angle: 'honest',
102
112
  actor_slug: 'marcus',
113
+ } : id === 'show_your_app' ? {
114
+ app_screenshot_url: 'https://cdn.example.com/my-app.png',
115
+ script: 'You really need to try this',
116
+ duration: 5,
117
+ subtitle_style: 'hormozi',
118
+ } : id === 'product_acting_ugc' ? {
119
+ product_image_url: 'https://cdn.example.com/perfume.png',
120
+ actor_slug: 'sarah',
121
+ product_name: 'Rose Noir',
122
+ product_description: 'Premium rose perfume with a warm vanilla dry-down.',
123
+ template: 'product-in-hand',
124
+ acting_style: 'honest-review',
125
+ duration: 5,
126
+ subtitle_style: 'hormozi',
103
127
  } : undefined,
104
128
  },
105
129
  },
@@ -196,23 +220,47 @@ console.log(video.video_url);`,
196
220
  paths['/v1/actors'] = {
197
221
  get: {
198
222
  operationId: 'listActors',
199
- summary: 'List available AI actors for talking head videos',
200
- description: 'Returns all available actors with their slugs, names, portrait URLs, and demographic info. Use the slug in the actor_slug field when generating videos.',
223
+ summary: 'List actors with filters, or look up a single actor by slug',
224
+ description:
225
+ 'Public endpoint — no API key required. Lists active actors, supports filters (gender, age_range, actor_type, preset, search), and returns a single actor when ?slug=… is provided (with similar-slug suggestions on 404). Rate limited to 60 requests/minute per IP.',
201
226
  tags: ['actors'],
202
- security: [{ bearerAuth: [] }],
203
227
  parameters: [
204
- { name: 'limit', in: 'query', required: false, schema: { type: 'integer', minimum: 1, maximum: 200, default: 50 }, description: 'Max actors to return (default 50, max 200)' },
205
- { name: 'offset', in: 'query', required: false, schema: { type: 'integer', minimum: 0, default: 0 }, description: 'Number of actors to skip for pagination' },
228
+ { name: 'gender', in: 'query', required: false, schema: { type: 'string', enum: ['female', 'male'] }, description: 'Filter by gender' },
229
+ { name: 'age_range', in: 'query', required: false, schema: { type: 'string', enum: ['18-25', '26-35', '36-50', '51+'] }, description: 'Filter by age range' },
230
+ { name: 'actor_type', in: 'query', required: false, schema: { type: 'string', enum: ['Young Adult', 'Professional', 'Mom', 'Elder', 'Casual'] }, description: 'Filter by persona type' },
231
+ { name: 'preset', in: 'query', required: false, schema: { type: 'string' }, description: 'Filter by preset tag (e.g. show_your_app)' },
232
+ { name: 'search', in: 'query', required: false, schema: { type: 'string' }, description: 'Case-insensitive substring on name' },
233
+ { name: 'slug', in: 'query', required: false, schema: { type: 'string' }, description: 'Exact slug. Returns single actor or 404 with similar-slug suggestions. Other filters and pagination are ignored.' },
234
+ { name: 'limit', in: 'query', required: false, schema: { type: 'integer', minimum: 1, maximum: 500, default: 500 }, description: 'Page size (ignored when slug is set). Default 500 — large enough to return the full active library in one call.' },
235
+ { name: 'offset', in: 'query', required: false, schema: { type: 'integer', minimum: 0, default: 0 }, description: 'Page offset (ignored when slug is set)' },
206
236
  ],
207
237
  responses: {
208
238
  '200': {
209
- description: 'List of available actors',
239
+ description: 'Actor list (when slug is omitted) or single actor (when slug is given).',
210
240
  content: {
211
241
  'application/json': {
212
- schema: { $ref: '#/components/schemas/ActorList' },
242
+ schema: { oneOf: [{ $ref: '#/components/schemas/ActorList' }, { $ref: '#/components/schemas/ActorSingle' }] },
213
243
  example: {
214
244
  actors: [
215
- { id: '06fbedfb-853c-43e0-8065-61f7ff953a86', slug: 'sofia', name: 'Sofia', portrait_url: 'https://example.com/sofia.png', age: 32, gender: 'female', nationality: 'Latina' },
245
+ {
246
+ id: '66ac63f6-1be0-4c70-9914-c8ed90208be0',
247
+ slug: 'aaliyah',
248
+ name: 'Aaliyah',
249
+ gender: 'female',
250
+ age: 28,
251
+ age_range: '26-35',
252
+ nationality: 'African American',
253
+ actor_type: 'Professional',
254
+ style: 'Confident, poised, thoughtful presence',
255
+ portrait_url: 'https://example.com/aaliyah.png',
256
+ green_screen_url: 'https://example.com/aaliyah-gs.png',
257
+ voice_id: 'cgSgspJ2msm6clMCkdW9',
258
+ voice_gender: 'female',
259
+ lip_sync_engine: 'aurora',
260
+ preset: null,
261
+ presets: ['show_your_app'],
262
+ status: 'active',
263
+ },
216
264
  ],
217
265
  total: 200,
218
266
  limit: 50,
@@ -221,8 +269,13 @@ paths['/v1/actors'] = {
221
269
  },
222
270
  },
223
271
  },
224
- '401': {
225
- description: 'Unauthorized',
272
+ '404': {
273
+ description: 'Slug lookup miss. Includes a similar-slug suggestion list.',
274
+ content: { 'application/json': { schema: { $ref: '#/components/schemas/Error' } } },
275
+ },
276
+ '429': {
277
+ description: 'Rate limited',
278
+ headers: { 'Retry-After': { schema: { type: 'integer' } } },
226
279
  content: { 'application/json': { schema: { $ref: '#/components/schemas/Error' } } },
227
280
  },
228
281
  },
@@ -255,7 +308,7 @@ paths['/v1/videos/{jobId}'] = {
255
308
  job_id: '9ba7ff45-b161-4aba-b14c-fd87d7e19a77',
256
309
  status: 'completed',
257
310
  progress: {},
258
- video_url: 'https://pub-16e2ed8f6be84691845e91436920ce0a.r2.dev/generation-outputs/.../ugc-final.mp4',
311
+ video_url: 'https://media.agent-media.ai/generation-outputs/.../ugc-final.mp4',
259
312
  error_message: null,
260
313
  created_at: '2026-04-11T10:00:00Z',
261
314
  updated_at: '2026-04-11T10:03:00Z',
@@ -278,7 +331,7 @@ const spec = {
278
331
  info: {
279
332
  title: 'agent-media API',
280
333
  version: '1.0.0',
281
- description: `AI UGC video production API. Generate talking head videos with lip-synced AI actors, product reviews, and styled subtitles.
334
+ description: `AI UGC video production API. Generate talking head videos with lip-synced AI actors, SaaS reviews, and styled subtitles.
282
335
 
283
336
  ## Authentication
284
337
  All endpoints require a Bearer token. Use either:
@@ -366,31 +419,51 @@ Video generation is async. POST to /v1/generate/* returns a job_id immediately.
366
419
  },
367
420
  required: ['job_id', 'status'],
368
421
  },
422
+ Actor: {
423
+ type: 'object',
424
+ description: 'A single AI actor record from the actor library.',
425
+ properties: {
426
+ id: { type: 'string', format: 'uuid' },
427
+ slug: { type: 'string', description: 'Use this in actor_slug when generating videos.' },
428
+ name: { type: 'string' },
429
+ gender: { type: 'string', enum: ['female', 'male'] },
430
+ age: { type: 'integer' },
431
+ age_range: { type: 'string', enum: ['18-25', '26-35', '36-50', '51+'] },
432
+ nationality: { type: 'string' },
433
+ actor_type: { type: 'string', enum: ['Young Adult', 'Professional', 'Mom', 'Elder', 'Casual'] },
434
+ style: { type: 'string', description: 'On-camera style descriptor.' },
435
+ portrait_url: { type: 'string', format: 'uri' },
436
+ green_screen_url: { type: 'string', format: 'uri', nullable: true },
437
+ voice_id: { type: 'string', description: 'ElevenLabs voice id used by default for this actor.' },
438
+ voice_gender: { type: 'string' },
439
+ lip_sync_engine: { type: 'string' },
440
+ preset: { type: 'string', nullable: true },
441
+ presets: { type: 'array', items: { type: 'string' } },
442
+ bio_occupation: { type: 'string' },
443
+ bio_story: { type: 'string' },
444
+ bio_hobbies: { type: 'array', items: { type: 'string' } },
445
+ status: { type: 'string', enum: ['active'] },
446
+ created_at: { type: 'string', format: 'date-time' },
447
+ updated_at: { type: 'string', format: 'date-time' },
448
+ },
449
+ required: ['id', 'slug', 'name', 'portrait_url', 'gender'],
450
+ },
369
451
  ActorList: {
370
452
  type: 'object',
371
- description: 'Paginated list of available actors',
453
+ description: 'Paginated list of active actors. Returned when slug is omitted.',
372
454
  properties: {
373
- actors: {
374
- type: 'array',
375
- items: {
376
- type: 'object',
377
- properties: {
378
- id: { type: 'string', format: 'uuid' },
379
- slug: { type: 'string', description: 'Use this in actor_slug when generating videos.' },
380
- name: { type: 'string' },
381
- portrait_url: { type: 'string', format: 'uri' },
382
- age: { type: 'integer' },
383
- gender: { type: 'string' },
384
- nationality: { type: 'string' },
385
- },
386
- required: ['id', 'slug', 'name'],
387
- },
388
- },
389
- total: { type: 'integer', description: 'Total number of actors available.' },
455
+ actors: { type: 'array', items: { $ref: '#/components/schemas/Actor' } },
456
+ total: { type: 'integer', description: 'Total matching actors.' },
390
457
  limit: { type: 'integer' },
391
458
  offset: { type: 'integer' },
392
459
  },
393
- required: ['actors', 'total'],
460
+ required: ['actors', 'total', 'limit', 'offset'],
461
+ },
462
+ ActorSingle: {
463
+ type: 'object',
464
+ description: 'Single-actor response shape. Returned when slug is provided.',
465
+ properties: { actor: { $ref: '#/components/schemas/Actor' } },
466
+ required: ['actor'],
394
467
  },
395
468
  },
396
469
  },
@@ -400,4 +473,4 @@ mkdirSync(outputDir, { recursive: true });
400
473
  writeFileSync(outputPath, JSON.stringify(spec, null, 2), 'utf-8');
401
474
  console.log(`Generated: ${outputPath}`);
402
475
  console.log(`Endpoints: ${Object.keys(paths).length}`);
403
- console.log(`Generators: ${Object.keys(GENERATORS).length}`);
476
+ console.log(`Generators: ${Object.values(GENERATORS).filter((gen) => !(gen as { legacy?: boolean }).legacy).length}`);
@@ -27,6 +27,7 @@ import {
27
27
  PIP_ANIMATIONS,
28
28
  PIP_FRAME_STYLES,
29
29
  } from '../video.js';
30
+ import { GENERATOR_IDS, GENERATORS } from '../generators.js';
30
31
 
31
32
  // ── Helper: check if Zod accepts a body ─────────────────────────────────────
32
33
 
@@ -327,6 +328,13 @@ describe('Parity: pip_options', () => {
327
328
  // ── Enum completeness: verify schema arrays match production ────────────────
328
329
 
329
330
  describe('Enum completeness: values match production', () => {
331
+ it('promotes saas_review and keeps product_review as an undocumented legacy alias', () => {
332
+ expect(GENERATOR_IDS).toContain('saas_review');
333
+ expect(GENERATOR_IDS).not.toContain('product_review');
334
+ expect(GENERATORS.product_review.legacy).toBe(true);
335
+ expect(GENERATORS.product_review.inputSchema).toBe(GENERATORS.saas_review.inputSchema);
336
+ });
337
+
330
338
  it('DURATIONS matches production', () => {
331
339
  expect([...DURATIONS]).toEqual([5, 10, 15]);
332
340
  });
package/src/generators.ts CHANGED
@@ -8,7 +8,15 @@
8
8
  * internals (models, pipelines, rendering).
9
9
  */
10
10
 
11
- import { CreateVideoSchema, ProductReviewSchema, SubtitleSchema, ShowYourAppSchema } from './video.js';
11
+ import {
12
+ CreateVideoSchema,
13
+ LaptopUgcSchema,
14
+ ProductActingSchema,
15
+ ProductReviewSchema,
16
+ SaasReviewSchema,
17
+ ShowYourAppSchema,
18
+ SubtitleSchema,
19
+ } from './video.js';
12
20
 
13
21
  export const GENERATORS = {
14
22
  ugc_video: {
@@ -16,10 +24,16 @@ export const GENERATORS = {
16
24
  inputSchema: CreateVideoSchema,
17
25
  output: 'video_url' as const,
18
26
  },
27
+ saas_review: {
28
+ description: 'Generate a SaaS review video from a SaaS product URL',
29
+ inputSchema: SaasReviewSchema,
30
+ output: 'video_url' as const,
31
+ },
19
32
  product_review: {
20
- description: 'Generate a product review video from a product URL',
33
+ description: 'Legacy alias for SaaS Review video generation',
21
34
  inputSchema: ProductReviewSchema,
22
35
  output: 'video_url' as const,
36
+ legacy: true,
23
37
  },
24
38
  subtitle: {
25
39
  description: 'Add styled subtitles to an existing video',
@@ -31,8 +45,20 @@ export const GENERATORS = {
31
45
  inputSchema: ShowYourAppSchema,
32
46
  output: 'video_url' as const,
33
47
  },
48
+ product_acting_ugc: {
49
+ description: 'Generate a product-in-hand UGC video from a product image and actor reference',
50
+ inputSchema: ProductActingSchema,
51
+ output: 'video_url' as const,
52
+ },
53
+ laptop_ugc: {
54
+ description: 'Generate a 3-scene laptop-UGC ad: actor holds laptop showing your app, scrolling B-roll, then a face-only selfie close',
55
+ inputSchema: LaptopUgcSchema,
56
+ output: 'video_url' as const,
57
+ },
34
58
  } as const;
35
59
 
36
60
  export type GeneratorId = keyof typeof GENERATORS;
37
61
 
38
- export const GENERATOR_IDS = Object.keys(GENERATORS) as GeneratorId[];
62
+ export const GENERATOR_IDS = Object.keys(GENERATORS).filter(
63
+ (id) => !(GENERATORS[id as GeneratorId] as { legacy?: boolean }).legacy,
64
+ ) as GeneratorId[];