@enslo/sd-metadata 2.1.0 → 2.2.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.
@@ -0,0 +1,799 @@
1
+ # 型ドキュメント
2
+
3
+ `@enslo/sd-metadata` の完全な型リファレンスです。
4
+
5
+ 🌐 **[English version](./types.md)**
6
+
7
+ ## 目次
8
+
9
+ - [コア型](#コア型)
10
+ - [`ParseResult`](#parseresult)
11
+ - [`BaseMetadata`](#basemetadata)
12
+ - [`GenerationMetadata`](#generationmetadata)
13
+ - [`GenerationSoftware`](#generationsoftware)
14
+ - [`EmbedMetadata`](#embedmetadata)
15
+ - [`RawMetadata`](#rawmetadata)
16
+ - [`WriteResult`](#writeresult)
17
+ - [メタデータ型](#メタデータ型)
18
+ - [`StandardMetadata`](#standardmetadata)
19
+ - [`NovelAIMetadata`](#novelaimetadata)
20
+ - [`ComfyUIMetadata`](#comfyuimetadata)
21
+ - [設定型](#設定型)
22
+ - [`ModelSettings`](#modelsettings)
23
+ - [`SamplingSettings`](#samplingsettings)
24
+ - [`HiresSettings`](#hiressettings)
25
+ - [`UpscaleSettings`](#upscalesettings)
26
+ - [`CharacterPrompt`](#characterprompt)
27
+ - [ComfyUI型](#comfyui型)
28
+ - [`ComfyNodeGraph`](#comfynodegraph)
29
+ - [`ComfyNode`](#comfynode)
30
+ - [`ComfyNodeInputValue`](#comfynodeinputvalue)
31
+ - [`ComfyNodeReference`](#comfynodereference)
32
+ - [フォーマット固有の型](#フォーマット固有の型)
33
+ - [`PngTextChunk`](#pngtextchunk)
34
+ - [`TExtChunk`](#textchunk)
35
+ - [`ITXtChunk`](#itxtchunk)
36
+ - [`MetadataSegment`](#metadatasegment)
37
+ - [`MetadataSegmentSource`](#metadatasegmentsource)
38
+
39
+ ---
40
+
41
+ ## コア型
42
+
43
+ ### `ParseResult`
44
+
45
+ `read()` 関数が返す結果型。
46
+
47
+ ```typescript
48
+ type ParseResult =
49
+ | { status: 'success'; metadata: GenerationMetadata; raw: RawMetadata }
50
+ | { status: 'unrecognized'; raw: RawMetadata }
51
+ | { status: 'empty' }
52
+ | { status: 'invalid'; message?: string };
53
+ ```
54
+
55
+ **ステータス値:**
56
+
57
+ - **`success`**: メタデータのパースに成功
58
+ - `metadata`: 統一されたメタデータオブジェクト
59
+ - `raw`: ラウンドトリップ変換用の元のフォーマット固有データ
60
+ - **`unrecognized`**: 画像にメタデータがあるがフォーマットが認識できない
61
+ - `raw`: 元のメタデータが保持される
62
+ - **`empty`**: 画像にメタデータが見つからない
63
+ - **`invalid`**: 破損または非対応の画像フォーマット
64
+ - `message`: オプションのエラー説明
65
+
66
+ **例:**
67
+
68
+ ```typescript
69
+ import { read } from '@enslo/sd-metadata';
70
+
71
+ const result = read(imageData);
72
+
73
+ switch (result.status) {
74
+ case 'success':
75
+ console.log(`Generated by ${result.metadata.software}`);
76
+ console.log(`Prompt: ${result.metadata.prompt}`);
77
+ break;
78
+
79
+ case 'unrecognized':
80
+ console.log('不明なメタデータフォーマット');
81
+ break;
82
+
83
+ case 'empty':
84
+ console.log('メタデータなし');
85
+ break;
86
+
87
+ case 'invalid':
88
+ console.error(`無効な画像: ${result.message}`);
89
+ break;
90
+ }
91
+ ```
92
+
93
+ ---
94
+
95
+ ### `BaseMetadata`
96
+
97
+ 全メタデータ型で共有される共通フィールド。`GenerationMetadata` の各バリアントと `EmbedMetadata` の基盤です。
98
+
99
+ ```typescript
100
+ export interface BaseMetadata {
101
+ /** ポジティブプロンプト */
102
+ prompt: string;
103
+ /** ネガティブプロンプト */
104
+ negativePrompt: string;
105
+ /** 画像の幅(ピクセル) */
106
+ width: number;
107
+ /** 画像の高さ(ピクセル) */
108
+ height: number;
109
+ /** モデル設定 */
110
+ model?: ModelSettings;
111
+ /** サンプリング設定 */
112
+ sampling?: SamplingSettings;
113
+ /** Hires.fix設定(適用されている場合) */
114
+ hires?: HiresSettings;
115
+ /** アップスケール設定(適用されている場合) */
116
+ upscale?: UpscaleSettings;
117
+ }
118
+ ```
119
+
120
+ **例:**
121
+
122
+ ```typescript
123
+ import type { BaseMetadata } from '@enslo/sd-metadata';
124
+
125
+ // 共通の生成フィールドのみ必要な場合にBaseMetadataを使用
126
+ function displayMetadata(meta: BaseMetadata) {
127
+ console.log('Prompt:', meta.prompt);
128
+ console.log('Size:', meta.width, 'x', meta.height);
129
+ console.log('Model:', meta.model?.name);
130
+ }
131
+ ```
132
+
133
+ ---
134
+
135
+ ### `GenerationMetadata`
136
+
137
+ 統一されたメタデータ構造。サポートされている全てのメタデータ型のユニオン型。全バリアントが `BaseMetadata` を拡張しています。
138
+
139
+ ```typescript
140
+ type GenerationMetadata =
141
+ | NovelAIMetadata
142
+ | ComfyUIMetadata
143
+ | StandardMetadata;
144
+ ```
145
+
146
+ **メタデータ型のマッピング:**
147
+
148
+ | メタデータ型 | `software` 値 |
149
+ | ------------- | ----------------- |
150
+ | `StandardMetadata` | `'sd-webui'` \| `'sd-next'` \| `'forge'` \| `'forge-classic'` \| `'forge-neo'` \| `'reforge'` \| `'easy-reforge'` \| `'invokeai'` \| `'civitai'` \| `'hf-space'` \| `'easydiffusion'` \| `'fooocus'` \| `'ruined-fooocus'` \| `'draw-things'` |
151
+ | `NovelAIMetadata` | `'novelai'` |
152
+ | `ComfyUIMetadata` | `'comfyui'` \| `'tensorart'` \| `'stability-matrix'` \| `'swarmui'` |
153
+
154
+ **型の絞り込み例:**
155
+
156
+ ```typescript
157
+ if (metadata.software === 'novelai') {
158
+ // TypeScriptはmetadataがNovelAIMetadataであることを認識
159
+ console.log(metadata.characterPrompts);
160
+ }
161
+
162
+ if (metadata.software === 'comfyui' ||
163
+ metadata.software === 'tensorart' ||
164
+ metadata.software === 'stability-matrix' ||
165
+ metadata.software === 'swarmui') {
166
+ // TypeScriptはmetadataがComfyUIMetadataであることを認識
167
+ if (metadata.nodes) {
168
+ console.log('Has workflow:', Object.keys(metadata.nodes).length);
169
+ }
170
+ }
171
+ ```
172
+
173
+ ---
174
+
175
+ ### `GenerationSoftware`
176
+
177
+ サポートされている全ソフトウェア識別子の文字列リテラルユニオン型。`GenerationMetadata` の判別子として、また `softwareLabels` のキー型として使用します。
178
+
179
+ ```typescript
180
+ type GenerationSoftware =
181
+ | 'novelai'
182
+ | 'comfyui'
183
+ | 'swarmui'
184
+ | 'tensorart'
185
+ | 'stability-matrix'
186
+ | 'invokeai'
187
+ | 'sd-webui'
188
+ | 'forge'
189
+ | 'forge-classic'
190
+ | 'forge-neo'
191
+ | 'reforge'
192
+ | 'easy-reforge'
193
+ | 'sd-next'
194
+ | 'civitai'
195
+ | 'hf-space'
196
+ | 'easydiffusion'
197
+ | 'fooocus'
198
+ | 'ruined-fooocus'
199
+ | 'draw-things';
200
+ ```
201
+
202
+ **例:**
203
+
204
+ ```typescript
205
+ import { softwareLabels } from '@enslo/sd-metadata';
206
+ import type { GenerationSoftware } from '@enslo/sd-metadata';
207
+
208
+ function displaySoftware(software: GenerationSoftware): string {
209
+ return softwareLabels[software];
210
+ }
211
+ ```
212
+
213
+ ---
214
+
215
+ ### `EmbedMetadata`
216
+
217
+ `embed()` と `stringify()` で使用するユーザー作成カスタムメタデータ型。`GenerationMetadata` が既知のAIツールからのパース結果を表すのに対し、`EmbedMetadata` はユーザーが独自にメタデータを組み立てるための型です。`BaseMetadata` にオプションのNovelAIキャラクタープロンプトと設定行への任意キーバリュー(`extras`)を追加。
218
+
219
+ ```typescript
220
+ export type EmbedMetadata = BaseMetadata &
221
+ Pick<NovelAIMetadata, 'characterPrompts'> & {
222
+ extras?: Record<string, string | number>;
223
+ };
224
+ ```
225
+
226
+ **例:**
227
+
228
+ ```typescript
229
+ import { embed } from '@enslo/sd-metadata';
230
+ import type { EmbedMetadata } from '@enslo/sd-metadata';
231
+
232
+ const metadata: EmbedMetadata = {
233
+ prompt: 'masterpiece, 1girl',
234
+ negativePrompt: 'lowres',
235
+ width: 512,
236
+ height: 768,
237
+ sampling: { steps: 20, sampler: 'Euler a', cfg: 7, seed: 12345 },
238
+ model: { name: 'model.safetensors' },
239
+ extras: { Version: 'v1.0' },
240
+ };
241
+
242
+ const result = embed(imageData, metadata);
243
+ ```
244
+
245
+ ---
246
+
247
+ ### `RawMetadata`
248
+
249
+ ロスレスなラウンドトリップ変換のために元のメタデータ構造を保持。
250
+
251
+ ```typescript
252
+ type RawMetadata =
253
+ | { format: 'png'; chunks: PngTextChunk[] }
254
+ | { format: 'jpeg'; segments: MetadataSegment[] }
255
+ | { format: 'webp'; segments: MetadataSegment[] };
256
+ ```
257
+
258
+ **なぜこれが必要?**
259
+
260
+ 画像からメタデータを読み込んで別のフォーマットに変換する場合(例:PNG → JPEG)、`RawMetadata` は元の構造を保持します。これにより、情報を失うことなく元のフォーマットに戻すことができます。
261
+
262
+ **ラウンドトリップ変換例:**
263
+
264
+ ```typescript
265
+ import { read, write } from '@enslo/sd-metadata';
266
+ import { convertImageFormat } from 'some-image-library';
267
+
268
+ // PNGからメタデータを読み込み
269
+ const pngData = readFileSync('image.png');
270
+ const parseResult = read(pngData);
271
+
272
+ if (parseResult.status === 'success') {
273
+ // 画像をJPEGに変換
274
+ const jpegImageData = convertImageFormat(pngData, 'jpeg');
275
+
276
+ // メタデータをJPEGに書き込み
277
+ const jpegWithMeta = write(jpegImageData, parseResult);
278
+
279
+ // 後で:PNGに戻す
280
+ const pngImageData = convertImageFormat(jpegWithMeta.value, 'png');
281
+ const pngWithMeta = write(pngImageData, parseResult);
282
+
283
+ // 元のPNGメタデータ構造が完全に保持される!
284
+ }
285
+ ```
286
+
287
+ `raw` がなければ、メタデータは汎用フォーマットに変換され、元に戻す際にフォーマット固有の詳細が失われます。
288
+
289
+ ---
290
+
291
+ ### `WriteResult`
292
+
293
+ `write()` 関数が返す結果型。
294
+
295
+ ```typescript
296
+ export type WriteResult =
297
+ | { ok: true; value: Uint8Array; warning?: WriteWarning }
298
+ | { ok: false; error: { type: string; message?: string } };
299
+ ```
300
+
301
+ **成功:**
302
+
303
+ ```typescript
304
+ if (result.ok) {
305
+ saveFile('output.png', result.value);
306
+ if (result.warning) {
307
+ console.warn('メタデータが削除されました:', result.warning.reason);
308
+ }
309
+ }
310
+ ```
311
+
312
+ **エラー:**
313
+
314
+ ```typescript
315
+ if (!result.ok) {
316
+ console.error(`書き込み失敗: ${result.error.type}`);
317
+ if (result.error.message) {
318
+ console.error(result.error.message);
319
+ }
320
+ }
321
+ ```
322
+
323
+ **エラータイプ:**
324
+
325
+ - `unsupportedFormat`: 画像フォーマットが非対応
326
+ - `conversionFailed`: メタデータ変換に失敗
327
+ - `writeFailed`: 画像へのメタデータ書き込みに失敗
328
+
329
+ ### `WriteWarning`
330
+
331
+ 書き込み操作の警告型。
332
+
333
+ ```typescript
334
+ export type WriteWarning = {
335
+ type: 'metadataDropped';
336
+ reason: 'unrecognizedCrossFormat';
337
+ };
338
+ ```
339
+
340
+ 書き込み操作中にメタデータが意図的に削除された場合に返される(例:未対応メタデータのクロスフォーマット変換)。
341
+
342
+ ---
343
+
344
+ ## メタデータ型
345
+
346
+ ### `StandardMetadata`
347
+
348
+ ほとんどのSDツールで使用される標準パラメータフォーマット。
349
+
350
+ ```typescript
351
+ export interface StandardMetadata extends BaseMetadata {
352
+ software:
353
+ | 'sd-webui'
354
+ | 'forge'
355
+ | 'forge-classic'
356
+ | 'forge-neo'
357
+ | 'reforge'
358
+ | 'easy-reforge'
359
+ | 'sd-next'
360
+ | 'invokeai'
361
+ | 'civitai'
362
+ | 'hf-space'
363
+ | 'easydiffusion'
364
+ | 'fooocus'
365
+ | 'ruined-fooocus'
366
+ | 'draw-things';
367
+ }
368
+ ```
369
+
370
+ `BaseMetadata` の全フィールドを継承します。最も一般的なメタデータ型で、ツール固有の拡張なしのベースライン生成メタデータを表します。SD WebUI、Forgeファミリー(Forge、Forge Classic、Forge Neo、reForge、EasyReforge)、SD.Next、InvokeAIなど多くのツールがこの構造を使用します。
371
+
372
+ **例:**
373
+
374
+ ```typescript
375
+ if (metadata.software === 'forge' || metadata.software === 'sd-webui') {
376
+ console.log('標準フォーマットのメタデータを使用');
377
+ console.log('Sampler:', metadata.sampling?.sampler);
378
+ console.log('Steps:', metadata.sampling?.steps);
379
+ }
380
+ ```
381
+
382
+ ---
383
+
384
+ ### `NovelAIMetadata`
385
+
386
+ NovelAI生成画像に固有のメタデータ。
387
+
388
+ ```typescript
389
+ export interface NovelAIMetadata extends BaseMetadata {
390
+ software: 'novelai';
391
+ /** V4キャラクタープロンプト(キャラクター配置使用時) */
392
+ characterPrompts?: CharacterPrompt[];
393
+ /** 配置にキャラクター座標を使用 */
394
+ useCoords?: boolean;
395
+ /** キャラクターの順序を使用 */
396
+ useOrder?: boolean;
397
+ }
398
+ ```
399
+
400
+ **固有の機能:**
401
+
402
+ - **キャラクター配置(V4)**: NovelAI V4は特定の座標に複数のキャラクターを配置することをサポート
403
+ - `characterPrompts`: オプションの位置情報付きキャラクター固有プロンプトの配列
404
+ - `useCoords`、`useOrder`: キャラクター配置の動作を制御
405
+
406
+ **例:**
407
+
408
+ ```typescript
409
+ if (metadata.software === 'novelai' && metadata.characterPrompts) {
410
+ metadata.characterPrompts.forEach(char => {
411
+ console.log(`Character: ${char.prompt}`);
412
+ if (char.center) {
413
+ console.log(` Position: (${char.center.x}, ${char.center.y})`);
414
+ }
415
+ });
416
+ }
417
+ ```
418
+
419
+ ---
420
+
421
+ ### `ComfyUIMetadata`
422
+
423
+ ComfyUIおよび互換ツール(TensorArt、Stability Matrix、SwarmUI)からのメタデータ。
424
+
425
+ ```typescript
426
+ export type ComfyUIMetadata =
427
+ | BasicComfyUIMetadata
428
+ | SwarmUIMetadata;
429
+
430
+ // 内部型:
431
+ interface BasicComfyUIMetadata extends BaseMetadata {
432
+ software: 'comfyui' | 'tensorart' | 'stability-matrix';
433
+ nodes: ComfyNodeGraph; // 必須
434
+ }
435
+
436
+ interface SwarmUIMetadata extends BaseMetadata {
437
+ software: 'swarmui';
438
+ nodes?: ComfyNodeGraph; // オプション
439
+ }
440
+ ```
441
+
442
+ **固有の機能:**
443
+
444
+ - **ComfyUI/TensorArt/Stability Matrix**: `nodes` は全フォーマットで常に存在
445
+ - **SwarmUI**: PNGから変換された場合、全フォーマットで `nodes` が存在する可能性あり(拡張対応)
446
+
447
+ **例:**
448
+
449
+ ```typescript
450
+ if (metadata.software === 'comfyui') {
451
+ // ComfyUIではnodesは必ず存在
452
+ console.log('Node count:', Object.keys(metadata.nodes).length);
453
+ }
454
+
455
+ if (metadata.software === 'swarmui') {
456
+ // ネイティブSwarmUI JPEG/WebPではnodesが存在しない可能性あり
457
+ // ただしPNGから変換された場合は存在
458
+ if (metadata.nodes) {
459
+ console.log('ワークフローあり(PNGまたは変換済み)');
460
+ } else {
461
+ console.log('ネイティブJPEG/WebP: パラメータのみ');
462
+ }
463
+ }
464
+
465
+ // 型の絞り込みは全てのComfyUI互換ツールで機能
466
+ if (metadata.software === 'comfyui' ||
467
+ metadata.software === 'tensorart' ||
468
+ metadata.software === 'stability-matrix' ||
469
+ metadata.software === 'swarmui') {
470
+ // TypeScriptはmetadataがComfyUIMetadataであることを認識
471
+ // ただしmetadata.nodesは使用前にチェックが必要
472
+ if (metadata.nodes) {
473
+ // チェックポイントノードを検索
474
+ for (const [nodeId, node] of Object.entries(metadata.nodes)) {
475
+ if (node.class_type === 'CheckpointLoaderSimple') {
476
+ console.log('Model:', node.inputs.ckpt_name);
477
+ }
478
+ }
479
+ }
480
+ }
481
+ ```
482
+
483
+ ## 設定型
484
+
485
+ ### `ModelSettings`
486
+
487
+ 画像生成に使用されるモデル設定。
488
+
489
+ ```typescript
490
+ export interface ModelSettings {
491
+ /** モデル名(例:"sd_xl_base_1.0.safetensors") */
492
+ name?: string;
493
+ /** 検証用モデルハッシュ */
494
+ hash?: string;
495
+ /** VAE(Variational AutoEncoder)名 */
496
+ vae?: string;
497
+ }
498
+ ```
499
+
500
+ **例:**
501
+
502
+ ```typescript
503
+ if (metadata.model) {
504
+ console.log('Model:', metadata.model.name);
505
+ console.log('Hash:', metadata.model.hash);
506
+ console.log('VAE:', metadata.model.vae || 'Default');
507
+ }
508
+ ```
509
+
510
+ ---
511
+
512
+ ### `SamplingSettings`
513
+
514
+ 生成時に使用されるサンプリングパラメータ。
515
+
516
+ ```typescript
517
+ export interface SamplingSettings {
518
+ /** サンプラーアルゴリズム(例:"Euler a"、"DPM++ 2M Karras") */
519
+ sampler?: string;
520
+ /** スケジューラータイプ(サンプラーと別の場合) */
521
+ scheduler?: string;
522
+ /** サンプリングステップ数 */
523
+ steps?: number;
524
+ /** CFG(Classifier Free Guidance)スケール */
525
+ cfg?: number;
526
+ /** 再現性のためのランダムシード */
527
+ seed?: number;
528
+ /** CLIPスキップレイヤー */
529
+ clipSkip?: number;
530
+ /** デノイズ強度(ComfyUIのみ)。1.0の場合は提供されない(txt2imgのデフォルト) */
531
+ denoise?: number;
532
+ }
533
+ ```
534
+
535
+ **例:**
536
+
537
+ ```typescript
538
+ if (metadata.sampling) {
539
+ console.log('Sampler:', metadata.sampling.sampler);
540
+ console.log('Steps:', metadata.sampling.steps);
541
+ console.log('CFG Scale:', metadata.sampling.cfg);
542
+ console.log('Seed:', metadata.sampling.seed);
543
+ }
544
+ ```
545
+
546
+ ---
547
+
548
+ ### `HiresSettings`
549
+
550
+ Hires.fix(高解像度修正)の設定。
551
+
552
+ ```typescript
553
+ export interface HiresSettings {
554
+ /** アップスケール倍率 */
555
+ scale?: number;
556
+ /** アップスケーラー名 */
557
+ upscaler?: string;
558
+ /** Hiresステップ数 */
559
+ steps?: number;
560
+ /** Hiresデノイズ強度 */
561
+ denoise?: number;
562
+ }
563
+ ```
564
+
565
+ 高解像度出力の品質を向上させるために生成時に適用されます。
566
+
567
+ ---
568
+
569
+ ### `UpscaleSettings`
570
+
571
+ 生成後のアップスケール設定。
572
+
573
+ ```typescript
574
+ export interface UpscaleSettings {
575
+ /** アップスケーラー名 */
576
+ upscaler?: string;
577
+ /** スケール倍率 */
578
+ scale?: number;
579
+ }
580
+ ```
581
+
582
+ 初期生成後に別のアップスケールステップとして適用されます。
583
+
584
+ ---
585
+
586
+ ### `CharacterPrompt`
587
+
588
+ NovelAI V4画像のキャラクター位置指定。
589
+
590
+ ```typescript
591
+ export interface CharacterPrompt {
592
+ /** キャラクター固有のプロンプト */
593
+ prompt: string;
594
+ /** 画像内のキャラクター位置(正規化 0-1) */
595
+ center?: { x: number; y: number };
596
+ }
597
+ ```
598
+
599
+ **例:**
600
+
601
+ ```typescript
602
+ const character: CharacterPrompt = {
603
+ prompt: "1girl, long hair, blue eyes",
604
+ center: { x: 0.3, y: 0.5 } // 左側、垂直方向に中央
605
+ };
606
+ ```
607
+
608
+ ---
609
+
610
+ ## ComfyUI型
611
+
612
+ ### `ComfyNodeGraph`
613
+
614
+ ノードIDから対応するノードデータへのマップ。
615
+
616
+ ```typescript
617
+ export type ComfyNodeGraph = Record<string, ComfyNode>;
618
+ ```
619
+
620
+ **例:**
621
+
622
+ ```typescript
623
+ const graph: ComfyNodeGraph = {
624
+ "CheckpointLoader_Base": { /* ... */ },
625
+ "KSampler_Primary": { /* ... */ },
626
+ "SaveImage_Final": { /* ... */ }
627
+ };
628
+ ```
629
+
630
+ ---
631
+
632
+ ### `ComfyNode`
633
+
634
+ ComfyUIワークフローグラフ内の単一ノード。
635
+
636
+ ```typescript
637
+ export interface ComfyNode {
638
+ /** ノードクラスタイプ(例:"CheckpointLoaderSimple"、"KSampler") */
639
+ class_type: string;
640
+ /** ノード入力 */
641
+ inputs: Record<string, ComfyNodeInputValue>;
642
+ /** ノードメタデータ(ComfyUIのみ) */
643
+ _meta?: {
644
+ /** 表示用ノードタイトル */
645
+ title?: string;
646
+ };
647
+ /** 変更検出ハッシュ(まれ、キャッシュ用) */
648
+ is_changed?: string[] | null;
649
+ }
650
+ ```
651
+
652
+ **例:**
653
+
654
+ ```typescript
655
+ const ksampler: ComfyNode = {
656
+ class_type: "KSampler",
657
+ inputs: {
658
+ model: ["CheckpointLoader", 0],
659
+ seed: 12345,
660
+ steps: 20,
661
+ cfg: 7.0,
662
+ sampler_name: "euler_a",
663
+ scheduler: "normal",
664
+ denoise: 1.0
665
+ },
666
+ _meta: {
667
+ title: "Primary Sampler"
668
+ }
669
+ };
670
+ ```
671
+
672
+ ---
673
+
674
+ ### `ComfyNodeInputValue`
675
+
676
+ ノード入力の可能な値。
677
+
678
+ ```typescript
679
+ export type ComfyNodeInputValue =
680
+ | string
681
+ | number
682
+ | boolean
683
+ | ComfyNodeReference
684
+ | ComfyNodeInputValue[];
685
+ ```
686
+
687
+ プリミティブ値、別のノードへの参照、または配列を取ることができます。
688
+
689
+ ---
690
+
691
+ ### `ComfyNodeReference`
692
+
693
+ 別のノードの出力への参照。
694
+
695
+ ```typescript
696
+ export type ComfyNodeReference = [nodeId: string, outputIndex: number];
697
+ ```
698
+
699
+ **例:**
700
+
701
+ ```typescript
702
+ const modelReference: ComfyNodeReference = ["CheckpointLoader_Base", 0];
703
+
704
+ // ノード入力で使用:
705
+ {
706
+ model: ["CheckpointLoader_Base", 0], // CheckpointLoader_Baseの出力0を参照
707
+ positive: ["CLIPTextEncode_Positive", 0]
708
+ }
709
+ ```
710
+
711
+ ---
712
+
713
+ ## フォーマット固有の型
714
+
715
+ > **注意:** これらの型は主に高度なユースケースや内部実装の詳細用です。ほとんどのユーザーはこれらの型を直接扱う必要はありません。
716
+
717
+ ### `PngTextChunk`
718
+
719
+ PNGテキストチャンク型(tEXtまたはiTXt)。
720
+
721
+ ```typescript
722
+ export type PngTextChunk = TExtChunk | ITXtChunk;
723
+ ```
724
+
725
+ ---
726
+
727
+ ### `TExtChunk`
728
+
729
+ PNG tEXtチャンク(Latin-1エンコード)。
730
+
731
+ ```typescript
732
+ export interface TExtChunk {
733
+ type: 'tEXt';
734
+ /** チャンクキーワード(例:"parameters"、"Comment") */
735
+ keyword: string;
736
+ /** テキスト内容 */
737
+ text: string;
738
+ }
739
+ ```
740
+
741
+ ---
742
+
743
+ ### `ITXtChunk`
744
+
745
+ PNG iTXtチャンク(UTF-8国際テキスト)。
746
+
747
+ ```typescript
748
+ export interface ITXtChunk {
749
+ type: 'iTXt';
750
+ /** チャンクキーワード */
751
+ keyword: string;
752
+ /** 圧縮フラグ(0=非圧縮、1=圧縮) */
753
+ compressionFlag: number;
754
+ /** 圧縮方式(0=zlib/deflate) */
755
+ compressionMethod: number;
756
+ /** 言語タグ(BCP 47) */
757
+ languageTag: string;
758
+ /** 翻訳されたキーワード */
759
+ translatedKeyword: string;
760
+ /** テキスト内容 */
761
+ text: string;
762
+ }
763
+ ```
764
+
765
+ ---
766
+
767
+ ### `MetadataSegment`
768
+
769
+ ソース追跡機能付きのJPEG/WebPメタデータセグメント。
770
+
771
+ ```typescript
772
+ export interface MetadataSegment {
773
+ /** このセグメントのソース位置 */
774
+ source: MetadataSegmentSource;
775
+ /** 生のメタデータ文字列 */
776
+ data: string;
777
+ }
778
+ ```
779
+
780
+ メタデータを正しい位置に書き戻すためのラウンドトリップ変換に使用されます。
781
+
782
+ ---
783
+
784
+ ### `MetadataSegmentSource`
785
+
786
+ メタデータセグメントのソース位置。
787
+
788
+ ```typescript
789
+ export type MetadataSegmentSource =
790
+ | { type: 'exifUserComment' }
791
+ | { type: 'exifImageDescription'; prefix?: string }
792
+ | { type: 'exifMake'; prefix?: string }
793
+ | { type: 'jpegCom' }
794
+ | { type: 'xmpPacket' };
795
+ ```
796
+
797
+ 正確なラウンドトリップのために、JPEG/WebPファイル内のメタデータの出所を追跡します。
798
+
799
+ ---