Stable Diffusion NSFW 필터 비활성화 (2026)
Stable Diffusion의 NSFW 필터가 무해한 이미지를 검게 처리합니다. 왜 오탐이 발생하는지, 스택별로 비활성화하는 방법, 그리고 실제 법적 경계가 어디인지.

TL;DR
- 정체: NSFW 차단은 출력물이 노골적이라고 판단될 때 Stable Diffusion의 safety checker가 이미지를 단색 검은색 정사각형으로 바꿔버리는 것입니다. 이는 노출 감지기가 아니라 오탐 기계에 가깝습니다.
- 빠른 해결(diffusers):
safety_checker=None및requires_safety_checker=False로 pipeline을 로드하세요. 한 가지만 바꾸면 검은색 정사각형이 멈춥니다. - A1111 / ComfyUI: 둘 다 기본적으로 해당 필터를 실행하지 않습니다. 그런데도 거기서 화면이 검게 나온다면? safety checker가 아니라 Colab notebook wrapper 또는 NaN 오류입니다.
- NSFW 경고 없이 검은 이미지가 나오나요? 다른 버그입니다. FP16 GPUs에서 발생하는 VAE NaN입니다.
--no-half-vae로 실행하세요. - 비활성화하기 전에: 가중치를 로컬에서 소유하고 있으므로 선택은 당신의 몫입니다. 라이선스는 여전히 불법, 비동의, CSAM 출력을 금지합니다. 그 선은 바뀌지 않습니다.
무해한 prompt를 입력하고, 렌더링을 기다렸는데, 검은색 정사각형이 나왔습니다. Stable Diffusion이 당신의 그림을 NSFW라고 판단한 것입니다. 왜 이런 일이 계속 발생하는지, 자신의 컴퓨터에서 이를 끄는 방법, 그리고 실제 한계가 어디에 그대로 남아 있는지 설명합니다.
Stable Diffusion에서 "NSFW block"은 무엇을 의미하나요?
이는 내장된 안전성 검사기가 생성된 이미지를 노골적인 것으로 평가했고, 당신이 보기도 전에 검은 이미지로 대체했다는 뜻입니다. 모델은 정상적으로 실행됩니다. 이미지는 생성됩니다. 그런 다음 별도의 분류기가 픽셀을 살펴보고, 선을 넘었다고 판단하면 결과를 비워 버립니다. 보통 "Potential NSFW content was detected in one or more images. A black image will be returned instead."와 같은 메시지가 표시됩니다.
중요한 부분은 이렇습니다. 검사기는 생성 이후에 위치하며, 모델 안에 엮여 있는 것이 아니라 덧붙여진 것이기 때문에, 이를 비활성화하는 것은 재학습이 아니라 설정 변경입니다. 또한 실수로 작동하는 경우도 매우 잦습니다. 분류기는 당신이 무엇을 요청했는지 전혀 모릅니다. 오직 출력된 픽셀만 볼 뿐입니다.
검은 이미지가 필터 때문인가요, 아니면 NaN 오류인가요?
무언가를 비활성화하기 전에, 실제로 어떤 검은 이미지가 나온 것인지부터 파악하세요. 두 경우는 해결 방법이 완전히 다르기 때문입니다. 사람들은 이 둘을 계속 혼동하고, 결국 safety checker가 원인이 아닌 버그에 대해 "disable the safety checker"를 해버립니다.
두 가지 특징으로 구분할 수 있습니다:
- Safety-checker 차단: 콘솔이나 UI에 NSFW 경고가 표시됩니다. 메시지에 말 그대로 NSFW 콘텐츠가 감지되었다고 나옵니다. 이 경우는 checker를 끄면 해결됩니다.
- VAE NaN 차단: NSFW 메시지가 전혀 없고, 때로는
NansException: A tensor with all NaNs was produced in VAE가 표시됩니다. 이것은 콘텐츠 판단이 아니라 수학적 실패입니다. 일부 GPU는 half-precision (FP16)에서 문제가 생기며, 숫자가 오버플로되어 NaN이 되고, 디코딩 결과가 검게 나옵니다.
| 증상 | 실제 원인 | 해결 방법 |
|---|---|---|
| 검은 이미지 + "NSFW detected" | Safety checker 오탐 | checker 비활성화 |
| 검은 이미지, NSFW 메시지 없음 | VAE의 FP16 NaN | --no-half-vae로 실행 |
| 오래된 카드(16xx)에서만 검게 나옴 | 네이티브 FP16 지원 없음 | --no-half --no-half-vae 추가 |
| SDXL에서만 검게 나옴 | Sampler precision | --upcast-sampling 추가 |

