studio-lumiere-cli 0.1.6 → 0.1.8

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.
@@ -2,7 +2,19 @@ export const DEFAULT_IMAGE_COUNT = 4;
2
2
  export const UPSCALE_CREDIT_COST = 5;
3
3
  export const REFINE_CREDIT_COST = 5;
4
4
  export const GENERATE_CREDIT_COST = 5;
5
- export const VIDEO_GENERATION_CREDIT_COST = 20;
5
+ export const VIDEO_GENERATION_CREDIT_COST = 25;
6
+ export const VIDEO_DURATION_OPTIONS = [
7
+ { seconds: 7, label: '7 sec', credits: 35 },
8
+ ];
9
+ export const getVideoCreditCost = (seconds = 7) => {
10
+ if (seconds === 7)
11
+ return 35;
12
+ return 35;
13
+ };
14
+ export const MAX_USER_BACKGROUNDS = 12;
15
+ export const MAX_USER_PALETTE_COLORS = 12;
16
+ export const MAX_USER_GUIDELINE_ITEMS = 12;
17
+ export const MAX_GUIDELINE_TEXT_CHARS = 400;
6
18
  // Video Generation Configuration
7
19
  export const VIDEO_GENERATION_ENABLED = true;
8
20
  export const VIDEO_ENABLED_TEMPLATES = [
@@ -11,11 +23,33 @@ export const VIDEO_ENABLED_TEMPLATES = [
11
23
  'ear_model',
12
24
  'flatlay_creative',
13
25
  'floating_minimal',
26
+ 'solid_color_studio',
14
27
  'half_body_muse'
15
28
  ];
16
29
  export const isVideoEnabledTemplate = (templateId) => {
17
30
  return VIDEO_GENERATION_ENABLED && VIDEO_ENABLED_TEMPLATES.includes(templateId);
18
31
  };
32
+ export const VIDEO_PRESET_ENABLED_TEMPLATES = [
33
+ 'flatlay_creative',
34
+ 'floating_minimal',
35
+ 'solid_color_studio'
36
+ ];
37
+ export const isVideoPresetEnabledTemplate = (templateId) => {
38
+ return VIDEO_PRESET_ENABLED_TEMPLATES.includes(templateId);
39
+ };
40
+ export const VIDEO_STYLE_OPTIONS = [
41
+ { id: 'directors_cut', name: "Director's Cut", description: 'AI-directed cinematic motion' },
42
+ { id: 'zoom', name: 'Zoom', description: 'Slow cinematic zoom-in/zoom-out' },
43
+ { id: 'pan', name: 'Pan', description: 'Gentle horizontal camera move' },
44
+ { id: 'tilt', name: 'Tilt', description: 'Gentle vertical camera move' },
45
+ ];
46
+ //The camera isrotate, orbit, pan, or tilt. No yaw, no roll, no parallax rotation — a straight axial push-in only.
47
+ export const VIDEO_STYLE_PROMPTS = {
48
+ //zoom: 'Macro shot of a jewelry piece. Camera makes a slow, gentle slow push-in / zoom-in toward the jewelry, followed by a gentle slow pull-back / zoom-out. Straight axial push-in with very small pan. The jewelry remains still and centered. Motion is smooth, refined, cinematic with soft ease-in/out. DO NOT ROTATE THE JEWELRY!! ',
49
+ zoom: 'Macro shot of a jewerly piece. The jewelry is static and remains perfectly still. Camera slowly zooms in. 4K, professional jewelry photography.',
50
+ pan: 'Camera makes a slow HORIZONTAL pan across the jewelry. The jewelry remains still; the camera glides laterally with subtle parallax. Movement is elegant, cinematic, and intentionally styled (not mechanical). DO NOT ROTATE THE JEWELRY!! ',
51
+ tilt: 'Camera makes a slow VERTICAL tilt across the jewelry. The jewelry remains still; the camera glides vertically with a graceful, cinematic motion. Movement is elegant, stylized, and deliberate. DO NOT ROTATE THE JEWELRY!! '
52
+ };
19
53
  // Muse Configuration
20
54
  export const MUSE_ENABLED_TEMPLATES = ['half_body_muse'];
21
55
  export const MUSE_GENERATION_CREDIT_COST = 5; // Cost when generating WITH a Muse
@@ -23,6 +57,8 @@ export const MUSE_BATCH_SIZE = 3; // Variations generated per batch
23
57
  export const MUSE_BATCH_CREDIT_COST = GENERATE_CREDIT_COST * MUSE_BATCH_SIZE; // 15 credits per batch
24
58
  export const REQUIRED_MUSE_VARIATIONS = 3; // Exact number needed to finalize a Muse
25
59
  export const MAX_MUSES_PER_USER = 3;
60
+ export const JEWELRY_MACRO_QUALITY_PROMPT = 'Professional luxury jewelry macro photography. The jewelry is perfectly sharp and in primary focus. Diamonds are crystal clear with precise brilliant-cut faceting, razor-sharp facet junctions, perfect symmetry, and mirror-polished surfaces. High brilliance, fire and scintillation with realistic spectral dispersion. Ultra-detailed gemstone rendering with crisp reflections and pristine clarity. Background remains softly blurred with shallow depth of field.';
61
+ export const JEWELRY_MACRO_QUALITY_PROMPT_2 = 'The jewelry is the dominant focal point occupying the center of the frame, perfectly sharp and highly detailed.';
26
62
  export const isMuseEnabledTemplate = (templateId) => {
27
63
  return MUSE_ENABLED_TEMPLATES.includes(templateId);
28
64
  };
@@ -40,7 +76,8 @@ export const TEMPLATES = [
40
76
  { id: 'nail_french', name: 'French Manicure', value: 'classic french tip manicure', visualColor: '#FDF5E6' },
41
77
  { id: 'nail_natural', name: 'Natural & Clean', value: 'clean, natural unpainted nails with a clear healthy coat', visualColor: '#F3EFE0' },
42
78
  { id: 'nail_dark', name: 'Noir / Dark', value: 'chic dark black or burgundy nail polish', visualColor: '#1A1A1A' }
43
- ]
79
+ ],
80
+ hasModel: true
44
81
  },
45
82
  {
46
83
  id: 'neck_model',
@@ -60,10 +97,11 @@ export const TEMPLATES = [
60
97
  tertiaryCustomizationOptions: [
61
98
  { id: 'makeup_none', name: 'Bare / Natural', value: 'completely bare faced, no makeup, fresh natural skin', visualColor: '#FFF5EE' },
62
99
  { id: 'makeup_minimal', name: 'Minimal', value: 'subtle natural makeup with light foundation and soft neutral tones', visualColor: '#F5E6D3' },
63
- { id: 'makeup_soft', name: 'Soft Glam', value: 'polished elegant makeup with defined features, warm tones, sophisticated', visualColor: '#E8C4A8' },
100
+ { id: 'makeup_soft', name: 'Soft Glam', value: 'polished elegant makeup with defined features, warm tones, sophisticated, beauty-grade skin finish with refined retouching, smooth even complexion, minimal blemishes, pores noticeably reduced but still realistic (no plastic skin)', visualColor: '#E8C4A8' },
64
101
  { id: 'makeup_full', name: 'Full Glam', value: 'bold glamorous makeup with defined eyes, statement lips, high-fashion finish', visualColor: '#CD9575' },
65
102
  { id: 'makeup_editorial', name: 'Editorial / Artistic', value: 'artistic editorial makeup with creative elements, runway-inspired, avant-garde', visualColor: '#8B4513' }
66
- ]
103
+ ],
104
+ hasModel: true
67
105
  },
68
106
  {
69
107
  id: 'ear_model',
@@ -82,10 +120,11 @@ export const TEMPLATES = [
82
120
  tertiaryCustomizationOptions: [
83
121
  { id: 'makeup_none', name: 'Bare / Natural', value: 'completely bare faced, no makeup, fresh natural skin', visualColor: '#FFF5EE' },
84
122
  { id: 'makeup_minimal', name: 'Minimal', value: 'subtle natural makeup with light foundation and soft neutral tones', visualColor: '#F5E6D3' },
85
- { id: 'makeup_soft', name: 'Soft Glam', value: 'polished elegant makeup with defined features, warm tones, sophisticated', visualColor: '#E8C4A8' },
123
+ { id: 'makeup_soft', name: 'Soft Glam', value: 'polished elegant makeup with defined features, warm tones, sophisticated, beauty-grade skin finish with refined retouching, smooth even complexion, minimal blemishes, pores noticeably reduced but still realistic (no plastic skin)', visualColor: '#E8C4A8' },
86
124
  { id: 'makeup_full', name: 'Full Glam', value: 'bold glamorous makeup with defined eyes, statement lips, high-fashion finish', visualColor: '#CD9575' },
87
125
  { id: 'makeup_editorial', name: 'Editorial / Artistic', value: 'artistic editorial makeup with creative elements, runway-inspired, avant-garde', visualColor: '#8B4513' }
88
- ]
126
+ ],
127
+ hasModel: true
89
128
  },
