@enslo/sd-metadata 2.1.1 → 2.3.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.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ //#region src/types.d.ts
1
2
  /**
2
3
  * PNG text chunk (tEXt or iTXt)
3
4
  */
@@ -6,115 +7,117 @@ type PngTextChunk = TExtChunk | ITXtChunk;
6
7
  * tEXt chunk (Latin-1 encoded text)
7
8
  */
8
9
  interface TExtChunk {
9
- type: 'tEXt';
10
- /** Chunk keyword (e.g., 'parameters', 'Comment') */
11
- keyword: string;
12
- /** Text content */
13
- text: string;
10
+ type: 'tEXt';
11
+ /** Chunk keyword (e.g., 'parameters', 'Comment') */
12
+ keyword: string;
13
+ /** Text content */
14
+ text: string;
14
15
  }
15
16
  /**
16
17
  * iTXt chunk (UTF-8 encoded international text)
17
18
  */
18
19
  interface ITXtChunk {
19
- type: 'iTXt';
20
- /** Chunk keyword */
21
- keyword: string;
22
- /** Compression flag (0=uncompressed, 1=compressed) */
23
- compressionFlag: number;
24
- /** Compression method (0=zlib/deflate) */
25
- compressionMethod: number;
26
- /** Language tag (BCP 47) */
27
- languageTag: string;
28
- /** Translated keyword */
29
- translatedKeyword: string;
30
- /** Text content */
31
- text: string;
20
+ type: 'iTXt';
21
+ /** Chunk keyword */
22
+ keyword: string;
23
+ /** Compression flag (0=uncompressed, 1=compressed) */
24
+ compressionFlag: number;
25
+ /** Compression method (0=zlib/deflate) */
26
+ compressionMethod: number;
27
+ /** Language tag (BCP 47) */
28
+ languageTag: string;
29
+ /** Translated keyword */
30
+ translatedKeyword: string;
31
+ /** Text content */
32
+ text: string;
32
33
  }
33
34
  /**
34
35
  * Source location of a metadata segment.
35
36
  * Used for round-tripping: reading and writing back to the correct location.
36
37
  */
37
38
  type MetadataSegmentSource = {
38
- type: 'exifUserComment';
39
+ type: 'exifUserComment';
39
40
  } | {
40
- type: 'exifImageDescription';
41
- prefix?: string;
41
+ type: 'exifImageDescription';
42
+ prefix?: string;
42
43
  } | {
43
- type: 'exifMake';
44
- prefix?: string;
44
+ type: 'exifMake';
45
+ prefix?: string;
45
46
  } | {
46
- type: 'jpegCom';
47
+ type: 'jpegCom';
48
+ } | {
49
+ type: 'xmpPacket';
47
50
  };
48
51
  /**
49
52
  * A single metadata segment with source tracking
50
53
  */
51
54
  interface MetadataSegment {
52
- /** Source location of this segment */
53
- source: MetadataSegmentSource;
54
- /** Raw data string */
55
- data: string;
55
+ /** Source location of this segment */
56
+ source: MetadataSegmentSource;
57
+ /** Raw data string */
58
+ data: string;
56
59
  }
57
60
  /**
58
61
  * Raw metadata for write-back (preserves original format)
59
62
  */
60
63
  type RawMetadata = {
61
- format: 'png';
62
- chunks: PngTextChunk[];
64
+ format: 'png';
65
+ chunks: PngTextChunk[];
63
66
  } | {
64
- format: 'jpeg';
65
- segments: MetadataSegment[];
67
+ format: 'jpeg';
68
+ segments: MetadataSegment[];
66
69
  } | {
67
- format: 'webp';
68
- segments: MetadataSegment[];
70
+ format: 'webp';
71
+ segments: MetadataSegment[];
69
72
  };
70
73
  /**
71
74
  * Known AI image generation software
72
75
  */
73
- type GenerationSoftware = 'novelai' | 'comfyui' | 'swarmui' | 'tensorart' | 'stability-matrix' | 'invokeai' | 'forge' | 'forge-classic' | 'forge-neo' | 'reforge' | 'easy-reforge' | 'sd-webui' | 'sd-next' | 'civitai' | 'hf-space' | 'easydiffusion' | 'fooocus' | 'ruined-fooocus';
76
+ type GenerationSoftware = 'novelai' | 'comfyui' | 'swarmui' | 'tensorart' | 'stability-matrix' | 'invokeai' | 'forge' | 'forge-classic' | 'forge-neo' | 'reforge' | 'easy-reforge' | 'sd-webui' | 'sd-next' | 'civitai' | 'hf-space' | 'easydiffusion' | 'fooocus' | 'ruined-fooocus' | 'draw-things';
74
77
  /**
75
78
  * Base metadata fields shared by all tools
76
79
  */
