studio-lumiere-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/.agents/skills/annotate-image/SKILL.md +99 -0
  2. package/.agents/skills/config-troubleshooting/SKILL.md +97 -0
  3. package/.agents/skills/generate-images/SKILL.md +667 -0
  4. package/.agents/skills/generate-video/SKILL.md +328 -0
  5. package/.agents/skills/image-grid/SKILL.md +96 -0
  6. package/.agents/skills/image-overlay/SKILL.md +66 -0
  7. package/.agents/skills/image-overlay/agents/openai.yaml +4 -0
  8. package/.agents/skills/image-overlay/scripts/overlay-image.js +218 -0
  9. package/.agents/skills/muse-management/SKILL.md +232 -0
  10. package/.agents/skills/refine-images/SKILL.md +192 -0
  11. package/.agents/skills/tired-girl/SKILL.md +131 -0
  12. package/.env.example +2 -0
  13. package/AGENTS.md +66 -0
  14. package/README.md +96 -0
  15. package/dist/cli.d.ts +2 -0
  16. package/dist/cli.js +214 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/clients/geminiClient.d.ts +37 -0
  19. package/dist/clients/geminiClient.js +129 -0
  20. package/dist/clients/geminiClient.js.map +1 -0
  21. package/dist/config/constants.d.ts +63 -0
  22. package/dist/config/constants.js +1005 -0
  23. package/dist/config/constants.js.map +1 -0
  24. package/dist/config/options.d.ts +1 -0
  25. package/dist/config/options.js +2 -0
  26. package/dist/config/options.js.map +1 -0
  27. package/dist/config/templates.d.ts +3 -0
  28. package/dist/config/templates.js +4 -0
  29. package/dist/config/templates.js.map +1 -0
  30. package/dist/config/tiredGirl.d.ts +3 -0
  31. package/dist/config/tiredGirl.js +9 -0
  32. package/dist/config/tiredGirl.js.map +1 -0
  33. package/dist/image/annotate.d.ts +2 -0
  34. package/dist/image/annotate.js +119 -0
  35. package/dist/image/annotate.js.map +1 -0
  36. package/dist/image/grid.d.ts +2 -0
  37. package/dist/image/grid.js +44 -0
  38. package/dist/image/grid.js.map +1 -0
  39. package/dist/index.d.ts +12 -0
  40. package/dist/index.js +13 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/pipelines/createMuse.d.ts +3 -0
  43. package/dist/pipelines/createMuse.js +49 -0
  44. package/dist/pipelines/createMuse.js.map +1 -0
  45. package/dist/pipelines/generateImages.d.ts +2 -0
  46. package/dist/pipelines/generateImages.js +140 -0
  47. package/dist/pipelines/generateImages.js.map +1 -0
  48. package/dist/pipelines/generateTiredGirl.d.ts +2 -0
  49. package/dist/pipelines/generateTiredGirl.js +73 -0
  50. package/dist/pipelines/generateTiredGirl.js.map +1 -0
  51. package/dist/pipelines/generateVideo.d.ts +2 -0
  52. package/dist/pipelines/generateVideo.js +27 -0
  53. package/dist/pipelines/generateVideo.js.map +1 -0
  54. package/dist/pipelines/refineImage.d.ts +2 -0
  55. package/dist/pipelines/refineImage.js +28 -0
  56. package/dist/pipelines/refineImage.js.map +1 -0
  57. package/dist/pipelines/resolve.d.ts +11 -0
  58. package/dist/pipelines/resolve.js +74 -0
  59. package/dist/pipelines/resolve.js.map +1 -0
  60. package/dist/pipelines/upscaleImage.d.ts +2 -0
  61. package/dist/pipelines/upscaleImage.js +23 -0
  62. package/dist/pipelines/upscaleImage.js.map +1 -0
  63. package/dist/prompt/buildPrompt.d.ts +4 -0
  64. package/dist/prompt/buildPrompt.js +322 -0
  65. package/dist/prompt/buildPrompt.js.map +1 -0
  66. package/dist/prompt/tiredGirlPrompt.d.ts +3 -0
  67. package/dist/prompt/tiredGirlPrompt.js +33 -0
  68. package/dist/prompt/tiredGirlPrompt.js.map +1 -0
  69. package/dist/storage/files.d.ts +15 -0
  70. package/dist/storage/files.js +34 -0
  71. package/dist/storage/files.js.map +1 -0
  72. package/dist/storage/museStore.d.ts +5 -0
  73. package/dist/storage/museStore.js +26 -0
  74. package/dist/storage/museStore.js.map +1 -0
  75. package/dist/types.d.ts +169 -0
  76. package/dist/types.js +2 -0
  77. package/dist/types.js.map +1 -0
  78. package/examples/generate.d.ts +1 -0
  79. package/examples/generate.js +28 -0
  80. package/examples/generate.js.map +1 -0
  81. package/examples/generate.ts +30 -0
  82. package/examples/muse.d.ts +1 -0
  83. package/examples/muse.js +18 -0
  84. package/examples/muse.js.map +1 -0
  85. package/examples/muse.ts +20 -0
  86. package/examples/video.d.ts +1 -0
  87. package/examples/video.js +18 -0
  88. package/examples/video.js.map +1 -0
  89. package/examples/video.ts +20 -0
  90. package/logo-round.png +0 -0
  91. package/logo.jpeg +0 -0
  92. package/package.json +27 -0
  93. package/src/cli.ts +259 -0
  94. package/src/clients/geminiClient.ts +168 -0
  95. package/src/config/constants.ts +1105 -0
  96. package/src/config/options.ts +15 -0
  97. package/src/config/templates.ts +4 -0
  98. package/src/config/tiredGirl.ts +11 -0
  99. package/src/image/annotate.ts +139 -0
  100. package/src/image/grid.ts +58 -0
  101. package/src/index.ts +27 -0
  102. package/src/pipelines/createMuse.ts +76 -0
  103. package/src/pipelines/generateImages.ts +203 -0
  104. package/src/pipelines/generateTiredGirl.ts +86 -0
  105. package/src/pipelines/generateVideo.ts +36 -0
  106. package/src/pipelines/refineImage.ts +36 -0
  107. package/src/pipelines/resolve.ts +88 -0
  108. package/src/pipelines/upscaleImage.ts +30 -0
  109. package/src/prompt/buildPrompt.ts +380 -0
  110. package/src/prompt/tiredGirlPrompt.ts +35 -0
  111. package/src/storage/files.ts +41 -0
  112. package/src/storage/museStore.ts +31 -0
  113. package/src/types.ts +198 -0
  114. package/tsconfig.json +15 -0
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import "dotenv/config";
package/dist/cli.js ADDED
@@ -0,0 +1,214 @@
1
+ #!/usr/bin/env node
2
+ import "dotenv/config";
3
+ import { Command } from "commander";
4
+ import { generateImages, refineImage, upscaleImage, generateTiredGirl, createMuse, generateVideo, annotateImage, createImageGrid, TEMPLATES, ETHNICITIES, SKIN_TONES, HAIR_COLORS, BACKGROUNDS, BACKGROUND_TYPES, VIBES, RESOLUTIONS, OCCASIONS } from "./index.js";
5
+ const program = new Command();
6
+ const parseList = (value) => value.split(",").map((v) => v.trim()).filter(Boolean);
7
+ const loadConfig = () => {
8
+ const apiKey = process.env.GEMINI_API_KEY;
9
+ if (!apiKey) {
10
+ throw new Error("Missing GEMINI_API_KEY in environment.");
11
+ }
12
+ return {
13
+ apiKey,
14
+ outputDir: process.env.LUMIERE_OUTPUT_DIR ?? "outputs"
15
+ };
16
+ };
17
+ program
18
+ .name("lumiere")
19
+ .description("Local Studio Lumiere SDK + CLI")
20
+ .version("0.1.0");
21
+ program
22
+ .command("list")
23
+ .argument("type", "templates|ethnicities|skin-tones|hair-colors|backgrounds|background-types|vibes|resolutions|occasions")
24
+ .action((type) => {
25
+ const map = {
26
+ templates: TEMPLATES,
27
+ ethnicities: ETHNICITIES,
28
+ "skin-tones": SKIN_TONES,
29
+ "hair-colors": HAIR_COLORS,
30
+ backgrounds: BACKGROUNDS,
31
+ "background-types": BACKGROUND_TYPES,
32
+ vibes: VIBES,
33
+ resolutions: RESOLUTIONS,
34
+ occasions: OCCASIONS
35
+ };
36
+ const payload = map[type];
37
+ if (!payload) {
38
+ throw new Error(`Unknown list type: ${type}`);
39
+ }
40
+ console.log(JSON.stringify(payload, null, 2));
41
+ });
42
+ program
43
+ .command("generate")
44
+ .requiredOption("--images <paths>", "Comma-separated image paths")
45
+ .requiredOption("--template <id>", "Template id")
46
+ .option("--detail <id>")
47
+ .option("--secondary-detail <id>")
48
+ .option("--tertiary-detail <id>")
49
+ .option("--ethnicity <id>")
50
+ .option("--skin-tone <id>")
51
+ .option("--hair-color <id>")
52
+ .option("--background <id>")
53
+ .option("--background-type <id>")
54
+ .option("--vibe <id>")
55
+ .option("--resolution <id>")
56
+ .option("--occasion <id>")
57
+ .option("--quantity <n>", "Number of images", "1")
58
+ .option("--muse-id <id>")
59
+ .option("--muse-images <paths>", "Comma-separated muse image paths")
60
+ .option("--no-enhance", "Skip prompt enhancement")
61
+ .action(async (options) => {
62
+ const config = loadConfig();
63
+ const result = await generateImages(config, {
64
+ inputImages: parseList(options.images),
65
+ quantity: Number(options.quantity),
66
+ selections: {
67
+ templateId: options.template,
68
+ detailId: options.detail,
69
+ secondaryDetailId: options.secondaryDetail,
70
+ tertiaryDetailId: options.tertiaryDetail,
71
+ ethnicityId: options.ethnicity,
72
+ skinToneId: options.skinTone,
73
+ hairColorId: options.hairColor,
74
+ backgroundId: options.background,
75
+ backgroundTypeId: options.backgroundType,
76
+ vibeId: options.vibe,
77
+ resolutionId: options.resolution,
78
+ occasionId: options.occasion
79
+ },
80
+ museId: options.museId,
81
+ museImagePaths: options.museImages ? parseList(options.museImages) : undefined,
82
+ enhancePrompt: options.enhance
83
+ });
84
+ console.log(JSON.stringify(result, null, 2));
85
+ });
86
+ program
87
+ .command("refine")
88
+ .requiredOption("--image <path>")
89
+ .requiredOption("--instruction <text>")
90
+ .option("--size <percent>")
91
+ .action(async (options) => {
92
+ const config = loadConfig();
93
+ const output = await refineImage(config, {
94
+ inputImage: options.image,
95
+ instruction: options.instruction,
96
+ sizeAdjustment: options.size ? Number(options.size) : undefined
97
+ });
98
+ console.log(output);
99
+ });
100
+ program
101
+ .command("upscale")
102
+ .requiredOption("--image <path>")
103
+ .option("--scale <number>", "Scale factor", "2")
104
+ .action(async (options) => {
105
+ const config = loadConfig();
106
+ const output = await upscaleImage(config, {
107
+ inputImage: options.image,
108
+ scale: Number(options.scale)
109
+ });
110
+ console.log(output);
111
+ });
112
+ program
113
+ .command("muse")
114
+ .requiredOption("--name <name>")
115
+ .requiredOption("--source <path>")
116
+ .option("--variations <n>", "Number of variations", "3")
117
+ .action(async (options) => {
118
+ const config = loadConfig();
119
+ const result = await createMuse(config, {
120
+ name: options.name,
121
+ sourceImage: options.source,
122
+ variations: Number(options.variations)
123
+ });
124
+ console.log(JSON.stringify(result, null, 2));
125
+ });
126
+ program
127
+ .command("video")
128
+ .requiredOption("--prompt <text>")
129
+ .option("--aspect <ratio>")
130
+ .option("--duration <seconds>")
131
+ .action(async (options) => {
132
+ const config = loadConfig();
133
+ const result = await generateVideo(config, {
134
+ prompt: options.prompt,
135
+ aspectRatio: options.aspect,
136
+ durationSeconds: options.duration ? Number(options.duration) : undefined
137
+ });
138
+ console.log(JSON.stringify(result, null, 2));
139
+ });
140
+ program
141
+ .command("tired-girl")
142
+ .option("--muse-id <id>", "Muse ID (preferred)")
143
+ .option("--image <path>", "Single reference image (used if no muse-id)")
144
+ .option("--styles <ids>", "Comma-separated style IDs")
145
+ .option("--quantity <n>", "Number of variants", "1")
146
+ .action(async (options) => {
147
+ const config = loadConfig();
148
+ const result = await generateTiredGirl(config, {
149
+ museId: options.museId,
150
+ inputImage: options.image,
151
+ styleIds: options.styles ? parseList(options.styles) : undefined,
152
+ quantity: Number(options.quantity)
153
+ });
154
+ console.log(JSON.stringify(result, null, 2));
155
+ });
156
+ program
157
+ .command("annotate")
158
+ .requiredOption("--input <path>", "Input image path")
159
+ .requiredOption("--output <path>", "Output image path")
160
+ .requiredOption("--text <text>", "Overlay text")
161
+ .option("--font <name>", "Font family (default: Poppins)")
162
+ .option("--size <px>", "Font size in px")
163
+ .option("--weight <n>", "Font weight (default: 700)")
164
+ .option("--color <hex>", "Text color (default: #FFFFFF)")
165
+ .option("--stroke-color <value>", "Stroke/outline color (default: rgba(0,0,0,0.6))")
166
+ .option("--stroke-width <px>", "Stroke/outline width (default: fontSize * 0.08)")
167
+ .option("--banner", "Enable semi-transparent banner behind text")
168
+ .option("--banner-color <value>", "Banner color (default: rgba(0,0,0,0.45))")
169
+ .option("--banner-padding <px>", "Banner padding (default: fontSize * 0.6)")
170
+ .option("--banner-radius <px>", "Banner corner radius (default: fontSize * 0.4)")
171
+ .option("--position <pos>", "top-center|top-left|top-right|bottom-center|bottom-center-high|bottom-left|bottom-right|center")
172
+ .option("--padding <px>", "Padding from edges")
173
+ .option("--max-width <ratio>", "Max width ratio (0-1)")
174
+ .action(async (options) => {
175
+ await annotateImage(options.input, options.output, options.text, {
176
+ fontFamily: options.font,
177
+ fontSize: options.size ? Number(options.size) : undefined,
178
+ fontWeight: options.weight ? Number(options.weight) : undefined,
179
+ color: options.color,
180
+ strokeColor: options.strokeColor,
181
+ strokeWidth: options.strokeWidth ? Number(options.strokeWidth) : undefined,
182
+ banner: options.banner ?? false,
183
+ bannerColor: options.bannerColor,
184
+ bannerPadding: options.bannerPadding ? Number(options.bannerPadding) : undefined,
185
+ bannerRadius: options.bannerRadius ? Number(options.bannerRadius) : undefined,
186
+ position: options.position,
187
+ padding: options.padding ? Number(options.padding) : undefined,
188
+ maxWidthRatio: options.maxWidth ? Number(options.maxWidth) : undefined
189
+ });
190
+ console.log(options.output);
191
+ });
192
+ program
193
+ .command("grid")
194
+ .requiredOption("--inputs <paths>", "Comma-separated image paths")
195
+ .requiredOption("--output <path>", "Output image path")
196
+ .option("--columns <n>", "Number of columns", "2")
197
+ .option("--rows <n>", "Number of rows", "2")
198
+ .option("--padding <px>", "Padding between tiles (default: 20)")
199
+ .option("--background <hex>", "Background color (default: #000000)")
200
+ .option("--tile-width <px>", "Fixed tile width")
201
+ .option("--tile-height <px>", "Fixed tile height")
202
+ .action(async (options) => {
203
+ await createImageGrid(parseList(options.inputs), options.output, {
204
+ columns: Number(options.columns),
205
+ rows: Number(options.rows),
206
+ padding: options.padding ? Number(options.padding) : undefined,
207
+ background: options.background,
208
+ tileWidth: options.tileWidth ? Number(options.tileWidth) : undefined,
209
+ tileHeight: options.tileHeight ? Number(options.tileHeight) : undefined
210
+ });
211
+ console.log(options.output);
212
+ });
213
+ program.parseAsync();
214
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { AspectRatio, LumiereConfig } from "../types.js";
2
+ export declare class GeminiClient {
3
+ private ai;
4
+ private models;
5
+ private retry;
6
+ constructor(config: LumiereConfig);
7
+ generateText(prompt: string): Promise<string>;
8
+ generateEnhancedPrompt(params: {
9
+ parts: Array<{
10
+ text?: string;
11
+ inlineData?: {
12
+ mimeType: string;
13
+ data: string;
14
+ };
15
+ }>;
16
+ systemInstruction?: string;
17
+ }): Promise<string>;
18
+ generateImage(params: {
19
+ parts: Array<{
20
+ text?: string;
21
+ inlineData?: {
22
+ mimeType: string;
23
+ data: string;
24
+ };
25
+ }>;
26
+ aspectRatio?: AspectRatio;
27
+ imageSize?: "1K" | "2K" | "4K";
28
+ }): Promise<string[]>;
29
+ generateVideo(params: {
30
+ prompt: string;
31
+ aspectRatio?: AspectRatio;
32
+ durationSeconds?: number;
33
+ }): Promise<{
34
+ operationName?: string;
35
+ videoBytes?: Uint8Array;
36
+ }>;
37
+ }
@@ -0,0 +1,129 @@
1
+ import { GoogleGenAI } from "@google/genai";
2
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
3
+ const isRetryableError = (error) => {
4
+ const message = String(error?.message || "").toLowerCase();
5
+ return (message.includes("429") ||
6
+ message.includes("503") ||
7
+ message.includes("overloaded") ||
8
+ message.includes("unavailable") ||
9
+ message.includes("timeout"));
10
+ };
11
+ const withRetry = async (fn, config) => {
12
+ let lastError;
13
+ for (let attempt = 0; attempt <= config.maxRetries; attempt += 1) {
14
+ try {
15
+ return await fn();
16
+ }
17
+ catch (error) {
18
+ lastError = error;
19
+ if (attempt === config.maxRetries || !isRetryableError(error)) {
20
+ throw error;
21
+ }
22
+ const delay = Math.min(config.baseDelayMs * 2 ** attempt, config.maxDelayMs);
23
+ await sleep(delay + Math.random() * 0.3 * delay);
24
+ }
25
+ }
26
+ throw lastError;
27
+ };
28
+ export class GeminiClient {
29
+ ai;
30
+ models;
31
+ retry;
32
+ constructor(config) {
33
+ this.ai = new GoogleGenAI({ apiKey: config.apiKey });
34
+ this.models = {
35
+ prompt: config.models?.prompt ?? "gemini-3-flash-preview",
36
+ image: config.models?.image ?? "gemini-3-pro-image-preview",
37
+ video: config.models?.video ?? "veo-3.1-generate-preview"
38
+ };
39
+ this.retry = {
40
+ maxRetries: config.retry?.maxRetries ?? 3,
41
+ baseDelayMs: config.retry?.baseDelayMs ?? 1500,
42
+ maxDelayMs: config.retry?.maxDelayMs ?? 12000
43
+ };
44
+ }
45
+ async generateText(prompt) {
46
+ return withRetry(async () => {
47
+ const response = await this.ai.models.generateContent({
48
+ model: this.models.prompt,
49
+ contents: prompt
50
+ });
51
+ return response.text ?? "";
52
+ }, this.retry);
53
+ }
54
+ async generateEnhancedPrompt(params) {
55
+ return withRetry(async () => {
56
+ const response = await this.ai.models.generateContent({
57
+ model: this.models.prompt,
58
+ contents: [
59
+ {
60
+ role: "user",
61
+ parts: params.parts
62
+ }
63
+ ],
64
+ config: {
65
+ systemInstruction: params.systemInstruction
66
+ }
67
+ });
68
+ return response.text ?? "";
69
+ }, this.retry);
70
+ }
71
+ async generateImage(params) {
72
+ return withRetry(async () => {
73
+ const response = await this.ai.models.generateContent({
74
+ model: this.models.image,
75
+ contents: [
76
+ {
77
+ role: "user",
78
+ parts: params.parts
79
+ }
80
+ ],
81
+ config: {
82
+ imageConfig: {
83
+ aspectRatio: params.aspectRatio,
84
+ imageSize: params.imageSize ?? "2K"
85
+ }
86
+ }
87
+ });
88
+ const images = [];
89
+ const parts = response.candidates?.[0]?.content?.parts ?? [];
90
+ for (const part of parts) {
91
+ const inlineData = part?.inlineData;
92
+ if (inlineData?.data) {
93
+ images.push(`data:${inlineData.mimeType ?? "image/png"};base64,${inlineData.data}`);
94
+ }
95
+ }
96
+ if (images.length === 0) {
97
+ throw new Error("No image data returned from Gemini.");
98
+ }
99
+ return images;
100
+ }, this.retry);
101
+ }
102
+ async generateVideo(params) {
103
+ return withRetry(async () => {
104
+ let operation = await this.ai.models.generateVideos({
105
+ model: this.models.video,
106
+ prompt: params.prompt,
107
+ config: {
108
+ aspectRatio: params.aspectRatio,
109
+ durationSeconds: params.durationSeconds
110
+ }
111
+ });
112
+ while (!operation.done) {
113
+ await sleep(10000);
114
+ operation = await this.ai.operations.getVideosOperation({ operation });
115
+ }
116
+ const generated = operation.response?.generatedVideos?.[0]?.video;
117
+ if (!generated) {
118
+ return { operationName: operation.name };
119
+ }
120
+ const rawBytes = generated.videoBytes;
121
+ let videoBytes;
122
+ if (rawBytes) {
123
+ videoBytes = typeof rawBytes === "string" ? Buffer.from(rawBytes, "base64") : rawBytes;
124
+ }
125
+ return { operationName: operation.name, videoBytes };
126
+ }, this.retry);
127
+ }
128
+ }
129
+ //# sourceMappingURL=geminiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/clients/geminiClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { Template, Option, Resolution } from '../types.js';
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[];