studio-lumiere-cli 0.1.0 → 0.1.2

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.
@@ -1,232 +0,0 @@
1
- ---
2
- name: muse-management
3
- description: Create and manage Muses locally with the SDK/CLI; use when building or reusing Muse profiles.
4
- ---
5
-
6
- # Skill: Muse Creation & Management (local-lumiere)
7
-
8
- This document is a complete, end-to-end guide for creating and managing Muses locally using the **local-lumiere** SDK/CLI. It covers every function, parameter, and configuration point involved in Muse creation and reuse.
9
-
10
- ---
11
-
12
- ## Quick Start (60 seconds)
13
-
14
- 1) Ensure `GEMINI_API_KEY` is set in your environment.
15
- 2) Build the project:
16
-
17
- ```
18
- npm install
19
- npm run build
20
- ```
21
-
22
- 3) Create a Muse via CLI:
23
-
24
- ```
25
- node dist/cli.js muse \
26
- --name "Editorial Muse" \
27
- --source ./inputs/muse_source.jpg \
28
- --variations 3
29
- ```
30
-
31
- 4) Find outputs under `outputs/muses/<timestamp>/` and the local index in `outputs/muses.json`.
32
-
33
- ---
34
-
35
- ## 0) Purpose
36
-
37
- Muses are reusable model references. You create a Muse by generating variation portraits from a source image, then selecting 3 to store as the Muse’s reference set. Those reference images can be used in `generateImages()` to keep model identity consistent.
38
-
39
- ---
40
-
41
- ## 1) Where the Muse API Lives
42
-
43
- **SDK entrypoint**: `src/index.ts`
44
-
45
- - `createMuse`
46
- - `generateMuseVariations`
47
-
48
- **Pipeline implementation**: `src/pipelines/createMuse.ts`
49
-
50
- **Muse storage**: `src/storage/museStore.ts`
51
-
52
- ---
53
-
54
- ## 2) Required Environment and Configuration
55
-
56
- ### 2.1 Environment Variables
57
-
58
- - `GEMINI_API_KEY` (required)
59
- - `LUMIERE_OUTPUT_DIR` (optional, default `outputs`)
60
-
61
- ### 2.2 Runtime Config Object
62
-
63
- ```ts
64
- export interface LumiereConfig {
65
- apiKey: string;
66
- outputDir: string;
67
- models?: {
68
- prompt?: string;
69
- image?: string;
70
- video?: string;
71
- };
72
- retry?: {
73
- maxRetries?: number;
74
- baseDelayMs?: number;
75
- maxDelayMs?: number;
76
- };
77
- }
78
- ```
79
-
80
- ---
81
-
82
- ## 3) Primary Functions
83
-
84
- ### 3.1 generateMuseVariations
85
-
86
- ```ts
87
- export const generateMuseVariations = async (
88
- config: LumiereConfig,
89
- sourceImage: string,
90
- count: number,
91
- outputDir: string
92
- ): Promise<string[]>
93
- ```
94
-
95
- **Behavior:**
96
- - Creates `count` portrait variations from the source image.
97
- - Enforces **same identity** but different hair, styling, pose, and background.
98
- - Writes each variation as `variation_<n>.png`.
99
-
100
- ### 3.2 createMuse
101
-
102
- ```ts
103
- export const createMuse = async (
104
- config: LumiereConfig,
105
- request: CreateMuseRequest
106
- ): Promise<CreateMuseResult>
107
- ```
108
-
109
- ```ts
110
- export interface CreateMuseRequest {
111
- name: string; // Required
112
- sourceImage: string; // Required
113
- variations?: number; // Optional (default: 3)
114
- outputDir?: string; // Optional override
115
- }
116
- ```
117
-
118
- ```ts
119
- export interface CreateMuseResult {
120
- muse: MuseRecord;
121
- variationPaths: string[];
122
- logPath: string;
123
- }
124
- ```
125
-
126
- ---
127
-
128
- ## 4) Muse Storage and Indexing
129
-
130
- Muses are stored locally in a simple JSON index at:
131
-
132
- ```
133
- <outputDir>/muses.json
134
- ```
135
-
136
- Each Muse record:
137
-
138
- ```ts
139
- export interface MuseRecord {
140
- id: string;
141
- name: string;
142
- imagePaths: string[]; // exactly 3 paths used for reference
143
- createdAt: string;
144
- }
145
- ```
146
-
147
- The helper functions in `src/storage/museStore.ts` allow:
148
-
149
- - `loadMuses(baseDir)`
150
- - `saveMuses(baseDir, muses)`
151
- - `addMuse(baseDir, muse)`
152
- - `getMuseById(baseDir, id)`
153
-
154
- ---
155
-
156
- ## 5) Using a Muse in Image Generation
157
-
158
- To use a Muse when generating images, provide **either**:
159
-
160
- - `museImagePaths` (direct paths), OR
161
- - `museId` (stored in `muses.json`)
162
-
163
- Example in `generateImages()`:
164
-
165
- ```ts
166
- await generateImages(config, {
167
- inputImages: ["./inputs/ring.jpg"],
168
- selections: { templateId: "half_body_muse" },
169
- museId: "muse_1700000000000"
170
- });
171
- ```
172
-
173
- ---
174
-
175
- ## 6) CLI Usage
176
-
177
- ### 6.1 Create a Muse
178
-
179
- ```
180
- node dist/cli.js muse --name "Editorial Muse" --source ./inputs/muse_source.jpg --variations 3
181
- ```
182
-
183
- The CLI does not include a delete or rename command; those are handled by editing `muses.json` directly or using the helper functions in code.
184
-
185
- ---
186
-
187
- ## 7) SDK Example
188
-
189
- ```ts
190
- import { createMuse } from "./dist/index.js";
191
-
192
- const result = await createMuse(
193
- { apiKey, outputDir: "outputs" },
194
- { name: "Editorial Muse", sourceImage: "./inputs/muse_source.jpg", variations: 3 }
195
- );
196
-
197
- console.log(result.muse.id);
198
- ```
199
-
200
- ---
201
-
202
- ## 8) Error Handling and Retries
203
-
204
- Muse creation uses the same retry settings as other pipelines.
205
-
206
- ---
207
-
208
- ## 9) Related Files
209
-
210
- - `src/pipelines/createMuse.ts`
211
- - `src/storage/museStore.ts`
212
- - `src/clients/geminiClient.ts`
213
- - `src/cli.ts`
214
-
215
- ---
216
-
217
- ## 10) See Also
218
-
219
- - `C:\Users\karim\Documents\local-lumiere\.agents\skills\config-troubleshooting.md`
220
-
221
- End of skill.
222
-
223
- ## Related Skills
224
-
225
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\generate-images.md`
226
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\generate-video.md`
227
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\refine-images.md`
228
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\muse-management.md`
229
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\tired-girl.md`
230
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\image-grid.md`
231
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\config-troubleshooting.md`
232
-
@@ -1,192 +0,0 @@
1
- ---
2
- name: refine-images
3
- description: Refine existing images with the local-lumiere SDK/CLI; use when you need to enhance or edit prior outputs.
4
- ---
5
-
6
- # Skill: Refine Images (local-lumiere)
7
-
8
- This document is a complete, end-to-end guide for an AI agent to refine existing images using the **local-lumiere** SDK/CLI. It covers every function, parameter, and configuration point involved in refinement.
9
-
10
- ---
11
-
12
- ## Quick Start (60 seconds)
13
-
14
- 1) Ensure `GEMINI_API_KEY` is set in your environment.
15
- 2) Build the project:
16
-
17
- ```
18
- npm install
19
- npm run build
20
- ```
21
-
22
- 3) Refine an image via CLI:
23
-
24
- ```
25
- node dist/cli.js refine \
26
- --image ./outputs/generations/<timestamp>/image_1.png \
27
- --instruction "Make the ring slightly larger"
28
- ```
29
-
30
- 4) Find output files under `outputs/refinements/<timestamp>/`.
31
-
32
- ---
33
-
34
- ## 0) Purpose
35
-
36
- Refinement applies targeted edits to an existing image while preserving jewelry fidelity, lighting, and composition unless explicitly changed. This is ideal for adjusting size, mood, or minor details without re-generating from scratch.
37
-
38
- ---
39
-
40
- ## 1) Where the Refinement API Lives
41
-
42
- **SDK entrypoint**: `src/index.ts`
43
-
44
- - `refineImage` (primary API)
45
-
46
- **Pipeline implementation**: `src/pipelines/refineImage.ts`
47
-
48
- **Gemini client wrapper**: `src/clients/geminiClient.ts`
49
-
50
- **File I/O**: `src/storage/files.ts`
51
-
52
- ---
53
-
54
- ## 2) Required Environment and Configuration
55
-
56
- ### 2.1 Environment Variables
57
-
58
- - `GEMINI_API_KEY` (required)
59
- - `LUMIERE_OUTPUT_DIR` (optional, default `outputs`)
60
-
61
- ### 2.2 Runtime Config Object
62
-
63
- ```ts
64
- export interface LumiereConfig {
65
- apiKey: string;
66
- outputDir: string;
67
- models?: {
68
- prompt?: string;
69
- image?: string;
70
- video?: string;
71
- };
72
- retry?: {
73
- maxRetries?: number;
74
- baseDelayMs?: number;
75
- maxDelayMs?: number;
76
- };
77
- }
78
- ```
79
-
80
- ---
81
-
82
- ## 3) Primary Function: refineImage
83
-
84
- ### 3.1 Function Signature
85
-
86
- ```ts
87
- export const refineImage = async (
88
- config: LumiereConfig,
89
- request: RefineRequest
90
- ): Promise<string>
91
- ```
92
-
93
- ### 3.2 Request Object: RefineRequest
94
-
95
- ```ts
96
- export interface RefineRequest {
97
- inputImage: string; // Required. Path to local image file.
98
- instruction: string; // Required. Natural-language refinement instruction.
99
- sizeAdjustment?: number; // Optional. Percentage size of jewelry (e.g. 80, 120).
100
- outputDir?: string; // Optional. Override config.outputDir.
101
- }
102
- ```
103
-
104
- ### 3.3 Behavior
105
-
106
- - Builds a refinement prompt using the instruction.
107
- - If `sizeAdjustment` is provided and not 100, it explicitly scales **all jewelry** by that percent.
108
- - Uses the Gemini image model via `GeminiClient.generateImage()`.
109
- - Saves output as `refined.png` in `outputs/refinements/<timestamp>/`.
110
- - Writes `refine.json` log with input path, instruction, size, output path.
111
-
112
- ---
113
-
114
- ## 4) CLI Usage
115
-
116
- ### 4.1 Basic Refinement
117
-
118
- ```
119
- node dist/cli.js refine \
120
- --image ./outputs/generations/<timestamp>/image_1.png \
121
- --instruction "Soften the lighting and add a warmer mood"
122
- ```
123
-
124
- ### 4.2 Size Adjustment
125
-
126
- ```
127
- node dist/cli.js refine \
128
- --image ./outputs/generations/<timestamp>/image_1.png \
129
- --instruction "Keep everything else the same" \
130
- --size 120
131
- ```
132
-
133
- ---
134
-
135
- ## 5) SDK Example
136
-
137
- ```ts
138
- import { refineImage } from "./dist/index.js";
139
-
140
- const outputPath = await refineImage(
141
- { apiKey, outputDir: "outputs" },
142
- {
143
- inputImage: "./outputs/generations/.../image_1.png",
144
- instruction: "Make the ring slightly larger and the background softer",
145
- sizeAdjustment: 115
146
- }
147
- );
148
-
149
- console.log(outputPath);
150
- ```
151
-
152
- ---
153
-
154
- ## 6) Error Handling and Retries
155
-
156
- Refinement uses the same retry settings as other pipelines:
157
-
158
- ```ts
159
- retry: {
160
- maxRetries: 3,
161
- baseDelayMs: 1500,
162
- maxDelayMs: 12000
163
- }
164
- ```
165
-
166
- ---
167
-
168
- ## 7) Related Files
169
-
170
- - `src/pipelines/refineImage.ts`
171
- - `src/clients/geminiClient.ts`
172
- - `src/storage/files.ts`
173
- - `src/cli.ts`
174
-
175
- ---
176
-
177
- ## 8) See Also
178
-
179
- - `C:\Users\karim\Documents\local-lumiere\.agents\skills\config-troubleshooting.md`
180
-
181
- End of skill.
182
-
183
- ## Related Skills
184
-
185
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\generate-images.md`
186
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\generate-video.md`
187
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\refine-images.md`
188
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\muse-management.md`
189
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\tired-girl.md`
190
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\image-grid.md`
191
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\config-troubleshooting.md`
192
-
@@ -1,131 +0,0 @@
1
- ---
2
- name: tired-girl
3
- description: Generate the tired-girl before-look image with no jewelry using a Muse or reference image; use for before/after sets.
4
- ---
5
-
6
- # Skill: Tired Girl (Before-Look) Generation (local-lumiere)
7
-
8
- This document explains how to generate a "before" look image (tired, morning, no-makeup, crazy hair, pyjama) with **NO jewelry**, using either a Muse (preferred) or a single reference image.
9
-
10
- ---
11
-
12
- ## Quick Start (60 seconds)
13
-
14
- 1) Ensure `GEMINI_API_KEY` is set.
15
- 2) Build the project:
16
-
17
- ```
18
- npm install
19
- npm run build
20
- ```
21
-
22
- 3) Generate a tired-girl image via CLI:
23
-
24
- ```
25
- node dist/cli.js tired-girl \
26
- --muse-id muse_1700000000000 \
27
- --styles tired,morning \
28
- --quantity 2
29
- ```
30
-
31
- 4) Find outputs under `outputs/tired_girl/<timestamp>/`.
32
-
33
- ---
34
-
35
- ## 1) API Location
36
-
37
- - Pipeline: `src/pipelines/generateTiredGirl.ts`
38
- - Prompt builder: `src/prompt/tiredGirlPrompt.ts`
39
- - Styles config: `src/config/tiredGirl.ts`
40
-
41
- ---
42
-
43
- ## 2) Request/Response
44
-
45
- ```ts
46
- export interface TiredGirlRequest {
47
- inputImage?: string;
48
- museId?: string;
49
- styleIds?: string[];
50
- quantity?: number;
51
- outputDir?: string;
52
- }
53
-
54
- export interface TiredGirlResult {
55
- outputImages: string[];
56
- logPath: string;
57
- }
58
- ```
59
-
60
- Rules:
61
- - If `museId` is provided, it is used and `inputImage` is ignored.
62
- - If `museId` is not provided, `inputImage` is required.
63
- - `quantity` defaults to 1.
64
- - Styles cycle if quantity exceeds provided styles.
65
-
66
- ---
67
-
68
- ## 3) Styles
69
-
70
- Defined in `src/config/tiredGirl.ts`:
71
-
72
- - `tired`
73
- - `morning`
74
- - `no_makeup`
75
- - `crazy_hair`
76
- - `pyjama`
77
-
78
- ---
79
-
80
- ## 4) Two-Step Approach
81
-
82
- 1) **Prompt enhancement** with reference images + user prompt (no jewelry requirement).
83
- 2) **Image generation** using the enhanced prompt + reference images.
84
-
85
- Both steps are image-conditioned, mirroring the app’s two-step approach.
86
-
87
- ---
88
-
89
- ## 5) CLI Usage
90
-
91
- ```
92
- node dist/cli.js tired-girl --muse-id muse_123 --styles tired,pyjama --quantity 2
93
- ```
94
-
95
- Or with a single reference image:
96
-
97
- ```
98
- node dist/cli.js tired-girl --image ./inputs/model.jpg --styles no_makeup
99
- ```
100
-
101
- ---
102
-
103
- ## 6) SDK Example
104
-
105
- ```ts
106
- import { generateTiredGirl } from "./dist/index.js";
107
-
108
- const result = await generateTiredGirl(
109
- { apiKey, outputDir: "outputs" },
110
- {
111
- museId: "muse_1700000000000",
112
- styleIds: ["tired", "pyjama"],
113
- quantity: 2
114
- }
115
- );
116
-
117
- console.log(result.outputImages);
118
- ```
119
-
120
- ---
121
-
122
- ## Related Skills
123
-
124
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\generate-images.md`
125
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\generate-video.md`
126
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\refine-images.md`
127
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\muse-management.md`
128
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\tired-girl.md`
129
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\image-grid.md`
130
- - `C:\\Users\\karim\\Documents\\local-lumiere\\.agents\\skills\\config-troubleshooting.md`
131
-