NSFW 경고가 없나요? 그렇다면 필터 비활성화 가이드는 그만 읽으세요. 문제는 precision이며, --no-half-vae는 대다수의 VAE NaN 사례를 해결합니다. 속도 비용은 대략 5에서 10 percent 정도입니다. 애초에 트리거되지도 않은 safety checker를 끄는 것은 아무것도 숨기지 못하고 오후 시간만 날릴 뿐입니다.
필터가 무해한 프롬프트를 왜 표시하나요?
그것은 나체를 감지하지 않기 때문입니다. 숨겨진 개념과의 유사도를 측정하며, 많은 무해한 이미지가 우연히 그 근처에 놓입니다. 내부적으로 검사기는 CLIP입니다. 출력물을 CLIP의 ViT-L/14 이미지 인코더에 통과시켜 임베딩을 얻은 다음, 그 임베딩을 17개의 고정 벡터와 비교합니다. 각 벡터는 하나의 "민감한 개념"을 나타냅니다. 그중 하나라도 코사인 유사도가 임계값을 넘으면 이미지가 검게 처리됩니다.
그 17개의 개념 벡터는 일부러 숨겨져 있어서, 아무도 그것을 역공학할 수 없습니다. 그 부작용으로 무엇에 걸리는지 알 수 없습니다. 풍경, 프랙털, 초상화, 음식 한 접시 등 임베딩이 그 벡터 중 하나에 가까이 이동하는 것은 무엇이든 표시됩니다. CompVis issue tracker의 개발자들은 "star" 프롬프트가 차단되었다고 보고했습니다. 또 다른 사용자는 "riding horse"로 표시되었습니다. 한 사람은 반쯤 농담으로 "maybe my PC is not safe for work."라고 썼습니다.
따라서 이것은 정밀한 도덕적 판단이 아닙니다. 고정된 기준값을 가진 투박한 거리 검사이며, 과도하게 차단하도록 조정되어 있습니다. 많은 실제 작업에서는 오탐이 실제 양성보다 훨씬 더 많습니다.
Stable Diffusion에서 NSFW 필터를 비활성화하는 방법은?
사용 중인 스택에 해당하는 섹션을 찾으세요. "Stable Diffusion"은 서로 매우 다른 소프트웨어 세세 가지 또는 네 가지를 의미하며, 기본적으로 이 필터를 실행하는 것은 그중 하나뿐입니다.
Diffusers (Python)
실제로 체커가 켜진 상태로 제공되는 것이 이것입니다. 파이프라인을 로드할 때 safety_checker=None을 전달하고, 이어지는 경고를 없애려면 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,
)파이프라인이 생성된 뒤 pipe.safety_checker = None으로 바꿀 수도 있습니다. 훅은 유지하되 절대 차단하지 않게 하고 싶나요? 아무것도 플래그되지 않았다고 보고하는 패스스루로 교체하세요.
pipe.safety_checker = lambda images, **kwargs: (images, [False] * len(images))결과는 같고, 로그에 반복되는 경고 스팸도 없습니다. 정확히 무엇을 하는지 읽어보고 싶다면 실제 safety_checker source는 짧습니다.
AUTOMATIC1111 / Forge
좋은 소식: 둘 다 기본적으로 diffusers safety checker를 실행하지 않습니다. A1111 또는 Forge에서 특히 NSFW 블랙아웃이 발생한다면, 일반적인 원인은 필터를 다시 패치해 넣은 Colab 노트북이거나 확장 프로그램입니다. 노트북 셀에서 safety_checker 또는 check_safety 함수를 검색해 주석 처리하세요. 일반적인 로컬 설치에서는 애초에 켜져 있던 적이 없으므로 비활성화할 것이 없습니다.
ComfyUI
마찬가지입니다. 기본적으로 safety 필터가 없습니다. 기본 ComfyUI 그래프는 콘텐츠 때문에 이미지를 검게 처리하지 않습니다. 그런 일이 발생한다면 커스텀 노드가 그것을 추가한 것입니다. 해당 노드를 제거하거나, 실행할 때 사용한 래퍼를 확인하세요.
Editing model_index.json
체크포인트가 코드에서 무엇을 지정하든 계속 체커를 로드한다면, 해당 model_index.json을 열어 "requires_safety_checker": false로 설정하고 safety_checker 항목을 제거하세요. 그러면 모듈이 아예 로드되지 않습니다. 자체 필터 설정을 번들로 포함한 다운로드 모델에 유용합니다.
완전히 없애고 싶지 않다면? 대신 조정하세요.
검사기를 아예 비활성화하는 것이 흔한 방법입니다. 하지만 그것이 유일한 방법은 아니며, 공유 또는 공개 배포 환경에서는 현명한 방법도 아닙니다. 세 가지 절충안이 있습니다:
- 비워 버리지 말고 감지하고 처리하세요. 파이프라인은 이미지를 조용히 검게 칠하는 대신 이미지별 NSFW 플래그를 반환할 수 있습니다. 플래그는 유지하고, 차단은 제거한 뒤, 플래그가 지정된 이미지를 직접 라우팅하거나 로그로 남기세요.
- Safe Stable Diffusion으로 교체하세요. 검은 사각형 대신, 생성 결과를 가장 가까운 비명시적 이미지 쪽으로 유도합니다. 사용 가능한 출력과 안전장치를 모두 유지할 수 있습니다.
- 제거하지 말고 임계값을 높이세요. 검사기를 수정할 수 있다면, 컷오프를 완화하면 명백한 항목은 계속 잡아내면서 오탐을 줄일 수 있습니다. 작업은 더 필요하지만, 전부 아니면 전무 방식보다 예기치 못한 일이 훨씬 적습니다.
자신의 GPU에서 하는 개인 프로젝트라면 safety_checker=None도 괜찮습니다. 사용자가 접근할 수 있는 것이라면 안전장치를 유지하세요. 필터가 없는 공개 엔드포인트는 나중에 후회하게 될 책임 문제가 됩니다.
안전성 검사기를 비활성화하는 것이 애초에 합법인가요?
끄는 것은 허용됩니다. 진짜 한계는 그것을 끈 상태에서 무엇을 생성하느냐에 있으며, 그 한계는 필터가 사라진다고 없어지지 않습니다. Stable Diffusion은 CreativeML Open RAIL-M license에 따라 배포됩니다. 이 라이선스는 폭넓은 권리를 부여하고, 출력물에 대해 아무런 권리를 주장하지 않으며, 책임은 사용자에게 둡니다. 또한 실질적인 효력이 있는 사용 기반 제한도 포함합니다.
이 라이선스는 모델을 사용해 불법적이거나 유해한 콘텐츠를 제작하거나 공유하는 것을 명시적으로 금지합니다. CSAM은 안 됩니다. 동의 없는 사적 이미지도 안 됩니다. 실제 인물을 속이거나 해를 끼칠 목적으로 만든 딥페이크도 안 됩니다. 이것들은 필터 설정이 아닙니다. 세계 대부분의 지역에서 법이며, "안전성 검사기가 꺼져 있었다"는 어디에서도 변명이 되지 않습니다.
그러니 솔직하게 말하면 이렇습니다. 자신이 소유한 하드웨어에서, 다운로드한 가중치를 실행한다면, 자신의 도구를 직접 구성할 수 있으며, 실제 작업을 위해 지나치게 민감한 오탐 필터를 끄는 것은 합리적입니다. 불법 콘텐츠를 생성하는 것은 필터가 있든 없든 합리적이지 않습니다. 이 두 가지를 분리해서 생각하면 안전한 입장에 설 수 있습니다.
로컬이 아니라 호스팅 API를 사용 중이라면?
그렇다면 필터는 당신이 비활성화할 수 있는 것이 아니며, 그게 핵심적인 차이입니다. 호스팅 이미지 엔드포인트를 호출하면, 제공업체가 모델을 실행하고 서버 측에서 자체 콘텐츠 정책을 적용합니다. 전달할 수 있는 safety_checker=None 같은 것은 없습니다. 그들의 규칙을 받아들이거나, 로컬에서 실행해야 합니다.
이 선택의 대가는 분명히 짚고 넘어갈 만합니다. 로컬 Stable Diffusion은 GPU, 드라이버 설정, 그리고 자체 모더레이션이라는 비용을 치르는 대신, 안전 검사기를 포함해 완전한 제어권을 제공합니다. Velokey의 이미지 엔드포인트 같은 호스팅 API는 설정을 건너뛰고 여러 모델에 걸쳐 하나의 키를 제공하지만, 당신은 제공업체의 콘텐츠 정책 안에 있는 것이지 그 밖에 있는 것이 아닙니다. 게이트웨이가 콘텐츠 규칙을 우회하게 해주길 바라나요? 그렇지 않을 것이며, 가능하다고 주장하는 곳은 언제든 컴플라이언스 문제가 터질 수 있습니다. 편의성과 확장성을 원하면 호스팅을, 제어권을 원하면 로컬을 선택하세요. 이미지 API 전반을 검토 중이라면, 호스팅 생성의 실제 비용과 한도를 다룬 저희 ChatGPT image limits breakdown과 Qwen-Image 2.0 notes를 참고할 수 있으며, Seedream 5.0 Pro는 더 고급 옵션을 다룹니다. 대신 완전히 다른 AI 오류를 겪고 있나요? 저희 ChatGPT error in message stream fix는 이 가이드와 짝이 되는 글입니다.
자주 묻는 질문
Stable Diffusion에서 NSFW 필터를 어떻게 제거하나요?
사용 중인 스택에 따라 다릅니다. diffusers 라이브러리에서는 safety_checker=None 및 requires_safety_checker=False로 파이프라인을 로드하세요. AUTOMATIC1111, Forge, ComfyUI에서는 기본적으로 해당 체커를 실행하지 않으므로 보통 제거할 것이 없습니다. 그래도 여전히 검은 화면이 나온다면, 노트북 래퍼나 커스텀 노드가 필터를 다시 추가한 것입니다.
정상적인 프롬프트에서 Stable Diffusion이 검은 이미지를 반환하는 이유는 무엇인가요?
가능한 이유는 두 가지입니다. 안전 체커가 이미지를 NSFW로 오탐했으며 NSFW 경고가 표시되는 경우이거나, 반정밀도 GPU에서 VAE가 NaN을 생성했지만 경고는 없고 때때로 NansException만 발생하는 경우입니다. 첫 번째는 체커를 비활성화하면 해결되고, 두 번째는 --no-half-vae로 실행하면 해결됩니다.
ComfyUI에는 NSFW 필터가 있나요?
아니요, 기본적으로는 없습니다. 기본 ComfyUI 설치는 콘텐츠 때문에 이미지를 차단하지 않습니다. 사용 중인 환경에서 NSFW 메시지와 함께 검은 사각형이 생성된다면, 실행 중인 커스텀 노드나 외부 래퍼가 안전 체커를 추가한 것입니다. 해당 노드를 제거하면 차단이 멈춥니다.
무해한 프롬프트가 NSFW로 플래그된 이유는 무엇인가요?
체커는 실제 노출이 아니라 숨겨진 개념 벡터와의 시각적 유사성을 측정하기 때문입니다. 무해한 이미지가 우연히 그 벡터에 가깝게 위치하는 경우가 있습니다. 보고된 오탐 사례에는 "star"와 "riding horse"처럼 순한 프롬프트도 포함됩니다. 이 필터는 설계상 과도하게 차단하므로, 정상 콘텐츠가 플래그되는 일은 흔합니다.
안전 체커를 비활성화하는 것이 라이선스 위반인가요?
아니요. CreativeML Open RAIL-M 라이선스는 체커를 끄는 것을 포함해 로컬 도구 설정을 구성할 수 있도록 허용합니다. 다만 금지하는 것은 출력물입니다. 필터가 켜져 있든 꺼져 있든, 불법적이거나 비동의적이거나 유해한 콘텐츠는 계속 금지됩니다. 책임은 체커의 상태가 아니라 생성한 내용에 있습니다.
로그에서 safety_checker 경고를 어떻게 중지하나요?
파이프라인을 로드할 때 safety_checker=None과 함께 requires_safety_checker=False를 설정하세요. 속성을 계속 설정된 상태로 유지하고 싶으신가요? 이미지를 반환하고 모두 False인 플래그 목록을 반환하는 더미로 교체하세요. 두 방법 모두 diffusers가 호출할 때마다 출력하는 반복 경고를 없앱니다.


