コンテンツにスキップ

プロンプト品質レビューワークフロー ユーザーマニュアル

対象プロジェクト: projects/prompt-collector/ 関連 Issue: #71(品質レビューワークフロー)、#67(AI漫画パイプライン)


目次

  1. 概要
  2. ツール構成
  3. YAMLスキーマ(プロンプトファイルの構造)
  4. 品質スコアの読み方
  5. レビュー基準
  6. review.py — レビューワークフロー CLI
  7. quality_filter.py — 品質スコアリング・フィルタリング CLI
  8. improvement_loop.py — 自動改善ループ
  9. 標準的なレビューワークフロー(推奨手順)
  10. レビュー結果サマリーレポートの生成
  11. よくある問題と対処法

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 の評価基準

  • タグ間の整合性: 矛盾するタグがないか(例: smilingcrying 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):

1. 画質・スタイル(photorealistic, anime style 等)
2. 主被写体
3. 詳細描写
4. 背景・環境
5. 追加品質指定

5.4 weight_balance の評価基準

  • 適切な強調: 重要なタグに (tag:1.2)(tag:1.4) 程度の強調
  • 過剰な強調を避ける: (((tag:2.0))) のような過剰強調は破綻の原因
  • ネガティブの重み付け: (worst quality:1.4) 等の一般的な慣用を参考に

5.5 redundancy_notes の確認ポイント

  • 同義タグの重複: detailedhighly detailedultra detailed の共存
  • 矛盾タグ: indooroutdoor の共存
  • 効果の相殺: ポジティブとネガティブで同じタグを指定

6. review.py — レビューワークフロー CLI

cd projects/prompt-collector
python review.py [モード] [オプション]

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: レビュー統計表示

python review.py --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

cd projects/prompt-collector
python quality_filter.py [モード] [オプション]

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: 類似プロンプト検出

python quality_filter.py --duplicates

python quality_filter.py --duplicates --model sd15

ポジティブプロンプトの先頭5タグをキーにグルーピングし、 同一グループに複数ファイルがある場合を重複とみなして表示します。

7.6 --user-ranking: ユーザー別品質ランキング

python quality_filter.py --user-ranking

python quality_filter.py --user-ranking --model sdxl

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: 品質サマリーの確認

python quality_filter.py --summary

ステップ 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 が起動している場合、実際に画像を生成して目視確認できます。

# 上位プロンプトのテスト画像を生成
python review.py --generate --file x-UNfukashigi-1234.yaml

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 のレートリミットエラーが出る

レートリミット。60秒待機後リトライ (1/2)

review.py --auto-review は自動でリトライします。 頻繁に発生する場合は、モデル別に分割して時間をおいて実行してください。

Q2. SD WebUI に接続できない

[エラー] SD WebUI (http://127.0.0.1:7860) に接続できません。
  • 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.yamloutput.prompt_library_path が正しいパスを指しているか確認してください。

Q4. prompt-library パスが見つからない

エラー: prompt-libraryパスが見つかりません

config/config.yamloutput.prompt_library_path に設定されたパスが存在するか確認してください。 WSL 環境では Windows パス(D:/...)は /mnt/d/... に自動変換されます。

Q5. レビュー済みなのに未レビューと表示される

未レビューの判定は「quality_rating == 1 かつ last_reviewed == null」です。 手動で quality_rating を変更した場合でも last_reviewednull だと未レビューとみなされます。 review.py --auto-review --file <ファイル名> を実行すると last_reviewed が設定されます。

Q6. 同じプロンプトが大量に重複している

python quality_filter.py --duplicates

で重複グループを確認し、低スコアのファイルを削除して整理してください。


参考: ディレクトリ構造

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