CC以外でクリスタ/漫画仕上げを確実自動化する手段(Krita/AHK/ComfyUI)
Windows環境において、GUIを1クリックもせず、AI生成のカラーエロ漫画画像を「線画抽出+スクリーントーン化(モノクロ化)」して確実にPNG書き出しする3つのアプローチを解説します。
---
### ① Krita + Python API(完全ヘッドレス・バックグラウンド処理)
Kritaは強力なPython APIを備えており、GUIを一切表示させない「ヘッドレスモード」でのバッチ処理が可能です。フォーカス問題は100%発生しません。
#### 実装手順
1. **スクリプトの準備**
以下のPythonコードを `krita_manga.py` として保存します。
```python
# krita_manga.py
import os
import sys
from krita import Krita
def process():
# 環境変数から入出力パスを取得(引数パースの競合を防ぐため)
input_path = os.environ.get("KRITA_INPUT")
output_path = os.environ.get("KRITA_OUTPUT")
if not input_path or not output_path:
print("Error: KRITA_INPUT or KRITA_OUTPUT env variables not set.")
return
ki = Krita.instance()
# ドキュメントを非表示(Background)で開く
doc = ki.openDocument(input_path)
if not doc:
print(f"Failed to open image: {input_path}")
return
# 1. 線画抽出 (エッジ検出フィルターの適用)
edge_filter = ki.filter("edge detection")
# 設定(必要に応じて調整)
edge_filter.apply(doc.activeNode(), 0, 0, doc.width(), doc.height())
# 2. ハーフトーン化(網点トーン)
halftone_filter = ki.filter("halftone")
if halftone_filter:
# トーンのサイズや形状を設定可能
halftone_filter.apply(doc.activeNode(), 0, 0, doc.width(), doc.height())
# 投影の更新
doc.refreshProjection()
# 3. PNG書き出し
doc.setBatchmode(True)
doc.saveAs(output_path)
doc.close()
# Kritaを終了
ki.action("file_quit").trigger()
# Krita起動時に即時実行
process()
```
2. **起動用バッチファイル(PowerShell)の作成**
Kritaをバックグラウンド(`--nosplash`)で起動し、上記スクリプトを実行させるバッチです。
```powershell
# run_krita.ps1
$env:KRITA_INPUT="C:\manga\input_color.png"
$env:KRITA_OUTPUT="C:\manga\output_mono.png"
# Kritaをバックグラウンドで起動し、スクリプトを実行
Start-Process -FilePath "C:\Program Files\Krita (x64)\bin\krita.exe" -ArgumentList "--nosplash --run-custom-script --script C:\manga\krita_manga.py" -NoNewWindow -Wait
```
---
### ② AutoHotkey + クリスタEX(ControlSendによる完全非アクティブ制御)
クリスタ(CLIP STUDIO PAINT)は、`ControlSend` を使うことで**ウィンドウを背後に隠したまま(非アクティブのまま)**ショートカットキーを送り、オートアクションを実行できます。
#### 前提条件(クリスタ側の準備)
1. クリスタで「カラー画像をモノクロ化(レイヤープロパティをトーン化)して、特定フォルダに『上書き保存』し、キャンバスを閉じる」という**オートアクション**を作成します。
2. そのオートアクションにショートカットキー(例: `F12`)を割り当てておきます。
#### 実装手順
以下のAHKスクリプト(`clip_auto.ahk`)を作成し、実行します。
```autohotkey
#NoEnv
#NoTrayIcon
SetTitleMatchMode, 2
DetectHiddenWindows, On
; 入力画像パス
InputFile := "C:\manga\input_color.png"
OutputFile := "C:\manga\output_mono.png"
; 競合防止のため既存の出力を削除
if FileExist(OutputFile)
FileDelete, %OutputFile%
; クリスタを最小化/非アクティブ状態で起動し、直接画像を開く
Run, "C:\Program Files\CELSYS\CLIP STUDIO\CLIP STUDIO PAINT\CLIPStudioPaint.exe" "%InputFile%", , Min
; ウィンドウの出現を待つ (非アクティブのまま検出)
WinWait, ahk_exe CLIPStudioPaint.exe, , 15
if ErrorLevel {
ExitApp
}
hWnd := WinExist("ahk_exe CLIPStudioPaint.exe")
; 描画エンジンの読み込み完了まで安全マージンとして待機
Sleep, 3000
; ControlSendで、クリスタのメインウィンドウへ直接「F12(オートアクション)」を送信
; ウィンドウが非アクティブでも、裏で確実にキーが届きます
ControlSend, , {F12}, ahk_id %hWnd%
; オートアクションによる書き出し完了(ファイル生成)を監視
Loop, 30 {
if FileExist(OutputFile) {
break
}
Sleep, 500
}
; クリスタをプロセスごと強制終了(GUIの「保存しますか?」等のダイアログを無視して確実に閉じる)
Process, Close, CLIPStudioPaint.exe
ExitApp
```
---
### ③ ComfyUI(API駆動による線画化+トーン化)
ComfyUIは、GUIを一切開かずに「API(JSONデータ)」をローカルサーバーにPOSTするだけで画像の変換・保存が完結します。最も近未来的かつ極めて確実な自動化手段です。
#### 必要なカスタムノード
* `comfyui_controlnet_aux`(Anyline Preprocessor用:超美麗な線画抽出)
* `ComfyUI-Post-Processing-Nodes` または `comfyui-image-filters`(Halftone / Dither用:高精度な網点化)
#### 実装手順
1. **ワークフローJSONの取得**
ComfyUIのGUI上で「Load Image」→「Anyline Preprocessor」→「Dither (Halftone)」→「Save Image」のノードを繋ぎ、右メニューから「**Save (API Format)**」(※設定からEnable Dev modeを有効化)で `workflow_api.json` を書き出します。
2. **PythonからAPIを叩くバッチスクリプト**
このスクリプトを実行するだけで、裏で起動しているComfyUIに画像が送られ、処理されたトーン画像が自動で保存されます。
```python
# comfy_batch.py
import json
import urllib.request
import os
COMFY_ADDRESS = "http://127.0.0.1:8188"
INPUT_IMG_PATH = "C:/manga/input_color.png"
JSON_WORKFLOW_PATH = "C:/manga/workflow_api.json"
# 1. 画像をComfyUIのinputフォルダにアップロード
import requests
with open(INPUT_IMG_PATH, 'rb') as f:
res = requests.post(f"{COMFY_ADDRESS}/upload/image", files={"image": f})
uploaded_filename = res.json()["name"]
# 2. ワークフローJSONの読み込みと書き換え
with open(JSON_WORKFLOW_PATH, 'r', encoding='utf-8') as f:
prompt = json.load(f)
# LoadImageノード(通常はID "3"等)の画像名をアップロードしたものに変更
# ※ノードIDは保存したJSONを確認してください
prompt["3"]["inputs"]["image"] = uploaded_filename
# 3. ジョブをキューに送信
p = {"prompt": prompt}
data = json.dumps(p).encode('utf-8')
req = urllib.request.Request(f"{COMFY_ADDRESS}/prompt", data=data)
urllib.request.urlopen(req)
print("Processing in ComfyUI backend...")
```
---
### 3つの手段の比較評価
| 項目 | ① Krita + Python API | ② AutoHotkey + クリスタ | ③ ComfyUI (API) |
| :--- | :--- | :--- | :--- |
| **導入の手間** | **中** (Pythonコード作成のみ) | **中** (クリスタのオートアクション構築) | **高** (ComfyUIとカスタムノードの構築) |
| **処理の確実性** | **極めて高** (API直接操作) | **中** (ポップアップ等で稀に止まる) | **最高** (HTTP通信のみで完結、100%確実) |
| **NSFW可否** | **完全可能** (ローカル・制限なし) | **完全可能** (ローカル・制限なし) | **完全可能** (ローカル・制限なし) |
| **線画/トーン品質**| **普通** (標準的な2Dフィルタ) | **高** (プロ仕様のトーン化) | **最高** (Anylineによる異次元の線画抽出) |
---
### 結論:一番ラクで確実なのはどれか?
一番ラクで確実なのは **「① Krita + Python API」** です。
* **理由**:
* **ComfyUI (③)** も確実性・品質は最高クラスですが、初回の環境構築(ControlNetモデルのダウンロード、API用JSONの調整)にかなりの手間がかかります。
* **クリスタ (②)** は、何らかの理由で「ファイルを保存しますか?」などのダイアログが一度でも裏で出るとプロセスの停止・ハングに繋がるため、完全放置時の「確実性」に不安が残ります。
* **Krita (①)** は、無料かつインストーラー1つで環境が揃い、Pythonからダイレクトに画像処理エンジンを実行できるため、**「GUIの割り込みトラブルが一切なく、最も少ないエンジニアリングコストで100%確実に動作するシステム」** を構築できます。