@enslo/sd-metadata 2.1.0 → 2.1.1

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/CHANGELOG.md ADDED
@@ -0,0 +1,403 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [2.1.1] - 2026-02-24
9
+
10
+ ### Fixed
11
+
12
+ - **Malformed input hardening** (#163): Add defensive checks for corrupted or malicious binary data across all format readers and writers
13
+ - PNG writer: validate chunk boundaries before slicing
14
+ - EXIF reader: early bailout for implausibly large tag data sizes
15
+ - JPEG reader: minimum segment length validation for APP1 and COM markers
16
+ - WebP reader: fix off-by-one in chunk iteration boundary check
17
+ - A1111 parser: input length guard for settings regex
18
+
19
+ ### Maintenance
20
+
21
+ - Migrate to standard monorepo structure (#160)
22
+ - Use standard APIs for binary operations (#162)
23
+
24
+ ## [2.1.0] - 2026-02-22
25
+
26
+ ### Added
27
+
28
+ - **IIFE build for userscript support** (#157): Add `dist/index.global.js` (minified IIFE bundle) that exposes a `sdMetadata` global variable, enabling userscripts (Tampermonkey, Violentmonkey, etc.) to load the library via `@require`
29
+
30
+ ## [2.0.1] - 2026-02-19
31
+
32
+ ### Fixed
33
+
34
+ - **ComfyUI DetailerForEach support** (#150): Extract prompt, negative prompt, and sampling settings from workflows using `DetailerForEach` (ComfyUI Impact Pack inpainting/detailer nodes)
35
+ - **ComfyUI SamplerCustom support** (#150): Extract metadata from `SamplerCustom` nodes with dedicated handling for its input layout (cfg on node, noise_seed via reference, steps/scheduler from BasicScheduler)
36
+ - **ComfyUI conditioning chain traversal** (#150): Follow conditioning through intermediate nodes (e.g. ControlNet apply) to reach CLIPTextEncode for prompt text extraction
37
+
38
+ ## [2.0.0] - 2026-02-19
39
+
40
+ ### ⚠️ Breaking Changes
41
+
42
+ - **Forge family software identifiers** (#129): The `'forge'` identifier now refers specifically to the current [Forge](https://github.com/lllyasviel/stable-diffusion-webui-forge) main line. Images previously detected as `'forge'` (which was a catch-all for all `f`-prefixed versions) are now split into distinct identifiers:
43
+
44
+ | v1.x `software` | v2.0.0 `software` | Tool |
45
+ | --- | --- | --- |
46
+ | `'forge'` | `'forge'` | [Forge](https://github.com/lllyasviel/stable-diffusion-webui-forge) (current main line) |
47
+ | `'forge'` | `'forge-classic'` | [Forge Classic](https://github.com/Haoming02/sd-webui-forge-classic/tree/classic) |
48
+ | `'forge'` | `'reforge'` | [reForge](https://github.com/Panchovix/stable-diffusion-webui-reForge) |
49
+ | `'forge'` | `'easy-reforge'` | [EasyReforge](https://github.com/Zuntan03/EasyReforge) |
50
+
51
+ If your code checks `metadata.software === 'forge'`, update it to handle the new identifiers. TypeScript users with exhaustive `switch` statements on `GenerationSoftware` will see compile errors for the new values.
52
+
53
+ ### Added
54
+
55
+ - **`embed()` function** (#126): Write metadata in SD WebUI (A1111) format to any supported image
56
+ - Unlike `write()` (which preserves the original format), `embed()` always writes in A1111 plain-text format
57
+ - Accepts user-created `EmbedMetadata` or parsed `GenerationMetadata` directly
58
+ - Optional `extras` field on `EmbedMetadata` for arbitrary key-value pairs in the settings line (e.g., `Version`, `Lora hashes`)
59
+ - Extras override structured fields at their original position; new keys append at the end
60
+ - Supports PNG (tEXt/iTXt), JPEG (Exif), and WebP (Exif)
61
+ - **`stringify()` function** (#125): Unified metadata formatting for display
62
+ - Accepts `ParseResult`, `GenerationMetadata`, or `EmbedMetadata` directly
63
+ - `ParseResult`: `success` → SD WebUI format, `unrecognized` → raw text, `empty`/`invalid` → empty string
64
+ - `GenerationMetadata` / `EmbedMetadata`: directly formats as SD WebUI text
65
+ - **`softwareLabels` constant**: Read-only mapping from `GenerationSoftware` identifiers to human-readable display names
66
+ - **`EmbedMetadata` type**: User-created custom metadata — `BaseMetadata & Pick<NovelAIMetadata, 'characterPrompts'> & { extras? }`
67
+ - **`BaseMetadata` type export**: Previously internal, now available for direct use
68
+ - **`GenerationSoftware` type export**: String literal union of all supported software identifiers
69
+
70
+ ### Fixed
71
+
72
+ - **TensorArt parser** (#138): Extract sampler and scheduler from the ComfyUI node graph. Previously these fields were missing because `generation_data` does not contain them.
73
+ - **ComfyUI CLIP skip** (#137): Extract `clipSkip` from the `CLIPSetLastLayer` node. Previously, CLIP skip was silently dropped from all ComfyUI-based tool output (ComfyUI, TensorArt, Stability Matrix).
74
+ - **Fooocus parser** (#130): Rewrite based on actual Fooocus source code analysis. The previous implementation was non-functional due to reading from the wrong metadata location. Now supports both JSON and A1111 text metadata schemes.
75
+ - **Easy Diffusion parser** (#131): Improved based on source code analysis. Removed phantom key format that never appeared in actual images, improved detection reliability, and added upscale/denoise field extraction.
76
+
77
+ ### Changed
78
+
79
+ - **SD WebUI family detection** (#129): Explicit Version-field pattern matching for SD WebUI (`v` + digit) and all Forge variants. Added real SD WebUI sample files, promoting Stable Diffusion WebUI from experimental to fully supported.
80
+
81
+ ### Deprecated
82
+
83
+ - **`writeAsWebUI()`**: Use `embed()` instead (now a thin wrapper around `embed()`)
84
+ - **`formatAsWebUI()`**: Use `stringify()` instead (now a thin wrapper around internal `buildEmbedText()`)
85
+ - **`formatRaw()`**: Use `stringify()` instead
86
+
87
+ ### Migration Guide
88
+
89
+ | v1.x | v2.0.0 | Notes |
90
+ | ------------------------------- | ------------------------ | ----------------------------------------- |
91
+ | `writeAsWebUI(image, metadata)` | `embed(image, metadata)` | Also accepts user-created `EmbedMetadata` |
92
+ | `formatAsWebUI(metadata)` | `stringify(metadata)` | Also accepts `ParseResult` directly |
93
+ | `formatRaw(raw)` | `stringify(readResult)` | Handles all statuses automatically |
94
+ | `software === 'forge'` | Check all Forge variants | See Breaking Changes above |
95
+
96
+ ## [1.8.1] - 2026-02-15
97
+
98
+ ### Fixed
99
+
100
+ - **A1111 detection criteria** (#122): Fix `writeAsWebUI` round-trip for minimal metadata (no sampling settings)
101
+ - Detection now accepts `Steps:` OR `Sampler:` OR `Negative prompt:` (was requiring both `Steps:` AND `Sampler:`)
102
+
103
+ ### Changed
104
+
105
+ - **Unify detection and parsing responsibilities** (#122): `detectSoftware()` is now the single source of truth for format identification
106
+ - Remove redundant detection guards from parsers (a1111, novelai, comfyui, fooocus, ruined-fooocus)
107
+ - Remove fallback parser chain from router
108
+
109
+ ## [1.8.0] - 2026-02-14
110
+
111
+ ### Added
112
+
113
+ - **ComfyUI SamplerCustomAdvanced support** (#118): Parse distributed node workflows
114
+ - Trace sampling parameters across RandomNoise, CFGGuider, KSamplerSelect, and BasicScheduler nodes
115
+ - Support UNETLoader as alternative model loader (fallback from CheckpointLoaderSimple)
116
+ - Resolve hires scale from rgthree node references (`clip_scale`)
117
+ - **HF Space upscale settings** (#119): Extract `use_upscaler` as hires settings
118
+ - `upscale_method` → `hires.upscaler`
119
+ - `upscaler_strength` → `hires.denoise`
120
+ - `upscale_by` → `hires.scale`
121
+
122
+ ### Changed
123
+
124
+ - **Bundle size optimization** (#117): Internal refactoring to reduce bundle size and consolidate codebase (no public API changes)
125
+
126
+ ## [1.7.1] - 2026-02-01
127
+
128
+ ### Fixed
129
+
130
+ - **PNG chunk encoding strategies** (#114): Corrected encoding for format conversion
131
+ - saveimage-plus and CivitAI now use Unicode escape encoding (was incorrectly using raw UTF-8)
132
+ - Stability Matrix and TensorArt now use per-chunk encoding to match original behavior
133
+ - `parameters` (Stability Matrix) and `generation_data` (TensorArt) use raw UTF-8
134
+ - Other chunks use Unicode escape encoding
135
+ - This ensures Japanese and other non-ASCII characters are correctly preserved during round-trip conversion
136
+
137
+ ## [1.7.0] - 2026-02-01
138
+
139
+ ### Added
140
+
141
+ - **ComfyUI extended node support** (#108): Support for additional custom nodes
142
+ - **Prompt nodes**: Power Prompt (rgthree), DF_Text_Box (Derfuu)
143
+ - **Latent nodes**: SDXL Empty Latent Image (rgthree)
144
+ - **Seed nodes**: CR Seed
145
+ - **Hires detection**: LatentUpscale, LatentUpscaleBy
146
+ - **InvokeAI upscale settings** (#109): Extract upscale information from InvokeAI images
147
+ - `upscale.upscaler`: Upscaler model name (e.g., RealESRGAN_x4plus_anime_6B)
148
+ - `upscale.scale`: Scale factor
149
+ - **ComfyUI denoise in SamplingSettings** (#110): Extract denoising strength from KSampler nodes
150
+ - Only captured when `denoise < 1.0` (img2img workflows)
151
+ - `denoise = 1.0` (txt2img default) is omitted
152
+
153
+ ### Changed
154
+
155
+ - **Internal refactoring** (#107): Type cleanup and developer experience improvements (no public API changes)
156
+
157
+ ## [1.6.1] - 2026-01-29
158
+
159
+ ### Fixed
160
+
161
+ - **CivitAI Orchestration JPEG→PNG conversion** (#102): Store all metadata in a single `prompt` chunk instead of separating into multiple chunks, improving round-trip compatibility
162
+ - This fixes an issue introduced in v1.6.0 where the chunk structure was not optimal
163
+
164
+ ## [1.6.0] - 2026-01-29
165
+
166
+ ### Added
167
+
168
+ - **`strict` option for `read()`** (#95): Control dimension extraction behavior
169
+ - When `true`, dimensions come strictly from metadata only (returns 0 if not present)
170
+ - When `false` (default), missing dimensions fall back to image headers
171
+
172
+ ### Fixed
173
+
174
+ - **CivitAI detection and format conversion** (#96): CivitAI images are now correctly detected and can be converted between formats
175
+ - Previously, CivitAI Orchestration images were incorrectly detected as ComfyUI or SD WebUI
176
+ - Images using Hires fix or Upscaler on CivitAI now convert to PNG correctly (previously became `unrecognized`)
177
+
178
+ ### Changed
179
+
180
+ - **Parser refactoring** (#96, #98): Improved code quality across all parsers
181
+ - Immutable patterns for better maintainability
182
+ - Function decomposition for ComfyUI parser
183
+
184
+ ## [1.5.0] - 2026-01-26
185
+
186
+ ### Added
187
+
188
+ - **ArrayBuffer support** (#89): All public API functions (`read`, `write`, `writeAsWebUI`) now accept both `Uint8Array` and `ArrayBuffer` as input
189
+ - Browser users can pass `ArrayBuffer` directly from `File.arrayBuffer()` or `fetch().arrayBuffer()` without manual conversion
190
+ - Node.js `Buffer` (which extends `Uint8Array`) continues to work as before
191
+
192
+ ## [1.4.2] - 2026-01-25
193
+
194
+ ### Fixed
195
+
196
+ - **JPEG/WebP Format Conversion** (#85): Fixed metadata parsing for HF-Space, Ruined Fooocus, TensorArt, and Stability Matrix after cross-format conversion (PNG ↔ JPEG/WebP)
197
+ - HF-Space and Ruined Fooocus: Now correctly parsed from Comment JSON (was `unrecognized`)
198
+ - TensorArt and Stability Matrix: Now correctly detected from Comment JSON (was misidentified as `comfyui`)
199
+ - **Unicode Round-trip** (#85): Non-ASCII characters (e.g., Japanese) are now preserved during PNG → JPEG/WebP → PNG conversions
200
+
201
+ ### Changed
202
+
203
+ - **Internal Refactoring** (#86): Removed unused `exifSoftware` and `exifDocumentName` support (no public API changes). These Exif tags were not populated in real NovelAI files.
204
+
205
+ ## [1.4.1] - 2026-01-24
206
+
207
+ ### Fixed
208
+
209
+ - **NovelAI WebP Data Loss** (#79): Fixed an issue where `Software` and `Title` (DocumentName) tags were lost when converting NovelAI images to WebP. They are now correctly preserved in Exif tags.
210
+ - **NovelAI Version Detection** (#79): Improved detection of NovelAI version strings to better support newer versions.
211
+
212
+ ### Changed
213
+
214
+ - **Internal Refactoring** (#80): Decoupled encoding strategies from specific tool names for better maintainability (no public API changes).
215
+
216
+ ## [1.4.0] - 2026-01-24
217
+
218
+ ### ⚠️ BREAKING CHANGES
219
+
220
+ - **Remove `force` option from `write()`** (#76): Blind conversion for unrecognized formats is no longer supported.
221
+ - **Metadata drop behavior**: When converting unrecognized metadata to a different format (e.g., PNG → JPEG), metadata is now dropped instead of attempting a blind conversion.
222
+
223
+ ### Added
224
+
225
+ - **`WriteWarning` type** (#76): Notifies when metadata was intentionally dropped during conversion (e.g., unrecognized cross-format).
226
+ - **Graceful unrecognized handling**: Unrecognized metadata is still preserved when writing back to the same format or using `writeAsWebUI` with structured metadata.
227
+
228
+ ### Documentation
229
+
230
+ - Updated API examples to use the new `result.warning` pattern.
231
+
232
+ ## [1.3.0] - 2026-01-23
233
+
234
+ ### Added
235
+
236
+ - **`formatRaw()` function** (#72): Format raw metadata as plain text for display
237
+ - Works with unrecognized metadata (`status: 'unrecognized'`)
238
+ - Multiple entries separated by blank lines
239
+ - Ideal for fallback display when parsing fails
240
+
241
+ ### Changed
242
+
243
+ - **Migrate to pnpm** (#74): Replace npm with pnpm for faster, more disk-efficient package management
244
+ - **Upgrade Vitest to v4** (#74): Fix esbuild security vulnerability (GHSA-67mh-4wv8-2f99)
245
+
246
+ ### Documentation
247
+
248
+ - Improve README quality and fix package import names (#73)
249
+ - Restructure Usage section with collapsible advanced examples
250
+ - Emphasize `formatAsWebUI` cross-tool normalization capability
251
+
252
+ ## [1.2.0] - 2026-01-22
253
+
254
+ ### Added
255
+
256
+ - **`writeAsWebUI()` function** (#69): Write any GenerationMetadata to PNG/JPEG/WebP in SD WebUI (A1111) format
257
+ - Create custom metadata from scratch
258
+ - Convert metadata from any tool to WebUI-compatible format
259
+ - Automatic encoding strategy (tEXt for ASCII, iTXt for non-ASCII in PNG)
260
+ - **`formatAsWebUI()` function** (#69): Format metadata as human-readable text in SD WebUI format
261
+ - Tool-agnostic standard format for displaying generation metadata
262
+ - Supports NovelAI character prompts with position comments
263
+ - Normalizes line endings for cross-platform compatibility
264
+
265
+ ## [1.1.1] - 2026-01-21
266
+
267
+ ### Documentation
268
+
269
+ - Update README CDN usage example to reference v1.1.0
270
+ - Add README version update step to release workflow
271
+ - Remove trailing slash from package.json homepage URL
272
+
273
+ ## [1.1.0] - 2026-01-21
274
+
275
+ ### ⚠️ BREAKING CHANGES
276
+
277
+ - **Replace `workflow` with `nodes` in ComfyUIMetadata** (#58): The `workflow?: unknown` field has been replaced with typed `nodes: ComfyNodeGraph`.
278
+ - **What `workflow` was**: ComfyUI UI layout data containing node positions, sizes, link connections, and visual groupings—information used by ComfyUI's graph editor but not required for image reproduction.
279
+ - **What `nodes` is**: The actual node graph (from PNG `prompt` chunk) mapping node IDs to their inputs and class types—the essential data needed to reproduce the generation.
280
+ - **Why this change**: Previously, `workflow` only existed in ComfyUI images and was `undefined` for other ComfyUI-compatible tools (TensorArt, Stability Matrix, SwarmUI). Now `nodes` provides actual node graph data from all tools.
281
+ - **Remove `type` field from GenerationMetadata** (#57): Use `metadata.software` instead of `metadata.type` for type narrowing.
282
+ - **Internal types no longer exported** (#60): `BaseMetadata` and `GenerationSoftware` are now internal types.
283
+
284
+ ### Added
285
+
286
+ - **SwarmUI workflow preservation** (#59): Store ComfyUI node graph in `exifMake` segment when converting PNG to JPEG/WebP, enabling complete round-trip preservation
287
+ - **Typed ComfyUI node graph** (#58): New types `ComfyNode`, `ComfyNodeGraph`, `ComfyNodeReference`, `ComfyNodeInputValue` for type-safe workflow access
288
+ - **Expanded type exports** (#60): Export `ModelSettings`, `SamplingSettings`, `HiresSettings`, `UpscaleSettings`, `CharacterPrompt`, and chunk/segment types
289
+ - **Type documentation** (#60): Comprehensive type reference at `docs/types.md`
290
+
291
+ ### Fixed
292
+
293
+ - **TensorArt seed extraction** (#61): Extract actual seed from KSampler node when `generation_data.seed` is -1 (random placeholder)
294
+
295
+ ### Changed
296
+
297
+ - **Metadata type consolidation** (#60): Renamed `A1111Metadata` to `StandardMetadata`, merged `InvokeAIMetadata` into `StandardMetadata`
298
+ - **ComfyUIMetadata restructure** (#60): Split into `BasicComfyUIMetadata` (nodes required) and `SwarmUIMetadata` (nodes optional)
299
+
300
+ ### Documentation
301
+
302
+ - Improved GenerationMetadata documentation in README (#62)
303
+ - Added comprehensive type reference docs (#60)
304
+ - Improved README usage examples (#56)
305
+
306
+ ## [1.0.2] - 2026-01-19
307
+
308
+ ### Fixed
309
+
310
+ - **Incorrect SD-WebUI Detection**: Fixed false positives where non-AI generated images (e.g., from photo editing software) were incorrectly detected as SD-WebUI/A1111 format (#47)
311
+ - **ComfyUI Detection**: Improved detection for ComfyUI files, fixing cases where valid ComfyUI metadata was not recognized (#47, #50)
312
+
313
+ ### Changed
314
+
315
+ - Refactored detection logic with tier-based structure for improved maintainability (#47)
316
+
317
+ ## [1.0.1] - 2026-01-13
318
+
319
+ ### Changed
320
+
321
+ - Updated package homepage URL to point to the demo site (<https://sd-metadata.pages.dev/>) instead of the GitHub repository
322
+
323
+ ## [1.0.0] - 2026-01-13
324
+
325
+ ### Added
326
+
327
+ #### Core Features
328
+
329
+ - **Multi-format Support**: PNG (tEXt / iTXt), JPEG (COM / Exif), WebP (Exif)
330
+ - **Unified API**: Simple `read()` and `write()` functions work across all formats
331
+ - **TypeScript Native**: Written in TypeScript with full type definitions included
332
+ - **Zero Dependencies**: Works in Node.js and browsers without any external dependencies
333
+ - **Format Conversion**: Seamlessly convert metadata between PNG, JPEG, and WebP
334
+ - **Lossless Round-trip**: Preserves original metadata structure when converting back to native format
335
+ - Image dimension extraction with automatic fallback from image headers
336
+
337
+ #### Supported AI Tools
338
+
339
+ **Fully Supported** (verified with sample files, native format support):
340
+
341
+ - NovelAI - PNG and WebP native formats
342
+ - ComfyUI - PNG native format
343
+ - Stable Diffusion WebUI (AUTOMATIC1111) - Experimental (no samples yet)
344
+ - Forge / Forge Neo - PNG, JPEG, and WebP native formats
345
+ - InvokeAI - PNG native format
346
+ - SwarmUI - PNG and WebP native formats
347
+
348
+ **Extended Support** (sd-metadata specific parsers, cross-format conversion):
349
+
350
+ - Civitai - Uses A1111-compatible format, JPEG primary format
351
+ - TensorArt - Custom JSON format in PNG
352
+ - Stability Matrix - Custom JSON format in PNG
353
+ - HuggingFace Space - JSON format in Exif
354
+ - Ruined Fooocus - PNG format
355
+
356
+ **Experimental** (implemented from reference code, no sample verification):
357
+
358
+ - Easy Diffusion
359
+ - Fooocus
360
+
361
+ #### Advanced Features
362
+
363
+ - Segment/chunk tracking for lossless round-trip preservation
364
+ - ComfyUI detection priority when both prompt and workflow exist
365
+ - NovelAI WebP UTF-8 corruption auto-correction
366
+ - Force conversion for unrecognized metadata formats with `{ force: true }` option
367
+
368
+ ### Known Limitations
369
+
370
+ - **ComfyUI JPEG/WebP**: While reading supports major custom node formats (e.g., `save-image-extended`), writing always uses the `comfyui-saveimage-plus` format for best information preservation and ComfyUI drag-and-drop workflow compatibility
371
+ - **NovelAI WebP**: Auto-corrects corrupted UTF-8 in Description field, breaking content-equivalent round-trip (intentional for data validity)
372
+ - **SwarmUI PNG→JPEG/WebP**: Loses ComfyUI workflow data from `prompt` chunk to match native WebP format (metadata preserved)
373
+
374
+ ### Development
375
+
376
+ - Comprehensive test suite with unit, sample, and integration tests
377
+ - Test coverage reporting with Vitest
378
+ - GitHub Actions CI with automated coverage reports
379
+ - Lefthook pre-commit hooks for linting and type checking
380
+ - Biome for code formatting and linting
381
+ - CONTRIBUTING.md for community contributions
382
+
383
+ [2.1.1]: https://github.com/enslo/sd-metadata/releases/tag/core@2.1.1
384
+ [2.1.0]: https://github.com/enslo/sd-metadata/releases/tag/v2.1.0
385
+ [2.0.1]: https://github.com/enslo/sd-metadata/releases/tag/v2.0.1
386
+ [2.0.0]: https://github.com/enslo/sd-metadata/releases/tag/v2.0.0
387
+ [1.8.1]: https://github.com/enslo/sd-metadata/releases/tag/v1.8.1
388
+ [1.8.0]: https://github.com/enslo/sd-metadata/releases/tag/v1.8.0
389
+ [1.7.1]: https://github.com/enslo/sd-metadata/releases/tag/v1.7.1
390
+ [1.7.0]: https://github.com/enslo/sd-metadata/releases/tag/v1.7.0
391
+ [1.6.1]: https://github.com/enslo/sd-metadata/releases/tag/v1.6.1
392
+ [1.6.0]: https://github.com/enslo/sd-metadata/releases/tag/v1.6.0
393
+ [1.5.0]: https://github.com/enslo/sd-metadata/releases/tag/v1.5.0
394
+ [1.4.2]: https://github.com/enslo/sd-metadata/releases/tag/v1.4.2
395
+ [1.4.1]: https://github.com/enslo/sd-metadata/releases/tag/v1.4.1
396
+ [1.4.0]: https://github.com/enslo/sd-metadata/releases/tag/v1.4.0
397
+ [1.3.0]: https://github.com/enslo/sd-metadata/releases/tag/v1.3.0
398
+ [1.2.0]: https://github.com/enslo/sd-metadata/releases/tag/v1.2.0
399
+ [1.1.1]: https://github.com/enslo/sd-metadata/releases/tag/v1.1.1
400
+ [1.1.0]: https://github.com/enslo/sd-metadata/releases/tag/v1.1.0
401
+ [1.0.2]: https://github.com/enslo/sd-metadata/releases/tag/v1.0.2
402
+ [1.0.1]: https://github.com/enslo/sd-metadata/releases/tag/v1.0.1
403
+ [1.0.0]: https://github.com/enslo/sd-metadata/releases/tag/v1.0.0
package/README.ja.md CHANGED
@@ -63,7 +63,7 @@ npm install @enslo/sd-metadata
63
63
  > \* フォーマット固有の動作があるツール。詳細は[フォーマット固有の動作](#フォーマット固有の動作)を参照してください。
64
64
 
65
65
  > [!TIP]
66
- > **ツールサポートの拡大にご協力ください!** 実験的なツール(Easy Diffusion、Fooocus)やサポートされていないツールのサンプル画像を募集しています。これらのAIツールで生成したサンプル画像をお持ちの方は、ぜひご提供ください!詳細は[CONTRIBUTING.md](CONTRIBUTING.md)を参照してください。
66
+ > **ツールサポートの拡大にご協力ください!** 実験的なツール(Easy Diffusion、Fooocus)やサポートされていないツールのサンプル画像を募集しています。これらのAIツールで生成したサンプル画像をお持ちの方は、ぜひご提供ください!詳細は[CONTRIBUTING.md](https://github.com/enslo/sd-metadata/blob/main/CONTRIBUTING.md)を参照してください。
67
67
 
68
68
  ## フォーマット固有の動作
69
69
 
@@ -145,7 +145,7 @@ fileInput.addEventListener('change', async (e) => {
145
145
  // ==UserScript==
146
146
  // @name My Script
147
147
  // @namespace https://example.com
148
- // @require https://cdn.jsdelivr.net/npm/@enslo/sd-metadata@2.1.0/dist/index.global.js
148
+ // @require https://cdn.jsdelivr.net/npm/@enslo/sd-metadata@2.1.1/dist/index.global.js
149
149
  // ==/UserScript==
150
150
 
151
151
  const response = await fetch(imageUrl);
@@ -586,25 +586,7 @@ type RawMetadata =
586
586
 
587
587
  ## 開発
588
588
 
589
- ```bash
590
- # 依存関係をインストール
591
- pnpm install
592
-
593
- # テストを実行
594
- pnpm test
595
-
596
- # ビルド
597
- pnpm build
598
-
599
- # リント
600
- pnpm lint
601
-
602
- # 型チェック
603
- pnpm typecheck
604
-
605
- # デモサイト起動
606
- pnpm demo
607
- ```
589
+ 開発のセットアップとガイドラインについては、[コントリビューションガイド](https://github.com/enslo/sd-metadata/blob/main/CONTRIBUTING.md)を参照してください。
608
590
 
609
591
  ## ライセンス
610
592
 
package/README.md CHANGED
@@ -63,7 +63,7 @@ When you convert from a native format to an extended format and back (e.g., PNG
63
63
  > \* Tools with format-specific behaviors. See [Format-Specific Behaviors](#format-specific-behaviors) for details.
64
64
 
65
65
  > [!TIP]
66
- > **Help us expand tool support!** We're actively collecting sample images from experimental tools (Easy Diffusion, Fooocus) and unsupported tools. If you have sample images generated by these or other AI tools, please consider contributing them! See [CONTRIBUTING.md](CONTRIBUTING.md) for details.
66
+ > **Help us expand tool support!** We're actively collecting sample images from experimental tools (Easy Diffusion, Fooocus) and unsupported tools. If you have sample images generated by these or other AI tools, please consider contributing them! See [CONTRIBUTING.md](https://github.com/enslo/sd-metadata/blob/main/CONTRIBUTING.md) for details.
67
67
 
68
68
  ## Format-Specific Behaviors
69
69
 
@@ -145,7 +145,7 @@ For userscripts (Tampermonkey, Violentmonkey, etc.), load the IIFE build via `@r
145
145
  // ==UserScript==
146
146
  // @name My Script
147
147
  // @namespace https://example.com
148
- // @require https://cdn.jsdelivr.net/npm/@enslo/sd-metadata@2.1.0/dist/index.global.js
148
+ // @require https://cdn.jsdelivr.net/npm/@enslo/sd-metadata@2.1.1/dist/index.global.js
149
149
  // ==/UserScript==
150
150
 
151
151
  const response = await fetch(imageUrl);
@@ -586,25 +586,7 @@ For detailed documentation of all exported types including `ModelSettings`, `Sam
586
586
 
587
587
  ## Development
588
588
 
589
- ```bash
590
- # Install dependencies
591
- pnpm install
592
-
593
- # Run tests
594
- pnpm test
595
-
596
- # Build
597
- pnpm build
598
-
599
- # Lint
600
- pnpm lint
601
-
602
- # Type check
603
- pnpm typecheck
604
-
605
- # Start demo site
606
- pnpm demo
607
- ```
589
+ See the [Contributing Guide](https://github.com/enslo/sd-metadata/blob/main/CONTRIBUTING.md) for development setup and guidelines.
608
590
 
609
591
  ## License
610
592