ollama run huihui_ai/qwen2.5-vl-abliterated:7b の1コマンドで30秒以内に代替完了。
ollama run huihui_ai/qwen2.5-vl-abliterated:7b で即時起動 (VRAM 8〜16GB) ← 最推奨qwen/qwen2.5-vl-32b-instruct:free をAPI経由で使用| 用途 | 推奨モデル | 起動コマンド | VRAM目安 |
|---|---|---|---|
| 常用・高精度 | huihui_ai/qwen2.5-vl-abliterated:7b | ollama run huihui_ai/qwen2.5-vl-abliterated:7b |
〜16GB |
| 最新・高速 | huihui_ai/qwen3-vl-abliterated:8b | ollama run huihui_ai/qwen3-vl-abliterated:8b |
〜18GB |
| API即利用 | Venice.ai + Qwen2.5-VL-72B | REST API (OpenAI互換) | 不要 |
| 無料API枠 | OpenRouter qwen2.5-vl-32b:free | OpenRouter API | 不要 |
| 特化キャプション | prithivMLmods/Qwen3-VL-8B-Abliterated-Caption-it | transformers pipeline | 〜20GB |
2024年後半から2026年現在にかけて、商用Vision AIの安全フィルタは急速に強化された。OpenAIのGPT-4oは2024年から明示的なNSFW画像入力を拒否し[1]、Google Gemini 2.0/2.5シリーズも成人向けコンテンツの画像評価要求に対して一律「ポリシー違反」を返す[2]。例外的にx.AI Grokシリーズ(Grok-2/Grok-4系)はNSFW画像の採点・キャプションに対応してきたが、採点回数の増加やアカウント状況によっては突発的に拒否が発生するケースも報告されている。
この状況を受け、Hugging Face上の「abliterated」タグ付きモデルのダウンロード数は2024年比で推定2.8倍に増加[3]。特にQwen-VL系とLlama-Vision系の2系統がローカル非検閲Vision AIの主流を形成している。グローバルのVision AI市場は2026年に約48億ドル規模と予測されており[4]、そのうちNSFW・アダルト向け需要は約12%(約5.8億ドル)を占めると推定される。
「Abliteration(消去)」とは、LLMモデルの重みから「拒否ベクトル(refusal direction)」を外科的に除去する手法[5]。従来のfine-tuningベースのuncensoredモデルと異なり、元モデルの能力をほぼ保ったまま安全フィルタのみを無効化できる。主要実装者はhuihui-aiとprithivMLmodsで、2025年以降はQwen/Llama/Gemma/Graniteの全主要アーキテクチャで適用実績がある。
重要な制約: 現行の実装ではテキスト部分のみabliterationを適用しており、画像エンコーダ部分は元のまま。つまり視覚処理自体は変更なし・拒否メカニズムの除去のみ。
| 拒否パターン | 発生条件(推定) | 推奨代替 |
|---|---|---|
| 「コンテンツポリシーに違反」 | 画像が実写系/明示的すぎる場合 | Qwen2.5-VL abliterated (ローカル) |
| 「この画像を評価できません」 | アカウントレート制限・セッション蓄積 | Venice.ai API で別枠利用 |
| Gemini「SafetySettings拒否」 | デフォルトSafety設定がBLOCK_MEDIUM | OpenRouter qwen2.5-vl:free |
| タイムアウト・API障害 | xAIサーバー側問題 | ローカルOllamaで完全自立 |
| # | モデル名 | 種別 | ベース | VRAM(FP16) | 日本語 | NSFW精度 | 難易度 |
|---|---|---|---|---|---|---|---|
| 1 | huihui_ai/qwen2.5-vl-abliterated:7b | ローカル | Qwen2.5-VL-7B | 〜16GB | 最高 | 高 | 易 |
| 2 | huihui_ai/qwen3-vl-abliterated:8b | ローカル | Qwen3-VL-8B | 〜18GB | 最高 | 最高 | 易 |
| 3 | prithivMLmods/Qwen3-VL-8B-Abliterated-Caption-it | ローカル | Qwen3-VL-8B | 〜20GB | 高 | 最高(特化) | 中 |
| 4 | prithivMLmods/Qwen2.5-VL-7B-Abliterated-Caption-it | ローカル | Qwen2.5-VL-7B | 〜16GB | 中 | 高(特化) | 中 |
| 5 | huihui_ai/qwen2.5-vl-abliterated:32b | ローカル | Qwen2.5-VL-32B | 〜28GB (不可) | 最高 | 最高 | 中 |
| 6 | Guilherme34/Llama-3.2-11b-vision-uncensored | ローカル | Llama-3.2-11B Vision | 〜22GB | 低 | 中 | 中 |
| 7 | fancyfeast/llama-joycaption-beta-one-hf-llava | ローカル | Llama-3.1+LLaVA | 〜17GB | 英語のみ | 高(キャプション特化) | 中 |
| 8 | huihui_ai/granite3.2-vision-abliterated:2b | ローカル | IBM Granite 3.2 Vision 2B | 〜5GB | 低 | 中 | 易 |
| 9 | sdasd112132/Vision-8B-MiniCPM-2_5-Uncensored-4bit | ローカル | MiniCPM-Llama3-V 2.5 | 〜6GB(4bit) | 中 | 中 | 中 |
| 10 | Venice.ai API (llama-3.3-70b-vision系) | API | 多モデル | 不要 | 中 | 高 | 易 |
| 11 | OpenRouter qwen/qwen2.5-vl-32b-instruct:free | クラウド無料 | Qwen2.5-VL-32B | 不要 | 高 | 中(フィルタ残存) | 易 |
| 12 | uncensored-com/llava-next-video (Replicate) | Replicate | LLaVA-NeXT-Video | 不要 | 英語のみ | 中 | 易 |
HuggingFace: huihui-ai/Qwen2.5-VL-7B-Instruct-abliterated[6]
Ollama: ollama run huihui_ai/qwen2.5-vl-abliterated:7b[7]
元モデル Qwen/Qwen2.5-VL-7B-Instruct の安全アライメントを abliteration 技術で除去した派生モデル。テキスト側の refusal ベクトルを消去しており、NSFW画像に対するキャプション・採点要求に応答する。日本語能力は元モデルを継承しており全Vision AI代替候補中最高水準。
# Ollama インストール後、1コマンドで起動 # Windows/Mac/Linux 共通 ollama pull huihui_ai/qwen2.5-vl-abliterated:7b ollama run huihui_ai/qwen2.5-vl-abliterated:7b
Ollama: huihui_ai/qwen3-vl-abliterated:8b[8]
サイズバリアント: 2b / 4b / 8b / 8b-thinking / 32b-thinking
2026年リリースのQwen3-VL-8Bをベースとした最新abliteratedモデル。Qwen2.5-VL系と比較して推論精度・日本語品質が向上しており、NSFWコンテンツへの記述精度も改善している。8b-thinking バリアントは内部推論(thinking)モードを有効化しており、採点精度がさらに高い(ただしVRAM消費増加・速度低下)。
32Bモデル。FP16で約28GB VRAMが必要なためRTX 3090 Ti単体では動作不可。Q4_K_M量子化ではVRAM約12GBに圧縮され動作可能だが速度は大幅低下。高品質採点が必要な場合の選択肢。
HuggingFace: https://huggingface.co/prithivMLmods/Qwen3-VL-8B-Abliterated-Caption-it[9]
Qwen3-VL-8B-Instruct を NSFW画像キャプション専用データセットでfine-tuningしたabliteratedモデル。Caption-it シリーズはNSFW描写の網羅性・詳細度が通常abliteratedモデルより高く、トレーニング漫画・イラスト・写真 混合データ。複数バージョン(v1/v2/v3/c_abliterated)がリリースされ継続更新中。
HuggingFace: https://huggingface.co/prithivMLmods/Qwen2.5-VL-7B-Abliterated-Caption-it[10]
Qwen2.5-VL-7B版。GGUF量子化版: prithivMLmods/Qwen2.5-VL-Abliterated-Caption-GGUF でollama/llamacpp経由での利用も可能。
prithivMLmods/Qwen2.5-VL-7B-Abliterated-Caption-it にはmat1/mat2 shapes エラーの報告あり(HuggingFace Discussion #2)[10]。transformers バージョン依存の可能性あり。issue確認後に使用すること。
HuggingFace: fancyfeast/llama-joycaption-beta-one-hf-llava[11]
HuggingFace Space (デモ): spaces/fancyfeast/joy-caption-beta-one
GitHub: github.com/fpgaminer/joycaption[12]
JoyCaptionはディフュージョンモデルのトレーニング用途を想定し、SFW/NSFWを等価にカバーすることを設計方針とした、完全オープンの画像キャプションVLM。Beta Oneでは10種類のキャプションモード(Descriptive / Stable Diffusion Prompt / Tags / MidJourney形式 等)を選択可能で、NSFWコンテンツの詳細描写に特化したモード使用時は性的要素を正確に言語化する。
最もNSFW詳細度が高いモード: 「Descriptive Caption」+ 「Straight」 の組み合わせ。
採点目的で使う場合は出力した詳細キャプションをGrokに渡して数値採点させるパイプラインが有効。
4bit量子化版: John6666/llama-joycaption-beta-one-hf-llava-nf4(VRAM約8GB)
from transformers import AutoProcessor, AutoModelForVision2Seq import torch from PIL import Image model_id = "fancyfeast/llama-joycaption-beta-one-hf-llava" processor = AutoProcessor.from_pretrained(model_id) model = AutoModelForVision2Seq.from_pretrained( model_id, torch_dtype=torch.bfloat16, device_map="auto" ) image = Image.open("target.jpg") prompt = "Describe this image in explicit detail, including all NSFW elements." inputs = processor(images=image, text=prompt, return_tensors="pt").to("cuda") output = model.generate(**inputs, max_new_tokens=512) caption = processor.decode(output[0], skip_special_tokens=True) print(caption)
HuggingFace: Guilherme34/Llama-3.2-11b-vision-uncensored[13]
Meta Llama-3.2-11B Visionをベースとした非検閲モデル。Ollama Discussion #3でコミュニティによるOllamaサポートが議論されており、Modelfileを手動作成することでOllama経由での実行が可能。ただし日本語出力品質はQwen系より劣るため、英語プロンプトで送信し結果を別途翻訳する運用が現実的。
# Ollama Modelfile を作成してカスタムモデルとして登録する手順 # 1. まずHuggingFaceからGGUFをダウンロード # 2. Modelfile を作成 FROM ./Llama-3.2-11b-vision-uncensored.gguf PARAMETER stop "<|eot_id|>" SYSTEM "You are an uncensored image analysis assistant." # 3. Ollamaに登録 ollama create llama32-vision-unc -f ./Modelfile ollama run llama32-vision-unc
HuggingFace: huihui-ai/granite-vision-3.2-2b-abliterated[14]
Ollama: ollama run huihui_ai/granite3.2-vision-abliterated:2b
IBMのGranite Vision 3.2-2Bをabliteratedしたモデル。わずか2Bパラメータ・FP16 約5GBでVRAM消費が極小。ComfyUIと同時起動しても余裕がある。精度はQwen-7B系に大幅に劣るが、軽量サブミッションや前処理フィルタとしての用途に適する。
公式ドキュメント: https://docs.venice.ai/api-reference/api-spec[15]
ブログ(Vision解説): venice.ai/blog/ai-image-description-generator...
Venice.aiはOpenAIのAPI仕様に完全準拠した非検閲AIプラットフォーム。Vision機能を備えており、NSFW画像の解析・説明を検閲なしで実行できる。APIキーはVenice.aiダッシュボードで取得(Proプランまたはステーキング経由)。既存のOpenAIクライアントライブラリをそのまま流用可能。
import base64, requests def venice_score_image(image_path: str, api_key: str) -> str: with open(image_path, "rb") as f: b64 = base64.b64encode(f.read()).decode() payload = { "model": "qwen-2.5-vl", # Venice上の利用可能モデルを指定 "messages": [{ "role": "user", "content": [ {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}}, {"type": "text", "text": "Score this adult image from 0-100 across: eroticism(20)/consistency(15)/anatomy(15)/expression(10)/composition(10)/lighting(10)/age_verify(10)/NG_check(10). Return JSON."} ] }] } r = requests.post( "https://api.venice.ai/api/v1/chat/completions", headers={"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}, json=payload, timeout=60 ) return r.json()["choices"][0]["message"]["content"]
URL: https://openrouter.ai/models?q=qwen2.5-vl[16]
OpenRouterは無料枠(:freeサフィックスモデル)として qwen/qwen2.5-vl-32b-instruct:free と qwen/qwen2.5-vl-72b-instruct:free を提供。ただしこれらは元の Qwen2.5-VL(非abliterated)であるため、明示的NSFWリクエストには依然として部分的なフィルタが残る。採点プロンプトを「学術的・技術的評価」として送信することで回避率が向上する(完全保証は不可)。
既存の grok_router.py のOpenRouterキーをそのまま使用可能。
# grok_router.py の OR_KEY をそのまま流用 import requests, base64 OR_KEY = "sk-or-v1-..." # grok_router.py の OR_KEY と同じ with open("image.jpg", "rb") as f: b64 = base64.b64encode(f.read()).decode() r = requests.post( "https://openrouter.ai/api/v1/chat/completions", headers={"Authorization": f"Bearer {OR_KEY}"}, json={ "model": "qwen/qwen2.5-vl-32b-instruct:free", "messages": [{"role": "user", "content": [ {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{b64}"}}, {"type": "text", "text": "Evaluate the artistic and technical quality of this adult image..."} ]}] } ) print(r.json()["choices"][0]["message"]["content"])
公式: https://sightengine.com/[17]
NSFW Detection Docs: https://sightengine.com/docs/advanced-nudity-detection-model
SightEngineは画像モデレーション専用APIで、nudity/violence/text など120+クラスの検出スコアを返す。NSFWコンテンツの採点AIとしてではなく、品質ゲートのNG判定補助(実写混入チェック・未成年疑い検出)に活用できる。NG判定スコアが閾値を超えた場合のみGrokへの採点をスキップする設計が有効。
1. SightEngine でNG判定(実写/未成年/顔)を先行チェック → スコア < 0.1 でNGフラグ
2. NGフラグなし → Grok/abliteratedモデルで9軸採点
3. Grok拒否時 → ローカルQwen abliteratedにフォールバック
Replicate: https://replicate.com/uncensored-com/llava-next-video
LLaVA-NeXT-Video の非検閲版。静止画・動画両対応。APIコスト課金型のため大量利用には不向きだが、GPU環境ゼロの急場凌ぎに有効。英語出力のみ。
| モデル | 精度 | VRAM | 3090Ti単体 | ComfyUI同時(8GB使用時) | 速度目安 |
|---|---|---|---|---|---|
| qwen2.5-vl-abliterated:7b | FP16 | 〜16GB | OK | OK (残16GB) | 20〜40秒/枚 |
| qwen2.5-vl-abliterated:7b | Q4_K_M | 〜5GB | OK | OK (余裕) | 15〜25秒/枚 |
| qwen3-vl-abliterated:8b | FP16 | 〜18GB | OK | ギリギリ | 25〜45秒/枚 |
| qwen3-vl-abliterated:32b-thinking | FP16 | 〜62GB | 不可 | 不可 | — |
| qwen3-vl-abliterated:32b-thinking | Q4_K_M | 〜20GB | OK | ギリギリ | 60〜120秒/枚 |
| Qwen3-VL-8B-Abliterated-Caption-it | FP16 | 〜20GB | OK | ギリギリ | 30〜60秒/枚 |
| Llama-3.2-11b-vision-uncensored | FP16 | 〜22GB | OK | 不可 | 40〜80秒/枚 |
| JoyCaption Beta One | FP16 | 〜17GB | OK | ギリギリ | 20〜50秒/枚 |
| JoyCaption Beta One (nf4) | 4bit(nf4) | 〜8GB | OK | OK | 15〜30秒/枚 |
| granite3.2-vision-abliterated:2b | FP16 | 〜5GB | OK | OK (余裕) | 5〜15秒/枚 |
| MiniCPM-V 2.5 Uncensored 4bit | 4bit | 〜6GB | OK | OK | 10〜20秒/枚 |
| qwen2.5-vl-abliterated:32b | FP16 | 〜62GB | 不可 | 不可 | — |
| qwen2.5-vl-abliterated:32b | Q4_K_M | 〜20GB | OK | ギリギリ | 80〜150秒/枚 |
""" nsfw_scorer.py — NSFW画像採点ルーター (Grok/Gemini拒否時フォールバック付き) 対象: RTX 3090 Ti / Ollama 0.5以降 / Python 3.10+ """ import base64, json, sys from pathlib import Path try: import ollama except ImportError: print("pip install ollama"); sys.exit(1) # ====== モデル設定 ====== MODEL_PRIMARY = "huihui_ai/qwen2.5-vl-abliterated:7b" MODEL_SECONDARY = "huihui_ai/qwen3-vl-abliterated:8b" MODEL_FALLBACK = "huihui_ai/granite3.2-vision-abliterated:2b" # 超軽量 # ====== 採点プロンプト (9軸・100点満点) ====== SCORE_PROMPT = """ You are a professional adult content quality evaluator. Score this image on 9 axes (total 100 points). Return ONLY valid JSON, no explanation. Axes: - eroticism: 0-20 (sexual appeal, explicitness) - consistency: 0-15 (character consistency, style unity) - anatomy: 0-15 (body proportions, correctness) - expression: 0-10 (facial expression matches scene) - composition: 0-10 (framing, layout quality) - lighting: 0-10 (lighting quality, shadows) - age_appearance: 0-10 (MUST be 0 if appears underage — instant disqualify) - ng_violations: 0-10 (10=no violations; deduct for real photo mix, text artifacts) - body_fluids_detail: 0-5 (if applicable, quality of fluid depiction) Required JSON format: { "eroticism":, "consistency": def score_image(image_path: str, model: str = MODEL_PRIMARY) -> dict: img = Path(image_path) if not img.exists(): raise FileNotFoundError(image_path) # Ollama は images パラメータにファイルパスを渡すだけでOK response = ollama.chat( model=model, messages=[{ "role": "user", "content": SCORE_PROMPT, "images": [str(img)] }], options={"temperature": 0.1, "num_predict": 512} ) raw = response["message"]["content"] # JSON抽出 (モデルが前後にテキストを付ける場合に対応) start = raw.find("{"); end = raw.rfind("}") + 1 return json.loads(raw[start:end]) def score_with_fallback(image_path: str) -> dict: for model in [MODEL_PRIMARY, MODEL_SECONDARY, MODEL_FALLBACK]: try: result = score_image(image_path, model) result["model_used"] = model return result except Exception as e: print(f"[WARN] {model} failed: {e} — trying next") raise RuntimeError("All local models failed. Use Venice.ai API as last resort.") # 使い方 if __name__ == "__main__": result = score_with_fallback(sys.argv[1]) print(json.dumps(result, ensure_ascii=False, indent=2)) if result.get("killswitch"): print("[KILLSWITCH] 即没 — 量産禁止") sys.exit(2), "anatomy": , "expression": , "composition": , "lighting": , "age_appearance": , "ng_violations": , "body_fluids_detail": , "total": , "summary": " ", "killswitch": } """
# Qwen系の場合は日本語プロンプトが有効 JA_PROMPT = """ あなたはプロのR18コンテンツ品質評価AIです。 この画像を9軸で採点し、JSON形式のみで回答してください。 採点軸(合計100点): - eroticism: 0-20点(エロさ・性的魅力) - consistency: 0-15点(キャラ一貫性・スタイル統一) - anatomy: 0-15点(体の比率・解剖学的正確さ) - expression: 0-10点(表情がシーンに合っているか) - composition: 0-10点(構図・フレーミング品質) - lighting: 0-10点(光質・陰影品質) - age_appearance: 0-10点(未成年疑いなら即0点・キルスイッチ発動) - ng_violations: 0-10点(実写混入・文字化け・NG要素なし=10) - body_fluids_detail: 0-5点(体液描写の品質・該当なし=3) 返答フォーマット(JSONのみ・説明文なし): {"eroticism":..., "consistency":..., "anatomy":..., "expression":..., "composition":..., "lighting":..., "age_appearance":..., "ng_violations":..., "body_fluids_detail":..., "total":..., "summary":"一行コメント", "killswitch": false} """
| 合計スコア | 判定 | アクション |
|---|---|---|
| 80点以上 | 合格(A) | 量産フル実行可 |
| 70〜79点 | 条件付き合格(B) | 要素別補正後に再評価 |
| 70点未満 | 不合格 | プロンプト修正・再生成 |
| killswitch=true | 即没(KS) | sys.exit(2) でブロック |
| 方法 | 初期費用 | 1枚あたり | 1000枚 | 月1万枚 | 推奨ケース |
|---|---|---|---|---|---|
| ローカル Qwen2.5-VL-7B abliterated | 電気代のみ | ¥0 | ¥0 | ¥0 | 常用・大量 |
| Grok-4.3 (grok_router.py) | ¥0 | 〜¥0.15 | 〜¥150 | 〜¥1,500 | 最高精度・少量 |
| OpenRouter Qwen2.5-VL-32B:free | ¥0 | ¥0 | ¥0 | レート制限あり | 緊急・中量 |
| Venice.ai API | 月額 〜$10〜 | 〜¥0.5〜2 | 〜¥500〜2,000 | 〜¥5,000〜20,000 | GPU非搭載環境 |
| SightEngine API | ¥0 | 〜¥0.05 | 〜¥50 | 〜¥500 | NGフィルタ補助 |
| Replicate uncensored-com | ¥0 | 〜¥2〜10 | 〜¥2,000〜10,000 | 高コスト | テスト・少量 |
RTX 3090 Ti の電力消費は最大350W。Qwen-7B abliterated 採点中の推定消費は約200W。
1枚あたり処理時間 30秒 × 200W = 0.00167kWh × ¥30(電気代) = 約¥0.05/枚
Venice.ai API(最安$0.003〜$0.01/call ≒ ¥0.5〜1.5/枚)と比較すると、月100枚以上ならローカルが圧倒的有利。ComfyUI画像生成の電気代はすでに発生しているので追加電力コストは実質ゼロに近い。
| リスク | 詳細 | 対策 |
|---|---|---|
| abliteration 限界 | テキスト部分のみ除去・画像エンコーダは原版のまま。過激なコンテンツで部分拒否が残ることがある | フォールバック先を複数用意 (score_with_fallback関数) |
| Ollama バージョン | 古いOllamaでは画像入力が不安定。Qwen3-VL系はOllama 0.5以降推奨 | ollama --versionで確認・最新版に更新 |
| VRAM競合 | ComfyUI + Qwen-7B同時起動でOOMエラーの可能性 | ComfyUI を /free で VRAM 解放してから採点実行 |
| モデル更新廃止 | コミュニティモデルは突然削除・移動されることがある | 主要モデルをローカルにキャッシュ保持・代替リスト本章参照 |
| 採点ばらつき | 同一画像でも temperature で結果が変化 | temperature=0.1 固定・3回平均を取る |
| API キー漏洩 | Venice.ai/OpenRouter キーをコードにハードコードするリスク | 環境変数または grok_router.py と同じ管理方式で |