90
129
  {
91
130
  id: 'flatlay_creative',
@@ -93,16 +132,47 @@ export const TEMPLATES = [
93
132
  description: 'Artistic arrangement on a textured surface, non-model.',
94
133
  visualUrl: '/template_flatlay.png',
95
134
  basePrompt: 'A high-end still life product photograph of the specific jewelry piece(s) shown. Artistically composed — may be arranged on a textured surface, displayed on a geometric pedestal or riser, or elevated on sculptural props. Sharp focus, professional studio lighting, natural shadows.',
96
- customizationLabel: 'Surface & Display',
135
+ customizationLabel: 'Material of the Display',
97
136
  customizationOptions: [
98
- { id: 'surf_marble', name: 'White Marble', value: 'placed on a luxurious white carrara marble surface', visualColor: '#F0F0F0' },
99
- { id: 'surf_stone', name: 'Dark Slate', value: 'placed on a textured dark grey slate stone surface', visualColor: '#2F4F4F' },
100
- { id: 'surf_velvet', name: 'Beige Velvet', value: 'placed on soft beige velvet fabric', visualColor: '#E3CDB8' },
101
- { id: 'surf_wood', name: 'Aged Wood', value: 'placed on rich, dark aged mahogany wood', visualColor: '#5C4033' },
102
- { id: 'surf_sand', name: 'Fine Sand', value: 'placed on rippled, fine white sand', visualColor: '#F5F5DC' },
103
- { id: 'surf_pedestal', name: 'Geometric Pedestal', value: 'displayed on a minimal matte geometric pedestal or cube, architectural and sculptural', visualColor: '#3D3D3D' },
104
- { id: 'surf_riser', name: 'Stone Riser', value: 'elevated on a raw natural stone riser or block, organic texture contrasting with polished jewelry', visualColor: '#8B8680' }
105
- ]
137
+ { id: 'surf_marble', name: 'White Marble', value: 'luxurious white carrara marble surface', visualColor: '#F0F0F0' },
138
+ { id: 'surf_stone', name: 'Dark Slate', value: 'textured dark grey slate stone surface', visualColor: '#2F4F4F' },
139
+ { id: 'surf_velvet', name: 'Beige Velvet', value: 'oft beige velvet fabric', visualColor: '#E3CDB8' },
140
+ { id: 'surf_wood', name: 'Aged Wood', value: 'rich, dark aged mahogany wood', visualColor: '#5C4033' },
141
+ { id: 'surf_sand', name: 'Fine Sand', value: 'rippled, fine white sand', visualColor: '#F5F5DC' },
142
+ { id: 'surf_ceramic', name: 'Ceramic', value: 'smooth matte ceramic with subtle handcrafted texture', visualColor: '#E6E1D8' },
143
+ { id: 'surf_travertine', name: 'Travertine', value: 'warm ivory travertine stone with subtle pitted texture', visualColor: '#E9DFC9' },
144
+ { id: 'surf_obsidian', name: 'Black Obsidian', value: 'glossy black obsidian with deep reflective sheen', visualColor: '#0F0F10' },
145
+ { id: 'surf_mirrored', name: 'Mirrored Glass', value: 'clean mirrored glass with soft reflections', visualColor: '#D6DDE5' },
146
+ { id: 'surf_brushed_metal', name: 'Brushed Metal', value: 'brushed champagne metal surface fine linear texture', visualColor: '#C7B9A5' },
147
+ { id: 'surf_frosted_acrylic', name: 'Frosted Acrylic', value: 'frosted acrylic with a soft diffused, milky translucence', visualColor: '#E8EDF0' },
148
+ { id: 'surf_stone_plain', name: 'Stone', value: 'smooth natural stone with subtle mineral texture', visualColor: '#8B8680' }
149
+ ],
150
+ secondaryCustomizationLabel: 'Display',
151
+ secondaryCustomizationOptions: [
152
+ { id: 'display_flat', name: 'Flat Display', value: 'jewelry piece(s) arranged directly on the surface with no additional structure', visualColor: '#F7F2EA', visualSvg: '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="none"><rect width="64" height="64" rx="12" fill="#F7F2EA"/><g stroke="#B8B1A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="14" y1="40" x2="50" y2="40"/><circle cx="32" cy="32" r="6"/></g></svg>' },
153
+ { id: 'display_geometric_pedestal', name: 'Geometric Pedestal', value: 'jewelry piece(s) displayed on top of a minimal matte geometric pedestal or cube, architectural and sculptural', visualColor: '#F7F2EA', visualSvg: '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="none"><rect width="64" height="64" rx="12" fill="#F7F2EA"/><g stroke="#B8B1A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="12" y="36" width="40" height="12" rx="2"/><path d="M20 36 L28 22 H36 L44 36 Z"/><rect x="24" y="14" width="16" height="6" rx="1"/></g></svg>' },
154
+ { id: 'display_minimal_plinth', name: 'Minimal Plinth', value: 'jewelry piece(s) centered on top of a minimal plinth or column, refined and sculptural', visualColor: '#F7F2EA', visualSvg: '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="none"><rect width="64" height="64" rx="12" fill="#F7F2EA"/><g stroke="#B8B1A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="18" y="38" width="28" height="10" rx="2"/><rect x="24" y="18" width="16" height="20" rx="2"/><line x1="20" y1="50" x2="44" y2="50"/></g></svg>' },
155
+ { id: 'display_cylindrical_column', name: 'Cylindrical Column', value: 'jewelry piece(s) elevated on top of a smooth cylindrical column with clean edges', visualColor: '#F7F2EA', visualSvg: '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="none"><rect width="64" height="64" rx="12" fill="#F7F2EA"/><g stroke="#B8B1A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><ellipse cx="32" cy="20" rx="12" ry="4"/><rect x="20" y="20" width="24" height="22" rx="2"/><ellipse cx="32" cy="42" rx="12" ry="4"/></g></svg>' },
156
+ { id: 'display_stepped_blocks', name: 'Stepped Blocks', value: 'jewelry piece(s) arranged on top of stepped blocks at staggered heights', visualColor: '#F7F2EA', visualSvg: '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="none"><rect width="64" height="64" rx="12" fill="#F7F2EA"/><g stroke="#B8B1A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="14" y="38" width="20" height="10" rx="2"/><rect x="30" y="30" width="20" height="18" rx="2"/><rect x="24" y="20" width="16" height="10" rx="2"/></g></svg>' },
157
+ { id: 'display_stone_fragment', name: 'Fragment Stand', value: 'jewelry piece(s) displayed on an irregular fragment, organic contrast to polished metal', visualColor: '#F7F2EA', visualSvg: '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="none"><rect width="64" height="64" rx="12" fill="#F7F2EA"/><g stroke="#B8B1A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 42 L22 26 L36 22 L50 30 L44 46 Z"/><circle cx="34" cy="20" r="4"/></g></svg>' },
158
+ { id: 'display_glass_riser', name: 'Riser', value: 'jewelry piece(s) elevated on top of a sleek riser form of the specified material with clean edges and a light, floating feel', visualColor: '#F7F2EA', visualSvg: '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="none"><rect width="64" height="64" rx="12" fill="#F7F2EA"/><g stroke="#B8B1A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="18" y="34" width="28" height="10" rx="2" stroke-dasharray="3 3"/><rect x="22" y="22" width="20" height="10" rx="2"/><circle cx="32" cy="16" r="3"/></g></svg>' },
159
+ { id: 'display_acrylic_cube', name: 'Cube', value: 'jewelry piece(s) displayed top of a cube form with soft refractions and crisp geometry', visualColor: '#F7F2EA', visualSvg: '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="none"><rect width="64" height="64" rx="12" fill="#F7F2EA"/><g stroke="#B8B1A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="18" y="26" width="24" height="22" rx="2"/><path d="M18 26 L26 18 H50 V40 L42 48"/><circle cx="32" cy="20" r="3"/></g></svg>' },
160
+ { id: 'display_metal_pedestal', name: 'Pedestal', value: 'jewelry piece(s) presented on a sctop of ulptural pedestal form with fine linear texture and precise edges', visualColor: '#F7F2EA', visualSvg: '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="none"><rect width="64" height="64" rx="12" fill="#F7F2EA"/><g stroke="#B8B1A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="16" y="36" width="32" height="12" rx="2"/><line x1="20" y1="40" x2="44" y2="40"/><line x1="20" y1="44" x2="44" y2="44"/><rect x="24" y="18" width="16" height="12" rx="2"/></g></svg>' },
161
+ { id: 'display_single_slab', name: 'Single Slab', value: 'jewelry piece(s) arranged on a single clean slab with crisp edges and minimal layering', visualColor: '#F7F2EA', visualSvg: '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="none"><rect width="64" height="64" rx="12" fill="#F7F2EA"/><g stroke="#B8B1A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="14" y="36" width="36" height="12" rx="2"/><circle cx="32" cy="30" r="4"/></g></svg>' },
162
+ { id: 'display_layered_slabs', name: 'Layered Slabs', value: 'jewelry piece(s) staged on top of layered slabs for a tiered architectural look', visualColor: '#F7F2EA', visualSvg: '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="none"><rect width="64" height="64" rx="12" fill="#F7F2EA"/><g stroke="#B8B1A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="14" y="38" width="36" height="8" rx="2"/><rect x="20" y="28" width="30" height="8" rx="2"/><rect x="26" y="18" width="24" height="8" rx="2"/></g></svg>' },
163
+ { id: 'display_arc_stand', name: 'Arc Stand', value: 'jewelry piece(s) framed by a minimal arc stand, modern and sculptural', visualColor: '#F7F2EA', visualSvg: '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" fill="none"><rect width="64" height="64" rx="12" fill="#F7F2EA"/><g stroke="#B8B1A8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 44 Q32 20 46 44"/><line x1="18" y1="44" x2="46" y2="44"/><circle cx="32" cy="26" r="3"/></g></svg>' }
164
+ ],
165
+ tertiaryCustomizationLabel: 'Camera Position',
166
+ tertiaryCustomizationOptions: [
167
+ { id: 'camera_overhead', name: 'Overhead', value: 'overhead top-down camera position, the camera is *ABOVE* the jewelry', visualColor: '#E6DED1' },
168
+ { id: 'camera_front', name: 'Front', value: 'front-facing camera position at a level angle', visualColor: '#DAD1C3' }
169
+ ],
170
+ quaternaryCustomizationLabel: 'Material State',
171
+ quaternaryCustomizationOptions: [
172
+ { id: 'material_state_pristine', name: 'Pristine', value: 'pristine, clean, refined material finish with even coloration and no visible wear, stains, or discoloration', visualColor: '#EFE7DD' },
173
+ { id: 'material_state_aged', name: 'Aged Patina', value: 'intentionally weathered, time-worn surface finish with subtle wear, micro-pitting, tiny inclusions, and softly uneven coloration; aged but refined; apply to the surface/background material only, keep the jewelry pristine', visualColor: '#B9A899' }
174
+ ],
175
+ hasModel: false
106
176
  },
107
177
  {
108
178
  id: 'floating_minimal',
@@ -116,22 +186,27 @@ export const TEMPLATES = [
116
186
  { id: 'light_hard', name: 'Hard Contrast', value: 'hard, dramatic direct lighting with sharp shadows', visualColor: '#000000' },
117
187
  { id: 'light_warm', name: 'Golden Glow', value: 'warm, golden sunset-hued lighting', visualColor: '#FFD700' },
118
188
  { id: 'light_cool', name: 'Cool Steel', value: 'cool, bluish steel-toned professional lighting', visualColor: '#B0C4DE' }
119
- ]
189
+ ],
190
+ hasModel: false
120
191
  },
