@gptmarket/temporal-types 0.0.32 → 0.0.33

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gptmarket/temporal-types",
3
- "version": "0.0.32",
3
+ "version": "0.0.33",
4
4
  "description": "TypeScript types and workflow registry for GPTMarket Temporal workflows",
5
5
  "main": "index.ts",
6
6
  "types": "index.ts",
package/registry.ts CHANGED
@@ -968,6 +968,233 @@ export const saa_s_video: WorkflowDefinition<
968
968
  ],
969
969
  };
970
970
 
971
+ export const screenshot_generator: WorkflowDefinition<
972
+ Types.ScreenshotGeneratorInput,
973
+ Types.ScreenshotGeneratorOutput
974
+ > = {
975
+ id: "screenshot_generator",
976
+ name: "Screenshot Generator",
977
+ description: "Screenshot Generator Workflow.",
978
+ workflowClass: "ScreenshotGeneratorWorkflow",
979
+ inputType: "ScreenshotGeneratorInput",
980
+ outputType: "ScreenshotGeneratorOutput",
981
+ fields: [
982
+ {
983
+ name: "secret_key",
984
+ type: "text",
985
+ label: "Secret Key",
986
+ description:
987
+ "Secret key for authentication (required when WORKFLOW_SECRET_ENABLED=True)",
988
+ required: false,
989
+ default: null,
990
+ },
991
+ {
992
+ name: "rewrite_enabled",
993
+ type: "checkbox",
994
+ label: "Rewrite Enabled",
995
+ description:
996
+ "Make your content appear as fresh, original uploads. Bypasses duplicate detection and AI content filters on social platforms.",
997
+ required: false,
998
+ default: false,
999
+ },
1000
+ {
1001
+ name: "rewrite_device",
1002
+ type: "select",
1003
+ label: "Rewrite Device",
1004
+ description:
1005
+ "Make media appear as if created on this device. Adds authenticity and helps bypass platform detection. Random device if not specified.",
1006
+ required: false,
1007
+ default: null,
1008
+ options: [
1009
+ { value: "iPhone 17 Pro Max", label: "Iphone 17 Pro Max" },
1010
+ { value: "iPhone 17 Pro", label: "Iphone 17 Pro" },
1011
+ { value: "iPhone 17 Plus", label: "Iphone 17 Plus" },
1012
+ { value: "iPhone 17", label: "Iphone 17" },
1013
+ { value: "iPhone 16 Pro Max", label: "Iphone 16 Pro Max" },
1014
+ { value: "iPhone 16 Pro", label: "Iphone 16 Pro" },
1015
+ { value: "iPhone 16 Plus", label: "Iphone 16 Plus" },
1016
+ { value: "iPhone 16", label: "Iphone 16" },
1017
+ { value: "iPhone 15 Pro Max", label: "Iphone 15 Pro Max" },
1018
+ { value: "iPhone 15 Pro", label: "Iphone 15 Pro" },
1019
+ { value: "iPhone 15 Plus", label: "Iphone 15 Plus" },
1020
+ { value: "iPhone 15", label: "Iphone 15" },
1021
+ { value: "iPhone 14 Pro Max", label: "Iphone 14 Pro Max" },
1022
+ { value: "iPhone 14 Pro", label: "Iphone 14 Pro" },
1023
+ { value: "iPhone 14 Plus", label: "Iphone 14 Plus" },
1024
+ { value: "iPhone 14", label: "Iphone 14" },
1025
+ { value: "iPhone 13 Pro Max", label: "Iphone 13 Pro Max" },
1026
+ { value: "iPhone 13 Pro", label: "Iphone 13 Pro" },
1027
+ { value: "iPhone 13", label: "Iphone 13" },
1028
+ { value: "iPhone 13 mini", label: "Iphone 13 Mini" },
1029
+ {
1030
+ value: "Ray-Ban Meta Smart Glasses",
1031
+ label: "Ray-Ban Meta Smart Glasses",
1032
+ },
1033
+ ],
1034
+ },
1035
+ {
1036
+ name: "app_url",
1037
+ type: "text",
1038
+ label: "App Url",
1039
+ description: "App Store URL",
1040
+ required: false,
1041
+ default: null,
1042
+ },
1043
+ {
1044
+ name: "app_id",
1045
+ type: "text",
1046
+ label: "App Id",
1047
+ description: "Numeric App Store ID",
1048
+ required: false,
1049
+ default: null,
1050
+ },
1051
+ {
1052
+ name: "country",
1053
+ type: "text",
1054
+ label: "Country",
1055
+ description: "Country code for App Store lookup",
1056
+ required: false,
1057
+ default: "us",
1058
+ },
1059
+ {
1060
+ name: "app_title",
1061
+ type: "text",
1062
+ label: "App Title",
1063
+ description: "App title (overrides fetched)",
1064
+ required: false,
1065
+ default: null,
1066
+ },
1067
+ {
1068
+ name: "app_subtitle",
1069
+ type: "text",
1070
+ label: "App Subtitle",
1071
+ description: "App subtitle / tagline",
1072
+ required: false,
1073
+ default: null,
1074
+ },
1075
+ {
1076
+ name: "app_description",
1077
+ type: "textarea",
1078
+ label: "App Description",
1079
+ description: "App description (overrides fetched)",
1080
+ required: false,
1081
+ default: null,
1082
+ },
1083
+ {
1084
+ name: "primary_color",
1085
+ type: "text",
1086
+ label: "Primary Color",
1087
+ description: 'Primary brand color hex (e.g. "#4A90D9")',
1088
+ required: false,
1089
+ default: null,
1090
+ },
1091
+ {
1092
+ name: "secondary_color",
1093
+ type: "text",
1094
+ label: "Secondary Color",
1095
+ description: "Secondary brand color hex",
1096
+ required: false,
1097
+ default: null,
1098
+ },
1099
+ {
1100
+ name: "accent_color",
1101
+ type: "text",
1102
+ label: "Accent Color",
1103
+ description: "Accent color hex",
1104
+ required: false,
1105
+ default: null,
1106
+ },
1107
+ {
1108
+ name: "background_style",
1109
+ type: "text",
1110
+ label: "Background Style",
1111
+ description:
1112
+ "Background style: gradient, solid, abstract, blurred, minimal, dark, light",
1113
+ required: false,
1114
+ default: null,
1115
+ },
1116
+ {
1117
+ name: "design_style",
1118
+ type: "text",
1119
+ label: "Design Style",
1120
+ description:
1121
+ "Overall design style: modern, bold, playful, corporate, elegant, minimal, vibrant",
1122
+ required: false,
1123
+ default: null,
1124
+ },
1125
+ {
1126
+ name: "brand_keywords",
1127
+ type: "json",
1128
+ label: "Brand Keywords",
1129
+ description:
1130
+ 'Keywords describing the brand aesthetic (e.g. ["clean", "premium"])',
1131
+ required: false,
1132
+ default: null,
1133
+ },
1134
+ {
1135
+ name: "target_audience",
1136
+ type: "text",
1137
+ label: "Target Audience",
1138
+ description: 'Target audience (e.g. "young professionals", "parents")',
1139
+ required: false,
1140
+ default: null,
1141
+ },
1142
+ {
1143
+ name: "app_screenshots",
1144
+ type: "json",
1145
+ label: "App Screenshots",
1146
+ description:
1147
+ "The app's own existing screenshots (MUST be provided to be placed inside the device mockup)",
1148
+ required: true,
1149
+ default: null,
1150
+ validation: { minLength: 1 },
1151
+ },
1152
+ {
1153
+ name: "batches",
1154
+ type: "json",
1155
+ label: "Batches",
1156
+ description: "Reference screenshot batches — one per screenshot position",
1157
+ required: false,
1158
+ default: null,
1159
+ },
1160
+ {
1161
+ name: "num_screenshots",
1162
+ type: "number",
1163
+ label: "Num Screenshots",
1164
+ description: "",
1165
+ required: false,
1166
+ default: 6,
1167
+ validation: { min: 1, max: 10 },
1168
+ },
1169
+ {
1170
+ name: "aspect_ratio",
1171
+ type: "text",
1172
+ label: "Aspect Ratio",
1173
+ description: "Aspect ratio (9:16 for iPhone)",
1174
+ required: false,
1175
+ default: "9:16",
1176
+ },
1177
+ {
1178
+ name: "image_model",
1179
+ type: "text",
1180
+ label: "Image Model",
1181
+ description: "Image model ID from registry",
1182
+ required: false,
1183
+ default: "nano-banana-2",
1184
+ hidden: true,
1185
+ },
1186
+ {
1187
+ name: "image_model_params",
1188
+ type: "json",
1189
+ label: "Image Model Params",
1190
+ description: "",
1191
+ required: false,
1192
+ default: null,
1193
+ hidden: true,
1194
+ },
1195
+ ],
1196
+ };
1197
+
971
1198
  export const slideshow_to_video: WorkflowDefinition<
