Отключить NSFW-фильтр Stable Diffusion (2026)
NSFW-фильтр Stable Diffusion затемняет невинные изображения. Почему он срабатывает ложно, как отключить его в разных стеках и где на самом деле проходит юридическая граница.

TL;DR
- Что это: блокировка NSFW — это safety checker в Stable Diffusion, который заменяет ваше изображение сплошным чёрным квадратом, когда считает результат откровенным. Это машина ложных срабатываний, а не детектор наготы.
- Быстрое исправление (diffusers): загрузите pipeline с
safety_checker=Noneиrequires_safety_checker=False. Одно изменение — и чёрные квадраты исчезают. - A1111 / ComfyUI: ни один из них не запускает этот фильтр по умолчанию. Всё ещё получаете затемнения там? Это обёртка Colab notebook или ошибка NaN, а не safety checker.
- Чёрное изображение без предупреждения NSFW? Другая ошибка. Это VAE NaN на FP16 GPUs. Запускайте с
--no-half-vae. - Прежде чем отключать это: веса находятся у вас локально, так что решение за вами. Лицензия всё равно запрещает незаконные, несогласованные и CSAM-результаты. Эта граница не сдвигается.
Вы ввели безобидный prompt, дождались рендера и получили чёрный квадрат. Stable Diffusion решил, что ваша картинка NSFW. Вот почему это продолжает происходить, как отключить это на своём компьютере и где реальные ограничения остаются неизменными.
Что означает "NSFW block" в Stable Diffusion?
Это означает, что встроенный проверяющий модуль безопасности оценил сгенерированное изображение как откровенное и заменил его черным изображением еще до того, как вы его увидели. Модель работает нормально. Изображение создается. Затем отдельный классификатор смотрит на пиксели, решает, что они перешли границу, и очищает результат. Обычно вы получаете сообщение вроде "Potential NSFW content was detected in one or more images. A black image will be returned instead."
Вот что важно. Проверяющий модуль находится после генерации, он скорее прикручен сверху, чем встроен в саму модель, поэтому его отключение — это изменение конфигурации, а не переобучение. Он также постоянно срабатывает по ошибке. Классификатор понятия не имеет, что вы запросили. Он видит только пиксели, которые получились.
Ваше чёрное изображение — это фильтр или ошибка NaN?
Прежде чем что-либо отключать, разберитесь, какое именно чёрное изображение у вас получилось, потому что для этих двух случаев нужны совершенно разные исправления. Их постоянно смешивают, а потом «отключают safety checker» для бага, который safety checker никогда не вызывал.
Их различают по двум признакам:
- Блокировка safety-checker: вы получаете предупреждение NSFW в консоли или UI. В сообщении буквально говорится, что обнаружен NSFW-контент. Это исправляется отключением checker.
- Блокировка VAE NaN: вообще нет сообщения NSFW, иногда появляется
NansException: A tensor with all NaNs was produced in VAE. Это математический сбой, а не решение по содержимому. Некоторые GPU спотыкаются на половинной точности (FP16), числа переполняются до NaN, и декодирование выходит чёрным.
| Симптом | Настоящая причина | Исправление |
|---|---|---|
| Чёрное изображение + "NSFW detected" | Ложное срабатывание safety checker | Отключите checker |
| Чёрное изображение, нет сообщения NSFW | FP16 NaN в VAE | Запускайте с --no-half-vae |
| Чёрное только на старых картах (16xx) | Нет нативной поддержки FP16 | Добавьте --no-half --no-half-vae |
| Чёрное только на SDXL | Точность сэмплера | Добавьте --upcast-sampling |