77
80
  interface BaseMetadata {
78
- /** Positive prompt */
79
- prompt: string;
80
- /** Negative prompt */
81
- negativePrompt: string;
82
- /** Model settings */
83
- model?: ModelSettings;
84
- /** Sampling settings */
85
- sampling?: SamplingSettings;
86
- /** Hires.fix settings (if applied) */
87
- hires?: HiresSettings;
88
- /** Upscale settings (if applied) */
89
- upscale?: UpscaleSettings;
90
- /** Image width */
91
- width: number;
92
- /** Image height */
93
- height: number;
81
+ /** Positive prompt */
82
+ prompt: string;
83
+ /** Negative prompt */
84
+ negativePrompt: string;
85
+ /** Model settings */
86
+ model?: ModelSettings;
87
+ /** Sampling settings */
88
+ sampling?: SamplingSettings;
89
+ /** Hires.fix settings (if applied) */
90
+ hires?: HiresSettings;
91
+ /** Upscale settings (if applied) */
92
+ upscale?: UpscaleSettings;
93
+ /** Image width */
94
+ width: number;
95
+ /** Image height */
96
+ height: number;
94
97
  }
95
98
  /**
96
99
  * NovelAI-specific metadata
97
100
  */
98
101
  interface NovelAIMetadata extends BaseMetadata {
99
- software: 'novelai';
100
- /** V4 character prompts (when using character placement) */
101
- characterPrompts?: CharacterPrompt[];
102
- /** Use character coordinates for placement */
103
- useCoords?: boolean;
104
- /** Use character order */
105
- useOrder?: boolean;
102
+ software: 'novelai';
103
+ /** V4 character prompts (when using character placement) */
104
+ characterPrompts?: CharacterPrompt[];
105
+ /** Use character coordinates for placement */
106
+ useCoords?: boolean;
107
+ /** Use character order */
108
+ useOrder?: boolean;
106
109
  }
107
110
  /**
108
111
  * Character prompt with position (NovelAI V4)
109
112
  */
110
113
  interface CharacterPrompt {
111
- /** Character-specific prompt */
112
- prompt: string;
113
- /** Character position (normalized 0-1) */
114
- center?: {
115
- x: number;
116
- y: number;
117
- };
114
+ /** Character-specific prompt */
115
+ prompt: string;
116
+ /** Character position (normalized 0-1) */
117
+ center?: {
118
+ x: number;
119
+ y: number;
120
+ };
118
121
  }
119
122
  /**
120
123
  * ComfyUI-format metadata (ComfyUI, TensorArt, Stability Matrix)
@@ -136,17 +139,16 @@ type ComfyNodeInputValue = string | number | boolean | ComfyNodeReference | Comf
136
139
  * ComfyUI node structure
137
140
  */
138
141
  interface ComfyNode {
139
- /** Node class type (e.g., "CheckpointLoaderSimple", "KSampler") */
140
- class_type: string;
141
- /** Node inputs */
142
- inputs: Record<string, ComfyNodeInputValue>;
143
- /** Node metadata (ComfyUI only) */
144
- _meta?: {
145
- /** Node title for display */
146
- title?: string;
147
- };
148
- /** Change detection hash (rare, for caching) */
149
- is_changed?: string[] | null;
142
+ /** Node class type (e.g., "CheckpointLoaderSimple", "KSampler") */
143
+ class_type: string;
144
+ /** Node inputs */
145
+ inputs: Record<string, ComfyNodeInputValue>;
146
+ /** Node metadata (ComfyUI only) */
147
+ _meta?: {
148
+ /** Node title for display */title?: string;
149
+ };
150
+ /** Change detection hash (rare, for caching) */
151
+ is_changed?: string[] | null;
150
152
  }
151
153
  /**
152
154
  * ComfyUI node graph
@@ -160,14 +162,14 @@ type ComfyNodeGraph = Record<string, ComfyNode>;
160
162
  * These tools always have nodes in all formats.
161
163
  */
