studio-lumiere-cli 0.1.4 → 0.1.6
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 +482 -46
- package/dist/config/constants.d.ts +1 -63
- package/dist/config/constants.js +3 -1004
- package/dist/config/constants.js.map +1 -1
- package/dist/pipelines/generateImages.js +10 -4
- package/dist/pipelines/generateImages.js.map +1 -1
- package/dist/storage/files.js +4 -1
- package/dist/storage/files.js.map +1 -1
- package/dist/studio/constants.d.ts +71 -0
- package/dist/studio/constants.js +1082 -0
- package/dist/studio/constants.js.map +1 -0
- package/dist/studio/promptBuilder.d.ts +4 -0
- package/dist/studio/promptBuilder.js +348 -0
- package/dist/studio/promptBuilder.js.map +1 -0
- package/dist/studio/types.d.ts +155 -0
- package/dist/studio/types.js +2 -0
- package/dist/studio/types.js.map +1 -0
- package/dist/types.d.ts +2 -49
- package/package.json +9 -3
- package/scripts/sync-studio.mjs +16 -0
- package/.agents/skills/generate-images/SKILL.md +0 -121
- package/.env.example +0 -2
- package/AGENTS.md +0 -66
- package/examples/generate.d.ts +0 -1
- package/examples/generate.js +0 -28
- package/examples/generate.js.map +0 -1
- package/examples/generate.ts +0 -30
- package/examples/muse.d.ts +0 -1
- package/examples/muse.js +0 -18
- package/examples/muse.js.map +0 -1
- package/examples/muse.ts +0 -20
- package/examples/video.d.ts +0 -1
- package/examples/video.js +0 -18
- package/examples/video.js.map +0 -1
- package/examples/video.ts +0 -20
- package/logo-round.png +0 -0
- package/logo.jpeg +0 -0
- package/skills/studio-lumiere-cli/SKILL.md +0 -212
- package/skills/studio-lumiere-cli/agents/openai.yaml +0 -4
- package/src/cli.ts +0 -259
- package/src/clients/geminiClient.ts +0 -168
- package/src/config/constants.ts +0 -1105
- package/src/config/options.ts +0 -15
- package/src/config/templates.ts +0 -4
- package/src/config/tiredGirl.ts +0 -11
- package/src/image/annotate.ts +0 -139
- package/src/image/grid.ts +0 -58
- package/src/index.ts +0 -27
- package/src/pipelines/createMuse.ts +0 -76
- package/src/pipelines/generateImages.ts +0 -203
- package/src/pipelines/generateTiredGirl.ts +0 -86
- package/src/pipelines/generateVideo.ts +0 -36
- package/src/pipelines/refineImage.ts +0 -36
- package/src/pipelines/resolve.ts +0 -88
- package/src/pipelines/upscaleImage.ts +0 -30
- package/src/prompt/buildPrompt.ts +0 -380
- package/src/prompt/tiredGirlPrompt.ts +0 -35
- package/src/storage/files.ts +0 -44
- package/src/storage/museStore.ts +0 -31
- package/src/types.ts +0 -198
- package/tsconfig.json +0 -15
package/README.md
CHANGED
|
@@ -1,96 +1,532 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Studio Lumiere CLI
|
|
2
2
|
|
|
3
|
-
Local SDK + CLI for
|
|
3
|
+
Local SDK + CLI for AI-powered jewelry product photography. Generate editorial-quality images, videos, and compositions from reference jewelry photos.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx studio-lumiere-cli <command> [options]
|
|
7
|
+
```
|
|
4
8
|
|
|
5
9
|
## Setup
|
|
6
10
|
|
|
7
|
-
1
|
|
11
|
+
1. Install dependencies
|
|
8
12
|
|
|
9
13
|
```
|
|
10
14
|
npm install
|
|
11
15
|
```
|
|
12
16
|
|
|
13
|
-
2
|
|
17
|
+
2. Create `.env`
|
|
14
18
|
|
|
15
19
|
```
|
|
16
20
|
GEMINI_API_KEY=your_key_here
|
|
17
21
|
LUMIERE_OUTPUT_DIR=outputs
|
|
18
22
|
```
|
|
19
23
|
|
|
20
|
-
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Commands
|
|
27
|
+
|
|
28
|
+
| Command | Description |
|
|
29
|
+
|---------|-------------|
|
|
30
|
+
| [`generate`](#generate) | Generate styled jewelry product images |
|
|
31
|
+
| [`refine`](#refine) | Apply refinement instructions to an existing image |
|
|
32
|
+
| [`upscale`](#upscale) | Upscale an image to higher resolution |
|
|
33
|
+
| [`muse`](#muse) | Create a consistent character reference ("Muse") |
|
|
34
|
+
| [`video`](#video) | Generate video from a text prompt |
|
|
35
|
+
| [`tired-girl`](#tired-girl) | Generate "before" / casual aesthetic images |
|
|
36
|
+
| [`annotate`](#annotate) | Overlay text on an image |
|
|
37
|
+
| [`grid`](#grid) | Combine multiple images into a grid layout |
|
|
38
|
+
| [`list`](#list) | List available templates, backgrounds, vibes, etc. |
|
|
21
39
|
|
|
22
|
-
|
|
40
|
+
---
|
|
23
41
|
|
|
42
|
+
## generate
|
|
43
|
+
|
|
44
|
+
Generate styled jewelry product images using AI.
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
lumiere generate --images <paths> --template <id> [options]
|
|
24
48
|
```
|
|
25
|
-
|
|
49
|
+
|
|
50
|
+
### Required
|
|
51
|
+
|
|
52
|
+
| Flag | Description |
|
|
53
|
+
|------|-------------|
|
|
54
|
+
| `--images <paths>` | Comma-separated input image paths |
|
|
55
|
+
| `--template <id>` | Template ID (see [Templates](#templates)) |
|
|
56
|
+
|
|
57
|
+
### Customization
|
|
58
|
+
|
|
59
|
+
| Flag | Description |
|
|
60
|
+
|------|-------------|
|
|
61
|
+
| `--detail <id>` | Primary customization (template-specific) |
|
|
62
|
+
| `--secondary-detail <id>` | Secondary customization |
|
|
63
|
+
| `--tertiary-detail <id>` | Tertiary customization |
|
|
64
|
+
| `--ethnicity <id>` | Model ethnicity |
|
|
65
|
+
| `--skin-tone <id>` | Model skin tone |
|
|
66
|
+
| `--hair-color <id>` | Model hair color |
|
|
67
|
+
| `--background <id>` | Background color/texture |
|
|
68
|
+
| `--background-type <id>` | Background type (studio, interior, exterior, texture) |
|
|
69
|
+
| `--vibe <id>` | Photography mood/style |
|
|
70
|
+
| `--resolution <id>` | Output aspect ratio (default: `portrait`) |
|
|
71
|
+
| `--occasion <id>` | Special occasion theme |
|
|
72
|
+
|
|
73
|
+
### Generation
|
|
74
|
+
|
|
75
|
+
| Flag | Description |
|
|
76
|
+
|------|-------------|
|
|
77
|
+
| `--quantity <n>` | Number of images to generate (default: `1`) |
|
|
78
|
+
| `--muse-id <id>` | Muse ID for consistent model appearance |
|
|
79
|
+
| `--muse-images <paths>` | Comma-separated Muse reference image paths |
|
|
80
|
+
| `--no-enhance` | Skip LLM prompt enhancement |
|
|
81
|
+
|
|
82
|
+
### Example
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
lumiere generate \
|
|
86
|
+
--images "ring.jpg" \
|
|
87
|
+
--template hand_model \
|
|
88
|
+
--detail nail_red \
|
|
89
|
+
--background velvet_black \
|
|
90
|
+
--vibe golden_hour \
|
|
91
|
+
--quantity 4
|
|
26
92
|
```
|
|
27
93
|
|
|
28
|
-
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## refine
|
|
29
97
|
|
|
98
|
+
Apply refinement instructions to an existing generated image.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
lumiere refine --image <path> --instruction <text> [options]
|
|
30
102
|
```
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
--resolution portrait \
|
|
42
|
-
--quantity 2
|
|
103
|
+
|
|
104
|
+
| Flag | Description |
|
|
105
|
+
|------|-------------|
|
|
106
|
+
| `--image <path>` | **(required)** Path to image to refine |
|
|
107
|
+
| `--instruction <text>` | **(required)** Refinement instruction |
|
|
108
|
+
| `--size <percent>` | Resize jewelry to given percentage (e.g. `80` = smaller, `120` = larger) |
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
lumiere refine --image "output.png" --instruction "make the background warmer"
|
|
112
|
+
lumiere refine --image "output.png" --instruction "adjust jewelry" --size 80
|
|
43
113
|
```
|
|
44
114
|
|
|
45
|
-
|
|
115
|
+
---
|
|
46
116
|
|
|
117
|
+
## upscale
|
|
118
|
+
|
|
119
|
+
Upscale an image to higher resolution.
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
lumiere upscale --image <path> [--scale <n>]
|
|
47
123
|
```
|
|
48
|
-
|
|
124
|
+
|
|
125
|
+
| Flag | Description |
|
|
126
|
+
|------|-------------|
|
|
127
|
+
| `--image <path>` | **(required)** Path to image |
|
|
128
|
+
| `--scale <n>` | Scale factor (default: `2`) |
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## muse
|
|
133
|
+
|
|
134
|
+
Create a Muse (consistent character reference) from a source image. Used with the `half_body_muse` template for identity-consistent generations.
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
lumiere muse --name <name> --source <path> [--variations <n>]
|
|
49
138
|
```
|
|
50
139
|
|
|
51
|
-
|
|
140
|
+
| Flag | Description |
|
|
141
|
+
|------|-------------|
|
|
142
|
+
| `--name <name>` | **(required)** Name for the Muse |
|
|
143
|
+
| `--source <path>` | **(required)** Path to source image |
|
|
144
|
+
| `--variations <n>` | Number of variations to generate (default: `3`) |
|
|
52
145
|
|
|
146
|
+
```bash
|
|
147
|
+
lumiere muse --name "Sarah" --source "reference.jpg"
|
|
148
|
+
lumiere generate --images "necklace.jpg" --template half_body_muse --muse-id sarah
|
|
53
149
|
```
|
|
54
|
-
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## video
|
|
154
|
+
|
|
155
|
+
Generate a short video from a text prompt.
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
lumiere video --prompt <text> [options]
|
|
55
159
|
```
|
|
56
160
|
|
|
57
|
-
|
|
161
|
+
| Flag | Description |
|
|
162
|
+
|------|-------------|
|
|
163
|
+
| `--prompt <text>` | **(required)** Video description |
|
|
164
|
+
| `--aspect <ratio>` | Aspect ratio (`1:1`, `3:4`, `9:16`, `16:9`) |
|
|
165
|
+
| `--duration <seconds>` | Duration in seconds |
|
|
58
166
|
|
|
167
|
+
Video-enabled templates: `hand_model`, `neck_model`, `ear_model`, `flatlay_creative`, `floating_minimal`, `half_body_muse`.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## tired-girl
|
|
172
|
+
|
|
173
|
+
Generate "tired girl" / "before" aesthetic images showing a model in casual, un-styled looks (no jewelry).
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
lumiere tired-girl [options]
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
| Flag | Description |
|
|
180
|
+
|------|-------------|
|
|
181
|
+
| `--muse-id <id>` | Muse ID for identity reference |
|
|
182
|
+
| `--image <path>` | Single reference image (if no Muse) |
|
|
183
|
+
| `--styles <ids>` | Comma-separated style IDs |
|
|
184
|
+
| `--quantity <n>` | Number of images (default: `1`) |
|
|
185
|
+
|
|
186
|
+
### Available styles
|
|
187
|
+
|
|
188
|
+
| ID | Description |
|
|
189
|
+
|----|-------------|
|
|
190
|
+
| `tired` | Slightly tired, soft under-eye shadows, relaxed expression |
|
|
191
|
+
| `morning` | Freshly awake, morning light, sleepy energy |
|
|
192
|
+
| `no_makeup` | Completely bare faced |
|
|
193
|
+
| `crazy_hair` | Messy, unstyled wild hair |
|
|
194
|
+
| `pyjama` | Cozy pajamas or loungewear |
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
lumiere tired-girl --muse-id sarah --styles "tired,no_makeup" --quantity 2
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## annotate
|
|
203
|
+
|
|
204
|
+
Overlay text on an image with customizable styling.
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
lumiere annotate --input <path> --output <path> --text <text> [options]
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Required
|
|
211
|
+
|
|
212
|
+
| Flag | Description |
|
|
213
|
+
|------|-------------|
|
|
214
|
+
| `--input <path>` | Input image path |
|
|
215
|
+
| `--output <path>` | Output image path |
|
|
216
|
+
| `--text <text>` | Text to overlay |
|
|
217
|
+
|
|
218
|
+
### Text styling
|
|
219
|
+
|
|
220
|
+
| Flag | Default | Description |
|
|
221
|
+
|------|---------|-------------|
|
|
222
|
+
| `--font <name>` | `Poppins` | Font family |
|
|
223
|
+
| `--size <px>` | auto | Font size in pixels |
|
|
224
|
+
| `--weight <n>` | `700` | Font weight |
|
|
225
|
+
| `--color <hex>` | `#FFFFFF` | Text color |
|
|
226
|
+
| `--stroke-color <value>` | `rgba(0,0,0,0.6)` | Text outline color |
|
|
227
|
+
| `--stroke-width <px>` | `fontSize * 0.08` | Text outline width |
|
|
228
|
+
|
|
229
|
+
### Banner
|
|
230
|
+
|
|
231
|
+
| Flag | Default | Description |
|
|
232
|
+
|------|---------|-------------|
|
|
233
|
+
| `--banner` | off | Enable semi-transparent banner behind text |
|
|
234
|
+
| `--banner-color <value>` | `rgba(0,0,0,0.45)` | Banner color |
|
|
235
|
+
| `--banner-padding <px>` | `fontSize * 0.6` | Banner padding |
|
|
236
|
+
| `--banner-radius <px>` | `fontSize * 0.4` | Banner corner radius |
|
|
237
|
+
|
|
238
|
+
### Position
|
|
239
|
+
|
|
240
|
+
| Flag | Default | Description |
|
|
241
|
+
|------|---------|-------------|
|
|
242
|
+
| `--position <pos>` | `bottom-center` | One of: `top-center`, `top-left`, `top-right`, `bottom-center`, `bottom-center-high`, `bottom-left`, `bottom-right`, `center` |
|
|
243
|
+
| `--padding <px>` | auto | Padding from edges |
|
|
244
|
+
| `--max-width <ratio>` | auto | Max text width as ratio of image width (0-1) |
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
lumiere annotate \
|
|
248
|
+
--input "image.jpg" \
|
|
249
|
+
--output "branded.jpg" \
|
|
250
|
+
--text "New Collection" \
|
|
251
|
+
--position bottom-center \
|
|
252
|
+
--banner \
|
|
253
|
+
--size 48
|
|
59
254
|
```
|
|
60
|
-
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## grid
|
|
259
|
+
|
|
260
|
+
Combine multiple images into a grid layout.
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
lumiere grid --inputs <paths> --output <path> [options]
|
|
61
264
|
```
|
|
62
265
|
|
|
63
|
-
|
|
266
|
+
| Flag | Default | Description |
|
|
267
|
+
|------|---------|-------------|
|
|
268
|
+
| `--inputs <paths>` | | **(required)** Comma-separated image paths |
|
|
269
|
+
| `--output <path>` | | **(required)** Output image path |
|
|
270
|
+
| `--columns <n>` | `2` | Number of columns |
|
|
271
|
+
| `--rows <n>` | `2` | Number of rows |
|
|
272
|
+
| `--padding <px>` | `20` | Padding between tiles |
|
|
273
|
+
| `--background <hex>` | `#000000` | Background color |
|
|
274
|
+
| `--tile-width <px>` | auto | Fixed tile width |
|
|
275
|
+
| `--tile-height <px>` | auto | Fixed tile height |
|
|
64
276
|
|
|
277
|
+
```bash
|
|
278
|
+
lumiere grid \
|
|
279
|
+
--inputs "img1.jpg,img2.jpg,img3.jpg,img4.jpg" \
|
|
280
|
+
--output "grid.jpg" \
|
|
281
|
+
--columns 2 --rows 2 \
|
|
282
|
+
--padding 10 --background "#FFFFFF"
|
|
65
283
|
```
|
|
66
|
-
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## list
|
|
288
|
+
|
|
289
|
+
List available options for any category. Output is JSON.
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
lumiere list <type>
|
|
67
293
|
```
|
|
68
294
|
|
|
295
|
+
| Type | Description |
|
|
296
|
+
|------|-------------|
|
|
297
|
+
| `templates` | All templates with their customization options |
|
|
298
|
+
| `ethnicities` | Model ethnicity options |
|
|
299
|
+
| `skin-tones` | Skin tone options |
|
|
300
|
+
| `hair-colors` | Hair color options |
|
|
301
|
+
| `backgrounds` | Background color/texture options |
|
|
302
|
+
| `background-types` | Background type options |
|
|
303
|
+
| `vibes` | Photography mood options |
|
|
304
|
+
| `resolutions` | Aspect ratio options |
|
|
305
|
+
| `occasions` | Special occasion themes |
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## Templates
|
|
310
|
+
|
|
311
|
+
### `hand_model` -- Hand Model
|
|
312
|
+
|
|
313
|
+
Close-up of a model's hand, wrist, and forearm. Perfect for rings and bracelets.
|
|
314
|
+
|
|
315
|
+
| Customization | Options |
|
|
316
|
+
|---------------|---------|
|
|
317
|
+
| **Nail Polish** (`--detail`) | `nail_nude` Soft Nude, `nail_red` Classic Red, `nail_french` French Manicure, `nail_natural` Natural & Clean, `nail_dark` Noir / Dark |
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
### `neck_model` -- Neckline Portrait
|
|
322
|
+
|
|
323
|
+
Waist-up portrait focusing on the neck and collarbone. Ideal for necklaces and pendants.
|
|
324
|
+
|
|
325
|
+
| Customization | Options |
|
|
326
|
+
|---------------|---------|
|
|
327
|
+
| **Wardrobe** (`--detail`) | `wear_skin` Bare Skin, `wear_silk` White Silk Shirt, `wear_black` Black Turtleneck, `wear_gown` Evening Gown, `wear_kaftan` Modern Kaftan |
|
|
328
|
+
| **Makeup** (`--tertiary-detail`) | `makeup_none` Bare, `makeup_minimal` Minimal, `makeup_soft` Soft Glam, `makeup_full` Full Glam, `makeup_editorial` Editorial |
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
### `ear_model` -- Ear Detail
|
|
333
|
+
|
|
334
|
+
Intimate side profile shot. Best for earrings.
|
|
335
|
+
|
|
336
|
+
| Customization | Options |
|
|
337
|
+
|---------------|---------|
|
|
338
|
+
| **Hairstyle** (`--detail`) | `hair_tucked` Tucked Behind Ear, `hair_updo` Elegant Updo, `hair_waves` Loose Waves, `hair_sleek` Sleek & Straight |
|
|
339
|
+
| **Makeup** (`--tertiary-detail`) | `makeup_none` Bare, `makeup_minimal` Minimal, `makeup_soft` Soft Glam, `makeup_full` Full Glam, `makeup_editorial` Editorial |
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
### `flatlay_creative` -- Creative Flatlay
|
|
344
|
+
|
|
345
|
+
Artistic still-life composition on a surface. No model. Great for any jewelry type.
|
|
346
|
+
|
|
347
|
+
| Customization | Options |
|
|
348
|
+
|---------------|---------|
|
|
349
|
+
| **Surface** (`--detail`) | `surf_marble` White Marble, `surf_stone` Dark Slate, `surf_velvet` Beige Velvet, `surf_wood` Aged Wood, `surf_sand` Fine Sand, `surf_pedestal` Geometric Pedestal, `surf_riser` Stone Riser |
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
### `floating_minimal` -- Floating Minimalist
|
|
354
|
+
|
|
355
|
+
Jewelry suspended in mid-air with dramatic lighting. No model.
|
|
356
|
+
|
|
357
|
+
| Customization | Options |
|
|
358
|
+
|---------------|---------|
|
|
359
|
+
| **Lighting** (`--detail`) | `light_soft` Soft & Diffused, `light_hard` Hard Contrast, `light_warm` Golden Glow, `light_cool` Cool Steel |
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
### `half_body_muse` -- The Editorial Muse
|
|
364
|
+
|
|
365
|
+
Dynamic waist-up fashion shot. The only template that supports Muse (consistent model identity).
|
|
366
|
+
|
|
367
|
+
| Customization | Options |
|
|
368
|
+
|---------------|---------|
|
|
369
|
+
| **Outfit** (`--detail`) | `outfit_blazer` Power Suit, `outfit_evening` Evening Glamour, `outfit_linen` Resort Linen, `outfit_knit` Cashmere Knit, `outfit_silk` Silk Shirt, `outfit_turtleneck` Turtleneck |
|
|
370
|
+
| **Nail Polish** (`--secondary-detail`) | `nail_nude` Soft Nude, `nail_red` Classic Red, `nail_french` French Manicure, `nail_natural` Natural & Clean, `nail_dark` Noir / Dark |
|
|
371
|
+
| **Makeup** (`--tertiary-detail`) | `makeup_none` Bare, `makeup_minimal` Minimal, `makeup_soft` Soft Glam, `makeup_full` Full Glam, `makeup_editorial` Editorial |
|
|
372
|
+
| **Pose** (quaternary) | `pose_winking`, `pose_grimace`, `pose_teasing`, `pose_kiss`, `pose_laughing`, `pose_pout`, `pose_peace` |
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
### `romance_proposal` -- Romance & Proposal
|
|
377
|
+
|
|
378
|
+
Emotional engagement ring moments with a couple.
|
|
379
|
+
|
|
380
|
+
| Customization | Options |
|
|
381
|
+
|---------------|---------|
|
|
382
|
+
| **Moment** (`--detail`) | `moment_proposal` The Proposal, `moment_said_yes` Just Said Yes, `moment_hand_in_hand` Hand in Hand, `moment_dinner` Intimate Dinner, `moment_promise` The Promise |
|
|
383
|
+
| **Setting** (`--secondary-detail`) | `setting_garden` Garden, `setting_restaurant` Candlelit Restaurant, `setting_beach` Beach at Sunset, `setting_home` Cozy at Home, `setting_rooftop` Rooftop City Views, `setting_winter` Winter Snow |
|
|
384
|
+
| **Nail Polish** (`--tertiary-detail`) | `nail_nude` Soft Nude, `nail_red` Classic Red, `nail_french` French Manicure, `nail_natural` Natural & Clean, `nail_dark` Noir / Dark |
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
### `museum_exhibit` -- Museum Exhibit
|
|
389
|
+
|
|
390
|
+
Jewelry displayed as a priceless museum artifact. No model.
|
|
391
|
+
|
|
392
|
+
| Customization | Options |
|
|
393
|
+
|---------------|---------|
|
|
394
|
+
| **Museum Style** (`--detail`) | `museum_classical` Classical Gallery, `museum_modern` Modern Art Museum, `museum_baroque` Baroque Palace, `museum_art_deco` Art Deco Gallery |
|
|
395
|
+
| **Display Type** (`--secondary-detail`) | `display_vitrine` Glass Vitrine, `display_pedestal` Velvet Pedestal, `display_stand` Open Display, `display_wall` Wall Mount, `display_alcove` Illuminated Alcove |
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
### `romantic_mood` -- Romantic Mood
|
|
400
|
+
|
|
401
|
+
Jewelry styled as a romantic still life with props. No model.
|
|
402
|
+
|
|
403
|
+
| Customization | Options |
|
|
404
|
+
|---------------|---------|
|
|
405
|
+
| **Props** (`--detail`) | `prop_rose_petals` Rose Petals, `prop_candles` Candlelight, `prop_love_letter` Love Letter, `prop_silk_lace` Silk & Lace, `prop_fresh_roses` Fresh Roses, `prop_gift_box` The Gift |
|
|
406
|
+
| **Mood** (`--secondary-detail`) | `mood_candlelight` Warm Candlelight, `mood_morning` Soft Morning Light, `mood_moody` Moody & Dark, `mood_golden` Golden Hour Glow, `mood_blush` Blush Pink Haze |
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## Global Options
|
|
411
|
+
|
|
412
|
+
### Ethnicities (`--ethnicity`)
|
|
413
|
+
|
|
414
|
+
| ID | Name |
|
|
415
|
+
|----|------|
|
|
416
|
+
| `european` | European |
|
|
417
|
+
| `moroccan` | Moroccan |
|
|
418
|
+
| `middle_east` | Middle Eastern |
|
|
419
|
+
| `african` | African |
|
|
420
|
+
| `asian` | East Asian |
|
|
421
|
+
|
|
422
|
+
### Skin Tones (`--skin-tone`)
|
|
423
|
+
|
|
424
|
+
| ID | Name |
|
|
425
|
+
|----|------|
|
|
426
|
+
| `fair` | Porcelain |
|
|
427
|
+
| `light` | Light |
|
|
428
|
+
| `medium` | Tan |
|
|
429
|
+
| `deep` | Deep |
|
|
430
|
+
| `dark` | Ebony |
|
|
431
|
+
|
|
432
|
+
### Hair Colors (`--hair-color`)
|
|
433
|
+
|
|
434
|
+
| ID | Name |
|
|
435
|
+
|----|------|
|
|
436
|
+
| `dark` | Dark / Black |
|
|
437
|
+
| `brunette` | Brunette |
|
|
438
|
+
| `blonde` | Blonde |
|
|
439
|
+
| `red` | Red / Auburn |
|
|
440
|
+
| `grey` | Silver / Grey |
|
|
441
|
+
|
|
442
|
+
### Backgrounds (`--background`)
|
|
443
|
+
|
|
444
|
+
| ID | Name |
|
|
445
|
+
|----|------|
|
|
446
|
+
| `silk_cream` | Cream Silk |
|
|
447
|
+
| `velvet_black` | Midnight Velvet |
|
|
448
|
+
| `marble_white` | Carrara Marble |
|
|
449
|
+
| `emerald_velvet` | Emerald Velvet |
|
|
450
|
+
| `studio_grey` | Studio Grey |
|
|
451
|
+
| `warm_beige` | Warm Beige |
|
|
452
|
+
| `burgundy_velvet` | Burgundy Velvet |
|
|
453
|
+
| `champagne_gold` | Champagne Gold |
|
|
454
|
+
| `navy_sapphire` | Navy Sapphire |
|
|
455
|
+
| `blush_rose` | Blush Rose |
|
|
456
|
+
| `ivory_pearl` | Ivory Pearl |
|
|
457
|
+
| `slate_charcoal` | Slate Charcoal |
|
|
458
|
+
|
|
459
|
+
### Background Types (`--background-type`)
|
|
460
|
+
|
|
461
|
+
| ID | Name |
|
|
462
|
+
|----|------|
|
|
463
|
+
| `studio` | Studio Flat |
|
|
464
|
+
| `interior` | Luxury Interior |
|
|
465
|
+
| `exterior` | Outdoors |
|
|
466
|
+
| `texture` | Macro Texture |
|
|
467
|
+
|
|
468
|
+
### Vibes (`--vibe`)
|
|
469
|
+
|
|
470
|
+
| ID | Name |
|
|
471
|
+
|----|------|
|
|
472
|
+
| `golden_hour` | Golden Hour -- warm natural sunlight |
|
|
473
|
+
| `moody_chic` | Moody Chic -- dramatic shadows, high contrast |
|
|
474
|
+
| `clean_minimal` | Clean Minimal -- bright, airy, minimalist |
|
|
475
|
+
| `romantic_soft` | Romantic -- soft focus, pastel tones |
|
|
476
|
+
|
|
477
|
+
### Resolutions (`--resolution`)
|
|
478
|
+
|
|
479
|
+
| ID | Aspect Ratio | Best for |
|
|
480
|
+
|----|-------------|----------|
|
|
481
|
+
| `square` | 1:1 | Instagram Feed |
|
|
482
|
+
| `portrait` | 3:4 | Instagram Feed (vertical) |
|
|
483
|
+
| `story` | 9:16 | Instagram Stories / Reels |
|
|
484
|
+
| `landscape` | 16:9 | Website / Ads |
|
|
485
|
+
|
|
486
|
+
### Occasions (`--occasion`)
|
|
487
|
+
|
|
488
|
+
Occasions auto-configure vibe, background, and background type, and inject thematic prompt details.
|
|
489
|
+
|
|
490
|
+
| ID | Name |
|
|
491
|
+
|----|------|
|
|
492
|
+
| `moroccan_wedding` | Moroccan Wedding |
|
|
493
|
+
| `eid_fitr` | Eid al-Fitr |
|
|
494
|
+
| `eid_adha` | Eid al-Adha |
|
|
495
|
+
| `henna_night` | Henna Night |
|
|
496
|
+
| `ramadan` | Ramadan |
|
|
497
|
+
| `valentines` | Valentine's Day |
|
|
498
|
+
| `mothers_day` | Mother's Day |
|
|
499
|
+
| `birthday` | Birthday |
|
|
500
|
+
| `anniversary` | Anniversary |
|
|
501
|
+
| `graduation` | Graduation |
|
|
502
|
+
| `christmas` | Christmas |
|
|
503
|
+
| `new_year` | New Year |
|
|
504
|
+
|
|
505
|
+
---
|
|
506
|
+
|
|
69
507
|
## SDK Usage
|
|
70
508
|
|
|
71
509
|
```ts
|
|
72
|
-
import { generateImages } from "
|
|
73
|
-
|
|
74
|
-
const result = await generateImages(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
resolutionId: "portrait"
|
|
510
|
+
import { generateImages } from "studio-lumiere-cli";
|
|
511
|
+
|
|
512
|
+
const result = await generateImages(
|
|
513
|
+
{ apiKey: "your-key", outputDir: "outputs" },
|
|
514
|
+
{
|
|
515
|
+
inputImages: ["./ring.jpg"],
|
|
516
|
+
quantity: 4,
|
|
517
|
+
selections: {
|
|
518
|
+
templateId: "hand_model",
|
|
519
|
+
detailId: "nail_red",
|
|
520
|
+
backgroundId: "velvet_black",
|
|
521
|
+
vibeId: "golden_hour",
|
|
522
|
+
resolutionId: "portrait",
|
|
523
|
+
},
|
|
87
524
|
}
|
|
88
|
-
|
|
525
|
+
);
|
|
89
526
|
```
|
|
90
527
|
|
|
91
528
|
## Notes
|
|
92
529
|
|
|
93
|
-
-
|
|
530
|
+
- Templates, backgrounds, vibes, and all shared options are synced from the main Studio Lumiere web app at build time (`npm run sync`). The CLI always matches the web app.
|
|
94
531
|
- The Muse flow generates variations and stores a local `muses.json` index under your output directory.
|
|
95
532
|
- Video generation uses Veo via the Gemini SDK and returns an operation name plus the video file when available.
|
|
96
|
-
|
|
@@ -1,63 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const DEFAULT_IMAGE_COUNT = 4;
|
|
3
|
-
export declare const UPSCALE_CREDIT_COST = 5;
|
|
4
|
-
export declare const REFINE_CREDIT_COST = 5;
|
|
5
|
-
export declare const GENERATE_CREDIT_COST = 5;
|
|
6
|
-
export declare const VIDEO_GENERATION_CREDIT_COST = 20;
|
|
7
|
-
export declare const VIDEO_ENABLED_TEMPLATES: readonly ["hand_model", "neck_model", "ear_model", "flatlay_creative", "floating_minimal", "half_body_muse"];
|
|
8
|
-
export type VideoEnabledTemplate = typeof VIDEO_ENABLED_TEMPLATES[number];
|
|
9
|
-
export declare const isVideoEnabledTemplate: (templateId: string) => boolean;
|
|
10
|
-
export declare const MUSE_ENABLED_TEMPLATES: readonly ["half_body_muse"];
|
|
11
|
-
export type MuseEnabledTemplate = typeof MUSE_ENABLED_TEMPLATES[number];
|
|
12
|
-
export declare const MUSE_GENERATION_CREDIT_COST = 5;
|
|
13
|
-
export declare const MUSE_BATCH_SIZE = 3;
|
|
14
|
-
export declare const MUSE_BATCH_CREDIT_COST: number;
|
|
15
|
-
export declare const REQUIRED_MUSE_VARIATIONS = 3;
|
|
16
|
-
export declare const MAX_MUSES_PER_USER = 3;
|
|
17
|
-
export declare const isMuseEnabledTemplate: (templateId: string) => boolean;
|
|
18
|
-
export declare const TEMPLATES: Template[];
|
|
19
|
-
export declare const SKIN_TONES: Option[];
|
|
20
|
-
export declare const ETHNICITY_REGIONS: Record<string, string[]>;
|
|
21
|
-
export declare const ETHNICITIES: Option[];
|
|
22
|
-
export declare const HAIR_COLORS: Option[];
|
|
23
|
-
export declare const BACKGROUNDS: Option[];
|
|
24
|
-
export declare const LUXURY_INTERIOR_POOL: string[];
|
|
25
|
-
export declare const getRandomLuxuryInterior: () => string;
|
|
26
|
-
export declare const BACKGROUND_TYPES: Option[];
|
|
27
|
-
export declare const VIBES: Option[];
|
|
28
|
-
export interface OccasionTheme {
|
|
29
|
-
id: string;
|
|
30
|
-
name: string;
|
|
31
|
-
icon: string;
|
|
32
|
-
description: string;
|
|
33
|
-
autoConfig: {
|
|
34
|
-
vibe: string;
|
|
35
|
-
background: string;
|
|
36
|
-
backgroundType: string;
|
|
37
|
-
};
|
|
38
|
-
promptDetails?: {
|
|
39
|
-
setting: string;
|
|
40
|
-
atmosphere: string;
|
|
41
|
-
colorPalette: string;
|
|
42
|
-
culturalElements: string;
|
|
43
|
-
styling: string;
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
export declare const OCCASIONS: OccasionTheme[];
|
|
47
|
-
export declare const GENERATION_STYLE_POOL: string[];
|
|
48
|
-
export declare const HAND_MODEL_STYLE_POOL: string[];
|
|
49
|
-
export declare const EAR_MODEL_STYLE_POOL: string[];
|
|
50
|
-
export declare const FLATLAY_STYLE_POOL: string[];
|
|
51
|
-
export declare const FLOATING_STYLE_POOL: string[];
|
|
52
|
-
export declare const ROMANCE_STYLE_POOL: string[];
|
|
53
|
-
export declare const MUSEUM_STYLE_POOL: string[];
|
|
54
|
-
export declare const ROMANTIC_MOOD_STYLE_POOL: string[];
|
|
55
|
-
export declare const getStylePoolForTemplate: (templateId: string | null) => string[];
|
|
56
|
-
export declare const HAND_MODEL_VIDEO_PROMPTS: string[];
|
|
57
|
-
export declare const NECK_MODEL_VIDEO_PROMPTS: string[];
|
|
58
|
-
export declare const EAR_MODEL_VIDEO_PROMPTS: string[];
|
|
59
|
-
export declare const FLATLAY_VIDEO_PROMPTS: string[];
|
|
60
|
-
export declare const FLOATING_VIDEO_PROMPTS: string[];
|
|
61
|
-
export declare const VIDEO_MOTION_PROMPT_POOL: string[];
|
|
62
|
-
export declare const getVideoPromptPool: (templateId: string) => string[];
|
|
63
|
-
export declare const RESOLUTIONS: Resolution[];
|
|
1
|
+
export * from '../studio/constants.js';
|