| スコア | 評価 | 販売判断 |
|---|---|---|
| 90-100点 | 最高品質 | 即販売OK。FANZA/DLsite/Booth全プラットフォーム対応 |
| 75-89点 | 販売品質 | 販売OK。価格帯500-700円が妥当 |
| 60-74点 | 要修正 | 主要NG項目修正後に販売。300-500円帯 |
| 59点以下 | 販売不可 | リジェクトリスク高 / 返品・低評価確実。再生成推奨 |
| 品質区分 | 推定スコア | 平均価格 | 平均DL数 | 推定収益/作品 |
|---|---|---|---|---|
| 高品質(顔可視・一貫性あり) | 85点以上 | 700-1500円 | 30-100本 | ¥15,000-¥75,000 |
| 標準品質(AI量産品) | 60-84点 | 330円 | 12.3本 | ¥2,700(市場平均)[1] |
| 低品質(顔消失・色崩れ) | 59点以下 | 100-300円 | 1-5本 | ¥300-¥1,000 |
| 要素 | 売れる作品の共通設定 | 売れない作品の問題 |
|---|---|---|
| 顔の見せ方 | 正面・斜め正面が全体80%以上。後背位でも必ず振り返り設計 | 後ろ向き一辺倒・顔が分からない |
| キャラ設定 | ページ1枚目から「このキャラが好き」と分かる外見の一貫性 | Vol内でキャラがブレる・誰か分からない |
| 段階設計 | じょじょに脱いでいく過程がある | 最初からフルヌード・変化がない |
| 男キャラ | faceless / 身体は映るが顔は映らない | 男の顔がリアル系・気持ち悪い[5] |
| エロ度 | H多め着衣少なめ(s5:200枚が配分最大) | 着衣ばかり・エロ枚数が少ない |
| 価格帯 | 500-1500円(品質比例) | 100円投げ売り(品質への自信なし) |
# quality_checker.py — 自己採点ツール
# 生成後に各項目を 0/50%/100% で評価してスコアを算出
QUALITY_CHECKLIST = {
# === A. 生成品質(40点) ===
"A1_face_visible": {
"label": "顔可視性",
"max_score": 8,
"check": "全枚数の85%以上で顔が正面または振り返り方向で視認可能か",
"auto_check": False, # 目視確認必要
},
"A2_face_quality": {
"label": "顔の美麗度",
"max_score": 7,
"check": "崩れた顔が全体の5%以下か",
"auto_check": False,
},
"A3_resolution": {
"label": "解像度",
"max_score": 5,
"check": "全画像が1024x1024以上か",
"auto_check": True, # PIL で自動確認可能
},
"A4_anime_style": {
"label": "アニメスタイル固定",
"max_score": 6,
"check": "photorealistic な画像が0枚か",
"auto_check": False,
},
"A5_hands": {
"label": "手足品質",
"max_score": 5,
"check": "6本指・溶けた手が5%以下か",
"auto_check": False,
},
"A6_color": {
"label": "色品質(マゼンタ肌なし)",
"max_score": 5,
"check": "ピンク/マゼンタ肌が0枚か",
"auto_check": False,
},
"A7_expression": {
"label": "表情多様性",
"max_score": 4,
"check": "全枚数で3種類以上の表情バリエーションがあるか",
"auto_check": False,
},
# === B. CG集構成(30点) ===
"B1_gradation": {
"label": "エロ度グラデーション",
"max_score": 8,
"check": "s1-s5の5ステージが適切に配分されているか",
"auto_check": True, # SCENE_DIST から確認可能
},
"B2_position_variety": {
"label": "体位多様性",
"max_score": 6,
"check": "8種類以上の体位を使用しているか",
"auto_check": True,
},
"B3_faceless_male": {
"label": "男顔なし",
"max_score": 7,
"check": "男キャラの顔が映っている画像が0枚か",
"auto_check": False,
},
"B4_crosssection_limit": {
"label": "断面図制限",
"max_score": 5,
"check": "断面図が1Vol中1枚以下か",
"auto_check": True,
},
"B5_camera_variety": {
"label": "カメラアングル多様性",
"max_score": 4,
"check": "3種類以上のカメラアングルを使用しているか",
"auto_check": False,
},
# === C. 一貫性(20点) ===
"C1_outfit_consistency": {
"label": "衣装一貫性",
"max_score": 8,
"check": "同一ステージ内で衣装・色が変わっていないか",
"auto_check": False,
},
"C2_hair_body_consistency": {
"label": "髪色・体型一貫性",
"max_score": 7,
"check": "1Vol内で髪色・体型がブレていないか",
"auto_check": False,
},
"C3_skin_consistency": {
"label": "肌色一貫性",
"max_score": 5,
"check": "milky/pale skin が全枚数で安定しているか",
"auto_check": False,
},
# === D. 販売品質(10点) ===
"D1_mosaic": {
"label": "モザイク処理",
"max_score": 4,
"check": "FANZA規定(長辺1/100px以上)のモザイクが適切に処理されているか",
"auto_check": False,
},
"D2_ai_tag": {
"label": "AI生成タグ申告",
"max_score": 3,
"check": "FANZA/DLsiteへの投稿時にAIタグを付与したか",
"auto_check": True,
},
"D3_thumbnail": {
"label": "サムネ・サンプル品質",
"max_score": 3,
"check": "サンプル20枚が顔可視率95%以上のカットのみか",
"auto_check": False,
},
}
def calculate_score(results):
"""results = {"A1_face_visible": 1.0, "A2_face_quality": 0.5, ...} (0.0/0.5/1.0)"""
total = 0
for key, item in QUALITY_CHECKLIST.items():
score = results.get(key, 0.0)
total += item["max_score"] * score
return round(total)
# 使用例
# results = {k: 1.0 for k in QUALITY_CHECKLIST} # 全部満点
# print(calculate_score(results)) # 100
| スコア | 推奨価格 | 推定月間DL | FANZA手取り(60%) | 月収目安(5本/月) |
|---|---|---|---|---|
| 90-100点 | 1,000-1,500円 | 30-100本 | ¥18,000-¥90,000/作品 | ¥90,000-¥450,000 |
| 75-89点 | 500-700円 | 10-30本 | ¥3,000-¥12,600/作品 | ¥15,000-¥63,000 |
| 60-74点 | 300-500円 | 3-10本 | ¥540-¥3,000/作品 | ¥2,700-¥15,000 |
| 順位 | 品質指標 | チェックリスト項目 | 重要度 |
|---|---|---|---|
| 1位 | キャラの顔がかわいい・好み | A1顔可視性 + A2顔美麗度 | ★★★★★ |
| 2位 | キャラが最後まで一貫している | C1衣装一貫性 + C2髪色体型一貫性 | ★★★★★ |
| 3位 | じょじょに脱いでいく流れ | B1エロ度グラデーション | ★★★★★ |
| 4位 | いろんな体位がある | B2体位多様性 | ★★★★ |
| 5位 | 男の顔が映っていない | B3男顔なし | ★★★★ |
| 6位 | 枚数が多い | 全体量(最低200枚、理想600枚) | ★★★★ |
| 7位 | アニメ絵質が安定している | A4アニメスタイル + A3解像度 | ★★★ |
| 8位 | 手が変(6本指等)がない | A5手足品質 | ★★★ |
| 9位 | 色がおかしくない(肌が変な色でない) | A6色品質 + C3肌色一貫性 | ★★★ |
| 10位 | 断面図が多すぎない | B4断面図制限 | ★★ |
| 期間 | 優先タスク | 目標スコア |
|---|---|---|
| Day 1-5 | チェックリスト A1-A4(顔・品質・スタイル)をsmoke 4枚で確認 → Grok評価 | A項目35点/40点 |
| Day 6-10 | C1-C3(一貫性)設計。IPAdapter参照画像設定。衣装一貫性 smoke 10枚 | C項目18点/20点 |
| Day 11-15 | B1(グラデーション)SCENE_DIST v47設定。B2(体位多様性)POSITIONS_SEX v2.0組み込み | B項目25点/30点 |
| Day 16-20 | 1Vol試験生成600枚。自己採点チェックリスト実施。減点項目ピックアップ | 総合75点以上確認 |
| Day 21-25 | 主要NG修正。D1-D3(販売品質)モザイク処理・AI Tag設定・サムネ選定 | D項目9点/10点 |
| Day 26-30 | FANZA/DLsite/Booth 投稿。価格500-700円スタート設定 | 総合85点以上で販売 |
| 落とし穴 | 原因 | 対策 | 減点幅 |
|---|---|---|---|
| 「smoke見てOKと思ったら本番でNG」 | smoke 4枚で運良く顔が出ただけ。再現性がない | smoke 10枚以上で安定率を確認。成功率70%以上でないと採用しない | -8点 |
| 「s3で着ていた服がs4で別の服になっている」 | outfit_color タグの weight 不足 / IPAdapter未使用 | outfit_color + IPAdapter参照。衣装変更はステージ移行タイミングのみ許可 | -8点 |
| 「サンプルに選んだ画像が最悪カット」 | ランダムにサンプルを選んでいる | 顔可視率A1・美麗度A2・一貫性C1を全て満点の画像をサンプルに選ぶ選択ルール作成 | -3点 |
| 「評価ループなしで量産 → 全滅」 | smoke 後の Grok 評価・CC目視を省略 | smoke → CC目視 → Grok評価 → 修正 の評価ループを毎回必ず実施[12] | -20点 |
| 「Grok評価が楽観的すぎて信じた」 | Grok単独評価は甘めに出ることがある | CC目視補正 + Grok評価を組み合わせる。CC目視が主・Grok評価が副 | -10点 |
# quality_auto_check.py
# 自動確認可能な項目のみ自動チェック
# 実行: python quality_auto_check.py --vol_dir "D:\...\output\vol_001"
import os
import json
from PIL import Image
from pathlib import Path
def check_resolution(image_path, min_size=1024):
"""A3: 解像度チェック"""
img = Image.open(image_path)
w, h = img.size
return min(w, h) >= min_size
def check_scene_distribution(metadata_json):
"""B1: SCENE_DIST チェック(metadata.json から確認)"""
with open(metadata_json) as f:
meta = json.load(f)
stages = [m.get("stage") for m in meta]
dist = {s: stages.count(s) for s in ["s1","s2","s3","s4","s5"]}
# s5 > s4 > s3 > s2 > s1 の順になっているか
return dist.get("s5",0) >= dist.get("s4",0) * 0.8
def check_position_variety(metadata_json):
"""B2: 体位バリエーション(最低8種類)"""
with open(metadata_json) as f:
meta = json.load(f)
positions = set(m.get("position","") for m in meta)
return len(positions) >= 8
def run_auto_checks(vol_dir):
vol_dir = Path(vol_dir)
images = list(vol_dir.glob("*.png")) + list(vol_dir.glob("*.jpg"))
results = {}
# A3: 解像度
low_res = [img for img in images if not check_resolution(img)]
results["A3_resolution"] = 1.0 if len(low_res) == 0 else max(0, 1.0 - len(low_res)/len(images))
# B1, B2: メタデータから確認
meta_path = vol_dir / "metadata.json"
if meta_path.exists():
results["B1_gradation"] = 1.0 if check_scene_distribution(meta_path) else 0.0
results["B2_position_variety"] = 1.0 if check_position_variety(meta_path) else 0.5
print("=== Auto Check Results ===")
for key, val in results.items():
status = "OK" if val >= 1.0 else ("PARTIAL" if val > 0 else "NG")
print(f"{key}: {status} ({val*100:.0f}%)")
return results
if __name__ == "__main__":
import sys
vol_dir = sys.argv[2] if len(sys.argv) > 2 else "."
run_auto_checks(vol_dir)
適用ファイル: D:\projects\fanza3_mass\scripts\quality_auto_check.py として保存。Vol生成後に実行して自動チェック可能な項目を事前確認してから目視チェックに移る。
| DR名 | 関連性 | ファイル名 |
|---|---|---|
| R18 CG品質指標化 科学的管理 | 高 — 本DRの品質指標体系の前身 | DR_R18_CG品質指標化_科学的管理_2026-05-26.html |
| R18 現行画像辛口評価 Grok/Gemini | 高 — NG項目の実例データ源 | DR_R18現行画像辛口評価_Grok_Gemini_2026-05-26.html |
| R18 ステージ配分最適化 | 高 — B1グラデーション設計の詳細 | DR_R18_CG集_ステージ配分最適化_2026-05-28.html |
| FANZA審査傾向最速通過戦略 | 高 — 審査NG項目の詳細 | DR_FANZA同人CG集審査傾向最速通過戦略_2026-04-28.html |
| R18顔可視性体位設計最適化 | 高 — A1顔可視性の詳細実装 | DR_R18顔可視性体位設計最適化_2026-05-29.html(本日作成) |