162
164
  interface BasicComfyUIMetadata extends BaseMetadata {
163
- software: 'comfyui' | 'tensorart' | 'stability-matrix';
164
- /**
165
- * ComfyUI node graph (required)
166
- *
167
- * Always present in all image formats (PNG, JPEG, WebP).
168
- * Structure: Record<nodeId, ComfyNode> where ComfyNode contains inputs and class_type.
169
- */
170
- nodes: ComfyNodeGraph;
165
+ software: 'comfyui' | 'tensorart' | 'stability-matrix';
166
+ /**
167
+ * ComfyUI node graph (required)
168
+ *
169
+ * Always present in all image formats (PNG, JPEG, WebP).
170
+ * Structure: Record<nodeId, ComfyNode> where ComfyNode contains inputs and class_type.
171
+ */
172
+ nodes: ComfyNodeGraph;
171
173
  }
172
174
  /**
173
175
  * SwarmUI-specific metadata
@@ -175,14 +177,14 @@ interface BasicComfyUIMetadata extends BaseMetadata {
175
177
  * SwarmUI uses ComfyUI workflow format but nodes are only present in PNG.
176
178
  */
177
179
  interface SwarmUIMetadata extends BaseMetadata {
178
- software: 'swarmui';
179
- /**
180
- * ComfyUI node graph (optional for SwarmUI)
181
- *
182
- * Only present in PNG format. JPEG/WebP contain SwarmUI parameters only.
183
- * Structure: Record<nodeId, ComfyNode> where ComfyNode contains inputs and class_type.
184
- */
185
- nodes?: ComfyNodeGraph;
180
+ software: 'swarmui';
181
+ /**
182
+ * ComfyUI node graph (optional for SwarmUI)
183
+ *
184
+ * Only present in PNG format. JPEG/WebP contain SwarmUI parameters only.
185
+ * Structure: Record<nodeId, ComfyNode> where ComfyNode contains inputs and class_type.
186
+ */
187
+ nodes?: ComfyNodeGraph;
186
188
  }
187
189
  /**
188
190
  * ComfyUI-format metadata (union of BasicComfyUI and SwarmUI)
@@ -200,7 +202,7 @@ type ComfyUIMetadata = BasicComfyUIMetadata | SwarmUIMetadata;
200
202
  * NovelAI's character prompts or ComfyUI's node graphs.
201
203
  */
202
204
  interface StandardMetadata extends BaseMetadata {
203
- software: 'sd-webui' | 'sd-next' | 'forge' | 'forge-classic' | 'forge-neo' | 'reforge' | 'easy-reforge' | 'invokeai' | 'civitai' | 'hf-space' | 'easydiffusion' | 'fooocus' | 'ruined-fooocus';
205
+ software: 'sd-webui' | 'sd-next' | 'forge' | 'forge-classic' | 'forge-neo' | 'reforge' | 'easy-reforge' | 'invokeai' | 'civitai' | 'hf-space' | 'easydiffusion' | 'fooocus' | 'ruined-fooocus' | 'draw-things';
204
206
  }
205
207
  /**
206
208
  * Unified generation metadata (discriminated union)
@@ -228,60 +230,59 @@ type GenerationMetadata = NovelAIMetadata | ComfyUIMetadata | StandardMetadata;
228
230
  * prompts and extras for the settings line.
229
231
  */
230
232
  type EmbedMetadata = BaseMetadata & Pick<NovelAIMetadata, 'characterPrompts'> & {
231
- /** Additional key-value pairs for the settings line */
232
- extras?: Record<string, string | number>;
233
+ /** Additional key-value pairs for the settings line */extras?: Record<string, string | number>;
233
234
  };
234
235
  /**
235
236
  * Model settings
236
237
  */
237
238
  interface ModelSettings {
238
- /** Model name */
239
- name?: string;
240
- /** Model hash */
241
- hash?: string;
242
- /** VAE name */
243
- vae?: string;
239
+ /** Model name */
240
+ name?: string;
241
+ /** Model hash */
242
+ hash?: string;
243
+ /** VAE name */
244
+ vae?: string;
244
245
  }
245
246
  /**
246
247
  * Sampling settings
247
248
  */
248
249
  interface SamplingSettings {
249
- /** Sampler name */
250
- sampler?: string;
251
- /** Scheduler (sometimes included in sampler, sometimes separate) */
252
- scheduler?: string;
253
- /** Sampling steps */
254
- steps?: number;
255
- /** CFG scale */
256
- cfg?: number;
257
- /** Random seed */
258
- seed?: number;
259
- /** CLIP skip layers */
260
- clipSkip?: number;
261
- /** Denoising strength (ComfyUI only, typically 1.0 for txt2img) */
262
- denoise?: number;
250
+ /** Sampler name */
251
+ sampler?: string;
252
+ /** Scheduler (sometimes included in sampler, sometimes separate) */
253
+ scheduler?: string;
254
+ /** Sampling steps */
255
+ steps?: number;
256
+ /** CFG scale */
257
+ cfg?: number;
258
+ /** Random seed */
259
+ seed?: number;
260
+ /** CLIP skip layers */
261
+ clipSkip?: number;
262
+ /** Denoising strength (ComfyUI only, typically 1.0 for txt2img) */
263
+ denoise?: number;
263
264
  }
