summaryrefslogtreecommitdiff
path: root/doc/config.md
blob: c619d2d314b3c5dcea10e0c3922be2de5962144f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
# 設定ファイル仕様

## 1. 概要

`mcp-sd15`のモデル構成と生成設定はTOMLファイルで管理する。起動時に次のように指定する。

```powershell
uv run mcp-sd15 --config C:\path\to\config.toml
```

`--config`を省略した場合は、現在のworking directoryにある`config.toml`を読み込む。
設定値をCLIやMCPツール入力で上書きすることはできない。

## 2. モデルディレクトリ

`model.root`の下には次のディレクトリ構成が必要である。

```text
<model.root>/
├─ checkpoints/
│  └─ <model.checkpoint>
├─ huggingface/
│  └─ Diffusersが使用するローカル構成cache
├─ vae/
│  └─ <model.vae>
├─ lora/
│  └─ <model.lora.file>
└─ controlnet/
   ├─ <controlnet.depth.model>
   ├─ <controlnet.openpose.model>
   └─ <controlnet.inpaint.model>
```

各モデル項目にはパスではなくファイル名だけを記述する。絶対パス、ディレクトリ名を含む
相対パス、`.`、`..`は拒否される。

## 3. 設定項目一覧

| TOML key | 型 | 必須 | 既定値 |
|---|---|---:|---|
| `model.root` | string | Yes | なし |
| `model.checkpoint` | string | Yes | なし |
| `model.vae` | string | No | 未使用 |
| `model.lora[].file` | string | LoRA使用時 | なし |
| `model.lora[].weight` | number | No | `1.0` |
| `generation.steps` | integer | No | `25` |
| `generation.cfg_scale` | number | No | `7.0` |
| `generation.scheduler` | string enum | No | `dpmpp_2m` |
| `generation.default_size` | string enum | No | `square_512` |
| `controlnet.depth.enabled` | boolean | No | `false` |
| `controlnet.depth.model` | string | 有効時 | なし |
| `controlnet.depth.preprocessor` | string | No | `midas` |
| `controlnet.openpose.enabled` | boolean | No | `false` |
| `controlnet.openpose.model` | string | 有効時 | なし |
| `controlnet.inpaint.enabled` | boolean | No | `false` |
| `controlnet.inpaint.model` | string | 有効時 | なし |
| `output.enabled` | boolean | No | `false` |
| `output.directory` | string | No | `./outputs` |

## 4. `[model]`

base checkpoint、VAE、LoRAを指定する必須tableである。

```toml
[model]
root = "D:/AI/models"
checkpoint = "model.safetensors"
vae = "vae.safetensors"
```

### `root`

- 必須の空でない文字列
- 絶対パスを推奨
- 相対パスの場合はconfigファイルが置かれたディレクトリを基準に解決
- 起動時にディレクトリの存在を確認

### `checkpoint`

- 必須のファイル名
- `<root>/checkpoints/<checkpoint>`として解決
- 起動時にファイルの存在を確認
- サーバ初期化時にSD1.x pipelineとしてロードできなければ起動失敗
- 単一checkpointの読込に必要なDiffusers構成は`<root>/huggingface` cacheから取得

### `vae`

- Stable Diffusion pipelineのVAE component自体は必須
- 任意のファイル名
- 指定した場合は`<root>/vae/<vae>`として解決し、base modelのVAEを置換
- 指定時は起動時にファイルの存在を確認
- 省略時はcheckpointに含まれるVAEを使用

`model.vae`が任意なのはVAE処理を省略できるという意味ではなく、外部VAEファイルによる
差し替えが任意という意味である。checkpoint内にもVAEが存在しない場合はpipelineを構築
できないため起動に失敗する。

## 5. `[[model.lora]]`

LoRAごとにarray of tablesを追加する。0個以上指定でき、記述順にadapter名が割り当てられる。

```toml
[[model.lora]]
file = "detail.safetensors"
weight = 0.8

[[model.lora]]
file = "style.safetensors"
weight = 0.5
```

| Key | 型 | 制約 |
|---|---|---|
| `file` | string | 必須のファイル名。`<root>/lora/<file>`に存在すること |
| `weight` | number | `-4.0`以上`4.0`以下。既定値`1.0` |

同じ`file`を複数回指定することはできない。LoRAを使わない場合は
`[[model.lora]]`を記述しない。

## 6. `[generation]`

全ツールに共通する推論パラメータを指定する。table自体を省略した場合はすべて既定値となる。

```toml
[generation]
steps = 25
cfg_scale = 7.0
scheduler = "dpmpp_2m"
default_size = "square_512"
```