121
192
  {
122
193
  id: 'half_body_muse',
123
194
  name: 'The Editorial Muse',
124
195
  description: 'A dynamic waist-up fashion shot showcasing how the jewelry complements a complete look.',
125
196
  visualUrl: '/template_muse.png',
126
- basePrompt: 'A waist-up medium shot of a sunningly beautiful [ETHNICITY] female model posing for an editorial. She is wearing the specific jewelry piece(s) shown. The composition focuses on how the jewelry accents her overall style. Authentic but smooth skin texture, flyaway hairs, cinematic lighting, shot on film.',
197
+ basePrompt: 'A waist-up medium shot of a sunningly beautiful [ETHNICITY] female model posing for an editorial. Face, head, and shoulders clearly visible. Hands may appear but must not be the primary subject. Do NOT crop to hands only. She is wearing the specific jewelry piece(s) shown. The composition focuses on how the jewelry accents her overall style. Beauty-grade skin refinement with smooth, even tone; pores reduced, minimal blemishes; still realistic (no plastic skin). Flyaway hairs, cinematic lighting, shot on film.',
127
198
  customizationLabel: 'Fashion Style & Outfit',
128
199
  customizationOptions: [
129
- { id: 'outfit_blazer', name: 'Power Suit (Blazer)', value: 'wearing a tailored blazer over a sophisticated inner layer. Confident, modern business-chic aesthetic', visualImage: '/power_blazer.png' },
200
+ { id: 'outfit_director_choice', name: 'Creative Director\'s Choice', value: 'let the stylist choose the most flattering outfit for the jewelry and selected mood; polished, high-fashion editorial styling; shoulders covered; no lingerie or overly revealing garments', visualColor: '#D9D2C8', visualImage: '/question.jpg' },
201
+ { id: 'outfit_blazer', name: 'Power Suit (Blazer)', value: 'wearing a tailored, structured blazer over a sophisticated inner layer. Defined shoulders, clean lines, confident modern business-chic aesthetic', visualImage: '/power_blazer.png' },
202
+ { id: 'outfit_tailored_jumpsuit', name: 'Tailored Jumpsuit', value: 'wearing a sleek tailored jumpsuit with long sleeves and a defined waist. Modern power silhouette; shoulders covered', visualColor: '#B9B1A7', visualImage: '/tailored_jumpsuit.jpg' },
130
203
  { id: 'outfit_evening', name: 'Evening Glamour', value: 'wearing a luxurious silk evening dress. Sophisticated, night-out aesthetic', visualImage: '/evening_glamour.png' },
204
+ { id: 'outfit_leather_jacket', name: 'Leather Jacket', value: 'wearing a sleek black leather jacket layered over the outfit. Structured silhouette, fashion-forward edge', visualColor: '#2B2B2B', visualImage: '/jacket.jpg' },
131
205
  { id: 'outfit_linen', name: 'Resort Linen', value: 'wearing a breezy linen ensemble (button-down or light dress). Relaxed, vacation-luxe aesthetic', visualImage: '/resort_linen.png' },
132
206
  { id: 'outfit_knit', name: 'Cashmere Knit', value: 'wearing a soft, textured cashmere sweater. Cozy, quiet-luxury aesthetic', visualImage: '/cashmere_outfit.png' },
133
207
  { id: 'outfit_silk', name: 'Silk Shirt', value: 'wearing an elegant unbuttoned silk collared shirt, effortlessly chic. Classic, timeless sophistication', visualImage: '/silk_shirt.png' },
134
- { id: 'outfit_turtleneck', name: 'Turtleneck', value: 'wearing a sleek fitted turtleneck. Clean, modern minimalist aesthetic that lets the jewelry stand out', visualImage: '/turtleneck.png' }
208
+ { id: 'outfit_turtleneck', name: 'Turtleneck', value: 'wearing a sleek fitted turtleneck. Clean, modern minimalist aesthetic that lets the jewelry stand out', visualImage: '/turtleneck.png' },
209
+ { id: 'outfit_tailored_trench', name: 'Tailored Trench', value: 'wearing a tailored trench coat or overcoat with a refined drape. Sophisticated outerwear styling', visualColor: '#CBBEA6', visualImage: '/trench_coat.jpg' }
135
210
  ],
136
211
  secondaryCustomizationLabel: 'Nail Polish',
137
212
  secondaryCustomizationOptions: [
@@ -145,20 +220,43 @@ export const TEMPLATES = [
145
220
  tertiaryCustomizationOptions: [
146
221
  { id: 'makeup_none', name: 'Bare / Natural', value: 'completely bare faced, no makeup, fresh natural skin', visualColor: '#FFF5EE' },
147
222
  { id: 'makeup_minimal', name: 'Minimal', value: 'subtle natural makeup with light foundation and soft neutral tones', visualColor: '#F5E6D3' },
148
- { id: 'makeup_soft', name: 'Soft Glam', value: 'polished elegant makeup with defined features, warm tones, sophisticated', visualColor: '#E8C4A8' },
223
+ { id: 'makeup_soft', name: 'Soft Glam', value: 'polished elegant makeup with defined features, warm tones, sophisticated, beauty-grade skin finish with refined retouching, smooth even complexion, minimal blemishes, pores noticeably reduced but still realistic (no plastic skin)', visualColor: '#E8C4A8' },
149
224
  { id: 'makeup_full', name: 'Full Glam', value: 'bold glamorous makeup with defined eyes, statement lips, high-fashion finish', visualColor: '#CD9575' },
150
225
  { id: 'makeup_editorial', name: 'Editorial / Artistic', value: 'artistic editorial makeup with creative elements, runway-inspired, avant-garde', visualColor: '#8B4513' }
151
226
  ],
152
227
  quaternaryCustomizationLabel: 'Poses & Expressions',
153
228
  quaternaryCustomizationOptions: [
154
- { id: 'pose_winking', name: 'Winking', value: 'playfully winking at the camera with a confident smile', visualColor: '#F5F0EB', visualSvg: '<svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="20" cy="20" r="18" stroke="#A68A6B" stroke-width="1.5"/><line x1="11" y1="15" x2="17" y2="15" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round"/><circle cx="28" cy="15" r="2" fill="#A68A6B"/><path d="M13 26 Q20 31 27 26" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round" fill="none"/></svg>' },
155
- { id: 'pose_grimace', name: 'Playful Grimace', value: 'making a cute, playful grimace or scrunching nose, full of personality', visualColor: '#F5F0EB', visualSvg: '<svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="20" cy="20" r="18" stroke="#A68A6B" stroke-width="1.5"/><circle cx="14" cy="14" r="2" fill="#A68A6B"/><circle cx="26" cy="14" r="2" fill="#A68A6B"/><path d="M14 18 Q17 16 20 18 Q23 16 26 18" stroke="#A68A6B" stroke-width="1" stroke-linecap="round" fill="none"/><path d="M13 26 L16 24 L19 26 L22 24 L25 26 L28 24" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/></svg>' },
156
- { id: 'pose_teasing', name: 'Teasing / Tongue Out', value: 'playfully sticking tongue out slightly, teasing and fun expression', visualColor: '#F5F0EB', visualSvg: '<svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="20" cy="20" r="18" stroke="#A68A6B" stroke-width="1.5"/><circle cx="14" cy="15" r="2" fill="#A68A6B"/><circle cx="26" cy="15" r="2" fill="#A68A6B"/><ellipse cx="20" cy="26" rx="4" ry="2.5" stroke="#A68A6B" stroke-width="1.5" fill="none"/><ellipse cx="20" cy="29" rx="2.5" ry="2" fill="#C4AD91"/></svg>' },
157
- { id: 'pose_kiss', name: 'Blowing a Kiss', value: 'blowing a kiss towards the camera, hand near mouth, flirty and fun', visualColor: '#F5F0EB', visualSvg: '<svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="20" cy="20" r="18" stroke="#A68A6B" stroke-width="1.5"/><circle cx="14" cy="15" r="2" fill="#A68A6B"/><circle cx="26" cy="15" r="2" fill="#A68A6B"/><path d="M18 25 Q20 28 22 25" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round" fill="none"/><path d="M30 8 L31 5 L33 7 Z" fill="#A68A6B" opacity="0.6"/><path d="M33 10 L35 8 L36 11 Z" fill="#A68A6B" opacity="0.4"/></svg>' },
158
- { id: 'pose_laughing', name: 'Candid Laugh', value: 'throwing head back in genuine, unposed laughter, joyous and radiant', visualColor: '#F5F0EB', visualSvg: '<svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="20" cy="20" r="18" stroke="#A68A6B" stroke-width="1.5"/><path d="M11 14 Q14 11 17 14" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round" fill="none"/><path d="M23 14 Q26 11 29 14" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round" fill="none"/><path d="M12 24 Q20 32 28 24" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round" fill="none"/><line x1="12" y1="24" x2="28" y2="24" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round"/></svg>' },
159
- { id: 'pose_pout', name: 'Model Pout', value: 'serious high-fashion model pout, intense gaze, editorial attitude', visualColor: '#F5F0EB', visualSvg: '<svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="20" cy="20" r="18" stroke="#A68A6B" stroke-width="1.5"/><line x1="11" y1="12" x2="17" y2="14" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round"/><line x1="29" y1="12" x2="23" y2="14" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round"/><circle cx="14" cy="16" r="1.5" fill="#A68A6B"/><circle cx="26" cy="16" r="1.5" fill="#A68A6B"/><ellipse cx="20" cy="27" rx="5" ry="2.5" fill="#C4AD91" opacity="0.3" stroke="#A68A6B" stroke-width="1.5"/></svg>' },
160
- { id: 'pose_peace', name: 'Peace Sign', value: 'holding up a peace sign near face, cute and casual vibe', visualColor: '#F5F0EB', visualSvg: '<svg viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="20" cy="20" r="18" stroke="#A68A6B" stroke-width="1.5"/><circle cx="14" cy="15" r="2" fill="#A68A6B"/><circle cx="26" cy="15" r="2" fill="#A68A6B"/><path d="M14 25 Q20 29 26 25" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round" fill="none"/><line x1="33" y1="4" x2="31" y2="13" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round"/><line x1="36" y1="7" x2="34" y2="13" stroke="#A68A6B" stroke-width="1.5" stroke-linecap="round"/><path d="M30 13 Q32 14 35 13" stroke="#A68A6B" stroke-width="1" stroke-linecap="round" fill="none"/></svg>' }
161
- ]
229
+ { id: 'pose_winking', name: 'Winking', value: 'playfully winking at the camera with a confident smile', visualColor: '#F5F0EB', visualImage: '/poses/thumb/winking.jpg' },
230
+ { id: 'pose_kiss', name: 'Blowing a Kiss', value: 'blowing a kiss towards the camera, hand near mouth, flirty and fun', visualColor: '#F5F0EB', visualImage: '/poses/thumb/blowing_kiss.jpg' },
231
+ { id: 'pose_laughing', name: 'Candid Laugh', value: 'throwing head back in genuine, unposed laughter, joyous and radiant', visualColor: '#F5F0EB', visualImage: '/poses/thumb/candid_laugh.jpg' },
232
+ { id: 'pose_pout', name: 'Model Pout', value: 'serious high-fashion model pout, intense gaze, editorial attitude', visualColor: '#F5F0EB', visualImage: '/poses/thumb/model_pout.jpg' },
233
+ { id: 'pose_power_tilt', name: 'Power Tilt', value: 'chin raised with a subtle head tilt, confident gaze, strong editorial attitude', visualColor: '#F5F0EB', visualImage: '/poses/thumb/power_tilt.jpg' },
234
+ { id: 'pose_hand_ear', name: 'Hand to Ear', value: 'hand lifted near ear or temple, poised and composed, earrings visible if present', visualColor: '#F5F0EB', visualImage: '/poses/thumb/hand_to_ear.jpg' },
235
+ { id: 'pose_over_shoulder', name: 'Over-Shoulder', value: 'over-shoulder turn with elongated neck, subtle intensity, editorial confidence', visualColor: '#F5F0EB', visualImage: '/poses/thumb/over_shoulder.jpg' }
236
+ ],
237
+ quinaryCustomizationLabel: 'Accessories & Styling',
238
+ quinaryCustomizationOptions: [
239
+ { id: 'accessory_sunglasses', name: 'Tinted Sunglasses', value: 'wearing refined tinted sunglasses with lenses translucent enough to clearly see the eyes; bold editorial styling; shoulders fully covered', visualColor: '#D9D9D9' },
240
+ { id: 'accessory_silk_scarf', name: 'Silk Scarf', value: 'silk scarf styled at the neck or in the hair; elegant and refined; shoulders covered', visualColor: '#E7D4C8' },
241
+ { id: 'accessory_silk_headband', name: 'Silk Headband', value: 'silk headband or hair wrap with refined styling; face unobstructed; shoulders covered', visualColor: '#BFA88F' },
242
+ { id: 'accessory_sheer_gloves', name: 'Sheer Gloves', value: 'sheer mesh or fingerless gloves for editorial edge; keep rings and bracelets visible if present; shoulders covered', visualColor: '#DAD1C8' },
243
+ { id: 'accessory_statement_belt', name: 'Statement Belt', value: 'bold waist belt or cinch over the outfit; polished and fashion-forward; shoulders covered', visualColor: '#7A6A58' },
244
+ { id: 'accessory_silk_bandana', name: 'Silk Bandana', value: 'silk bandana styled as a head wrap or tied at the neck; refined styling; shoulders covered', visualColor: '#D8C7B8' },
245
+ { id: 'accessory_silk_tie', name: 'Silk Necktie', value: 'sleek silk necktie or ribbon tie styled at the collar; fashion-forward tailoring; shoulders covered', visualColor: '#B7A091' },
246
+ { id: 'accessory_hair_clip', name: 'Hair Clip', value: 'sleek hair clip or barrette with clean styling; face unobstructed; shoulders covered', visualColor: '#CBBBAA' },
247
+ { id: 'accessory_beret', name: 'Beret', value: 'structured beret angled back so the face remains fully visible; editorial sophistication; shoulders covered', visualColor: '#5C4B3B' },
248
+ { id: 'accessory_wide_brim_hat', name: 'Wide-Brim Hat', value: 'wide-brim hat tilted back so the face and eyes remain visible; editorial sophistication; shoulders covered', visualColor: '#4E4138' },
249
+ { id: 'accessory_leather_gloves', name: 'Leather Gloves', value: 'sleek leather gloves with a tailored fit; keep rings and bracelets visible if present; shoulders covered', visualColor: '#2F2A26' }
250
+ ],
251
+ hasModel: true
252
+ },
253
+ {
254
+ id: 'solid_color_studio',
255
+ name: 'Solid Color Studio',
256
+ description: 'Minimalist product shot on a pure solid backdrop.',
257
+ visualUrl: '/template_solid_color.svg',
258
+ basePrompt: 'A high-end studio product photograph of the specific jewelry piece(s) shown. Clean, minimal composition with the jewelry centered and sharply rendered. Natural shadows and professional lighting.',
259
+ hasModel: false
162
260
  },
163
261
  {
164
262
  id: 'romance_proposal',
@@ -190,7 +288,8 @@ export const TEMPLATES = [
190
288
  { id: 'nail_french', name: 'French Manicure', value: 'classic french tip manicure', visualColor: '#FDF5E6' },
191
289
  { id: 'nail_natural', name: 'Natural & Clean', value: 'clean, natural unpainted nails with a clear healthy coat', visualColor: '#F3EFE0' },
192
290
  { id: 'nail_dark', name: 'Noir / Dark', value: 'chic dark black or burgundy nail polish', visualColor: '#1A1A1A' }
193
- ]
291
+ ],
292
+ hasModel: true
194
293
  },
195
294
  {
196
295
  id: 'museum_exhibit',
@@ -212,7 +311,8 @@ export const TEMPLATES = [
212
311
  { id: 'display_stand', name: 'Open Display on Stand', value: 'displayed openly on a minimal museum stand, accessible and commanding', visualColor: '#C0C0C0' },
213
312
  { id: 'display_wall', name: 'Museum Wall Mount', value: 'mounted on museum wall with professional track lighting and descriptive placard', visualColor: '#F5F5DC' },
214
313
  { id: 'display_alcove', name: 'Illuminated Alcove', value: 'placed in an illuminated alcove with dramatic recessed lighting and shadow play', visualColor: '#2C2C2C' }
215
- ]
314
+ ],
315
+ hasModel: false
216
316
  },
217
317
  {
218
318
  id: 'romantic_mood',
@@ -236,15 +336,16 @@ export const TEMPLATES = [
236
336
  { id: 'mood_moody', name: 'Moody & Dark', value: 'dark and dramatic mood with deep shadows, single warm light source, chiaroscuro romance, mysterious and intense', visualColor: '#2C1810' },
237
337
  { id: 'mood_golden', name: 'Golden Hour Glow', value: 'rich golden hour warmth, everything bathed in honeyed light, long soft shadows, magic hour romance', visualColor: '#A68A6B' },
238
338
  { id: 'mood_blush', name: 'Blush Pink Haze', value: 'soft blush pink and rose tones, dreamy and feminine, slightly hazy and ethereal, Valentine energy', visualColor: '#F4C2C2' }
239
- ]
339
+ ],
340
+ hasModel: false
240
341
  }
241
342
  ];