972
1199
  Types.SlideshowToVideoInput,
973
1200
  Types.SlideshowToVideoOutput
@@ -2272,6 +2499,7 @@ export const workflowRegistry = {
2272
2499
  ruby,
2273
2500
  saa_s_loom,
2274
2501
  saa_s_video,
2502
+ screenshot_generator,
2275
2503
  slideshow_to_video,
2276
2504
  slideshows_pinterest,
2277
2505
  speaking_doctor,
@@ -2305,6 +2533,7 @@ export type WorkflowInputMap = {
2305
2533
  ruby: Types.RubyInput;
2306
2534
  saa_s_loom: Types.SaaSLoomInput;
2307
2535
  saa_s_video: Types.SaaSVideoInput;
2536
+ screenshot_generator: Types.ScreenshotGeneratorInput;
2308
2537
  slideshow_to_video: Types.SlideshowToVideoInput;
2309
2538
  slideshows_pinterest: Types.SlideshowsPinterestInput;
2310
2539
  speaking_doctor: Types.SpeakingDoctorInput;
@@ -2317,6 +2546,7 @@ export type WorkflowOutputMap = {
2317
2546
  ruby: Types.RubyOutput;
2318
2547
  saa_s_loom: Types.SaaSLoomOutput;
2319
2548
  saa_s_video: Types.SaaSVideoOutput;
2549
+ screenshot_generator: Types.ScreenshotGeneratorOutput;
2320
2550
  slideshow_to_video: Types.SlideshowToVideoOutput;
2321
2551
  slideshows_pinterest: Types.SlideshowsPinterestOutput;
2322
2552
  speaking_doctor: Types.SpeakingDoctorOutput;
@@ -0,0 +1,329 @@
1
+ {
2
+ "$defs": {
3
+ "ScreenshotBatch": {
4
+ "description": "Reference screenshots for a single screenshot position.",
5
+ "properties": {
6
+ "position": {
7
+ "description": "Screenshot position (1-based)",
8
+ "maximum": 10,
9
+ "minimum": 1,
10
+ "title": "Position",
11
+ "type": "integer"
12
+ },
13
+ "headline": {
14
+ "anyOf": [
15
+ {
16
+ "type": "string"
17
+ },
18
+ {
19
+ "type": "null"
20
+ }
21
+ ],
22
+ "default": null,
23
+ "description": "Headline text to display on this screenshot",
24
+ "title": "Headline"
25
+ },
26
+ "sub_headline": {
27
+ "anyOf": [
28
+ {
29
+ "type": "string"
30
+ },
31
+ {
32
+ "type": "null"
33
+ }
34
+ ],
35
+ "default": null,
36
+ "description": "Supporting text below the headline",
37
+ "title": "Sub Headline"
38
+ },
39
+ "feature_description": {
40
+ "anyOf": [
41
+ {
42
+ "type": "string"
43
+ },
44
+ {
45
+ "type": "null"
46
+ }
47
+ ],
48
+ "default": null,
49
+ "description": "What feature or benefit this screenshot should highlight",
50
+ "title": "Feature Description"
51
+ },
52
+ "reference_urls": {
53
+ "description": "Reference screenshot URLs from similar apps for this position",
54
+ "items": {
55
+ "type": "string"
56
+ },
57
+ "title": "Reference Urls",
58
+ "type": "array"
59
+ }
60
+ },
61
+ "required": [
62
+ "position"
63
+ ],
64
+ "title": "ScreenshotBatch",
65
+ "type": "object"
66
+ }
67
+ },
68
+ "description": "Input for App Store screenshot generation.",
69
+ "properties": {
70
+ "secret_key": {
71
+ "anyOf": [
72
+ {
73
+ "type": "string"
74
+ },
75
+ {
76
+ "type": "null"
77
+ }
78
+ ],
79
+ "default": null,
80
+ "description": "Secret key for authentication (required when WORKFLOW_SECRET_ENABLED=True)",
81
+ "title": "Secret Key"
82
+ },
83
+ "rewrite_enabled": {
84
+ "default": false,
85
+ "description": "Make your content appear as fresh, original uploads. Bypasses duplicate detection and AI content filters on social platforms.",
86
+ "title": "Rewrite Enabled",
87
+ "type": "boolean"
88
+ },
89
+ "rewrite_device": {
90
+ "anyOf": [
91
+ {
92
+ "enum": [
93
+ "iPhone 17 Pro Max",
94
+ "iPhone 17 Pro",
95
+ "iPhone 17 Plus",
96
+ "iPhone 17",
97
+ "iPhone 16 Pro Max",
98
+ "iPhone 16 Pro",
99
+ "iPhone 16 Plus",
100
+ "iPhone 16",
101
+ "iPhone 15 Pro Max",
102
+ "iPhone 15 Pro",
103
+ "iPhone 15 Plus",
104
+ "iPhone 15",
105
+ "iPhone 14 Pro Max",
106
+ "iPhone 14 Pro",
107
+ "iPhone 14 Plus",
108
+ "iPhone 14",
109
+ "iPhone 13 Pro Max",
110
+ "iPhone 13 Pro",
111
+ "iPhone 13",
112
+ "iPhone 13 mini",
113
+ "Ray-Ban Meta Smart Glasses"
114
+ ],
115
+ "type": "string"
116
+ },
117
+ {
118
+ "type": "null"
119
+ }
120
+ ],
121
+ "default": null,
122
+ "description": "Make media appear as if created on this device. Adds authenticity and helps bypass platform detection. Random device if not specified.",
123
+ "title": "Rewrite Device"
124
+ },
125
+ "app_url": {
126
+ "anyOf": [
127
+ {
128
+ "type": "string"
129
+ },
130
+ {
131
+ "type": "null"
132
+ }
133
+ ],
134
+ "default": null,
135
+ "description": "App Store URL",
136
+ "title": "App Url"
137
+ },
138
+ "app_id": {
139
+ "anyOf": [
140
+ {
141
+ "type": "string"
142
+ },
143
+ {
144
+ "type": "null"
145
+ }
146
+ ],
147
+ "default": null,
148
+ "description": "Numeric App Store ID",
149
+ "title": "App Id"
150
+ },
151
+ "country": {
152
+ "default": "us",
153
+ "description": "Country code for App Store lookup",
154
+ "title": "Country",
155
+ "type": "string"
156
+ },
157
+ "app_title": {
158
+ "anyOf": [
159
+ {
160
+ "type": "string"
161
+ },
162
+ {
163
+ "type": "null"
164
+ }
165
+ ],
166
+ "default": null,
167
+ "description": "App title (overrides fetched)",
168
+ "title": "App Title"
169
+ },
170
+ "app_subtitle": {
171
+ "anyOf": [
172
+ {
173
+ "type": "string"
174
+ },
175
+ {
176
+ "type": "null"
177
+ }
178
+ ],
179
+ "default": null,
180
+ "description": "App subtitle / tagline",
181
+ "title": "App Subtitle"
182
+ },
183
+ "app_description": {
184
+ "anyOf": [
185
+ {
186
+ "type": "string"
187
+ },
188
+ {
189
+ "type": "null"
190
+ }
191
+ ],
192
+ "default": null,
193
+ "description": "App description (overrides fetched)",
194
+ "title": "App Description"
195
+ },
196
+ "primary_color": {
197
+ "anyOf": [
198
+ {
199
+ "type": "string"
200
+ },
201
+ {
202
+ "type": "null"
203
+ }
204
+ ],
205
+ "default": null,
206
+ "description": "Primary brand color hex (e.g. \"#4A90D9\")",
207
+ "title": "Primary Color"
208
+ },
209
+ "secondary_color": {
210
+ "anyOf": [
211
+ {
212
+ "type": "string"
213
+ },
214
+ {
215
+ "type": "null"
216
+ }
217
+ ],
218
+ "default": null,
219
+ "description": "Secondary brand color hex",
220
+ "title": "Secondary Color"
221
+ },
222
+ "accent_color": {
223
+ "anyOf": [
224
+ {
225
+ "type": "string"
226
+ },
227
+ {
228
+ "type": "null"
229
+ }
230
+ ],
231
+ "default": null,
232
+ "description": "Accent color hex",
233
+ "title": "Accent Color"
234
+ },
235
+ "background_style": {
236
+ "anyOf": [
237
+ {
238
+ "type": "string"
239
+ },
240
+ {
241
+ "type": "null"
242
+ }
243
+ ],
244
+ "default": null,
245
+ "description": "Background style: gradient, solid, abstract, blurred, minimal, dark, light",
246
+ "title": "Background Style"
247
+ },
248
+ "design_style": {
249
+ "anyOf": [
250
+ {
251
+ "type": "string"
252
+ },
253
+ {
254
+ "type": "null"
255
+ }
256
+ ],
257
+ "default": null,
258
+ "description": "Overall design style: modern, bold, playful, corporate, elegant, minimal, vibrant",
259
+ "title": "Design Style"
260
+ },
261
+ "brand_keywords": {
262
+ "description": "Keywords describing the brand aesthetic (e.g. [\"clean\", \"premium\"])",
263
+ "items": {
264
+ "type": "string"
265
+ },
266
+ "title": "Brand Keywords",
267
+ "type": "array"
268
+ },
269
+ "target_audience": {
270
+ "anyOf": [
271
+ {
272
+ "type": "string"
273
+ },
274
+ {
275
+ "type": "null"
276
+ }
277
+ ],
278
+ "default": null,
279
+ "description": "Target audience (e.g. \"young professionals\", \"parents\")",
280
+ "title": "Target Audience"
281
+ },
282
+ "app_screenshots": {
283
+ "description": "The app's own existing screenshots (MUST be provided to be placed inside the device mockup)",
284
+ "items": {
285
+ "type": "string"
286
+ },
287
+ "minItems": 1,
288
+ "title": "App Screenshots",
289
+ "type": "array"
290
+ },
291
+ "batches": {
292
+ "description": "Reference screenshot batches \u2014 one per screenshot position",
293
+ "items": {
294
+ "$ref": "#/$defs/ScreenshotBatch"
295
+ },
296
+ "title": "Batches",
297
+ "type": "array"
298
+ },
299
+ "num_screenshots": {
300
+ "default": 6,
301
+ "maximum": 10,
302
+ "minimum": 1,
303
+ "title": "Num Screenshots",
304
+ "type": "integer"
305
+ },
306
+ "aspect_ratio": {
307
+ "default": "9:16",
308
+ "description": "Aspect ratio (9:16 for iPhone)",
309
+ "title": "Aspect Ratio",
310
+ "type": "string"
311
+ },
312
+ "image_model": {
313
+ "default": "nano-banana-2",
314
+ "description": "Image model ID from registry",
315
+ "title": "Image Model",
316
+ "type": "string"
317
+ },
318
+ "image_model_params": {
319
+ "additionalProperties": true,
320
+ "title": "Image Model Params",
321
+ "type": "object"
322
+ }
323
+ },
324
+ "required": [
325
+ "app_screenshots"
326
+ ],
327
+ "title": "ScreenshotGeneratorInput",
328
+ "type": "object"
329
+ }
@@ -0,0 +1,118 @@
1
+ {
2
+ "$defs": {
3
+ "GeneratedScreenshot": {
4
+ "description": "A single generated App Store screenshot.",
5
+ "properties": {
6
+ "position": {
7
+ "description": "Screenshot position (1-based)",
8
+ "title": "Position",
9
+ "type": "integer"
10
+ },
11
+ "image_url": {
12
+ "description": "Generated screenshot URL",
13
+ "title": "Image Url",
14
+ "type": "string"
15
+ },
16
+ "headline": {
17
+ "anyOf": [
18
+ {
19
+ "type": "string"
20
+ },
21
+ {
22
+ "type": "null"
23
+ }
24
+ ],
25
+ "default": null,
26
+ "description": "Headline used",
27
+ "title": "Headline"
28
+ },
29
+ "prompt_used": {
30
+ "default": "",
31
+ "description": "Image generation prompt used",
32
+ "title": "Prompt Used",
33
+ "type": "string"
34
+ }
35
+ },
36
+ "required": [
37
+ "position",
38
+ "image_url"
39
+ ],
40
+ "title": "GeneratedScreenshot",
41
+ "type": "object"
42
+ }
43
+ },
44
+ "description": "Output from the screenshot generator workflow.",
45
+ "properties": {
46
+ "screenshots": {
47
+ "items": {
48
+ "$ref": "#/$defs/GeneratedScreenshot"
49
+ },
50
+ "title": "Screenshots",
51
+ "type": "array"
52
+ },
53
+ "app_title": {
54
+ "default": "",
55
+ "title": "App Title",
56
+ "type": "string"
57
+ },
58
+ "app_description": {
59
+ "anyOf": [
60
+ {
61
+ "type": "string"
62
+ },
63
+ {
64
+ "type": "null"
65
+ }
66
+ ],
67
+ "default": null,
68
+ "title": "App Description"
69
+ },
70
+ "total_generated": {
71
+ "default": 0,
72
+ "title": "Total Generated",
73
+ "type": "integer"
74
+ },
75
+ "prompts": {
76
+ "items": {
77
+ "type": "string"
78
+ },
79
+ "title": "Prompts",
80
+ "type": "array"
81
+ },
82
+ "best_reference_app": {
83
+ "anyOf": [
84
+ {
85
+ "type": "string"
86
+ },
87
+ {
88
+ "type": "null"
89
+ }
90
+ ],
91
+ "default": null,
92
+ "description": "Title of the best-rated reference app",
93
+ "title": "Best Reference App"
94
+ },
95
+ "reference_screenshots_used": {
96
+ "description": "URLs of the screenshots used as visual inspiration",
97
+ "items": {
98
+ "type": "string"
99
+ },
100
+ "title": "Reference Screenshots Used",
101
+ "type": "array"
102
+ },
103
+ "llm_prompt_sent": {
104
+ "default": "",
105
+ "description": "The exact prompt sent to the LLM",
106
+ "title": "Llm Prompt Sent",
107
+ "type": "string"
108
+ },
109
+ "llm_response_raw": {
110
+ "default": "",
111
+ "description": "The raw JSON response from the LLM",
112
+ "title": "Llm Response Raw",
113
+ "type": "string"
114
+ }
115
+ },
116
+ "title": "ScreenshotGeneratorOutput",
117
+ "type": "object"
118
+ }
package/types.ts CHANGED
@@ -493,6 +493,100 @@ export interface SaaSVideoOutput {
493
493
  generation_context?: Record<string, unknown>;
494
494
  }
495
495
 
496
+ export interface ScreenshotGeneratorInput {
497
+ /** Secret key for authentication (required when WORKFLOW_SECRET_ENABLED=True) */
498
+ secret_key?: string | null;
499
+ /** Make your content appear as fresh, original uploads. Bypasses duplicate detection and AI content filters on social platforms. */
500
+ rewrite_enabled?: boolean;
501
+ /** Make media appear as if created on this device. Adds authenticity and helps bypass platform detection. Random device if not specified. */
502
+ rewrite_device?:
503
+ | "iPhone 17 Pro Max"
504
+ | "iPhone 17 Pro"
505
+ | "iPhone 17 Plus"
506
+ | "iPhone 17"
507
+ | "iPhone 16 Pro Max"
508
+ | "iPhone 16 Pro"
509
+ | "iPhone 16 Plus"
510
+ | "iPhone 16"
511
+ | "iPhone 15 Pro Max"
512
+ | "iPhone 15 Pro"
513
+ | "iPhone 15 Plus"
514
+ | "iPhone 15"
515
+ | "iPhone 14 Pro Max"
516
+ | "iPhone 14 Pro"
517
+ | "iPhone 14 Plus"
518
+ | "iPhone 14"
519
+ | "iPhone 13 Pro Max"
520
+ | "iPhone 13 Pro"
521
+ | "iPhone 13"
522
+ | "iPhone 13 mini"
523
+ | "Ray-Ban Meta Smart Glasses"
524
+ | null;
525
+ /** App Store URL */
526
+ app_url?: string | null;
527
+ /** Numeric App Store ID */
528
+ app_id?: string | null;
529
+ /** Country code for App Store lookup */
530
+ country?: string;
531
+ /** App title (overrides fetched) */
532
+ app_title?: string | null;
533
+ /** App subtitle / tagline */
534
+ app_subtitle?: string | null;
535
+ /** App description (overrides fetched) */
536
+ app_description?: string | null;
537
+ /** Primary brand color hex (e.g. "#4A90D9") */
538
+ primary_color?: string | null;
539
+ /** Secondary brand color hex */
540
+ secondary_color?: string | null;
541
+ /** Accent color hex */
542
+ accent_color?: string | null;
543
+ /** Background style: gradient, solid, abstract, blurred, minimal, dark, light */
544
+ background_style?: string | null;
545
+ /** Overall design style: modern, bold, playful, corporate, elegant, minimal, vibrant */
546
+ design_style?: string | null;
547
+ /** Keywords describing the brand aesthetic (e.g. ["clean", "premium"]) */
548
+ brand_keywords?: string[];
549
+ /** Target audience (e.g. "young professionals", "parents") */
550
+ target_audience?: string | null;
551
+ /** The app's own existing screenshots (MUST be provided to be placed inside the device mockup) */
552
+ app_screenshots: string[];
553
+ /** Reference screenshot batches — one per screenshot position */
554
+ batches?: {
555
+ position: number;
556
+ headline?: string | null;
557
+ sub_headline?: string | null;
558
+ feature_description?: string | null;
559
+ reference_urls?: string[];
560
+ }[];
561
+ num_screenshots?: number;
562
+ /** Aspect ratio (9:16 for iPhone) */
563
+ aspect_ratio?: string;
564
+ /** Image model ID from registry */
565
+ image_model?: string;
566
+ image_model_params?: Record<string, unknown>;
567
+ }
568
+
569
+ export interface ScreenshotGeneratorOutput {
570
+ screenshots?: {
571
+ position: number;
572
+ image_url: string;
573
+ headline?: string | null;
574
+ prompt_used?: string;
575
+ }[];
576
+ app_title?: string;
577
+ app_description?: string | null;
578
+ total_generated?: number;
579
+ prompts?: string[];
580
+ /** Title of the best-rated reference app */
581
+ best_reference_app?: string | null;
582
+ /** URLs of the screenshots used as visual inspiration */
583
+ reference_screenshots_used?: string[];
584
+ /** The exact prompt sent to the LLM */
585
+ llm_prompt_sent?: string;
586
+ /** The raw JSON response from the LLM */
587
+ llm_response_raw?: string;
588
+ }
589
+
496
590
  export interface SlideshowToVideoInput {
497
591
  /** Secret key for authentication (required when WORKFLOW_SECRET_ENABLED=True) */
498
592
  secret_key?: string | null;