プロンプト品質レビューワークフロー ユーザーマニュアル¶
対象プロジェクト:
projects/prompt-collector/関連 Issue: #71(品質レビューワークフロー)、#67(AI漫画パイプライン)
目次¶
- 概要
- ツール構成
- YAMLスキーマ(プロンプトファイルの構造)
- 品質スコアの読み方
- レビュー基準
- review.py — レビューワークフロー CLI
- quality_filter.py — 品質スコアリング・フィルタリング CLI
- improvement_loop.py — 自動改善ループ
- 標準的なレビューワークフロー(推奨手順)
- レビュー結果サマリーレポートの生成
- よくある問題と対処法
1. 概要¶
このワークフローは、X(Twitter)から収集した Stable Diffusion プロンプトを 評価・整理するための仕組みです。
収集 (main.py)
↓
YAML保存 (prompt-library/{model_type}/collected/{username}/*.yaml)
↓
自動レビュー (review.py --auto-review) ← Gemini API で評価
↓
品質フィルタリング (quality_filter.py) ← スコア集計・上位抽出
↓
テスト画像生成 (review.py --generate) ← SD WebUI で確認
↓
自動改善ループ (improvement_loop.py) ← Gemini Vision でプロンプト改善
2. ツール構成¶
| ファイル | 役割 |
|---|---|
review.py | レビューワークフローのCLIエントリーポイント |
src/review_workflow.py | レビュー処理の実装(一覧・自動レビュー・画像生成) |
quality_filter.py | 品質スコアリング・フィルタリング・エクスポート |
improvement_loop.py | SD WebUI + Gemini Vision による自動改善ループ |
config/config.yaml | 設定ファイル(APIキー・パス等) |
3. YAMLスキーマ(プロンプトファイルの構造)¶
収集されたプロンプトは以下の構造で保存されます。
name: "キャラクター立ち絵プロンプト" # プロンプトの説明(自動生成)
id: "x-UNfukashigi-1234567890-sd15" # 一意のID(収集元アカウント+ツイートID+モデル)
model_type: sd15 # sd15 / sdxl / both
category: character # character / scene / style / pose / other
prompt:
positive: "1girl, solo, ..." # ポジティブプロンプト
negative: "worst quality, ..." # ネガティブプロンプト
params:
steps: 28 # サンプリングステップ数
cfg_scale: 7.0 # CFGスケール
sampler: "DPM++ 2M Karras" # サンプラー
width: 512 # 画像幅
height: 768 # 画像高さ
meta:
author: "@UNfukashigi" # 収集元ユーザー
created: "2026-03-10" # 収集日
updated: "2026-03-10" # 最終更新日
quality_rating: 1 # 品質評価(1〜5、初期値1)
consistency_rating: 1 # 一貫性評価(1〜5、初期値1)
tags: [collected, from-UNfukashigi] # タグ
use_case: standalone # 使用ケース
review:
last_reviewed: null # 最終レビュー日(null = 未レビュー)
suggestions: [] # 改善提案(Gemini出力)
prompt_analysis:
tag_order_quality: null # タグ順序評価(good/fair/poor)
weight_balance: null # 重み付け評価(good/fair/poor)
redundancy_notes: null # 重複・矛盾タグのメモ
dependencies:
loras: [] # 使用LoRA
embeddings: [] # 使用Embedding
notes: "ソース: https://x.com/..." # メモ(ソースURL等)
未レビューの判定条件¶
quality_rating == 1 かつ last_reviewed == null の場合を「未レビュー」とみなします。
4. 品質スコアの読み方¶
4.1 個別評価値¶
quality_rating(品質評価): 1〜5¶
| スコア | 意味 | 目安 |
|---|---|---|
| 1 | 未評価/不明 | 収集直後の初期値 |
| 2 | 低品質 | タグが少ない・意味不明なプロンプト |
| 3 | 普通 | 標準的な品質 |
| 4 | 良質 | 具体的で使いやすいプロンプト |
| 5 | 非常に良質 | 高品質・再利用しやすい優れたプロンプト |
consistency_rating(一貫性評価): 1〜5¶
| スコア | 意味 |
|---|---|
| 1 | タグ間に矛盾・不整合が多い |
| 3 | 概ね整合しているが一部問題あり |
| 5 | 全タグが整合し、統一感がある |
tag_order_quality(タグ順序評価): good / fair / poor¶
| 値 | 意味 |
|---|---|
| good | 重要なタグが前方にある。カテゴリごとに整理されている |
| fair | 概ね適切だが改善の余地あり |
| poor | 重要タグが後方にある。順序が不規則 |
weight_balance(重み付け評価): good / fair / poor¶
| 値 | 意味 |
|---|---|
| good | () や [] の使用が適切でバランスが良い |
| fair | 部分的に過剰/不足があるが許容範囲 |
| poor | ((()等の過剰な強調、または重みが一切ない |
4.2 複合スコア(composite_score): 0.0〜5.0¶
quality_filter.py が算出する統合スコアです。
composite_score = quality_rating × 0.4
+ consistency_rating × 0.3
+ ((tag_order + weight_balance) / 2) × 0.3
tag_order / weight_balance は数値に変換して計算します(good=5, fair=3, poor=1)。
| スコア範囲 | 品質レベル |
|---|---|
| 4.5〜5.0 | 優秀(積極的に活用すべきプロンプト) |
| 3.5〜4.4 | 良質(そのまま使えるプロンプト) |
| 2.5〜3.4 | 普通(改善提案を参考に手直し推奨) |
| 1.5〜2.4 | 低品質(改善または削除を検討) |
| 1.0〜1.4 | 未評価 / 要改善 |
5. レビュー基準¶
Gemini API によるレビューは以下の基準で行われます。
5.1 quality_rating の評価基準¶
- 具体性: タグが十分に具体的かどうか(
beautifulよりdetailed face, sharp eyes等) - 適切な詳細度: 必要十分なタグ数があるか(多すぎ・少なすぎを避ける)
- 使いやすさ: そのまま使って再現性が高いか
5.2 consistency_rating の評価基準¶
- タグ間の整合性: 矛盾するタグがないか(例:
smilingとcrying expressionの共存) - スタイルの統一: リアル系タグとアニメ系タグが混在していないか
- ネガティブとの整合: ポジティブとネガティブで同じ概念を指定していないか
5.3 tag_order_quality の評価基準¶
Stable Diffusion はプロンプトの前方ほど影響力が強いという特性があります。
推奨タグ順序(SD1.5):
1. 主被写体の数・種類(1girl, solo 等)
2. 顔・表情(beautiful face, smile 等)
3. 衣装・アクセサリー
4. ポーズ・動作
5. 背景・環境
6. 画質・スタイル指定(masterpiece, best quality 等)
7. ネガティブ強調タグ
推奨タグ順序(SDXL):
5.4 weight_balance の評価基準¶
- 適切な強調: 重要なタグに
(tag:1.2)〜(tag:1.4)程度の強調 - 過剰な強調を避ける:
(((tag:2.0)))のような過剰強調は破綻の原因 - ネガティブの重み付け:
(worst quality:1.4)等の一般的な慣用を参考に
5.5 redundancy_notes の確認ポイント¶
- 同義タグの重複:
detailedとhighly detailedとultra detailedの共存 - 矛盾タグ:
indoorとoutdoorの共存 - 効果の相殺: ポジティブとネガティブで同じタグを指定
6. review.py — レビューワークフロー CLI¶
6.1 --list: YAML一覧表示¶
# 収集済みYAML全件を表示
python review.py --list
# 未レビューのみ表示(* マーク付き)
python review.py --list --unreviewed
# モデルタイプでフィルタ(sd15 / sdxl / both)
python review.py --list --model sd15
# ユーザーでフィルタ
python review.py --list --user UNfukashigi
# 組み合わせ
python review.py --list --unreviewed --model sdxl
表示例:
==========================================================================================
No. ユーザー モデル 品質 一貫性 最終レビュー ファイル名
==========================================================================================
* 1 UNfukashigi sd15 1 1 未レビュー x-UNfukashigi-1234.yaml
2 studiomasakaki sdxl 4 4 2026-03-10 x-studiomasakaki-5678.yaml
==========================================================================================
合計: 2件 (* = 未レビュー)
6.2 --auto-review: Gemini自動レビュー¶
Gemini API を使って品質評価を自動実行し、YAML に書き戻します。
# 未レビューファイルを全件レビュー(デフォルト動作)
python review.py --auto-review
# 特定ファイルのみレビュー
python review.py --auto-review --file x-UNfukashigi-1234.yaml
# モデルタイプ指定
python review.py --auto-review --model sd15
# レビュー済み含め全件を再レビュー
python review.py --auto-review --all
# ファイルへの書き込みをスキップして確認
python review.py --auto-review --dry-run
# 詳細ログを出力
python review.py --auto-review -v
実行中の出力例:
自動レビュー開始: 3件
[1/3] x-UNfukashigi-1234.yaml
品質評価: 4/5 一貫性: 4/5
タグ順序: good 重み付け: fair
重複メモ: なし
提案: ネガティブプロンプトにembedding(EasyNegative等)の使用を検討
[2/3] x-studiomasakaki-5678.yaml
...
自動レビュー完了: 成功=3件, 失敗=0件 / 合計=3件
6.3 --generate: SD WebUI テスト画像生成¶
SD WebUI の API を使ってテスト画像を生成します(SD WebUI 起動中に使用)。
# 特定ファイルの画像を生成
python review.py --generate --file x-UNfukashigi-1234.yaml
# 未レビューファイルの全件を生成
python review.py --generate --unreviewed
# モデルタイプ指定
python review.py --generate --model sdxl
# SD WebUI のURLを指定(デフォルト: http://127.0.0.1:7860)
python review.py --generate --file foo.yaml --sd-url http://127.0.0.1:7860
生成された画像は {model_type}/collected/{username}/test_images/ に保存されます。
6.4 --stats: レビュー統計表示¶
表示例:
============================================================
プロンプトライブラリ レビュー統計
============================================================
総YAMLファイル数: 42件
レビュー済み: 35件 (83.3%)
未レビュー: 7件 (16.7%)
[モデル別]
both : 5件
sd15 : 28件
sdxl : 9件
[ユーザー別]
@UNfukashigi : 15件
@studiomasakaki : 8件
...
[品質評価分布(quality_rating)]
1=未評価/不明: 7件
2=低品質 : 3件
3=普通 : 12件
4=良質 : 15件
5=非常に良質 : 5件
============================================================
7. quality_filter.py — 品質スコアリング・フィルタリング CLI¶
7.1 --summary: 品質サマリー¶
# 全体サマリー
python quality_filter.py --summary
# モデル別サマリー
python quality_filter.py --summary --model sdxl
表示内容: - 総ファイル数・レビュー済み比率 - 複合スコアの統計(平均・最高・最低) - 品質評価分布(レビュー済みのみ) - カテゴリ別の件数と平均スコア
7.2 --top N: 上位N件を表示¶
# 全体の上位10件
python quality_filter.py --top 10
# SDXL限定の上位5件
python quality_filter.py --top 5 --model sdxl
# キャラクターカテゴリの上位20件
python quality_filter.py --top 20 --category character
カテゴリの種類: character, scene, style, pose, other
7.3 --low-quality: 低品質プロンプト一覧¶
# quality_rating <= 2 のプロンプト一覧(デフォルト)
python quality_filter.py --low-quality
# 閾値を指定(quality_rating <= 3 以下を低品質とみなす)
python quality_filter.py --low-quality --threshold 3
7.4 --export-top N: 上位プロンプトをエクスポート¶
# 全体の上位20件をYAMLとして保存
python quality_filter.py --export-top 20
# SDXL・キャラクターカテゴリの上位10件
python quality_filter.py --export-top 10 --model sdxl --category character
エクスポート先: {prompt_library_path}/exports/top{N}_{filter}_{日付}.yaml
エクスポートファイルにはプロンプト本体・スコア・パラメータが含まれます。
7.5 --duplicates: 類似プロンプト検出¶
ポジティブプロンプトの先頭5タグをキーにグルーピングし、 同一グループに複数ファイルがある場合を重複とみなして表示します。
7.6 --user-ranking: ユーザー別品質ランキング¶
8. improvement_loop.py — 自動改善ループ¶
SD WebUI で画像を生成し、Gemini Vision で品質を評価して、 スコアが目標値に達するまでプロンプトを自動修正するループです。
cd projects/prompt-collector
# SD WebUI と Gemini API の接続確認
python improvement_loop.py --check
# 単一ファイルの改善ループ(デフォルト: 最大3回、目標スコア7.0/10)
python improvement_loop.py --run path/to/prompt.yaml
# 最大反復回数・目標スコアを指定
python improvement_loop.py --run path/to/prompt.yaml --max-iterations 5 --target-score 8.0
# バッチ実行(未レビューの sd15 プロンプト全件)
python improvement_loop.py --run-batch --model sd15 --unreviewed
# 改善履歴を確認
python improvement_loop.py --history path/to/prompt.yaml
# 書き込みをスキップして確認
python improvement_loop.py --run path/to/prompt.yaml --dry-run
注意: SD WebUI が起動している必要があります。 Gemini Vision API(gemini-2.0-flash 等)の利用料金が発生します。
9. 標準的なレビューワークフロー(推奨手順)¶
ステップ 1: 収集状況の確認¶
cd projects/prompt-collector
# 全体統計を確認
python review.py --stats
# 未レビュー一覧を確認
python review.py --list --unreviewed
ステップ 2: 自動レビューの実行¶
# 未レビューファイルを全件レビュー
python review.py --auto-review
# レートリミットが懸念される場合はモデル別に分けて実行
python review.py --auto-review --model sd15
python review.py --auto-review --model sdxl
Gemini API のレートリミット(RPM制限)により、多数ファイルがある場合は 自動で待機・リトライします。目安として100件で数分かかります。
ステップ 3: 品質サマリーの確認¶
ステップ 4: 問題プロンプトの特定と対処¶
# 低品質プロンプトを確認
python quality_filter.py --low-quality
# 重複プロンプトを確認
python quality_filter.py --duplicates
ステップ 5: 高品質プロンプトのエクスポート¶
# 全体の上位20件をエクスポート(AI漫画制作等に活用)
python quality_filter.py --export-top 20
# キャラクターカテゴリ限定
python quality_filter.py --export-top 10 --category character --model sd15
ステップ 6(オプション): テスト画像生成¶
SD WebUI が起動している場合、実際に画像を生成して目視確認できます。
10. レビュー結果サマリーレポートの生成¶
10.1 コマンド一発でのサマリー確認¶
以下のコマンドをまとめて実行すると、全体像を把握できます:
cd projects/prompt-collector
# 1. レビュー統計(全体概況)
python review.py --stats
# 2. 品質サマリー(スコア分布)
python quality_filter.py --summary
# 3. 上位プロンプト一覧
python quality_filter.py --top 10
# 4. 低品質一覧(改善候補)
python quality_filter.py --low-quality
# 5. ユーザー別ランキング
python quality_filter.py --user-ranking
10.2 レポートをファイルに保存する¶
cd projects/prompt-collector
python review.py --stats > /tmp/review_stats.txt && \
python quality_filter.py --summary >> /tmp/review_stats.txt && \
python quality_filter.py --top 20 >> /tmp/review_stats.txt && \
python quality_filter.py --user-ranking >> /tmp/review_stats.txt
# 保存先を確認
cat /tmp/review_stats.txt
10.3 モデル別・カテゴリ別の詳細レポート¶
# SD1.5 の詳細レポート
python quality_filter.py --summary --model sd15
python quality_filter.py --top 10 --model sd15 --category character
python quality_filter.py --top 10 --model sd15 --category scene
# SDXL の詳細レポート
python quality_filter.py --summary --model sdxl
python quality_filter.py --top 10 --model sdxl
11. よくある問題と対処法¶
Q1. Gemini API のレートリミットエラーが出る¶
review.py --auto-review は自動でリトライします。 頻繁に発生する場合は、モデル別に分割して時間をおいて実行してください。
Q2. SD WebUI に接続できない¶
- SD WebUI が起動しているか確認してください
--apiオプションを付けて SD WebUI を起動してください:python launch.py --api- URLが異なる場合:
python review.py --generate --sd-url http://YOUR_URL:7860
Q3. 設定ファイルが見つからない¶
projects/prompt-collector/config/config.yaml が存在するか確認してください。 config.yaml の output.prompt_library_path が正しいパスを指しているか確認してください。
Q4. prompt-library パスが見つからない¶
config/config.yaml の output.prompt_library_path に設定されたパスが存在するか確認してください。 WSL 環境では Windows パス(D:/...)は /mnt/d/... に自動変換されます。
Q5. レビュー済みなのに未レビューと表示される¶
未レビューの判定は「quality_rating == 1 かつ last_reviewed == null」です。 手動で quality_rating を変更した場合でも last_reviewed が null だと未レビューとみなされます。 review.py --auto-review --file <ファイル名> を実行すると last_reviewed が設定されます。
Q6. 同じプロンプトが大量に重複している¶
で重複グループを確認し、低スコアのファイルを削除して整理してください。
参考: ディレクトリ構造¶
prompt-library/
├── sd15/
│ └── collected/
│ ├── UNfukashigi/
│ │ ├── x-UNfukashigi-1234567890-sd15.yaml
│ │ └── test_images/ ← テスト画像保存先
│ │ └── x-UNfukashigi-..._20260310.png
│ └── studiomasakaki/
│ └── ...
├── sdxl/
│ └── collected/
│ └── ...
├── both/
│ └── collected/
│ └── ...
└── exports/ ← エクスポートYAML保存先
└── top20_20260310.yaml