AI漫画 - 日本語テキスト崩れ防止 調査レポート¶
📁 docs/ai-manga/artifact/20260312_日本語テキスト崩れ防止_調査レポート.md
日付: 2026-03-12 Issue: #193 対象: SD WebUI Forge (RTX 5070 Ti / torch 2.7.0+cu128 / waiNSFWIllustrious_v150)
現状分析¶
| 項目 | 現状 |
|---|---|
| セリフ描画方法 | Pillow(page_composer.py)でSD生成後に重ねる |
| 使用フォント | Meiryo / YuGothic(Windows標準) |
| ControlNetモデル | 未インストール(拡張は組み込み済み) |
| ADetailer | 未インストール |
セリフ自体はSDに生成させていないため「SDによる文字崩れ」は発生しないが、 吹き出しの見た目(フォント品質・縁取り・キャラとの配置調整) に改善余地がある。
手法1: ControlNet (Text/Scribble) - 吹き出し領域をSDに伝える¶
目的¶
吹き出し予定領域をSDに事前通知し、キャラクターがバブル下に隠れないよう構図を誘導する。
実装状況¶
src/text_guide.pyを新規作成(ガイド画像生成ユーティリティ)src/sd_client.pyにgenerate_with_controlnet()を追加- モデル未インストール時は通常生成に自動フォールバック
必要なモデルのダウンロード¶
SDXL/Illustrious系(現在の環境に合致):
モデル名: controlnet-scribble-sdxl-1.0
DL先: https://huggingface.co/xinsir/controlnet-scribble-sdxl-1.0
保存先: D:/Kazuma_Teramachi/kaz_dev_stable-diffusion-webui-forge/models/ControlNet/
SD1.5系(参考):
使用方法¶
from src.sd_client import SDWebUIClient
from src.text_guide import TextGuideGenerator
client = SDWebUIClient()
guide = TextGuideGenerator(1024, 1536)
# 吹き出し予約領域ガイド画像を生成
bubble_img = guide.create_bubble_mask(
bubble_x=700, bubble_y=50, bubble_w=280, bubble_h=200
)
img_b64 = guide.encode_to_base64(bubble_img)
# ControlNet Scribble で生成
images, seed = client.generate_with_controlnet(
positive="1girl, dialogue scene, ...",
negative="...",
controlnet_units=[{
"image": img_b64,
"model": "controlnet-scribble-sdxl-1.0",
"module": "none", # ガイド画像はそのまま使用
"weight": 0.5, # 強すぎると構図が固定される
"control_mode": 0, # Balanced
}]
)
評価¶
| 観点 | 評価 |
|---|---|
| 効果 | ★★★★☆ キャラが吹き出し下に隠れにくくなる |
| 導入コスト | ★★★☆☆ モデルDL(約1GB)が必要 |
| 互換性 | ✅ Forge組み込み、APIサポート済み |
手法2: 日本語フォントLoRA - フォント形状を学習させて文字品質向上¶
目的¶
SD生成画像内に日本語テキストが混入する場合(背景の看板・タイトル等)の文字崩れを抑制する。
調査結果¶
現状のパイプライン(Pillowで文字を後から重ねる)にはLoRAは不要。 SDがテキストを生成するシナリオ(タイトルページ・背景に文字が入る場面)でのみ有効。
利用可能なフォントLoRA¶
| LoRA名 | 用途 | 入手先 |
|---|---|---|
| 日本語フォントLoRA各種 | 背景テキスト | CivitAI (検索: "Japanese font lora") |
| 筆文字LoRA | タイトル等 | CivitAI |
注意事項¶
- waiNSFWIllustrious_v150 との相性は未検証(SDXL系なので SD1.5向けLoRAは非対応)
- Illustrious系対応のフォントLoRAは現状少ない(2026-03現在)
評価¶
| 観点 | 評価 |
|---|---|
| 効果 | ★★☆☆☆ 現パイプラインでは用途限定的 |
| 導入コスト | ★★★☆☆ LoRA探索・検証が必要 |
| 互換性 | ⚠️ Illustrious系対応LoRAが少ない |
手法3: ADetailer - 顔・手の自動補正(間接的に品質向上)¶
目的¶
セリフ担当キャラの顔崩れを自動修正し、全体的なコマ品質を向上させる。
実装状況¶
src/sd_client.pyにgenerate_with_adetailer()を追加- 未インストール時は自動フォールバック(422エラーを検知)
インストール手順¶
Forge Web UI → Extensions タブ
→ Install from URL:
https://github.com/Bing-su/adetailer
→ Apply and restart UI
使用方法¶
from src.sd_client import SDWebUIClient
client = SDWebUIClient()
# ADetailer で顔を自動補正しながら生成
images, seed = client.generate_with_adetailer(
positive="1girl, close-up, ...",
negative="...",
ad_model="face_yolov8n.pt", # 顔検出(高速)
ad_confidence=0.3,
ad_denoising_strength=0.4, # 修正強度
)
評価¶
| 観点 | 評価 |
|---|---|
| 効果 | ★★★★★ 顔崩れ修正は劇的に向上 |
| 導入コスト | ★★☆☆☆ 拡張インストールのみ |
| 互換性 | ✅ Forge対応版あり |
フォント改善(実装済み)¶
問題¶
Windows標準フォント(Meiryo)はマンガ的な見た目に最適化されていない。
実装した改善¶
page_composer.py に 縁取り(stroke) を追加(issue #193 実装済み): - STROKE_WIDTH = 2 で白縁取り追加 - 黒テキスト + 白縁 → マンガらしいセリフ表現
推奨フォント(無料・商用利用可)¶
| フォント名 | 特徴 | ダウンロード先 |
|---|---|---|
| 源真ゴシック | マンガに最適な等幅ゴシック | https://osdn.net/projects/mgenplus/ |
| Noto Sans CJK JP | Google製・高品質 | https://fonts.google.com/noto/specimen/Noto+Sans+JP |
| 源ノ角ゴシック | Adobe製・可読性高い | https://fonts.adobe.com/fonts/source-han-sans |
インストール後、C:/Windows/Fonts/ にコピーすれば page_composer.py が自動認識する。
推奨実装順¶
Priority 1 (即効性高)
└── フォント改善: 縁取り実装済み ✅ + 源真ゴシックDL推奨
Priority 2 (品質大幅向上)
└── ADetailer インストール: Forge UI から 5分で完了
→ config.yaml の adetailer.enabled = true に変更
Priority 3 (構図最適化)
└── ControlNet Scribble モデルDL (~1GB)
→ controlnet.auto_apply_scribble = true で自動適用
Priority 4 (用途限定)
└── フォントLoRA: 背景テキストが必要な場面で使用
実装ファイル一覧¶
| ファイル | 変更内容 |
|---|---|
src/text_guide.py | 新規: ControlNet ガイド画像生成ユーティリティ |
src/sd_client.py | 追加: generate_with_controlnet(), generate_with_adetailer(), get_controlnet_models() |
src/page_composer.py | 変更: フォントパス優先順改善、テキスト縁取り(stroke)追加 |
config/config.yaml | 追加: controlnet, adetailer, text_rendering セクション |
docs/extension_recommendations.yaml | 既存: ADetailer 記載済み |