242
343
  export const SKIN_TONES = [
243
- { id: 'fair', name: 'Porcelain', value: 'very fair porcelain skin tone with natural pink undertones', visualColor: '#F3EFE0' },
244
- { id: 'light', name: 'Light', value: 'light skin tone with warm undertones and natural texture', visualColor: '#EBCFB8' },
245
- { id: 'medium', name: 'Tan', value: 'sun-kissed tan medium skin tone with golden glow', visualColor: '#D3A377' },
246
- { id: 'deep', name: 'Deep', value: 'rich deep bronze skin tone with natural highlights', visualColor: '#8D5524' },
247
- { id: 'dark', name: 'Ebony', value: 'deep ebony skin tone with luminous sheen', visualColor: '#422816' },
344
+ { id: 'fair', name: 'Porcelain', value: 'very fair porcelain skin tone with natural pink undertones; beautiful smooth skin', visualColor: '#F3EFE0' },
345
+ { id: 'light', name: 'Light', value: 'light skin tone with warm undertones and natural texture; beautiful smooth skin', visualColor: '#EBCFB8' },
346
+ { id: 'medium', name: 'Tan', value: 'sun-kissed tan medium skin tone with golden glow; beautiful smooth skin', visualColor: '#D3A377' },
347
+ { id: 'deep', name: 'Deep', value: 'rich deep bronze skin tone with natural highlights; beautiful smooth skin', visualColor: '#8D5524' },
348
+ { id: 'dark', name: 'Ebony', value: 'deep ebony skin tone with luminous sheen; beautiful smooth skin', visualColor: '#422816' },
248
349
  ];
249
350
  // Regional descriptors for adding diversity within ethnicities