264
265
  /**
265
266
  * Hires.fix settings
266
267
  */
267
268
  interface HiresSettings {
268
- /** Upscale factor */
269
- scale?: number;
270
- /** Upscaler name */
271
- upscaler?: string;
272
- /** Hires steps */
273
- steps?: number;
274
- /** Hires denoising strength */
275
- denoise?: number;
269
+ /** Upscale factor */
270
+ scale?: number;
271
+ /** Upscaler name */
272
+ upscaler?: string;
273
+ /** Hires steps */
274
+ steps?: number;
275
+ /** Hires denoising strength */
276
+ denoise?: number;
276
277
  }
277
278
  /**
278
279
  * Upscale settings (post-generation)
279
280
  */
280
281
  interface UpscaleSettings {
281
- /** Upscaler name */
282
- upscaler?: string;
283
- /** Scale factor */
284
- scale?: number;
282
+ /** Upscaler name */
283
+ upscaler?: string;
284
+ /** Scale factor */
285
+ scale?: number;
285
286
  }
286
287
  /**
287
288
  * Parse result with 4-status design
@@ -292,47 +293,47 @@ interface UpscaleSettings {
292
293
  * - `invalid`: File is corrupted or not a valid image
293
294
  */
294
295
  type ParseResult = {
295
- status: 'success';
296
- metadata: GenerationMetadata;
297
- raw: RawMetadata;
296
+ status: 'success';
297
+ metadata: GenerationMetadata;
298
+ raw: RawMetadata;
298
299
  } | {
299
- status: 'empty';
300
+ status: 'empty';
300
301
  } | {
301
- status: 'unrecognized';
302
- raw: RawMetadata;
302
+ status: 'unrecognized';
303
+ raw: RawMetadata;
303
304
  } | {
304
- status: 'invalid';
305
- message?: string;
305
+ status: 'invalid';
306
+ message?: string;
306
307
  };
307
308
  /**
308
309
  * Options for the read function
309
310
  */
310
311
  interface ReadOptions {
311
- /**
312
- * When true, dimensions are taken strictly from metadata only.
313
- * When false (default), missing dimensions are extracted from image headers.
314
- * @default false
315
- */
316
- strict?: boolean;
312
+ /**
313
+ * When true, dimensions are taken strictly from metadata only.
314
+ * When false (default), missing dimensions are extracted from image headers.
315
+ * @default false
316
+ */
317
+ strict?: boolean;
317
318
  }
318
319
  /**
319
320
  * Warning types for write operations
320
321
  */
321
322
  type WriteWarning = {
322
- type: 'metadataDropped';
323
- reason: 'unrecognizedCrossFormat';
323
+ type: 'metadataDropped';
324
+ reason: 'unrecognizedCrossFormat';
324
325
  };
325
326
  /**
326
327
  * Error types for write operations
327
328
  */
328
329
  type WriteError = {
329
- type: 'unsupportedFormat';
330
+ type: 'unsupportedFormat';
330
331
  } | {
331
- type: 'conversionFailed';
332
- message: string;
332
+ type: 'conversionFailed';
333
+ message: string;
333
334
  } | {
334
- type: 'writeFailed';
335
- message: string;
335
+ type: 'writeFailed';
336
+ message: string;
336
337
  };
337
338
  /**
338
339
  * Result of the write operation
@@ -340,22 +341,15 @@ type WriteError = {
340
341
  * Success case may include a warning when metadata was intentionally dropped.
341
342
  */
342
343
  type WriteResult = {
343
- ok: true;
344
- value: Uint8Array;
345
- warning?: WriteWarning;
344
+ ok: true;
345
+ value: Uint8Array;
346
+ warning?: WriteWarning;
346
347
  } | {
347
- ok: false;
348
- error: WriteError;
348
+ ok: false;
349
+ error: WriteError;
349
350
  };