Нет предупреждения NSFW? Тогда перестаньте читать гайды по отключению фильтра. Ваша проблема — точность, и --no-half-vae устраняет подавляющее большинство случаев VAE NaN ценой примерно 5–10 процентов скорости. Отключение safety checker, который вообще не срабатывал, ничего не скрывает и впустую сжигает полдня.
Почему фильтр помечает безобидные промпты?
Потому что он не выявляет наготу. Он измеряет сходство со скрытыми концепциями, и множество безвредных изображений случайно оказываются рядом с ними. Под капотом у проверяющего — CLIP. Он пропускает ваш результат через энкодер изображений ViT-L/14 от CLIP, чтобы получить эмбеддинг, а затем сравнивает этот эмбеддинг с 17 фиксированными векторами, каждый из которых представляет «чувствительную концепцию». Если косинусное сходство с любым из них превышает порог, изображение затемняется.
Эти 17 векторов концепций намеренно скрыты, чтобы никто не мог провести их обратную разработку. Побочный эффект в том, что вы не можете увидеть, на чём именно срабатывает фильтр. Пейзаж, фрактал, портрет, тарелка еды — всё, чей эмбеддинг смещается близко к одному из этих векторов, получает флаг. Разработчики в трекере issues CompVis сообщали, что промпт "star" блокируется. У другого сработало на "riding horse." Один написал, полушутя: "maybe my PC is not safe for work."
Так что это не точное моральное суждение. Это грубая проверка расстояния с фиксированным отсечением, настроенная на чрезмерные блокировки. Для большого числа реальных задач ложные срабатывания намного превосходят истинные.
Как отключить NSFW-фильтр в Stable Diffusion?
Найдите раздел для вашего стека, потому что "Stable Diffusion" означает три или четыре очень разных программных компонента, и только один из них запускает этот фильтр по умолчанию.
Diffusers (Python)
Именно этот вариант действительно поставляется с включенной проверкой. Передайте safety_checker=None при загрузке pipeline и установите requires_safety_checker=False, чтобы убрать последующее предупреждение:
from diffusers import StableDiffusionPipeline
import torch
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
safety_checker=None,
requires_safety_checker=False,
torch_dtype=torch.float16,
)Вы также можете отключить его после создания pipeline с помощью pipe.safety_checker = None. Хотите оставить hook, но никогда ничего не блокировать? Замените его на сквозную функцию, которая сообщает, что ничего не было помечено:
pipe.safety_checker = lambda images, **kwargs: (images, [False] * len(images))Тот же результат, без повторяющегося спама предупреждений в логах. Фактический исходный код safety_checker короткий, если хотите прочитать, что именно он делает.
AUTOMATIC1111 / Forge
Хорошая новость: ни один из них не запускает diffusers safety checker по умолчанию. Если вы получаете NSFW-затемнения именно в A1111 или Forge, обычный виновник — Colab notebook, который снова добавил фильтр через патч, или расширение. Найдите в ячейке notebook safety_checker или функцию check_safety и закомментируйте это. В обычной локальной установке отключать нечего, потому что фильтр никогда не был включен.
ComfyUI
Та же история: по умолчанию фильтра безопасности нет. Стандартный граф ComfyUI не будет затемнять ваши изображения из-за содержимого. Если у вас это происходит, значит его добавил пользовательский node. Удалите этот node или проверьте wrapper, через который вы запускали.
Редактирование model_index.json
Если checkpoint продолжает загружать checker независимо от того, что написано в вашем коде, откройте его model_index.json, установите "requires_safety_checker": false и удалите запись safety_checker. Это полностью останавливает загрузку модуля. Полезно для загруженной модели, которая включает собственную конфигурацию фильтра.
Не хотите сносить всё? Настройте вместо этого.
Полное отключение проверяющего модуля — распространённый ход. Но это не единственный вариант, а для общего или публичного развёртывания — и не самый разумный. Три промежуточных варианта:
- Обнаруживайте и обрабатывайте, а не обнуляйте. Пайплайн может возвращать NSFW-флаг для каждого изображения вместо того, чтобы молча закрашивать всё чёрным. Сохраняйте флаг, убирайте блокировку и самостоятельно маршрутизируйте или логируйте помеченные изображения.
- Замените на Safe Stable Diffusion. Вместо чёрного квадрата он направляет генерацию к ближайшему неявно-эротическому изображению. Вы сохраняете пригодный результат и защитный барьер.
- Поднимите порог, не удаляйте его. Если вы можете редактировать проверяющий модуль, смягчение отсечения уменьшит число ложных срабатываний, при этом всё ещё отлавливая очевидные случаи. Больше работы, но гораздо меньше сюрпризов, чем при подходе «всё или ничего».
Для сольного проекта на собственной GPU safety_checker=None — нормально. Для всего, к чему могут получить доступ пользователи, сохраняйте защитный барьер. Публичный endpoint без фильтра — это риск, о котором вы пожалеете.
Законно ли вообще отключать safety checker?
Отключать его разрешено. Реальные ограничения касаются того, что вы генерируете при отключённом фильтре, и они не исчезают вместе с фильтром. Stable Diffusion поставляется под лицензией CreativeML Open RAIL-M. Она предоставляет широкие права, не заявляет никаких прав на ваши результаты и возлагает ответственность на вас. Она также содержит основанные на способах использования ограничения с реальными последствиями.
Лицензия прямо запрещает использовать модель для создания или распространения незаконного или вредоносного контента. Никаких CSAM. Никаких интимных изображений без согласия. Никаких дипфейков реальных людей, созданных для обмана или причинения вреда. Это не настройки фильтра. Это законы в большей части мира, и «safety checker был отключён» нигде не является оправданием.
Так что честная формулировка такая. На принадлежащем вам оборудовании, запуская скачанные вами веса, вы вправе настраивать собственные инструменты, и отключение чрезмерно рьяного фильтра с ложными срабатываниями для реальной работы — разумно. Генерация незаконного контента — нет, с фильтром или без него. Держите эти две идеи отдельно, и вы будете на твёрдой почве.
Что, если вы используете hosted API вместо локального запуска?
Тогда фильтр не ваш, и отключить его вы не можете — в этом и вся разница. Когда вы вызываете hosted image endpoint, провайдер запускает модель и применяет собственную content policy на стороне сервера. Нет никакого safety_checker=None, который можно передать. Вы либо принимаете их правила, либо запускаете всё локально.
Этот компромисс стоит назвать прямо. Локальный Stable Diffusion даёт вам полный контроль, включая safety checker, ценой GPU, настройки драйверов и собственной модерации. Hosted API вроде image endpoints от Velokey избавляет от настройки и даёт один ключ для разных моделей, но вы находитесь внутри content policy провайдера, а не за её пределами. Надеетесь, что gateway позволит обойти правила контента? Не позволит, а любой, кто утверждает обратное, — это будущая проблема с compliance. Выбирайте hosted ради удобства и масштабирования, локальный запуск — ради контроля. Если вы в целом сравниваете image APIs, наш разбор лимитов изображений ChatGPT и заметки по Qwen-Image 2.0 объясняют реальные costs and caps hosted generation, а Seedream 5.0 Pro рассматривает более продвинутый вариант. Столкнулись вместо этого с совершенно другой AI error? Наш фикс ChatGPT error in message stream — родственный материал к этому руководству.
Часто задаваемые вопросы
Как удалить NSFW-фильтр в Stable Diffusion?
Зависит от вашего стека. В библиотеке diffusers загрузите пайплайн с safety_checker=None и requires_safety_checker=False. В AUTOMATIC1111, Forge и ComfyUI обычно нечего удалять, поскольку по умолчанию они не запускают этот проверяющий модуль. Если у вас всё равно появляются чёрные изображения, значит фильтр снова добавила обёртка ноутбука или пользовательская нода.
Почему Stable Diffusion возвращает чёрное изображение для обычного промпта?
Есть две возможные причины. Либо проверяющий модуль безопасности ошибочно пометил ваше изображение как NSFW, и вы увидите предупреждение NSFW, либо VAE выдал NaN на GPU с половинной точностью, без предупреждения и иногда с NansException. Первое исправляется отключением проверяющего модуля, второе — запуском с --no-half-vae.
Есть ли в ComfyUI NSFW-фильтр?
Нет, по умолчанию нет. Стандартная установка ComfyUI не будет блокировать изображения из-за содержимого. Если у вас появляются чёрные квадраты с сообщением NSFW, значит проверяющий модуль безопасности добавила пользовательская нода или внешняя обёртка, которую вы запускаете. Удалите эту ноду, и блокировка прекратится.
Почему мой безобидный промпт был помечен как NSFW?
Потому что проверяющий модуль измеряет визуальное сходство со скрытыми векторами концептов, а не фактическую наготу. Безобидные изображения иногда случайно оказываются близко к этим векторам. Среди известных ложных срабатываний — такие спокойные промпты, как "star" и "riding horse." Фильтр намеренно блокирует с запасом, поэтому отметки безвредного контента встречаются часто.
Нарушает ли отключение проверяющего модуля безопасности лицензию?
Нет. Лицензия CreativeML Open RAIL-M позволяет настраивать ваши локальные инструменты, включая отключение проверяющего модуля. Запрещает она именно результат: незаконный, несогласованный или вредоносный контент остаётся запрещённым независимо от того, включён фильтр или выключен. Вы отвечаете за то, что генерируете, а не за состояние проверяющего модуля.
Как убрать предупреждения safety_checker из логов?
Установите requires_safety_checker=False при загрузке пайплайна вместе с safety_checker=None. Предпочитаете оставить атрибут заданным? Замените его фиктивным модулем, который возвращает изображения и список флагов, состоящий только из False. Оба варианта отключают повторяющееся предупреждение, которое diffusers выводит при каждом вызове.