250
351
  export const ETHNICITY_REGIONS = {
@@ -278,12 +379,17 @@ export const ETHNICITIES = [
278
379
  ];
279
380
  export const HAIR_COLORS = [
280
381
  { id: 'dark', name: 'Jet Black', value: 'deep jet black hair with a natural healthy sheen', visualColor: '#000000' },
281
- { id: 'brunette', name: 'Rich Brunette', value: 'rich chocolate brown brunette hair with subtle highlights', visualColor: '#4A3728' },
382
+ { id: 'brunette', name: 'Rich Brunette', value: 'rich chocolate brown hair with subtle lowlights and shine', visualColor: '#4A3728' },
383
+ { id: 'light_brown', name: 'Light Brown', value: 'natural light brown hair with soft warmth and dimension', visualColor: '#7A5A3A' },
384
+ { id: 'natural_blonde', name: 'Natural Blonde', value: 'soft natural blonde hair with balanced warmth and subtle highlights', visualColor: '#DDBB7E' },
282
385
  { id: 'honey_blonde', name: 'Honey Blonde', value: 'warm honey blonde hair with golden tones', visualColor: '#D4AF37' },
283
- { id: 'blonde', name: 'Platinum Blonde', value: 'cool platinum blonde hair, sleek and modern', visualColor: '#F5F5DC' },
386
+ { id: 'blonde', name: 'Platinum / Icy Blonde', value: 'cool platinum blonde hair with an icy, sleek finish', visualColor: '#F5F5DC' },
284
387
  { id: 'strawberry', name: 'Strawberry Blonde', value: 'soft strawberry blonde hair with warm reddish-gold undertones', visualColor: '#E6CBA5' },
388
+ { id: 'copper_red', name: 'Copper Red', value: 'vibrant copper red hair with glossy warmth and natural depth', visualColor: '#C66A2F' },
389
+ { id: 'chestnut_red', name: 'Chestnut Red', value: 'rich chestnut red hair with warm brown undertones', visualColor: '#8B4A2B' },
285
390
  { id: 'auburn', name: 'Deep Auburn', value: 'intense deep auburn red hair with rich copper highlights', visualColor: '#8D4004' },
286
- { id: 'silver', name: 'Silver / Grey', value: 'sophisticated luminous silver grey hair', visualColor: '#C0C0C0' },
391
+ { id: 'mahogany', name: 'Mahogany', value: 'deep mahogany red-brown hair with subtle wine undertones', visualColor: '#6B2E2E' },
392
+ { id: 'silver', name: 'Metallic Silver', value: 'high-shine metallic silver hair with a cool chrome sheen', visualColor: '#BFC3C7' },
287
393
  ];
288
394
  export const BACKGROUNDS = [
289
395
  { id: 'none', name: 'None', value: '', visualColor: 'transparent' },
@@ -296,17 +402,154 @@ export const BACKGROUNDS = [
296
402
  { id: 'champagne_gold', name: 'Champagne Gold', value: 'shimmering champagne gold satin with soft metallic luster', visualColor: '#D4AF37' },
297
403
  { id: 'navy_sapphire', name: 'Navy Sapphire', value: 'deep navy sapphire velvet with dark jewel-toned richness', visualColor: '#0A1A3F' },
298
404
  { id: 'blush_rose', name: 'Blush Rosé', value: 'delicate blush rosé silk with soft pink warmth', visualColor: '#E8C4C4' },
299
- { id: 'ivory_pearl', name: 'Ivory Pearl', value: 'luminous ivory pearl satin with subtle iridescent sheen', visualColor: '#FAF0E6' },
300
- { id: 'slate_charcoal', name: 'Slate Charcoal', value: 'sophisticated slate charcoal linen with muted dark texture', visualColor: '#36454F' }
405
+ { id: 'ivory_pearl', name: 'Ivory Pearl', value: 'luminous ivory pearl satin with subtle iridescent sheen', visualColor: '#FAF0E6' }
406
+ ];
407
+ export const SOLID_COLOR_PALETTE = [
408
+ { id: 'solid_white', name: 'Pure White', value: '[SOLID_BG] EXACT color #FFFFFF / RGB(255,255,255).', visualColor: '#FFFFFF' },
409
+ { id: 'solid_black', name: 'Pure Black', value: '[SOLID_BG] EXACT color #000000 / RGB(0,0,0).', visualColor: '#000000' },
410
+ { id: 'solid_cream', name: 'Cream Silk', value: '[SOLID_BG] EXACT color #FDFBD4 / RGB(253,251,212).', visualColor: '#FDFBD4' },
411
+ { id: 'solid_midnight', name: 'Midnight Velvet', value: '[SOLID_BG] EXACT color #1A1A1A / RGB(26,26,26).', visualColor: '#1A1A1A' },
412
+ { id: 'solid_marble', name: 'Carrara Marble', value: '[SOLID_BG] EXACT color #F0F0F0 / RGB(240,240,240).', visualColor: '#F0F0F0' },
413
+ { id: 'solid_emerald', name: 'Emerald Velvet', value: '[SOLID_BG] EXACT color #1B4332 / RGB(27,67,50).', visualColor: '#1B4332' },
414
+ { id: 'solid_beige', name: 'Warm Beige', value: '[SOLID_BG] EXACT color #E3CDB8 / RGB(227,205,184).', visualColor: '#E3CDB8' },
415
+ { id: 'solid_burgundy', name: 'Burgundy Velvet', value: '[SOLID_BG] EXACT color #4A0020 / RGB(74,0,32).', visualColor: '#4A0020' },
416
+ { id: 'solid_champagne', name: 'Champagne Gold', value: '[SOLID_BG] EXACT color #D4AF37 / RGB(212,175,55).', visualColor: '#D4AF37' },
417
+ { id: 'solid_navy', name: 'Navy Sapphire', value: '[SOLID_BG] EXACT color #0A1A3F / RGB(10,26,63).', visualColor: '#0A1A3F' },
418
+ { id: 'solid_blush', name: 'Blush Rosé', value: '[SOLID_BG] EXACT color #E8C4C4 / RGB(232,196,196).', visualColor: '#E8C4C4' },
419
+ { id: 'solid_ivory', name: 'Ivory Pearl', value: '[SOLID_BG] EXACT color #FAF0E6 / RGB(250,240,230).', visualColor: '#FAF0E6' }
301
420
  ];
302
421
  export const LUXURY_INTERIOR_POOL = [
303
422
  'softly blurred background of a high-end luxury Parisian apartment interior, bokeh effect',
304
423
  'softly blurred background of a refined Milanese palazzo interior, warm marble and ornate mouldings, bokeh effect',
305
424
  'softly blurred background of a grand London townhouse interior, rich wood paneling and soft velvet, bokeh effect',
306
- //'softly blurred background of an opulent Moroccan riad interior, intricate zellige tiles and arched doorways, bokeh effect',
307
425
  'softly blurred background of a sleek modern penthouse interior, floor-to-ceiling windows and neutral tones, bokeh effect',
308
426
  'softly blurred background of a classic Viennese salon interior, gilded mirrors and crystal chandeliers, bokeh effect',
309
427
  ];
428
+ export const LUXURY_INTERIOR_CAMPAIGN_POOL = [
429
+ 'softly blurred background of an ultra-luxe penthouse where a monolithic sculptural stair floats over a mirror-black pool, laser-cut light beams and haze creating a high-drama glow, bokeh effect',
430
+ 'softly blurred background of a maximalist grand salon drenched in crimson velvet, towering mirrored walls, and a chandelier the size of a small car, cinematic glow, bokeh effect',
431
+ 'softly blurred background of a gallery-mansion interior with a neon art wall, massive chrome installation, and stark high-contrast lighting, bokeh effect',
432
+ 'softly blurred background of a palatial duplex with double-height ceilings, colossal drapery, and a skylight casting theatrical shafts of light, bokeh effect',
433
+ 'softly blurred background of a luxury interior built around an indoor waterfall spilling into a reflective black-stone basin, shimmering reflections, bokeh effect',
434
+ 'softly blurred background of a curated gallery-luxe apartment with a rotating statement art plinth, bold geometric furniture, and theatrical spotlighting, bokeh effect',
435
+ 'softly blurred background of a dramatic library-lounge with towering shelves, deep jewel-tone velvet, and a suspended light sculpture, warm cinematic glow, bokeh effect',
436
+ 'softly blurred background of a skyline-facing duplex interior with panoramic city lights, razor-sharp chiaroscuro, and molten metallic accents, bokeh effect',
437
+ 'softly blurred background of a vaulted hall with oversized arched windows, floor-to-ceiling mirrors, and a luminous foggy glow, bokeh effect',
438
+ 'softly blurred background of a jet-black marble atrium with a floating glass walkway and bold uplighting from below, bokeh effect'
439
+ ];
440
+ export const CAMPAIGN_LUXURY_INTERIOR_STYLES = [
441
+ { id: 'grand_luxe', name: 'Grand Luxe' },
442
+ { id: 'surreal_architecture', name: 'Surreal Architecture' },
443
+ { id: 'cinematic_narrative', name: 'Cinematic Narrative' },
444
+ { id: 'ultra_minimal', name: 'Ultra-Minimal Hyper-Lux' },
445
+ { id: 'fashion_show', name: 'Fashion-Show Energy' },
446
+ { id: 'hyper_luxury_materials', name: 'Hyper-Luxury Materials' },
447
+ { id: 'light_spectacle', name: 'Light Spectacle' }
448
+ ];
449
+ export const LUXURY_INTERIOR_SURREAL_ARCH_POOL = [
450
+ 'impossible cathedral-scale interior with floating marble platforms, gravity-defying staircases spiraling through open voids, monumental arches dissolving into mist, reflective black stone floors, cinematic volumetric light rays cutting through the space, ultra-luxury surreal architecture, softly blurred background, shallow depth of field, bokeh',
451
+ 'vast mirrored atrium stretching hundreds of meters tall, layered balconies and suspended bridges repeating into infinity, polished obsidian walls reflecting light like liquid metal, golden sunbeams piercing drifting atmospheric haze, dreamlike luxury architecture, softly blurred background, bokeh',
452
+ 'endless hall of monumental portals carved from pale travertine and brushed brass, each doorway revealing another impossible chamber beyond, mirrored floors reflecting cascading light, surreal spatial recursion, cinematic lighting, softly blurred background, bokeh',
453
+ 'multi-level luxury interior where the ceiling opens into a luminous cosmic void, sweeping architectural ribbons of glass and marble twisting through space, reflective pools and glowing stone surfaces, grand futuristic palace atmosphere, softly blurred background, cinematic depth, bokeh'
454
+ ];
455
+ export const LUXURY_INTERIOR_CINEMATIC_NARRATIVE_POOL = [
456
+ 'ultra-luxury penthouse gala afterparty scene, velvet lounge seating, glowing marble bar, champagne towers catching warm light, city skyline reflections through towering glass walls, cinematic haze and dramatic lighting, softly blurred background, bokeh',
457
+ 'private museum takeover, monumental sculptures under sharp gallery spotlights, polished stone floors reflecting light, velvet ropes and elegant architectural shadows, quiet high-society atmosphere, softly blurred background, shallow depth of field',
458
+ 'high-security luxury showroom resembling a vault chamber, glowing glass display cases embedded in dark stone walls, dramatic overhead beams of light cutting through mist, futuristic elite atmosphere, softly blurred background, cinematic bokeh',
459
+ 'exclusive auction chamber deep inside a luxury vault, spotlight illuminating a central pedestal, velvet ropes, marble floors reflecting golden light, subtle fog drifting through beams, tense cinematic ambiance, softly blurred background'
460
+ ];
461
+ export const LUXURY_INTERIOR_ULTRA_MINIMAL_POOL = [
462
+ 'monumental ultra-minimal interior carved from seamless white stone, a single brutalist monolith rising from a mirror-polished floor, vast negative space, soft natural light washing across architectural planes, serene luxury minimalism, softly blurred background',
463
+ 'silent gallery space with towering walls and a single sculptural plinth at center, diffuse skylight illuminating polished concrete floors, expansive architectural emptiness, museum-like tranquility, softly blurred background, bokeh',
464
+ 'hyper-minimal black stone interior with a floating architectural slab suspended above a reflective floor, dramatic contrast lighting and deep shadows, ultra-luxury modernism, softly blurred background',
465
+ 'vast minimalist architectural void where a single beam of light cuts across a monolithic interior volume, polished stone surfaces reflecting subtle glow, meditative luxury design, softly blurred background'
466
+ ];
467
+ export const LUXURY_INTERIOR_FASHION_SHOW_POOL = [
468
+ 'high-fashion runway stage inside a monumental architectural hall, dramatic spotlight rigs casting beams through atmospheric haze, glossy black runway reflecting light like liquid glass, elite fashion show atmosphere, softly blurred background, cinematic bokeh',
469
+ 'backstage couture salon glowing with soft studio lighting, blurred garment racks of luxury fabrics, mirrors reflecting warm light panels, creative energy in an elite fashion house environment, softly blurred background',
470
+ 'luxury runway lounge with towering lighting trusses, polished black floors and mirrored walls reflecting flashes of light, moody cinematic ambiance, softly blurred background, bokeh',
471
+ 'architectural runway stage built like a sculptural installation, dramatic uplighting washing across marble and steel surfaces, subtle crowd glow and haze, high-end fashion event atmosphere, softly blurred background'
472
+ ];
473
+ export const LUXURY_INTERIOR_HYPER_LUXURY_MATERIALS_POOL = [
474
+ 'background of a monumental luxury interior carved from black onyx and polished brass, mirror floors reflecting towering columns, warm ambient lighting glowing through translucent stone, ultra-luxury materials, cinematic depth, bokeh',
475
+ 'background of a grand architectural hall made of white alabaster and champagne gold metal, luminous stone walls glowing from within, reflective marble floors and soft atmospheric haze, hyper-luxury interior design, bokeh',
476
+ 'futuristic luxury chamber with liquid chrome walls and mirror-polished obsidian floors, soft reflections rippling across metallic surfaces, dramatic luxury lighting, cinematic atmosphere, bokeh',
477
+ 'background of a billionaire penthouse interior with rare travertine walls, brushed gold architectural frames, and a glowing marble feature wall, polished surfaces reflecting warm light, ultra-premium materials, bokeh',
478
+ 'background of a luxury gallery interior with deep emerald stone panels, polished brass structures, and reflective black marble floors, museum-grade lighting illuminating rich materials, cinematic blur, bokeh',
479
+ 'sculptural interior hall made of translucent jade-like stone and brushed titanium architecture, glowing stone surfaces casting soft light into the space, ultra-luxury futuristic materials, bokeh',
480
+ 'elite luxury lounge with dark smoked glass walls, liquid metal bar surfaces, and polished stone floors reflecting warm golden light, hyper-premium interior atmosphere, bokeh',
481
+ 'background of a monumental interior clad entirely in creamy travertine and bronze architectural accents, soft sunlight washing across textured stone surfaces, serene ultra-luxury design, cinematic blur, bokeh'
482
+ ];
483
+ export const LUXURY_INTERIOR_LIGHT_SPECTACLE_POOL = [
484
+ 'monumental atrium flooded with dramatic skylight beams, volumetric god rays pouring through towering glass ceilings, mist drifting through golden light, cinematic architectural spectacle, bokeh',
485
+ 'luxury interior where cascading sunlight pours through geometric skylights, bright beams cutting across marble floors and towering walls, glowing atmospheric haze, epic architectural lighting, bokeh',
486
+ 'cathedral-scale interior illuminated by massive vertical light shafts, radiant beams piercing through drifting fog, reflective floors amplifying the light spectacle, cinematic depth, bokeh',
487
+ 'luxury hall with sunlight refracting through crystal installations, prismatic rainbow light scattering across polished marble floors, magical lighting spectacle, bokeh',
488
+ 'ultra-modern interior where glowing light panels form the walls themselves, soft luminous architecture illuminating the entire space, futuristic light spectacle environment, bokeh',
489
+ 'monumental glass-domed interior with sunlight pouring through the dome structure, radiant beams illuminating floating dust particles and reflective stone floors, cinematic atmosphere, bokeh',
490
+ 'sculptural interior where thin architectural slits of light cut across a dark stone chamber, dramatic light blades creating a striking luxury ambiance, bokeh',
491
+ 'luxury interior with massive skylight openings casting giant geometric light patterns across polished floors and towering walls, architectural light spectacle, cinematic blur, bokeh'
492
+ ];
493
+ export const LUXURY_INTERIOR_MATERIAL_EXTREMES_POOL = [
494
+ 'mirror-black obsidian floors with razor-sharp reflections',
495
+ 'molten metallic walls with liquid-like sheen',
496
+ 'alabaster monoliths rising from the floor as sculptural anchors',
497
+ 'ultra-polished chrome columns with crisp specular highlights',
498
+ 'brushed platinum surfaces with high-contrast gleam',
499
+ 'smoked glass partitions with reflective depth',
500
+ 'onyx slab surfaces with subtle veining and deep shine'
501
+ ];
502
+ export const LUXURY_INTERIOR_ATMOSPHERE_POOL = [
503
+ 'subtle haze and reflective mist to reveal volumetric light shafts',
504
+ 'cinematic fog catching sharp beams of light',
505
+ 'soft atmospheric diffusion creating a haloed glow around highlights',
506
+ 'thin mist that turns light into visible architectural lines',
507
+ 'volumetric light beams cutting across the space with a high-drama glow'
508
+ ];
509
+ export const LUXURY_INTERIOR_COLOR_SHOCK_POOL = [
510
+ 'a single vivid crimson accent against a monochrome luxury palette',
511
+ 'a single vivid cobalt accent punctuating a neutral interior',
512
+ 'a single vivid emerald accent cutting through black-and-silver tones',
513
+ 'a single vivid amber accent glowing against cool metallics',
514
+ 'a single vivid sapphire accent as the only bold color'
515
+ ];
516
+ export const getRandomCampaignLuxuryInteriorDescriptor = (allowAccent = true) => {
517
+ const style = CAMPAIGN_LUXURY_INTERIOR_STYLES[Math.floor(Math.random() * CAMPAIGN_LUXURY_INTERIOR_STYLES.length)];
518
+ let basePool = LUXURY_INTERIOR_CAMPAIGN_POOL;
519
+ switch (style.id) {
520
+ case 'grand_luxe':
521
+ basePool = LUXURY_INTERIOR_CAMPAIGN_POOL;
522
+ break;
523
+ case 'surreal_architecture':
524
+ basePool = LUXURY_INTERIOR_SURREAL_ARCH_POOL;
525
+ break;
526
+ case 'cinematic_narrative':
527
+ basePool = LUXURY_INTERIOR_CINEMATIC_NARRATIVE_POOL;
528
+ break;
529
+ case 'ultra_minimal':
530
+ basePool = LUXURY_INTERIOR_ULTRA_MINIMAL_POOL;
531
+ break;
532
+ case 'fashion_show':
533
+ basePool = LUXURY_INTERIOR_FASHION_SHOW_POOL;
534
+ break;
535
+ case 'hyper_luxury_materials':
536
+ basePool = LUXURY_INTERIOR_HYPER_LUXURY_MATERIALS_POOL;
537
+ break;
538
+ case 'light_spectacle':
539
+ basePool = LUXURY_INTERIOR_LIGHT_SPECTACLE_POOL;
540
+ break;
541
+ default:
542
+ basePool = LUXURY_INTERIOR_CAMPAIGN_POOL;
543
+ break;
544
+ }
545
+ const base = basePool[Math.floor(Math.random() * basePool.length)];
546
+ const material = LUXURY_INTERIOR_MATERIAL_EXTREMES_POOL[Math.floor(Math.random() * LUXURY_INTERIOR_MATERIAL_EXTREMES_POOL.length)];
547
+ const atmosphere = LUXURY_INTERIOR_ATMOSPHERE_POOL[Math.floor(Math.random() * LUXURY_INTERIOR_ATMOSPHERE_POOL.length)];
548
+ const accent = LUXURY_INTERIOR_COLOR_SHOCK_POOL[Math.floor(Math.random() * LUXURY_INTERIOR_COLOR_SHOCK_POOL.length)];
549
+ return allowAccent
550
+ ? `${base}; campaign style: ${style.name}; material extremes: ${material}; atmospheric drama: ${atmosphere}; color shock accent: ${accent}`
551
+ : `${base}; campaign style: ${style.name}; material extremes: ${material}; atmospheric drama: ${atmosphere}`;
552
+ };
310
553
  export const STUDIO_FLAT_POOL = [
311
554
  'clean professional studio background, seamless infinity curve, minimal distractions',
312
555
  'minimalist studio backdrop with a soft gradient and elegant lighting',
@@ -315,11 +558,20 @@ export const STUDIO_FLAT_POOL = [
315
558
  'flawless studio environment with a smooth, matte backdrop'
316
559
  ];
317
560
  export const OUTDOOR_POOL = [
318
- 'softly blurred outdoor natural environment, cinematic bokeh',
319
- 'dreamy garden setting with soft natural light filtering through leaves',
320
- 'elegant terrace background with warm, sun-drenched atmosphere',
321
- 'serene natural landscape softly out of focus in the distance',
322
- 'romantic sunset lighting over a blurred natural landscape'
561
+ 'softly blurred outdoor environment with cinematic bokeh',
562
+ 'garden or terrace exterior with softly out-of-focus foliage and architectural details',
563
+ 'elegant outdoor setting with depth and atmospheric blur',
564
+ 'serene exterior landscape softly out of focus in the distance',
565
+ 'outdoor scene with subtle haze and gentle background separation',
566
+ 'courtyard exterior with stone textures and softly blurred greenery',
567
+ 'rooftop terrace with distant cityscape softened into elegant bokeh',
568
+ 'botanical garden walkway with lush foliage softly receding into blur',
569
+ 'villa exterior with textured walls and archways blurred in the background',
570
+ 'outdoor colonnade or veranda with soft depth-of-field and architectural rhythm',
571
+ 'terrace with sculptural planters and a softly blurred horizon line',
572
+ 'elegant exterior stairway or landing with shallow depth and creamy bokeh',
573
+ 'garden wall or pergola backdrop with soft lens blur and atmospheric depth',
574
+ 'waterfront or poolside exterior suggested as soft reflections and bokeh shapes'
323
575
  ];
324
576
  export const MACRO_TEXTURE_POOL = [
325
577
  'abstract macro textural background of softly draped silk filling the frame',
@@ -351,10 +603,12 @@ export const getRandomBlazerValue = () => {
351
603
  const inner = inners[Math.floor(Math.random() * inners.length)];
352
604
  return `wearing a ${fit} blazer over ${inner}. Confident, modern business-chic aesthetic`;
353
605
  };
354
- export const getRandomBackgroundValue = (typeId, defaultValue) => {
606
+ export const getRandomBackgroundValue = (typeId, defaultValue, isCampaignMode = false, allowCampaignAccent = true) => {
355
607
  switch (typeId) {
356
608
  case 'interior':
357
- return LUXURY_INTERIOR_POOL[Math.floor(Math.random() * LUXURY_INTERIOR_POOL.length)];
609
+ return isCampaignMode
610
+ ? getRandomCampaignLuxuryInteriorDescriptor(allowCampaignAccent)
611
+ : LUXURY_INTERIOR_POOL[Math.floor(Math.random() * LUXURY_INTERIOR_POOL.length)];
358
612
  case 'studio':
359
613
  return STUDIO_FLAT_POOL[Math.floor(Math.random() * STUDIO_FLAT_POOL.length)];
360
614
  case 'exterior':
@@ -365,7 +619,9 @@ export const getRandomBackgroundValue = (typeId, defaultValue) => {
365
619
  return defaultValue;
366
620
  }
367
621
  };
368
- export const getRandomLuxuryInterior = () => LUXURY_INTERIOR_POOL[Math.floor(Math.random() * LUXURY_INTERIOR_POOL.length)];
622
+ export const getRandomLuxuryInterior = (isCampaignMode = false) => isCampaignMode
623
+ ? LUXURY_INTERIOR_CAMPAIGN_POOL[Math.floor(Math.random() * LUXURY_INTERIOR_CAMPAIGN_POOL.length)]
624
+ : LUXURY_INTERIOR_POOL[Math.floor(Math.random() * LUXURY_INTERIOR_POOL.length)];
369
625
  export const BACKGROUND_TYPES = [
370
626
  { id: 'studio', name: 'Studio Flat', value: 'clean professional studio background, seamless infinity curve, minimal distractions', visualImage: '/studio_flat.png' },
371
627
  { id: 'interior', name: 'Luxury Interior', value: 'softly blurred background of a high-end luxury apartment interior, bokeh effect', visualImage: '/luxury_interior.png' },
@@ -380,7 +636,129 @@ export const VIBES = [
380
636
  { id: 'high_fashion_flash', name: 'Editorial Flash', value: 'hard direct flash, sharp highlights, distinct shadows, high-energy fashion editorial, 90s aesthetic, sharp micro-contrast', visualImage: '/editorial_flash.jpg' },
381
637
  { id: 'analog_dream', name: 'Analog Dream', value: 'shot on vintage 35mm film, subtle light leaks, rich saturated colors, nostalgic soft focus, Kodak Ektar 100, authentic film grain', visualImage: '/analog_dream.jpg' },
382
638
  { id: 'midnight_glamour', name: 'Midnight Glamour', value: 'deep moody atmosphere, rich jewel tones, single dramatic spotlight cutting through darkness, luxurious midnight aesthetic, sharp reflections on metal', visualImage: '/midnight_glamour.jpg' },
383
- { id: 'editorial_daylight', name: 'Sun-Drenched', value: 'bright diffused daylight, overexposed highlights, soft dreamy aesthetic, high-end magazine cover style, luminous skin', visualImage: '/sun_drenched.jpg' },
639
+ { id: 'editorial_daylight', name: 'Sun-Drenched', value: 'bright diffused daylight, overexposed highlights, soft dreamy aesthetic, high-end magazine cover style, sun-drenched', visualImage: '/sun_drenched.jpg' },
640
+ ];
641
+ export const PHOTOGRAPHY_STYLES = [
642
+ {
643
+ id: 'ethereal_dream',
644
+ name: 'Ethereal Dream',
645
+ description: 'Soft-focus, painterly textures, and haunting, impressionist tones.',
646
+ value: 'painterly surrealist photography, heavy soft-focus, blurred motion, desaturated impressionist palette, glowing highlights, inspired by Sarah Moon and Paolo Roversi',
647
+ visualColor: 'linear-gradient(135deg, #d3c4be, #8e7d76)'
648
+ },
649
+ {
650
+ id: 'sculptural_light',
651
+ name: 'Sculptural Light',
652
+ description: 'Directional lighting that carves the subject with highlights and shadow.',
653
+ value: 'luxury product photography with sculptural directional lighting, sharp specular highlights, controlled reflections, dramatic light falloff, deep soft shadows, minimalist studio background, metallic surfaces glowing under precise light, refined commercial lighting, inspired by high-end jewelry advertising and photographers like Nadav Kander and Sølve Sundsbø',
654
+ visualColor: 'linear-gradient(135deg, #f5f5f5, #6e6e6e)'
655
+ },
656
+ {
657
+ id: 'prismatic_light',
658
+ name: 'Prismatic Light',
659
+ description: 'Refracted light, spectral flares, and crystalline reflections.',
660
+ value: 'luxury jewelry product photography, soft directional sunlight, a few diffused prismatic caustics on the surface beneath the ring, small artistic rainbow patches with slightly blurred edges, gentle spectral color bloom, subtle prism reflections near the base of the jewelry, polished metal highlights and diamond brilliance, soft shadows, refined high-end jewelry advertising aesthetic',
661
+ visualColor: 'linear-gradient(135deg, #6a5cff, #ff8bd6)'
662
+ },
663
+ {
664
+ id: 'modern_edge',
665
+ name: 'Modern Edge',
666
+ description: 'Bolder contrast, sharper angles, fashion-forward tension.',
667
+ value: 'modern edgy fashion photography, bold contrast, crisp angles, graphic shadows, assertive composition, inspired by Helmut Newton and Steven Klein',
668
+ visualColor: 'linear-gradient(135deg, #2d2f35, #6f7a88)'
669
+ },
670
+ {
671
+ id: 'soft_natural',
672
+ name: 'Chromatic Gel',
673
+ description: 'Color-gel lighting, bold casts, nightclub editorial edge.',
674
+ value: 'color gel lighting, bold chromatic casts, magenta and cyan accents, high-energy fashion editorial, inspired by David LaChapelle and Nadia Lee Cohen',
675
+ visualColor: 'linear-gradient(135deg, #351b5e, #8aa6ff)'
676
+ },
677
+ {
678
+ id: 'acid_lofi',
679
+ name: 'Acid Infrared',
680
+ description: 'Extreme false-color shifts, thermal aesthetics, and psychedelic saturation.',
681
+ value: 'false-color infrared photography, Aerochrome style, vivid hot pinks and deep teals, high grain, surreal alien atmosphere, inspired by Richard Mosse',
682
+ visualColor: 'linear-gradient(135deg, #ff007f, #00ffcc)'
683
+ },
684
+ {
685
+ id: 'cyber_grit',
686
+ name: 'Cyber-Grit Noir',
687
+ description: 'High-contrast grain, light trails, and chaotic digital distortion.',
688
+ value: 'experimental long exposure, aggressive film grain, light trailing, high-contrast black and white, digital glitch artifacts, inspired by Daido Moriyama',
689
+ visualColor: 'linear-gradient(135deg, #000000, #4a4a4a)'
690
+ }
691
+ ];
692
+ export const MOROCCAN_WEDDING_CULTURAL_ELEMENTS_POOL = [
693
+ 'Subtle Moroccan bridal cues: delicate henna patterns (only if hands appear), refined arabesque geometry, intricate zellige mosaic craftsmanship, elegant gold jewelry accents inspired by traditional bridal attire.',
694
+ 'Refined Moroccan bridal motifs: delicate henna patterns (only if hands appear), intricate zellige tilework, elegant arabesque geometry, ornate brass lanterns, carved cedarwood architecture, subtle gold jewelry accents, luxurious embroidered textiles inspired by traditional caftans and takchitas.'
695
+ ];
696
+ export const MOROCCAN_WEDDING_DECOR_POOL = [
697
+ 'glowing brass lantern clusters, candlelight, velvet cushions in emerald and ruby tones, carved cedarwood screens, layered embroidered textiles, palace-like warmth',
698
+ 'scalloped arches, zellige tile accents, silk drapery, gilded trays, traditional tea service, rose petals, warm golden reflections',
699
+ 'ceremonial seating, brocade fabrics, ornate brass details, white and blush floral arrangements, candlelit tables, soft lantern glow',
700
+ 'luxurious Moroccan lounge styling with low seating, jewel-toned pillows, carved plaster details, brass mirrors, floral accents, atmospheric amber light',
701
+ 'royal riad-inspired decor with carved wood panels, mosaic surfaces, draped canopy elements, candlelight, polished metal accents, rich layered textures'
702
+ ];
703
+ export const RAMADAN_CULTURAL_ELEMENTS_POOL = [
704
+ 'Subtle Ramadan symbolism: crescent moon motifs, refined Islamic geometric patterns, elegant Arabic calligraphy accents, gentle spiritual cues.',
705
+ 'Traditional Ramadan cultural elements: crescent imagery, dates as a symbol of iftar tradition, refined Islamic ornamental patterns, peaceful spiritual ambiance.',
706
+ 'Ramadan heritage cues: elegant crescent motifs, delicate arabesque geometry, subtle Islamic pattern artistry, symbolic references to breaking the fast.',
707
+ 'Refined Ramadan symbolism: crescent moon imagery, delicate Islamic geometric ornamentation, subtle Arabic calligraphic elements, quiet spiritual atmosphere.',
708
+ 'Classic Ramadan cultural references: dates representing iftar tradition, elegant crescent moon motifs, refined Islamic design patterns, serene spiritual cues.',
709
+ 'Traditional Islamic artistic motifs associated with Ramadan: arabesque ornamentation, geometric Islamic patterns, crescent symbolism, subtle spiritual elegance.',
710
+ 'Ramadan-inspired cultural elements: crescent moon symbolism, delicate Islamic ornamental geometry, symbolic references to dates and hospitality traditions.',
711
+ 'Serene Ramadan cultural cues: refined Islamic geometric patterns, crescent moon motifs, subtle Arabic calligraphy elements, gentle spiritual symbolism.'
712
+ ];
713
+ export const RAMADAN_DECOR_POOL = [
714
+ 'softly glowing lanterns casting warm patterned light, quiet reflective surfaces, minimal ceremonial accents',
715
+ 'elegant lantern clusters creating gentle ambient glow, subtle decorative trays with dates, calm evening atmosphere',
716
+ 'minimal Ramadan table setting with dates and small decorative elements, warm lantern illumination',
717
+ 'delicate lantern light reflecting on polished surfaces, restrained decorative accents, serene evening setting',
718
+ 'simple yet elegant iftar-inspired staging with dates, lantern glow, and soft atmospheric lighting',
719
+ 'quiet evening decor with subtle lanterns, refined table accents, and warm ambient illumination',
720
+ 'minimal ceremonial details with softly glowing lanterns and calm reflective elements',
721
+ 'gentle Ramadan ambiance with understated lantern lighting and elegant minimal decor'
722
+ ];
723
+ export const MOTHERS_DAY_CULTURAL_ELEMENTS_POOL = [
724
+ 'Symbols of maternal love and appreciation: delicate spring flowers, handwritten notes of gratitude, soft pastel tones, gentle celebratory warmth.',
725
+ 'Warm Mother’s Day symbolism: blooming seasonal flowers, thoughtful gift elements, soft fabrics and nurturing visual cues of affection.',
726
+ 'Tender Mother’s Day cultural cues: spring blossoms, small gift gestures, comforting pastel palettes, subtle themes of care and gratitude.',
727
+ 'Celebratory Mother’s Day motifs: delicate floral elements, ribbons and gift wrapping accents, gentle tones expressing appreciation and warmth.',
728
+ 'Mother’s Day symbolism: blooming flowers representing care and growth, soft fabrics, thoughtful celebratory gestures, warm affectionate cues.',
729
+ 'Subtle Mother’s Day themes of gratitude: seasonal blossoms, heartfelt gift elements, soft pastel textures, calm nurturing atmosphere.',
730
+ 'Springtime Mother’s Day cues: floral blossoms, delicate ribbon accents, gentle colors symbolizing affection and appreciation.',
731
+ 'Elegant Mother’s Day symbolism: soft spring florals, graceful fabric textures, refined celebratory details expressing love and gratitude.'
732
+ ];
733
+ export const MOTHERS_DAY_DECOR_POOL = [
734
+ 'gentle floral arrangements, soft pastel ribbons, warm natural light, cozy home accents',
735
+ 'fresh spring bouquets on a light table setting, delicate ribbons, soft fabric textures, bright and comforting atmosphere',
736
+ 'simple celebratory decor with fresh flowers, small wrapped gifts, soft linens, and warm sunlight',
737
+ 'light spring decor with floral accents, pastel tones, and calm comforting textures',
738
+ 'elegant yet gentle table decor with flowers, soft ribbons, and subtle celebratory touches',
739
+ 'cozy home styling with spring blossoms, light textiles, and warm ambient light',
740
+ 'soft decorative florals paired with ribbons and delicate table accents',
741
+ 'minimal but warm decor with fresh flowers, gentle colors, and subtle celebratory elements'
742
+ ];
743
+ export const NEW_YEAR_CULTURAL_ELEMENTS_POOL = [
744
+ 'Elegant New Year celebration symbolism: champagne toasts, refined evening attire cues, sparkling midnight anticipation, glamorous festive atmosphere.',
745
+ 'Classic New Year cultural cues: champagne celebration traditions, countdown-to-midnight symbolism, festive sparkle, refined celebratory elegance.',
746
+ 'Sophisticated New Year motifs: midnight celebration energy, champagne glamour, celebratory sparkle accents, elegant evening festivities.',
747
+ 'New Year celebration symbolism: midnight countdown atmosphere, sparkling festive cues, celebratory champagne traditions, refined party elegance.',
748
+ 'Festive New Year cultural elements: midnight celebration anticipation, glamorous sparkle motifs, elegant party atmosphere, celebratory toasts.',
749
+ 'Luxury New Year celebration cues: sophisticated evening festivities, champagne toast symbolism, midnight sparkle, glamorous celebratory energy.',
750
+ 'Classic midnight celebration symbolism: festive sparkle accents, champagne traditions, elegant party cues, celebratory anticipation.',
751
+ 'Refined New Year celebration motifs: glamorous midnight festivities, sparkling celebration energy, champagne toast culture, elegant evening atmosphere.'
752
+ ];
753
+ export const NEW_YEAR_DECOR_POOL = [
754
+ 'soft glitter bokeh, subtle confetti accents, elegant midnight celebration details, warm festive glow',
755
+ 'refined party decor with champagne glasses, soft sparkle reflections, minimalist celebratory accents',
756
+ 'midnight celebration staging with subtle confetti, elegant table accents, gentle glitter reflections',
757
+ 'minimalist glamorous decor with sparkling bokeh lights and understated celebration details',
758
+ 'sophisticated party styling with champagne flutes, soft glitter lighting, refined festive atmosphere',
759
+ 'subtle confetti scatter, glowing evening lights, elegant celebratory decor',
760
+ 'glamorous sparkle accents with soft bokeh lights and minimal party decorations',
761
+ 'quiet luxury celebration decor with champagne details, soft glitter reflections, midnight ambiance'
384
762
  ];
385
763
  export const OCCASIONS = [
386
764
  {
@@ -388,13 +766,9 @@ export const OCCASIONS = [
388
766
  name: 'Moroccan Wedding',
389
767
  icon: '👰',
390
768
  description: 'Traditional Moroccan wedding luxury aesthetic with rich cultural details',
391
- autoConfig: { vibe: 'golden_hour', background: 'gold', backgroundType: 'luxury_interior' },
392
769
  promptDetails: {
393
- setting: 'Traditional Moroccan riad or palace interior with intricate zellige mosaic tilework in geometric patterns, ornate hand-carved cedar wood ceilings, horseshoe arches with detailed stucco work. Softly blurred background shows traditional Moroccan lanterns, silk cushions, and ornate metalwork',
394
- atmosphere: 'Intimate, culturally rich, joyful and celebratory. The feeling of a traditional Moroccan wedding with authentic moments',
395
- colorPalette: 'Rich jewel tones - deep crimson red, emerald green, royal purple, and abundant gold accents. Ivory and cream for contrast. Warm, luxurious color temperature',
396
- culturalElements: 'Subtle traditional Moroccan bridal elements may include: intricate henna patterns visible on hands, traditional gold jewelry aesthetic, rich embroidered fabrics, Moroccan rose petals, ornate brass serving pieces in blurred background',
397
- styling: 'Model styled as an elegant Moroccan bride or guest. Hair in traditional styling, makeup elegant and defined, traditional gold jewelry aesthetic. If visible, clothing suggests luxury kaftan or takchita with gold embroidery and embellishments'
770
+ culturalElements: MOROCCAN_WEDDING_CULTURAL_ELEMENTS_POOL,
771
+ decor: MOROCCAN_WEDDING_DECOR_POOL
398
772
  }
399
773
  },
400
774
  {
@@ -402,13 +776,9 @@ export const OCCASIONS = [
402
776
  name: 'Eid al-Fitr',
403
777
  icon: '🌙',
404
778
  description: 'Elegant celebration of Eid al-Fitr with festive, joyful atmosphere',
405
- autoConfig: { vibe: 'clean_minimal', background: 'emerald_green', backgroundType: 'luxury_interior' },
406
779
  promptDetails: {
407
- setting: 'Bright, elegant interior with soft natural light. Background hints at celebration with blurred festive decorations, perhaps lanterns or delicate florals',
408
- atmosphere: 'Joyful, celebratory, light and airy. Fresh and renewed spirit after Ramadan',
409
- colorPalette: 'Emerald green, gold, white, and soft pastels. Fresh and luminous tones',
410
- culturalElements: 'Subtle festive Eid elements - elegant Islamic geometric patterns, fresh flowers, refined decorative details',
411
- styling: 'Model styled in celebration attire with polished, festive makeup and elegant hair. Joyful, refined aesthetic'
780
+ culturalElements: ['Elegant Islamic geometric motifs, refined festive cues, fresh florals in a celebratory spirit.'],
781
+ decor: ['Subtle lantern accents, delicate florals, soft celebratory details.']
412
782
  }
413
783
  },
414
784
  {
@@ -416,13 +786,9 @@ export const OCCASIONS = [
416
786
  name: 'Eid al-Adha',
417
787
  icon: '🕌',
418
788
  description: 'Sophisticated Eid al-Adha celebration with refined elegance',
419
- autoConfig: { vibe: 'golden_hour', background: 'gold', backgroundType: 'luxury_interior' },
420
789
  promptDetails: {
421
- setting: 'Luxurious interior with warm, golden lighting. Sophisticated and dignified setting',
422
- atmosphere: 'Dignified, celebratory, spiritually significant. Refined and elegant',
423
- colorPalette: 'Rich gold, burgundy, deep greens, cream. Warm, sophisticated tones',
424
- culturalElements: 'Elegant cultural references - refined Islamic art patterns, luxury fabrics, traditional elements in modern interpretation',
425
- styling: 'Model styled with sophisticated elegance. Rich makeup, refined styling, traditional yet contemporary aesthetic'
790
+ culturalElements: ['Refined Islamic art motifs, luxury fabrics, dignified celebratory cues in a modern interpretation.'],
791
+ decor: ['Warm golden accents, elegant textiles, understated celebratory details.']
426
792
  }
427
793
  },
428
794
  {
@@ -430,13 +796,9 @@ export const OCCASIONS = [
430
796
  name: 'Henna Night',
431
797
  icon: '🎨',
432
798
  description: 'Traditional Moroccan henna ceremony with intricate cultural elements',
433
- autoConfig: { vibe: 'golden_hour', background: 'terracotta', backgroundType: 'luxury_interior' },
434
799
  promptDetails: {
435
- setting: 'Intimate Moroccan setting with warm ambient lighting. Background suggests traditional celebration space with cushions, lanterns, ornate details',
436
- atmosphere: 'Intimate, feminine, ceremonial, warm and traditional. Pre-wedding celebration vibes',
437
- colorPalette: 'Warm terracotta, deep orange, burgundy, gold. Earthy and rich with golden accents',
438
- culturalElements: 'Intricate henna patterns prominently visible on hands if showing hands. Traditional lanterns, Moroccan textiles, ornate serving pieces. Rose water ambiance',
439
- styling: 'Model styled as if at traditional henna ceremony. Elaborate henna designs, traditional jewelry, warm glowing makeup, cultural celebration aesthetic'
800
+ culturalElements: ['Intricate henna motifs (only if hands appear), Moroccan lanterns, traditional textiles, ceremonial elegance.'],
801
+ decor: ['Lantern light, embroidered cushions, ornate trays, rose-water ceremony cues.']
440
802
  }
441
803
  },
442
804
  {
@@ -444,13 +806,9 @@ export const OCCASIONS = [
444
806
  name: 'Ramadan',
445
807
  icon: '⭐',
446
808
  description: 'Serene Ramadan atmosphere with spiritual elegance',
447
- autoConfig: { vibe: 'moody_chic', background: 'midnight_blue', backgroundType: 'luxury_interior' },
448
809
  promptDetails: {
449
- setting: 'Intimate evening interior with soft, moody lighting. Background suggests peaceful reflection space with subtle lantern glow',
450
- atmosphere: 'Serene, spiritual, contemplative, elegant. Peaceful evening ambiance',
451
- colorPalette: 'Deep midnight blue, silver, soft gold, white. Cool, peaceful tones with metallic accents',
452
- culturalElements: 'Subtle Ramadan elements - soft lantern light, crescent moon motifs, dates, refined Islamic patterns, peaceful spiritual aesthetic',
453
- styling: 'Model styled with serene, natural elegance. Soft, glowing makeup. Modest, refined aesthetic'
810
+ culturalElements: RAMADAN_CULTURAL_ELEMENTS_POOL,
811
+ decor: RAMADAN_DECOR_POOL
454
812
  }
455
813
  },
456
814
  {
@@ -458,13 +816,9 @@ export const OCCASIONS = [
458
816
  name: "Valentine's Day",
459
817
  icon: '❤️',
460
818
  description: 'Romantic ambiance with rose petals and soft candlelight',
461
- autoConfig: { vibe: 'romantic_soft', background: 'blush_pink', backgroundType: 'studio' },
462
819
  promptDetails: {
463
- setting: 'Soft, romantic setting with diffused natural light. Background suggests intimacy with blurred rose petals, soft fabrics, gentle candlelight',
464
- atmosphere: 'Romantic, intimate, tender, dreamy. Soft and feminine energy',
465
- colorPalette: 'Blush pink, soft red, cream, rose gold. Warm, romantic, delicate tones',
466
- culturalElements: 'Rose petals scattered elegantly, soft romantic florals, intimate candlelight glow, love celebration aesthetic',
467
- styling: 'Model styled with romantic, soft makeup. Natural, glowing skin. Dreamy, feminine aesthetic'
820
+ culturalElements: ['Rose petals, soft romantic florals, gentle candlelight glow, love-celebration cues.'],
821
+ decor: ['Subtle candles, delicate petals, soft romantic textile accents.']
468
822
  }
469
823
  },
470
824
  {
@@ -472,13 +826,9 @@ export const OCCASIONS = [
472
826
  name: "Mother's Day",
473
827
  icon: '🌸',
474
828
  description: 'Warm, tender atmosphere celebrating maternal love',
475
- autoConfig: { vibe: 'golden_hour', background: 'soft_lavender', backgroundType: 'studio' },
476
829
  promptDetails: {
477
- setting: 'Warm, tender setting with soft natural light. Background hints at comfort and home with soft florals',
478
- atmosphere: 'Warm, loving, tender, gentle. Celebrating maternal love and connection',
479
- colorPalette: 'Soft lavender, warm peach, cream, gentle pastels. Warm, comforting tones',
480
- culturalElements: 'Delicate spring flowers, soft fabrics, warm comforting aesthetic, celebration of motherhood',
481
- styling: 'Model styled with warm, natural elegance. Soft makeup, genuine warmth. Maternal grace'
830
+ culturalElements: MOTHERS_DAY_CULTURAL_ELEMENTS_POOL,
831
+ decor: MOTHERS_DAY_DECOR_POOL
482
832
  }
483
833
  },
484
834
  {
@@ -486,13 +836,9 @@ export const OCCASIONS = [
486
836
  name: 'Birthday',
487
837
  icon: '🎂',
488
838
  description: 'Celebratory and joyful setting with festive elements',
489
- autoConfig: { vibe: 'clean_minimal', background: 'champagne_gold', backgroundType: 'studio' },
490
839
  promptDetails: {
491
- setting: 'Bright, celebratory setting with clean aesthetic. Background suggests festive celebration',
492
- atmosphere: 'Joyful, celebratory, fun, elegant. Birthday celebration energy',
493
- colorPalette: 'Champagne gold, white, soft pastels, metallic accents. Festive, bright tones',
494
- culturalElements: 'Elegant celebration elements, refined party aesthetic, joyful festive details',
495
- styling: 'Model styled for celebration with polished, festive makeup. Joyful, confident aesthetic'
840
+ culturalElements: ['Refined celebration cues, subtle party accents, joyful festive details.'],
841
+ decor: ['Minimal celebratory decor, soft ribbons or confetti bokeh, tasteful party touches.']
496
842
  }
497
843
  },
498
844
  {
@@ -500,13 +846,9 @@ export const OCCASIONS = [
500
846
  name: 'Anniversary',
501
847
  icon: '💍',
502
848
  description: 'Elegant, timeless aesthetic for commemorating special milestones',
503
- autoConfig: { vibe: 'golden_hour', background: 'gold', backgroundType: 'luxury_interior' },
504
849
  promptDetails: {
505
- setting: 'Elegant, timeless interior with warm lighting. Sophisticated romantic setting',
506
- atmosphere: 'Timeless, elegant, romantic, commemorative. Celebrating enduring love',
507
- colorPalette: 'Rich gold, champagne, cream, deep burgundy. Luxurious, timeless tones',
508
- culturalElements: 'Elegant romantic details, luxurious fabrics, refined celebration aesthetic, timeless sophistication',
509
- styling: 'Model styled with timeless elegance. Classic, sophisticated makeup. Enduring beauty'
850
+ culturalElements: ['Elegant romantic details, luxurious fabrics, refined celebration cues, timeless sophistication.'],
851
+ decor: ['Soft candlelight accents, understated florals, quiet romantic touches.']
510
852
  }
511
853
  },
512
854
  {
@@ -514,13 +856,9 @@ export const OCCASIONS = [
514
856
  name: 'Graduation',
515
857
  icon: '🎓',
516
858
  description: 'Proud and accomplished atmosphere with sophisticated styling',
517
- autoConfig: { vibe: 'clean_minimal', background: 'white', backgroundType: 'studio' },
518
859
  promptDetails: {
519
- setting: 'Clean, bright professional setting. Background suggests achievement and new beginnings',
520
- atmosphere: 'Proud, accomplished, confident, hopeful. Celebrating achievement',
521
- colorPalette: 'Clean white, navy blue, gold accents. Professional, accomplished tones',
522
- culturalElements: 'Academic achievement aesthetic, professional polish, celebration of success',
523
- styling: 'Model styled with confident, professional polish. Clean, sophisticated makeup. Achievement glow'
860
+ culturalElements: ['Academic achievement cues, professional polish, celebration of success.'],
861
+ decor: ['Subtle graduation motifs (cap/tassel suggested in decor only), understated celebratory details.']
524
862
  }
525
863
  },
526
864
  {
@@ -528,13 +866,9 @@ export const OCCASIONS = [
528
866
  name: 'Christmas',
529
867
  icon: '🎄',
530
868
  description: 'Festive holiday spirit with elegant seasonal decorations',
531
- autoConfig: { vibe: 'golden_hour', background: 'forest_green', backgroundType: 'luxury_interior' },
532
869
  promptDetails: {
533
- setting: 'Festive, luxurious interior with warm holiday lighting. Background suggests elegant Christmas celebration',
534
- atmosphere: 'Festive, warm, magical, elegant. Holiday celebration spirit',
535
- colorPalette: 'Deep forest green, rich red, gold, cream. Classic holiday luxury tones',
536
- culturalElements: 'Elegant holiday elements - pine branches, warm candlelight, luxurious seasonal decor, festive sophistication',
537
- styling: 'Model styled with festive elegance. Rich, warm makeup. Holiday glamour'
870
+ culturalElements: ['Pine greenery, warm candlelight, refined holiday accents, festive sophistication.'],
871
+ decor: ['Subtle evergreen boughs, soft twinkle-light bokeh, understated holiday touches.']
538
872
  }
539
873
  },
540
874
  {
@@ -542,16 +876,19 @@ export const OCCASIONS = [
542
876
  name: 'New Year',
543
877
  icon: '✨',
544
878
  description: 'Glamorous celebration with sparkle and sophistication',
545
- autoConfig: { vibe: 'moody_chic', background: 'midnight_blue', backgroundType: 'luxury_interior' },
546
879
  promptDetails: {
547
- setting: 'Glamorous evening setting with dramatic lighting. Background suggests sophisticated celebration',
548
- atmosphere: 'Glamorous, sophisticated, celebratory, hopeful. New beginnings energy',
549
- colorPalette: 'Midnight blue, silver, gold, black. Dramatic, sophisticated evening tones',
550
- culturalElements: 'Elegant evening celebration, sophisticated party aesthetic, champagne glamour, new year sparkle',
551
- styling: 'Model styled with dramatic evening glamour. Bold, sophisticated makeup. Celebration elegance'
880
+ culturalElements: NEW_YEAR_CULTURAL_ELEMENTS_POOL,
881
+ decor: NEW_YEAR_DECOR_POOL
552
882
  }
553
883
  }
554
884
  ];
885
+ const ENABLED_OCCASION_IDS = new Set([
886
+ 'ramadan',
887
+ 'moroccan_wedding',
888
+ 'mothers_day',
889
+ 'new_year'
890
+ ]);
891
+ export const OCCASIONS_ENABLED = OCCASIONS.filter((occasion) => ENABLED_OCCASION_IDS.has(occasion.id));
555
892
  // Pool of diverse photography hints for final generation to ensure variety in the batch
556
893
  export const GENERATION_STYLE_POOL = [
557
894
  // Standard & Commercial
@@ -587,7 +924,6 @@ export const GENERATION_STYLE_POOL = [
587
924
  "Model interacting with the environment (e.g., leaning against a wall or window), natural vibe.",
588
925
  "A 'moment of preparation' look, looking down as if adjusting the clasp or admiring the piece.",
589
926
  "Holding a glass or prop near the face, adding lifestyle context without obscuring the jewelry.",
590
- "Shielding eyes from the 'sun' with a hand, casting interesting shadow patterns on the face.",
591
927
  "Resting head on a hand, casual but elegant, creating a relaxed luxury feel.",
592
928
  // Avant-Garde & High Fashion
593
929
  "An artistic, slightly off-center composition (rule of thirds) for a modern magazine look.",
@@ -678,46 +1014,28 @@ export const EAR_MODEL_STYLE_POOL = [
678
1014
  "Cool, moody shadows with the earring catching a single ray of light."
679
1015
  ];
680
1016
  // Flatlay specific style pool - focuses on arrangements and compositions
681
- export const FLATLAY_STYLE_POOL = [
682
- // Arrangement Styles
683
- "Asymmetric arrangement with jewelry off-center, generous negative space on one side.",
684
- "Geometric pattern layout with jewelry placed at golden ratio intersection points.",
685
- "Scattered organic arrangement as if pieces were casually tossed onto the surface.",
686
- "Linear diagonal arrangement with pieces flowing from corner to corner.",
687
- "Circular composition with jewelry forming or following a subtle arc.",
688
- "Minimalist single-piece hero shot with vast negative space surrounding it.",
689
- "Clustered grouping in center with radiating shadows creating depth.",
690
- "Stepped arrangement with pieces at different heights using subtle props.",
691
- // Elevated & Pedestal Displays
692
- "Jewelry displayed on a matte geometric cube or pedestal, moody dark background, architectural precision.",
693
- "Ring perched atop a cylindrical stone riser, dramatic side lighting casting a long shadow.",
694
- "Jewelry elevated on stacked geometric forms (cubes, cylinders, slabs) at varying heights, sculptural composition.",
695
- "Single piece on a minimal plinth or column, centered, with vast dark negative space around it.",
696
- "Jewelry resting on the edge of a geometric block, half in light and half in shadow, tension and balance.",
697
- "Piece displayed on a raw stone fragment, irregular organic shape contrasting with polished metal.",
698
- "Ring balanced on the corner of a tilted matte cube, gravity-defying display, dramatic angle.",
699
- // Subtle Shadow & Mood
700
- "Soft shaped shadow (heart, leaf, or geometric silhouette) falling naturally on the backdrop, as if cast by an off-camera object.",
701
- "Gentle warm-toned side light with the opposite side falling into soft shadow, natural depth.",
702
- "A single soft window-like light from above, the jewelry's own shadow becoming part of the composition.",
703
- "Dappled light as if filtering through a window or foliage, soft organic shadow patterns on the surface.",
704
- "Warm golden light from one side, the rest of the scene in soft muted tones, natural and intimate.",
705
- // Lighting & Shadow (Classic)
706
- "Dramatic directional lighting from the side creating long, elegant shadows.",
707
- "Soft overhead diffused lighting for even, commercial product look.",
708
- "Harsh spotlight creating defined shadows and high contrast.",
709
- "Warm golden hour style lighting with long soft shadows.",
710
- "Cool, clinical studio lighting emphasizing metallic reflections.",
711
- "Backlit arrangement with glowing edges and rim lighting.",
712
- // Surface & Context
713
- "On raw, textured marble with natural veining patterns.",
714
- "Against deep black velvet for maximum jewelry contrast.",
715
- "On crumpled silk or satin fabric with natural folds and highlights.",
716
- "Scattered on fine sand or natural stone surface.",
717
- "On aged paper or vintage book pages for heritage feel.",
718
- "Against concrete or terrazzo for modern, architectural vibe.",
719
- "Surrounded by dried flowers or botanical elements.",
720
- "With water droplets or morning dew on the surface nearby.",
1017
+ export const FLATLAY_POSITIONING_POOL = [
1018
+ "Asymmetric arrangement with jewelry piece(s) off-center, generous negative space on one side.",
1019
+ "Geometric pattern layout with jewelry piece(s) placed at golden ratio intersection points.",
1020
+ "Scattered organic arrangement as if jewelry piece(s) were casually placed onto the surface.",
1021
+ "Linear diagonal arrangement with jewelry piece(s) flowing from corner to corner.",
1022
+ "Circular composition with jewelry piece(s) forming or following a subtle arc.",
1023
+ "Minimalist hero shot with vast negative space surrounding the jewelry piece(s).",
1024
+ "Clustered grouping in center with jewelry piece(s) arranged as a cohesive set.",
1025
+ "Stepped arrangement with jewelry piece(s) at different heights using subtle props."
1026
+ ];
1027
+ // Solid color studio style pool - clean, minimal product compositions
1028
+ export const SOLID_COLOR_STYLE_POOL = [
1029
+ "Centered hero shot with generous negative space and a soft grounding shadow.",
1030
+ "Slight 3/4 angle product view, crisp edges, minimal shadow, catalog-ready.",
1031
+ "Top-down flat product shot with a subtle drop shadow, clean studio aesthetic.",
1032
+ "Macro close-up crop highlighting gemstone facets, background remains perfectly flat.",
1033
+ "Off-center composition with modern negative space, high-end editorial minimalism.",
1034
+ "Symmetric composition with the jewelry perfectly aligned, pristine and balanced.",
1035
+ "Soft diffused lighting with gentle falloff on the jewelry only, no background texture.",
1036
+ "Hard key light for sharp, defined jewelry contours and a clean, controlled shadow.",
1037
+ "Low angle product shot emphasizing depth and dimensionality, background pure and uniform.",
1038
+ "Minimal shadow, high-key lighting, elevated catalog clarity and precision."
721
1039
  ];
722
1040
  // Floating/suspended jewelry specific style pool
723
1041
  export const FLOATING_STYLE_POOL = [
@@ -838,12 +1156,38 @@ export const ROMANTIC_MOOD_STYLE_POOL = [
838
1156
  "Minimalist romance — one rose, one candle, one piece of jewelry, nothing else needed to tell the story.",
839
1157
  "Morning-after stillness — soft light, rumpled silk, the jewelry casually placed as if just removed, intimate and real.",
840
1158
  "Gift-giving anticipation — the box just opened, ribbon curling, tissue paper parting, the jewelry revealed for the first time.",
841
- // Texture & Surface
1159
+ // Texture & Material
842
1160
  "Matte velvet surface absorbing light while the jewelry reflects it, contrast of soft and brilliant.",
843
1161
  "Crumpled love letter paper texture beside polished metal, the rough and the refined side by side.",
844
1162
  "Soft silk catching light in ripples and folds around the jewelry, liquid fabric framing solid precious metal.",
845
1163
  "Dried rose petals mixed with fresh ones around the jewelry, the passage of time, love that endures.",
846
1164
  ];
1165
+ export const CAMPAIGN_STYLE_POOL = [
1166
+ {
1167
+ id: 'iconic_cinematic',
1168
+ name: 'Iconic Cinematic',
1169
+ prompt: 'Iconic, billboard-level presence. High-contrast lighting, sculpted shadows, and a bold silhouette. The jewelry reads as a power symbol. Focus on a single, unforgettable pose with magnetic eye contact.',
1170
+ },
1171
+ {
1172
+ id: 'textural_monument',
1173
+ name: 'Textural Monument',
1174
+ prompt: 'Hyper-material, tactile luxury. Emphasize fabric texture, skin detail, and metal surfaces. Strong, graphic composition with deliberate negative space and a sculptural feel.',
1175
+ },
1176
+ {
1177
+ id: 'time_shifted_luxury',
1178
+ name: 'Time-Shifted Luxury',
1179
+ prompt: 'Timeless, elevated luxury with a modern edge. Classical poise, restrained elegance, and cinematic grading. The jewelry feels like a rare artifact in a contemporary frame.',
1180
+ },
1181
+ {
1182
+ id: 'surreal_minimal',
1183
+ name: 'Surreal Minimal',
1184
+ prompt: 'Clean, minimal composition with a subtle surreal twist. Crisp lines, bold simplicity, and an unexpected visual hook. Jewelry remains the primary focal point.',
1185
+ },
1186
+ ];
1187
+ export const getRandomCampaignStyle = () => {
1188
+ const idx = Math.floor(Math.random() * CAMPAIGN_STYLE_POOL.length);
1189
+ return CAMPAIGN_STYLE_POOL[idx];
1190
+ };
847
1191
  // Helper function to get the appropriate style pool for a template
848
1192
  export const getStylePoolForTemplate = (templateId) => {
849
1193
  if (!templateId)
@@ -853,7 +1197,9 @@ export const getStylePoolForTemplate = (templateId) => {
853
1197
  if (templateId === 'ear_model')
854
1198
  return EAR_MODEL_STYLE_POOL;
855
1199
  if (templateId === 'flatlay_creative')
856
- return FLATLAY_STYLE_POOL;
1200
+ return FLATLAY_POSITIONING_POOL;
1201
+ if (templateId === 'solid_color_studio')
1202
+ return SOLID_COLOR_STYLE_POOL;
857
1203
  if (templateId === 'floating_minimal')
858
1204
  return FLOATING_STYLE_POOL;
859
1205
  if (templateId === 'romance_proposal')