From de44625e3baae4d43ad096248b7096578b11e0b0 Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Sat, 12 Sep 2026 23:36:33 +0900 Subject: sd_embed導入による長文プロンプト・重み付きプロンプト対応 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SD1.5の77 token制限を回避するため、sd_embedを用いたprompt_embedsベースの 入力方式に変更した。あわせてclip_skipとpad_last_blockの設定を追加した。 sd_embedのget_weighted_text_embeddings_sd15()でpositive/negativeの プロンプト埋め込みを同時生成し、pipeline呼び出し時にprompt_embeds/ negative_prompt_embedsを渡す。prompt/negative_promptは同時に渡さない。 LoRAロード後にembedding生成を行うため、text encoder LoRAが反映された 状態で埋め込みが作られる。 sd_embedはcommit hash 4a47f71150で固定し、VCS dependencyとして追加。 hatchlingのallow-direct-referencesを有効化。 変更内容: - pyproject.toml: sd-embed @ git+...@4a47f71150追加、 allow-direct-references=true - config.py: GenerationConfigにclip_skip=0, pad_last_block=False追加、 load_configで[generation]のclip_skip/pad_last_block読込・validation (clip_skip: 0-12のinteger, pad_last_block: boolean) - model_manager.py: 3つのpipeline呼び出しをprompt/negative_promptから prompt_embeds/negative_prompt_embedsに変更、_embed_prompts()メソッド追加 - tests/test_config.py: clip_skip/pad_last_blockの正常系・異常系テスト追加 - doc/config.md: [generation]セクションにclip_skip/pad_last_block説明追記、 設定項目一覧表更新 - config.example.toml: clip_skip/pad_last_blockコメント例追記 - doc/Design.md: GenerationConfigにclip_skip/pad_last_block追記 - README.md: sd_embedの説明追記 - uv.lock: sd_embedおよび依存パッケージ追加 検証: - ruff format/check、pyright 0 errors、pytest 67 passed - 実GPU・実モデルで確認: - 短いプロンプト: 生成成功 - 77 token超の長文プロンプト(122 token): 生成成功 - 重み付きプロンプト(word:1.5)((word)): 生成成功 - LoRA(pixelartV3) + sd_embed + 重み付き: 生成成功 - negative promptの重み付き埋め込み: 生成成功 --- doc/Design.md | 2 ++ doc/config.md | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) (limited to 'doc') diff --git a/doc/Design.md b/doc/Design.md index 89f77aa..b5e433b 100644 --- a/doc/Design.md +++ b/doc/Design.md @@ -146,6 +146,8 @@ class GenerationConfig: cfg_scale: float scheduler: str default_size: str + clip_skip: int = 0 + pad_last_block: bool = False @dataclass(frozen=True) class PromptConfig: diff --git a/doc/config.md b/doc/config.md index 6ea0f9a..69dd3d6 100644 --- a/doc/config.md +++ b/doc/config.md @@ -50,6 +50,8 @@ uv run generate-image-sd15-mcp --config C:\path\to\config.toml | `generation.cfg_scale` | number | No | `7.0` | | `generation.scheduler` | string enum | No | `dpmpp_2m_karras` | | `generation.default_size` | string enum | No | `square_512` | +| `generation.clip_skip` | integer | No | `0` | +| `generation.pad_last_block` | boolean | No | `false` | | `controlnet.depth.enabled` | boolean | No | `false` | | `controlnet.depth.model` | string | 有効時 | なし | | `controlnet.depth.preprocessor` | string | No | `midas` | @@ -135,6 +137,8 @@ steps = 25 cfg_scale = 7.0 scheduler = "dpmpp_2m_karras" default_size = "square_512" +clip_skip = 0 +pad_last_block = false ``` ### `steps` @@ -194,6 +198,22 @@ MCPツールで`size`を省略した場合に使用するサイズIDである。 | `landscape_512` | 512 x 384 | | `portrait_512` | 384 x 512 | +### `clip_skip` + +`sd_embed`によるプロンプト埋め込み生成時にCLIPの最終層から何層スキップするかを指定する。 + +- integerのみ。範囲は`0`以上`12`以下 +- `0`のとき最終層を使用(既定値) +- `1`のとき最後から2番目の層を使用 +- `sd_embed`の`get_weighted_text_embeddings_sd15`の`clip_skip`引数に渡される + +### `pad_last_block` + +`sd_embed`によるプロンプト埋め込み生成時に最終ブロックをパディングするかを指定する。 + +- boolean。既定値`false` +- `true`のとき77 token単位の最終ブロックをパディングして埋め込みを生成する + ## 7. `[controlnet.*]` ControlNetは用途ごとに個別設定する。各tableを省略するとその機能は無効になる。 -- cgit v1.2.3