studio-lumiere-cli 0.1.7 → 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.
- package/README.md +61 -550
- package/dist/cli.js +48 -1
- package/dist/cli.js.map +1 -1
- package/dist/image/annotate.js +1 -1
- package/dist/image/annotate.js.map +1 -1
- package/dist/image/beforeAfter.d.ts +2 -0
- package/dist/image/beforeAfter.js +234 -0
- package/dist/image/beforeAfter.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/pipelines/generateImages.js +6 -4
- package/dist/pipelines/generateImages.js.map +1 -1
- package/dist/studio/constants/backgrounds.d.ts +1 -0
- package/dist/studio/constants/backgrounds.js +2 -0
- package/dist/studio/constants/backgrounds.js.map +1 -0
- package/dist/studio/constants.d.ts +62 -7
- package/dist/studio/constants.js +412 -118
- package/dist/studio/constants.js.map +1 -1
- package/dist/studio/promptBuilder.d.ts +7 -3
- package/dist/studio/promptBuilder.js +282 -106
- package/dist/studio/promptBuilder.js.map +1 -1
- package/dist/studio/types.d.ts +41 -0
- package/dist/types.d.ts +14 -0
- package/package.json +30 -33
- package/scripts/sync-studio.mjs +16 -16
- package/dist/prompt/buildPrompt.d.ts +0 -4
- package/dist/prompt/buildPrompt.js +0 -322
- package/dist/prompt/buildPrompt.js.map +0 -1
package/dist/studio/constants.js
CHANGED
|
@@ -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 =
|
|
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
|
};
|
|
@@ -61,7 +97,7 @@ export const TEMPLATES = [
|
|
|
61
97
|
tertiaryCustomizationOptions: [
|
|
62
98
|
{ id: 'makeup_none', name: 'Bare / Natural', value: 'completely bare faced, no makeup, fresh natural skin', visualColor: '#FFF5EE' },
|
|
63
99
|
{ id: 'makeup_minimal', name: 'Minimal', value: 'subtle natural makeup with light foundation and soft neutral tones', visualColor: '#F5E6D3' },
|
|
64
|
-
{ 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' },
|
|
65
101
|
{ id: 'makeup_full', name: 'Full Glam', value: 'bold glamorous makeup with defined eyes, statement lips, high-fashion finish', visualColor: '#CD9575' },
|
|
66
102
|
{ id: 'makeup_editorial', name: 'Editorial / Artistic', value: 'artistic editorial makeup with creative elements, runway-inspired, avant-garde', visualColor: '#8B4513' }
|
|
67
103
|
],
|
|
@@ -84,7 +120,7 @@ export const TEMPLATES = [
|
|
|
84
120
|
tertiaryCustomizationOptions: [
|
|
85
121
|
{ id: 'makeup_none', name: 'Bare / Natural', value: 'completely bare faced, no makeup, fresh natural skin', visualColor: '#FFF5EE' },
|
|
86
122
|
{ id: 'makeup_minimal', name: 'Minimal', value: 'subtle natural makeup with light foundation and soft neutral tones', visualColor: '#F5E6D3' },
|
|
87
|
-
{ 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' },
|
|
88
124
|
{ id: 'makeup_full', name: 'Full Glam', value: 'bold glamorous makeup with defined eyes, statement lips, high-fashion finish', visualColor: '#CD9575' },
|
|
89
125
|
{ id: 'makeup_editorial', name: 'Editorial / Artistic', value: 'artistic editorial makeup with creative elements, runway-inspired, avant-garde', visualColor: '#8B4513' }
|
|
90
126
|
],
|
|
@@ -96,20 +132,45 @@ export const TEMPLATES = [
|
|
|
96
132
|
description: 'Artistic arrangement on a textured surface, non-model.',
|
|
97
133
|
visualUrl: '/template_flatlay.png',
|
|
98
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.',
|
|
99
|
-
customizationLabel: '
|
|
135
|
+
customizationLabel: 'Material of the Display',
|
|
100
136
|
customizationOptions: [
|
|
101
|
-
{ id: 'surf_marble', name: 'White Marble', value: '
|
|
102
|
-
{ id: 'surf_stone', name: 'Dark Slate', value: '
|
|
103
|
-
{ id: 'surf_velvet', name: 'Beige Velvet', value: '
|
|
104
|
-
{ id: 'surf_wood', name: 'Aged Wood', value: '
|
|
105
|
-
{ id: 'surf_sand', name: 'Fine Sand', value: '
|
|
106
|
-
{ id: '
|
|
107
|
-
{ id: '
|
|
108
|
-
{ id: '
|
|
109
|
-
{ id: '
|
|
110
|
-
{ id: '
|
|
111
|
-
{ id: '
|
|
112
|
-
{ id: '
|
|
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' }
|
|
113
174
|
],
|
|
114
175
|
hasModel: false
|
|
115
176
|
},
|
|
@@ -133,7 +194,7 @@ export const TEMPLATES = [
|
|
|
133
194
|
name: 'The Editorial Muse',
|
|
134
195
|
description: 'A dynamic waist-up fashion shot showcasing how the jewelry complements a complete look.',
|
|
135
196
|
visualUrl: '/template_muse.png',
|
|
136
|
-
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.
|
|
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.',
|
|
137
198
|
customizationLabel: 'Fashion Style & Outfit',
|
|
138
199
|
customizationOptions: [
|
|
139
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' },
|
|
@@ -159,23 +220,19 @@ export const TEMPLATES = [
|
|
|
159
220
|
tertiaryCustomizationOptions: [
|
|
160
221
|
{ id: 'makeup_none', name: 'Bare / Natural', value: 'completely bare faced, no makeup, fresh natural skin', visualColor: '#FFF5EE' },
|
|
161
222
|
{ id: 'makeup_minimal', name: 'Minimal', value: 'subtle natural makeup with light foundation and soft neutral tones', visualColor: '#F5E6D3' },
|
|
162
|
-
{ 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' },
|
|
163
224
|
{ id: 'makeup_full', name: 'Full Glam', value: 'bold glamorous makeup with defined eyes, statement lips, high-fashion finish', visualColor: '#CD9575' },
|
|
164
225
|
{ id: 'makeup_editorial', name: 'Editorial / Artistic', value: 'artistic editorial makeup with creative elements, runway-inspired, avant-garde', visualColor: '#8B4513' }
|
|
165
226
|
],
|
|
166
227
|
quaternaryCustomizationLabel: 'Poses & Expressions',
|
|
167
228
|
quaternaryCustomizationOptions: [
|
|
168
|
-
{ id: 'pose_winking', name: 'Winking', value: 'playfully winking at the camera with a confident smile', visualColor: '#F5F0EB',
|
|
169
|
-
{ id: '
|
|
170
|
-
{ id: '
|
|
171
|
-
{ id: '
|
|
172
|
-
{ id: '
|
|
173
|
-
{ id: '
|
|
174
|
-
{ id: '
|
|
175
|
-
{ id: 'pose_hand_ear', name: 'Hand to Ear', value: 'hand lifted near ear or temple, poised and composed, earrings visible if present', visualColor: '#F5F0EB' },
|
|
176
|
-
{ id: 'pose_profile', name: 'Side Profile', value: 'strong side profile with defined jawline, sleek posture, composed expression', visualColor: '#F5F0EB' },
|
|
177
|
-
{ id: 'pose_over_shoulder', name: 'Over-Shoulder', value: 'over-shoulder turn with elongated neck, subtle intensity, editorial confidence', visualColor: '#F5F0EB' },
|
|
178
|
-
{ 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>' }
|
|
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' }
|
|
179
236
|
],
|
|
180
237
|
quinaryCustomizationLabel: 'Accessories & Styling',
|
|
181
238
|
quinaryCustomizationOptions: [
|
|
@@ -193,6 +250,14 @@ export const TEMPLATES = [
|
|
|
193
250
|
],
|
|
194
251
|
hasModel: true
|
|
195
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
|
|
260
|
+
},
|
|
196
261
|
{
|
|
197
262
|
id: 'romance_proposal',
|
|
198
263
|
name: 'Romance & Proposal',
|
|
@@ -276,11 +341,11 @@ export const TEMPLATES = [
|
|
|
276
341
|
}
|
|
277
342
|
];
|
|
278
343
|
export const SKIN_TONES = [
|
|
279
|
-
{ id: 'fair', name: 'Porcelain', value: 'very fair porcelain skin tone with natural pink undertones', visualColor: '#F3EFE0' },
|
|
280
|
-
{ id: 'light', name: 'Light', value: 'light skin tone with warm undertones and natural texture', visualColor: '#EBCFB8' },
|
|
281
|
-
{ id: 'medium', name: 'Tan', value: 'sun-kissed tan medium skin tone with golden glow', visualColor: '#D3A377' },
|
|
282
|
-
{ id: 'deep', name: 'Deep', value: 'rich deep bronze skin tone with natural highlights', visualColor: '#8D5524' },
|
|
283
|
-
{ 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' },
|
|
284
349
|
];
|
|
285
350
|
// Regional descriptors for adding diversity within ethnicities
|
|
286
351
|
export const ETHNICITY_REGIONS = {
|
|
@@ -337,17 +402,154 @@ export const BACKGROUNDS = [
|
|
|
337
402
|
{ id: 'champagne_gold', name: 'Champagne Gold', value: 'shimmering champagne gold satin with soft metallic luster', visualColor: '#D4AF37' },
|
|
338
403
|
{ id: 'navy_sapphire', name: 'Navy Sapphire', value: 'deep navy sapphire velvet with dark jewel-toned richness', visualColor: '#0A1A3F' },
|
|
339
404
|
{ id: 'blush_rose', name: 'Blush Rosé', value: 'delicate blush rosé silk with soft pink warmth', visualColor: '#E8C4C4' },
|
|
340
|
-
{ id: 'ivory_pearl', name: 'Ivory Pearl', value: 'luminous ivory pearl satin with subtle iridescent sheen', visualColor: '#FAF0E6' }
|
|
341
|
-
|
|
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' }
|
|
342
420
|
];
|
|
343
421
|
export const LUXURY_INTERIOR_POOL = [
|
|
344
422
|
'softly blurred background of a high-end luxury Parisian apartment interior, bokeh effect',
|
|
345
423
|
'softly blurred background of a refined Milanese palazzo interior, warm marble and ornate mouldings, bokeh effect',
|
|
346
424
|
'softly blurred background of a grand London townhouse interior, rich wood paneling and soft velvet, bokeh effect',
|
|
347
|
-
//'softly blurred background of an opulent Moroccan riad interior, intricate zellige tiles and arched doorways, bokeh effect',
|
|
348
425
|
'softly blurred background of a sleek modern penthouse interior, floor-to-ceiling windows and neutral tones, bokeh effect',
|
|
349
426
|
'softly blurred background of a classic Viennese salon interior, gilded mirrors and crystal chandeliers, bokeh effect',
|
|
350
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
|
+
};
|
|
351
553
|
export const STUDIO_FLAT_POOL = [
|
|
352
554
|
'clean professional studio background, seamless infinity curve, minimal distractions',
|
|
353
555
|
'minimalist studio backdrop with a soft gradient and elegant lighting',
|
|
@@ -401,10 +603,12 @@ export const getRandomBlazerValue = () => {
|
|
|
401
603
|
const inner = inners[Math.floor(Math.random() * inners.length)];
|
|
402
604
|
return `wearing a ${fit} blazer over ${inner}. Confident, modern business-chic aesthetic`;
|
|
403
605
|
};
|
|
404
|
-
export const getRandomBackgroundValue = (typeId, defaultValue) => {
|
|
606
|
+
export const getRandomBackgroundValue = (typeId, defaultValue, isCampaignMode = false, allowCampaignAccent = true) => {
|
|
405
607
|
switch (typeId) {
|
|
406
608
|
case 'interior':
|
|
407
|
-
return
|
|
609
|
+
return isCampaignMode
|
|
610
|
+
? getRandomCampaignLuxuryInteriorDescriptor(allowCampaignAccent)
|
|
611
|
+
: LUXURY_INTERIOR_POOL[Math.floor(Math.random() * LUXURY_INTERIOR_POOL.length)];
|
|
408
612
|
case 'studio':
|
|
409
613
|
return STUDIO_FLAT_POOL[Math.floor(Math.random() * STUDIO_FLAT_POOL.length)];
|
|
410
614
|
case 'exterior':
|
|
@@ -415,7 +619,9 @@ export const getRandomBackgroundValue = (typeId, defaultValue) => {
|
|
|
415
619
|
return defaultValue;
|
|
416
620
|
}
|
|
417
621
|
};
|
|
418
|
-
export const getRandomLuxuryInterior = (
|
|
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)];
|
|
419
625
|
export const BACKGROUND_TYPES = [
|
|
420
626
|
{ id: 'studio', name: 'Studio Flat', value: 'clean professional studio background, seamless infinity curve, minimal distractions', visualImage: '/studio_flat.png' },
|
|
421
627
|
{ id: 'interior', name: 'Luxury Interior', value: 'softly blurred background of a high-end luxury apartment interior, bokeh effect', visualImage: '/luxury_interior.png' },
|
|
@@ -441,11 +647,18 @@ export const PHOTOGRAPHY_STYLES = [
|
|
|
441
647
|
visualColor: 'linear-gradient(135deg, #d3c4be, #8e7d76)'
|
|
442
648
|
},
|
|
443
649
|
{
|
|
444
|
-
id: '
|
|
445
|
-
name: '
|
|
446
|
-
description: '
|
|
447
|
-
value: '
|
|
448
|
-
visualColor: 'linear-gradient(135deg, #
|
|
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)'
|
|
449
662
|
},
|
|
450
663
|
{
|
|
451
664
|
id: 'modern_edge',
|
|
@@ -474,15 +687,79 @@ export const PHOTOGRAPHY_STYLES = [
|
|
|
474
687
|
description: 'High-contrast grain, light trails, and chaotic digital distortion.',
|
|
475
688
|
value: 'experimental long exposure, aggressive film grain, light trailing, high-contrast black and white, digital glitch artifacts, inspired by Daido Moriyama',
|
|
476
689
|
visualColor: 'linear-gradient(135deg, #000000, #4a4a4a)'
|
|
477
|
-
},
|
|
478
|
-
{
|
|
479
|
-
id: 'cinematic_editorial',
|
|
480
|
-
name: 'Cinematic Editorial',
|
|
481
|
-
description: 'Filmic tone, rich depth, dramatic direction.',
|
|
482
|
-
value: 'cinematic editorial photography, rich tonal depth, filmic color grading, anamorphic lens flares, narrative storytelling, dramatic but refined, inspired by Nick Knight and Craig McDean',
|
|
483
|
-
visualColor: 'linear-gradient(135deg, #1b1a1f, #394152)'
|
|
484
690
|
}
|
|
485
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'
|
|
762
|
+
];
|
|
486
763
|
export const OCCASIONS = [
|
|
487
764
|
{
|
|
488
765
|
id: 'moroccan_wedding',
|
|
@@ -490,8 +767,8 @@ export const OCCASIONS = [
|
|
|
490
767
|
icon: '👰',
|
|
491
768
|
description: 'Traditional Moroccan wedding luxury aesthetic with rich cultural details',
|
|
492
769
|
promptDetails: {
|
|
493
|
-
culturalElements:
|
|
494
|
-
decor:
|
|
770
|
+
culturalElements: MOROCCAN_WEDDING_CULTURAL_ELEMENTS_POOL,
|
|
771
|
+
decor: MOROCCAN_WEDDING_DECOR_POOL
|
|
495
772
|
}
|
|
496
773
|
},
|
|
497
774
|
{
|
|
@@ -500,8 +777,8 @@ export const OCCASIONS = [
|
|
|
500
777
|
icon: '🌙',
|
|
501
778
|
description: 'Elegant celebration of Eid al-Fitr with festive, joyful atmosphere',
|
|
502
779
|
promptDetails: {
|
|
503
|
-
culturalElements: 'Elegant Islamic geometric motifs, refined festive cues, fresh florals in a celebratory spirit.',
|
|
504
|
-
decor: 'Subtle lantern accents, delicate florals, soft celebratory details.'
|
|
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.']
|
|
505
782
|
}
|
|
506
783
|
},
|
|
507
784
|
{
|
|
@@ -510,8 +787,8 @@ export const OCCASIONS = [
|
|
|
510
787
|
icon: '🕌',
|
|
511
788
|
description: 'Sophisticated Eid al-Adha celebration with refined elegance',
|
|
512
789
|
promptDetails: {
|
|
513
|
-
culturalElements: 'Refined Islamic art motifs, luxury fabrics, dignified celebratory cues in a modern interpretation.',
|
|
514
|
-
decor: 'Warm golden accents, elegant textiles, understated celebratory details.'
|
|
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.']
|
|
515
792
|
}
|
|
516
793
|
},
|
|
517
794
|
{
|
|
@@ -520,8 +797,8 @@ export const OCCASIONS = [
|
|
|
520
797
|
icon: '🎨',
|
|
521
798
|
description: 'Traditional Moroccan henna ceremony with intricate cultural elements',
|
|
522
799
|
promptDetails: {
|
|
523
|
-
culturalElements: 'Intricate henna motifs (only if hands appear), Moroccan lanterns, traditional textiles, ceremonial elegance.',
|
|
524
|
-
decor: 'Lantern light, embroidered cushions, ornate trays, rose-water ceremony cues.'
|
|
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.']
|
|
525
802
|
}
|
|
526
803
|
},
|
|
527
804
|
{
|
|
@@ -530,8 +807,8 @@ export const OCCASIONS = [
|
|
|
530
807
|
icon: '⭐',
|
|
531
808
|
description: 'Serene Ramadan atmosphere with spiritual elegance',
|
|
532
809
|
promptDetails: {
|
|
533
|
-
culturalElements:
|
|
534
|
-
decor:
|
|
810
|
+
culturalElements: RAMADAN_CULTURAL_ELEMENTS_POOL,
|
|
811
|
+
decor: RAMADAN_DECOR_POOL
|
|
535
812
|
}
|
|
536
813
|
},
|
|
537
814
|
{
|
|
@@ -540,8 +817,8 @@ export const OCCASIONS = [
|
|
|
540
817
|
icon: '❤️',
|
|
541
818
|
description: 'Romantic ambiance with rose petals and soft candlelight',
|
|
542
819
|
promptDetails: {
|
|
543
|
-
culturalElements: 'Rose petals, soft romantic florals, gentle candlelight glow, love-celebration cues.',
|
|
544
|
-
decor: 'Subtle candles, delicate petals, soft romantic textile accents.'
|
|
820
|
+
culturalElements: ['Rose petals, soft romantic florals, gentle candlelight glow, love-celebration cues.'],
|
|
821
|
+
decor: ['Subtle candles, delicate petals, soft romantic textile accents.']
|
|
545
822
|
}
|
|
546
823
|
},
|
|
547
824
|
{
|
|
@@ -550,8 +827,8 @@ export const OCCASIONS = [
|
|
|
550
827
|
icon: '🌸',
|
|
551
828
|
description: 'Warm, tender atmosphere celebrating maternal love',
|
|
552
829
|
promptDetails: {
|
|
553
|
-
culturalElements:
|
|
554
|
-
decor:
|
|
830
|
+
culturalElements: MOTHERS_DAY_CULTURAL_ELEMENTS_POOL,
|
|
831
|
+
decor: MOTHERS_DAY_DECOR_POOL
|
|
555
832
|
}
|
|
556
833
|
},
|
|
557
834
|
{
|
|
@@ -560,8 +837,8 @@ export const OCCASIONS = [
|
|
|
560
837
|
icon: '🎂',
|
|
561
838
|
description: 'Celebratory and joyful setting with festive elements',
|
|
562
839
|
promptDetails: {
|
|
563
|
-
culturalElements: 'Refined celebration cues, subtle party accents, joyful festive details.',
|
|
564
|
-
decor: 'Minimal celebratory decor, soft ribbons or confetti bokeh, tasteful party touches.'
|
|
840
|
+
culturalElements: ['Refined celebration cues, subtle party accents, joyful festive details.'],
|
|
841
|
+
decor: ['Minimal celebratory decor, soft ribbons or confetti bokeh, tasteful party touches.']
|
|
565
842
|
}
|
|
566
843
|
},
|
|
567
844
|
{
|
|
@@ -570,8 +847,8 @@ export const OCCASIONS = [
|
|
|
570
847
|
icon: '💍',
|
|
571
848
|
description: 'Elegant, timeless aesthetic for commemorating special milestones',
|
|
572
849
|
promptDetails: {
|
|
573
|
-
culturalElements: 'Elegant romantic details, luxurious fabrics, refined celebration cues, timeless sophistication.',
|
|
574
|
-
decor: 'Soft candlelight accents, understated florals, quiet romantic touches.'
|
|
850
|
+
culturalElements: ['Elegant romantic details, luxurious fabrics, refined celebration cues, timeless sophistication.'],
|
|
851
|
+
decor: ['Soft candlelight accents, understated florals, quiet romantic touches.']
|
|
575
852
|
}
|
|
576
853
|
},
|
|
577
854
|
{
|
|
@@ -580,8 +857,8 @@ export const OCCASIONS = [
|
|
|
580
857
|
icon: '🎓',
|
|
581
858
|
description: 'Proud and accomplished atmosphere with sophisticated styling',
|
|
582
859
|
promptDetails: {
|
|
583
|
-
culturalElements: 'Academic achievement cues, professional polish, celebration of success.',
|
|
584
|
-
decor: 'Subtle graduation motifs (cap/tassel suggested in decor only), understated celebratory details.'
|
|
860
|
+
culturalElements: ['Academic achievement cues, professional polish, celebration of success.'],
|
|
861
|
+
decor: ['Subtle graduation motifs (cap/tassel suggested in decor only), understated celebratory details.']
|
|
585
862
|
}
|
|
586
863
|
},
|
|
587
864
|
{
|
|
@@ -590,8 +867,8 @@ export const OCCASIONS = [
|
|
|
590
867
|
icon: '🎄',
|
|
591
868
|
description: 'Festive holiday spirit with elegant seasonal decorations',
|
|
592
869
|
promptDetails: {
|
|
593
|
-
culturalElements: 'Pine greenery, warm candlelight, refined holiday accents, festive sophistication.',
|
|
594
|
-
decor: 'Subtle evergreen boughs, soft twinkle-light bokeh, understated holiday touches.'
|
|
870
|
+
culturalElements: ['Pine greenery, warm candlelight, refined holiday accents, festive sophistication.'],
|
|
871
|
+
decor: ['Subtle evergreen boughs, soft twinkle-light bokeh, understated holiday touches.']
|
|
595
872
|
}
|
|
596
873
|
},
|
|
597
874
|
{
|
|
@@ -600,11 +877,18 @@ export const OCCASIONS = [
|
|
|
600
877
|
icon: '✨',
|
|
601
878
|
description: 'Glamorous celebration with sparkle and sophistication',
|
|
602
879
|
promptDetails: {
|
|
603
|
-
culturalElements:
|
|
604
|
-
decor:
|
|
880
|
+
culturalElements: NEW_YEAR_CULTURAL_ELEMENTS_POOL,
|
|
881
|
+
decor: NEW_YEAR_DECOR_POOL
|
|
605
882
|
}
|
|
606
883
|
}
|
|
607
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));
|
|
608
892
|
// Pool of diverse photography hints for final generation to ensure variety in the batch
|
|
609
893
|
export const GENERATION_STYLE_POOL = [
|
|
610
894
|
// Standard & Commercial
|
|
@@ -730,46 +1014,28 @@ export const EAR_MODEL_STYLE_POOL = [
|
|
|
730
1014
|
"Cool, moody shadows with the earring catching a single ray of light."
|
|
731
1015
|
];
|
|
732
1016
|
// Flatlay specific style pool - focuses on arrangements and compositions
|
|
733
|
-
export const
|
|
734
|
-
|
|
735
|
-
"
|
|
736
|
-
"
|
|
737
|
-
"
|
|
738
|
-
"
|
|
739
|
-
"
|
|
740
|
-
"
|
|
741
|
-
"
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
"
|
|
746
|
-
"
|
|
747
|
-
"
|
|
748
|
-
"
|
|
749
|
-
"
|
|
750
|
-
"
|
|
751
|
-
|
|
752
|
-
"
|
|
753
|
-
"
|
|
754
|
-
"
|
|
755
|
-
"Dappled light as if filtering through a window or foliage, soft organic shadow patterns on the surface.",
|
|
756
|
-
"Warm golden light from one side, the rest of the scene in soft muted tones, natural and intimate.",
|
|
757
|
-
// Lighting & Shadow (Classic)
|
|
758
|
-
"Dramatic directional lighting from the side creating long, elegant shadows.",
|
|
759
|
-
"Soft overhead diffused lighting for even, commercial product look.",
|
|
760
|
-
"Harsh spotlight creating defined shadows and high contrast.",
|
|
761
|
-
"Warm golden hour style lighting with long soft shadows.",
|
|
762
|
-
"Cool, clinical studio lighting emphasizing metallic reflections.",
|
|
763
|
-
"Backlit arrangement with glowing edges and rim lighting.",
|
|
764
|
-
// Surface & Context
|
|
765
|
-
"On raw, textured marble with natural veining patterns.",
|
|
766
|
-
"Against deep black velvet for maximum jewelry contrast.",
|
|
767
|
-
"On crumpled silk or satin fabric with natural folds and highlights.",
|
|
768
|
-
"Scattered on fine sand or natural stone surface.",
|
|
769
|
-
"On aged paper or vintage book pages for heritage feel.",
|
|
770
|
-
"Against concrete or terrazzo for modern, architectural vibe.",
|
|
771
|
-
"Surrounded by dried flowers or botanical elements.",
|
|
772
|
-
"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."
|
|
773
1039
|
];
|
|
774
1040
|
// Floating/suspended jewelry specific style pool
|
|
775
1041
|
export const FLOATING_STYLE_POOL = [
|
|
@@ -890,12 +1156,38 @@ export const ROMANTIC_MOOD_STYLE_POOL = [
|
|
|
890
1156
|
"Minimalist romance — one rose, one candle, one piece of jewelry, nothing else needed to tell the story.",
|
|
891
1157
|
"Morning-after stillness — soft light, rumpled silk, the jewelry casually placed as if just removed, intimate and real.",
|
|
892
1158
|
"Gift-giving anticipation — the box just opened, ribbon curling, tissue paper parting, the jewelry revealed for the first time.",
|
|
893
|
-
// Texture &
|
|
1159
|
+
// Texture & Material
|
|
894
1160
|
"Matte velvet surface absorbing light while the jewelry reflects it, contrast of soft and brilliant.",
|
|
895
1161
|
"Crumpled love letter paper texture beside polished metal, the rough and the refined side by side.",
|
|
896
1162
|
"Soft silk catching light in ripples and folds around the jewelry, liquid fabric framing solid precious metal.",
|
|
897
1163
|
"Dried rose petals mixed with fresh ones around the jewelry, the passage of time, love that endures.",
|
|
898
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
|
+
};
|
|
899
1191
|
// Helper function to get the appropriate style pool for a template
|
|
900
1192
|
export const getStylePoolForTemplate = (templateId) => {
|
|
901
1193
|
if (!templateId)
|
|
@@ -905,7 +1197,9 @@ export const getStylePoolForTemplate = (templateId) => {
|
|
|
905
1197
|
if (templateId === 'ear_model')
|
|
906
1198
|
return EAR_MODEL_STYLE_POOL;
|
|
907
1199
|
if (templateId === 'flatlay_creative')
|
|
908
|
-
return
|
|
1200
|
+
return FLATLAY_POSITIONING_POOL;
|
|
1201
|
+
if (templateId === 'solid_color_studio')
|
|
1202
|
+
return SOLID_COLOR_STYLE_POOL;
|
|
909
1203
|
if (templateId === 'floating_minimal')
|
|
910
1204
|
return FLOATING_STYLE_POOL;
|
|
911
1205
|
if (templateId === 'romance_proposal')
|