350
-
351
- /**
352
- * Embed API for sd-metadata
353
- *
354
- * Write user-created or parsed metadata in A1111 format to PNG, JPEG,
355
- * or WebP images. Accepts both EmbedMetadata (custom metadata composed
356
- * by the user) and GenerationMetadata (parsed output from AI tools).
357
- */
358
-
351
+ //#endregion
352
+ //#region src/api/embed.d.ts
359
353
  /**
360
354
  * Embed metadata into an image
361
355
  *
@@ -400,14 +394,8 @@ type WriteResult = {
400
394
  * ```
401
395
  */
402
396
  declare function embed(input: Uint8Array | ArrayBuffer, metadata: EmbedMetadata | GenerationMetadata): WriteResult;
403
-
404
- /**
405
- * Read API for sd-metadata
406
- *
407
- * Handles reading and parsing metadata from images.
408
- * Automatically detects image format and extracts embedded generation metadata.
409
- */
410
-
397
+ //#endregion
398
+ //#region src/api/read.d.ts
411
399
  /**
412
400
  * Read and parse metadata from an image
413
401
  *
@@ -419,14 +407,8 @@ declare function embed(input: Uint8Array | ArrayBuffer, metadata: EmbedMetadata
419
407
  * @returns Parse result containing metadata and raw data
420
408
  */
421
409
  declare function read(input: Uint8Array | ArrayBuffer, options?: ReadOptions): ParseResult;
422
-
423
- /**
424
- * Unified metadata stringification
425
- *
426
- * Builds A1111-format plain text from metadata and provides the stringify()
427
- * public API for converting any metadata type to a human-readable string.
428
- */
429
-
410
+ //#endregion
411
+ //#region src/api/stringify.d.ts
430
412
  /**
431
413
  * Build A1111-format text from EmbedMetadata
432
414
  *
@@ -486,14 +468,8 @@ declare function formatRaw(raw: RawMetadata): string;
486
468
  * ```
487
469
  */
488
470
  declare function stringify(input: ParseResult | EmbedMetadata | GenerationMetadata): string;
489
-
490
- /**
491
- * Write API for sd-metadata
492
- *
493
- * Handles writing metadata to images with automatic format conversion.
494
- * Supports PNG, JPEG, and WebP formats.
495
- */
496
-
471
+ //#endregion
472
+ //#region src/api/write.d.ts
497
473
  /**
498
474
  * Write metadata to an image
499
475
  *
@@ -506,7 +482,8 @@ declare function stringify(input: ParseResult | EmbedMetadata | GenerationMetada
506
482
  * @returns New image data with embedded metadata (or warning if metadata was dropped)
507
483
  */
508
484
  declare function write(input: Uint8Array | ArrayBuffer, metadata: ParseResult): WriteResult;
509
-
485
+ //#endregion
486
+ //#region src/constants.d.ts
510
487
  /**
511
488
  * Human-readable display labels for each generation software identifier.
512
489
  *
@@ -522,5 +499,6 @@ declare function write(input: Uint8Array | ArrayBuffer, metadata: ParseResult):
522
499
  * ```
523
500
  */
524
501
  declare const softwareLabels: Readonly<Record<GenerationSoftware, string>>;
525
-
526
- export { type BaseMetadata, type CharacterPrompt, type ComfyNode, type ComfyNodeGraph, type ComfyNodeInputValue, type ComfyNodeReference, type EmbedMetadata, type GenerationMetadata, type GenerationSoftware, type HiresSettings, type ITXtChunk, type MetadataSegment, type MetadataSegmentSource, type ModelSettings, type ParseResult, type PngTextChunk, type RawMetadata, type ReadOptions, type SamplingSettings, type TExtChunk, type UpscaleSettings, type WriteResult, type WriteWarning, embed, buildEmbedText as formatAsWebUI, formatRaw, read, softwareLabels, stringify, write, embed as writeAsWebUI };
502
+ //#endregion
503
+ export { type BaseMetadata, type CharacterPrompt, type ComfyNode, type ComfyNodeGraph, type ComfyNodeInputValue, type ComfyNodeReference, type EmbedMetadata, type GenerationMetadata, type GenerationSoftware, type HiresSettings, type ITXtChunk, type MetadataSegment, type MetadataSegmentSource, type ModelSettings, type ParseResult, type PngTextChunk, type RawMetadata, type ReadOptions, type SamplingSettings, type TExtChunk, type UpscaleSettings, type WriteResult, type WriteWarning, embed, embed as writeAsWebUI, buildEmbedText as formatAsWebUI, formatRaw, read, softwareLabels, stringify, write };
504
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/api/embed.ts","../src/api/read.ts","../src/api/stringify.ts","../src/api/write.ts","../src/constants.ts"],"mappings":"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"}