summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authortanaka takashi <isazaka@gmail.com>2026-09-12 20:12:17 +0900
committertanaka takashi <isazaka@gmail.com>2026-09-12 20:12:17 +0900
commitfd987cb31fd20483080f8d80ce35b53f101f243f (patch)
tree0e1d04c1f233e57d05f91006c8fd04f4caf89446 /doc
parent23f6c0850385d873d2e55926a34855c479cd3def (diff)
feat: SD 1.x向けScheduler対応を5種類に整理
generation.schedulerの正式対応値をdpmpp_2m_karras、dpmpp_2m_sde_karras、euler_a、ddim、lcmに限定し、既定値をdpmpp_2m_karrasへ変更する。旧dpmpp_2m、eulerおよび未知値は起動時の設定validationで拒否する。 Scheduler生成処理をPipelineFactoryへ集約する。DPM++ 2M系はDPMSolverMultistepSchedulerを共用し、algorithm_type、solver_order=2、use_karras_sigmas=Trueで通常版とSDE版を切り替える。Euler Ancestral、DDIM、LCMは現在のpipeline scheduler configを引き継いで構築する。 LCM-LoRAは既存のmodel.lora設定から通常のLoRAとして読み込み、LCM選択時にもstepsとcfg_scaleを自動調整せずTOML値をそのまま使用する。MCP Tool schemaにはscheduler入力を追加しない。 Specifications.md、Design.md、config.mdおよびconfig.example.tomlのenum、既定値、対応表、設定例を新仕様へ統一する。5 schedulerの変換、DPM++ constructor option、旧値と未知値の拒否、省略時の既定値、MCP schema非公開をテストで検証する。 検証: ruff check、ruff format --check、pyright、pytest(39 passed)、インストール済みDiffusersで5 schedulerの実インスタンス構築を確認。
Diffstat (limited to 'doc')
-rw-r--r--doc/Design.md15
-rw-r--r--doc/Specifications.md17
-rw-r--r--doc/config.md34
3 files changed, 59 insertions, 7 deletions
diff --git a/doc/Design.md b/doc/Design.md
index fd4ac63..96eb505 100644
--- a/doc/Design.md
+++ b/doc/Design.md
@@ -181,6 +181,19 @@ Pydanticは必須とせず、`tomllib + dataclass + 明示的validation`を基æœ
| images per prompt | 1 |
| CPU offload | 初期値OFF |
+Schedulerの文字列変換は`PipelineFactory`へ集約し、Tool層とService層には分岐を置かない。
+
+| 設定値 | Diffusers実装 | 追加設定 |
+|---|---|---|
+| `dpmpp_2m_karras` | `DPMSolverMultistepScheduler` | `algorithm_type="dpmsolver++"`, `solver_order=2`, `use_karras_sigmas=True` |
+| `dpmpp_2m_sde_karras` | `DPMSolverMultistepScheduler` | `algorithm_type="sde-dpmsolver++"`, `solver_order=2`, `use_karras_sigmas=True` |
+| `euler_a` | `EulerAncestralDiscreteScheduler` | pipeline scheduler configを継承 |
+| `ddim` | `DDIMScheduler` | pipeline scheduler configを継承 |
+| `lcm` | `LCMScheduler` | pipeline scheduler configを継承 |
+
+LCM-LoRAも通常のLoRAと同じ`[[model.lora]]`でロードする。`lcm`選択時にstepsやCFGを
+自動調整せず、TOMLの`generation.steps`と`generation.cfg_scale`をそのままpipelineへ渡す。
+
---
## 9. ControlNet設計
@@ -387,7 +400,7 @@ mcp-sd15 = "mcp_sd15.cli:main"
| テスト種別 | GPU | 内容 |
|---|---:|---|
-| Config parsing | 不要 | TOML読込・型検証 |
+| Config parsing | 不要 | TOML読込・型検証・scheduler enum検証 |
| Path resolution | 不要 | モデルパス解決 |
| MCP schema | 不要 | Tool schema検証 |
| Request validation | 不要 | mode / size / image必須条件 |
diff --git a/doc/Specifications.md b/doc/Specifications.md
index 0fb6451..1b98f96 100644
--- a/doc/Specifications.md
+++ b/doc/Specifications.md
@@ -169,7 +169,7 @@ weight = 0.5
[generation]
steps = 25
cfg_scale = 7.0
-scheduler = "dpmpp_2m"
+scheduler = "dpmpp_2m_karras"
default_size = "square_512"
[controlnet.depth]
@@ -189,6 +189,21 @@ model = "control_v11p_sd15_inpaint.safetensors"
directory = "./outputs"
```
+### 7.1 Scheduler
+
+`generation.scheduler`は次の5種類のみを許可し、既定値は`dpmpp_2m_karras`とする。
+
+| 値 | 動作 |
+|---|---|
+| `dpmpp_2m_karras` | DPM++ 2M + Karras sigmas |
+| `dpmpp_2m_sde_karras` | DPM++ 2M SDE + Karras sigmas |
+| `euler_a` | Euler Ancestral |
+| `ddim` | DDIM |
+| `lcm` | Latent Consistency Model scheduler |
+
+`lcm`選択時も`steps`と`cfg_scale`は設定値をそのまま使用する。LoRAファイル名から
+LCM-LoRAを推測したり、生成設定を自動変更したりしない。
+
---
## 8. CLI要件
diff --git a/doc/config.md b/doc/config.md
index c619d2d..804fbf8 100644
--- a/doc/config.md
+++ b/doc/config.md
@@ -45,7 +45,7 @@ uv run mcp-sd15 --config C:\path\to\config.toml
| `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.scheduler` | string enum | No | `dpmpp_2m_karras` |
| `generation.default_size` | string enum | No | `square_512` |
| `controlnet.depth.enabled` | boolean | No | `false` |
| `controlnet.depth.model` | string | 有効時 | なし |
@@ -125,7 +125,7 @@ weight = 0.5
[generation]
steps = 25
cfg_scale = 7.0
-scheduler = "dpmpp_2m"
+scheduler = "dpmpp_2m_karras"
default_size = "square_512"
```
@@ -147,10 +147,34 @@ default_size = "square_512"
| 値 | Diffusers scheduler |
|---|---|
-| `dpmpp_2m` | DPM-Solver++、solver order 2 |
+| `dpmpp_2m_karras` | `DPMSolverMultistepScheduler`。DPM++ 2M、Karras sigmas |
+| `dpmpp_2m_sde_karras` | `DPMSolverMultistepScheduler`。DPM++ 2M SDE、Karras sigmas |
| `ddim` | DDIM |
-| `euler` | Euler Discrete |
| `euler_a` | Euler Ancestral Discrete |
+| `lcm` | Latent Consistency Model scheduler |
+
+`dpmpp_2m_karras`は`algorithm_type="dpmsolver++"`、`solver_order=2`、
+`use_karras_sigmas=true`で構築する。`dpmpp_2m_sde_karras`は`algorithm_type`だけを
+`sde-dpmsolver++`へ変更する。他のschedulerはpipeline scheduler configを引き継ぐ。
+
+### LCM-LoRA設定例
+
+LCM-LoRAも通常のLoRAと同じ方法で指定する。
+
+```toml
+[[model.lora]]
+file = "lcm-lora-sdv1-5.safetensors"
+weight = 1.0
+
+[generation]
+steps = 4
+cfg_scale = 1.0
+scheduler = "lcm"
+default_size = "square_512"
+```
+
+`lcm`選択時も`steps`と`cfg_scale`はTOML値をそのまま使用する。LCM-LoRAのファイル名を
+自動判定して設定を書き換えることはない。
### `default_size`
@@ -259,7 +283,7 @@ weight = 0.5
[generation]
steps = 25
cfg_scale = 7.0
-scheduler = "dpmpp_2m"
+scheduler = "dpmpp_2m_karras"
default_size = "square_512"
[controlnet.depth]