### `steps`

- integerのみ
- 範囲は`1`以上`150`以下
- booleanや小数は不可

### `cfg_scale`

- finiteなintegerまたはfloat
- 範囲は`0.0`以上`30.0`以下
- `NaN`や無限大は不可

### `scheduler`

次の値だけを指定できる。

| 値 | Diffusers scheduler |
|---|---|
| `dpmpp_2m` | DPM-Solver++、solver order 2 |
| `ddim` | DDIM |
| `euler` | Euler Discrete |
| `euler_a` | Euler Ancestral Discrete |

### `default_size`

MCPツールで`size`を省略した場合に使用するサイズIDである。

| 値 | 解像度 |
|---|---:|
| `square_512` | 512 x 512 |
| `landscape_512` | 512 x 384 |
| `portrait_512` | 384 x 512 |

## 7. `[controlnet.*]`

ControlNetは用途ごとに個別設定する。各tableを省略するとその機能は無効になる。

### Depth

```toml
[controlnet.depth]
enabled = true
model = "control_v11f1p_sd15_depth.safetensors"
preprocessor = "midas"
```

| Key | 仕様 |
|---|---|
| `enabled` | boolean。既定値`false` |
| `model` | 有効時に必須。`<root>/controlnet/<model>`として解決 |
| `preprocessor` | `midas`のみ指定可能。省略時も`midas` |

### OpenPose

```toml
[controlnet.openpose]
enabled = true
model = "control_v11p_sd15_openpose.safetensors"
```

この設定はMCPの`openpose`と`openpose_full`の両方で使用する。前者はbody、後者は
body、hand、faceを抽出する。preprocessorをMCPや設定から切り替えることはできない。

### Inpaint

```toml
[controlnet.inpaint]
enabled = true
model = "control_v11p_sd15_inpaint.safetensors"
```

元画像とmaskからControlNet Inpaint用conditionを生成する。maskの輝度が50%を超える領域が
再生成対象になる。

### Annotatorモデル

MiDaSとOpenPoseのannotator重みは`controlnet_aux`のローカルcacheに事前配置する必要がある。
サーバは推論時に外部ネットワークから自動取得せず、`local_files_only=true`でロードする。
annotator重みの場所をこのTOMLから指定する項目はない。

## 8. `[output]`

生成したPNGをMCPレスポンスに加えてローカル保存するかを指定する。

```toml
[output]
enabled = false
directory = "./outputs"
```

| Key | 仕様 |
|---|---|
| `enabled` | `true`で保存、`false`でMCP返却のみ。既定値`false` |
| `directory` | 保存先。既定値`./outputs` |

相対`directory`はconfigファイルのディレクトリを基準に解決する。保存が有効な場合、
ディレクトリは最初の保存時に作成され、ファイル名はランダムUUIDの`<uuid>.png`となる。

## 9. 最小設定例

Text-to-Imageだけを使用する最小構成は次のとおり。

```toml
[model]
root = "D:/AI/models"
checkpoint = "model.safetensors"
```

この場合、VAEとLoRAは使用せず、全ControlNetとローカル保存は無効になる。生成設定には
既定値が使用される。

## 10. 全設定例

```toml
[model]
root = "D:/AI/models"
checkpoint = "model.safetensors"
vae = "vae.safetensors"

[[model.lora]]
file = "detail.safetensors"
weight = 0.8

[[model.lora]]
file = "style.safetensors"
weight = 0.5

[generation]
steps = 25
cfg_scale = 7.0
scheduler = "dpmpp_2m"
default_size = "square_512"

[controlnet.depth]
enabled = true
model = "control_v11f1p_sd15_depth.safetensors"
preprocessor = "midas"

[controlnet.openpose]
enabled = true
model = "control_v11p_sd15_openpose.safetensors"

[controlnet.inpaint]
enabled = true
model = "control_v11p_sd15_inpaint.safetensors"

[output]
enabled = false
directory = "./outputs"
```

## 11. 起動時validation

次のいずれかに該当するとMCPサーバは起動しない。

- TOML syntaxが不正
- 必須tableまたは必須値がない
- 値の型、列挙値、数値範囲が不正
- モデル項目にファイル名以外のパスが指定されている
- LoRAファイル名が重複している
- `model.root`が存在しない
- checkpoint、指定VAE、LoRA、有効なControlNetのファイルが存在しない
- CUDAが利用できない
- base checkpoint、VAE、LoRAがDiffusersでロードできない

未定義のkeyは現在の実装ではエラーにはならないが、処理には使用されない。タイプミスを
見逃さないため、この文書に記載したkeyだけを使用することを推奨する。