🔐로그인하면 문서 작성, 프로젝트 게시, ZIP 기반 버전 업로드, 브랜치 생성 기능을 사용할 수 있습니다. 로그인하러 가기
비교 대상 선택
추가 0줄 삭제 1줄 변경 0줄 동일 110줄
r1 파일 가져오기: reference-nsfwjs-model-compatibility.v9.1.0.md
2026-04-17 19:00

#참고자료 #NSFWJS 커스텀 모델 설치 가이드

빠른 판정

질문바로 확인할 항목결과
모델 파일만 바꾸면 되나?출력 클래스 5종 유지 여부유지되면 가능성이 높음
URL만 바꾸면 되나?model.json 공개 경로, weight shard 경로경로가 맞아야 함
graph가 필요한가?모델이 GraphModel인지 확인맞으면 필요
size도 필요한가?입력이 224 외 크기인지 확인모델에 따라 필요
UI 수정도 필요한가?클래스 체계/threshold 변경 여부다르면 필요

모델별 기본 호환성

모델load 방식권장 type입력 크기드롭인 교체성메모
MobileNetV2이름 또는 URLnull224높음가장 가벼운 축
MobileNetV2Mid이름 또는 URLgraph문서상 mid graph 취급매우 높음9.1.0 기본값
InceptionV3이름 또는 URLnull299보통더 무거울 수 있음
커스텀 LayersModelURLnull모델별 상이낮음~보통출력 클래스 확인 필요
커스텀 GraphModelURLgraph모델별 상이낮음~보통TFJS 변환 방식 확인 필요

현재 9.1.0 코드가 기대하는 출력

현재 T2Editor 9.1.0은 예측 결과 배열에서 className 값을 소문자로 읽고 아래 키를 찾습니다.

용도누락 시 영향
pornexplicitScore 계산unsafe 판정 약화
hentaiexplicitScore 계산unsafe 판정 약화
sexysuspect/unsafe 보조suspect 판정 약화
neutralsafeScore 계산safe 판정 약화
drawingsafeScore 계산드로잉 안전 판정 약화
노트

즉, 모델이 성공적으로 로드되더라도 className 체계가 다르면 현재 UI에 맞는 의미로 결과를 해석할 수 없습니다.

호환되지 않는 대표 사례

  • 클래스 이름이 숫자 인덱스만 있는 모델
  • safe/unsafe 2분류만 반환하는 모델
  • 멀티라벨이지만 Porn/Hentai/Sexy/Neutral/Drawing 체계가 아닌 모델
  • 이미지 전처리를 별도로 요구하는 모델
  • 입력 크기와 색공간이 크게 다른 모델

운영 체크리스트

주의

다음 네 항목을 모두 만족하기 전에는 운영 반영을 권장하지 않습니다.

  1. model.json.bin 파일이 모두 HTTP 200으로 열림
  2. type 설정이 실제 모델 형식과 맞음
  3. 클래스 이름이 현재 판정 코드와 맞음
  4. 샘플 이미지 세트로 threshold를 점검함
샘플 테스트 최소 세트
  • 일반 인물 사진
  • 풍경/사물 사진
  • 애니/일러스트
  • 경계 사례
  • 실제 차단 대상 사례

차기 개선 후보

  • T2_NSFW_BROWSER_MODEL_SIZE 전역 설정 추가
  • class map 설정 추가
  • 모델별 threshold preset 추가
  • IndexedDB 캐시 정책 선택 기능 추가

수정 요약

  • 커스텀 모델 교체 시의 호환 기준을 표 중심으로 정리했습니다.
r2 고아링크삭제
2026-04-17 19:28

#참고자료 #NSFWJS

빠른 판정

질문바로 확인할 항목결과
모델 파일만 바꾸면 되나?출력 클래스 5종 유지 여부유지되면 가능성이 높음
URL만 바꾸면 되나?model.json 공개 경로, weight shard 경로경로가 맞아야 함
graph가 필요한가?모델이 GraphModel인지 확인맞으면 필요
size도 필요한가?입력이 224 외 크기인지 확인모델에 따라 필요
UI 수정도 필요한가?클래스 체계/threshold 변경 여부다르면 필요

모델별 기본 호환성

모델load 방식권장 type입력 크기드롭인 교체성메모
MobileNetV2이름 또는 URLnull224높음가장 가벼운 축
MobileNetV2Mid이름 또는 URLgraph문서상 mid graph 취급매우 높음9.1.0 기본값
InceptionV3이름 또는 URLnull299보통더 무거울 수 있음
커스텀 LayersModelURLnull모델별 상이낮음~보통출력 클래스 확인 필요
커스텀 GraphModelURLgraph모델별 상이낮음~보통TFJS 변환 방식 확인 필요

현재 9.1.0 코드가 기대하는 출력

현재 T2Editor 9.1.0은 예측 결과 배열에서 className 값을 소문자로 읽고 아래 키를 찾습니다.

용도누락 시 영향
pornexplicitScore 계산unsafe 판정 약화
hentaiexplicitScore 계산unsafe 판정 약화
sexysuspect/unsafe 보조suspect 판정 약화
neutralsafeScore 계산safe 판정 약화
drawingsafeScore 계산드로잉 안전 판정 약화
노트

즉, 모델이 성공적으로 로드되더라도 className 체계가 다르면 현재 UI에 맞는 의미로 결과를 해석할 수 없습니다.

호환되지 않는 대표 사례

  • 클래스 이름이 숫자 인덱스만 있는 모델
  • safe/unsafe 2분류만 반환하는 모델
  • 멀티라벨이지만 Porn/Hentai/Sexy/Neutral/Drawing 체계가 아닌 모델
  • 이미지 전처리를 별도로 요구하는 모델
  • 입력 크기와 색공간이 크게 다른 모델

운영 체크리스트

주의

다음 네 항목을 모두 만족하기 전에는 운영 반영을 권장하지 않습니다.

  1. model.json.bin 파일이 모두 HTTP 200으로 열림
  2. type 설정이 실제 모델 형식과 맞음
  3. 클래스 이름이 현재 판정 코드와 맞음
  4. 샘플 이미지 세트로 threshold를 점검함
샘플 테스트 최소 세트
  • 일반 인물 사진
  • 풍경/사물 사진
  • 애니/일러스트
  • 경계 사례
  • 실제 차단 대상 사례

차기 개선 후보

  • T2_NSFW_BROWSER_MODEL_SIZE 전역 설정 추가
  • class map 설정 추가
  • 모델별 threshold preset 추가
  • IndexedDB 캐시 정책 선택 기능 추가

수정 요약

  • 커스텀 모델 교체 시의 호환 기준을 표 중심으로 정리했습니다.
라인 단위 비교
이전 새 버전
1 --- 1 ---
2 title: 참고: NSFWJS 모델 호환성 매트릭스 2 title: 참고: NSFWJS 모델 호환성 매트릭스
3 document_id: reference-nsfwjs-model-compatibility 3 document_id: reference-nsfwjs-model-compatibility
4 slug: reference-nsfwjs-model-compatibility 4 slug: reference-nsfwjs-model-compatibility
5 target_editor_version: 9.1.0 5 target_editor_version: 9.1.0
6 document_type: reference 6 document_type: reference
7 doc_type: reference 7 doc_type: reference
8 target_readers: [웹마스터, 개발자, AI agent] 8 target_readers: [웹마스터, 개발자, AI agent]
9 importance: High 9 importance: High
10 dependency: Medium 10 dependency: Medium
11 core_type: Reference 11 core_type: Reference
12 stability: [Stable Anchor, Version-Bound] 12 stability: [Stable Anchor, Version-Bound]
13 stable_anchor: [model.json 기반 배포, className 기반 판정] 13 stable_anchor: [model.json 기반 배포, className 기반 판정]
14 version_bound: [9.1.0의 buildAssessment 구현, T2_NSFW_BROWSER_MODEL_TYPE 설정] 14 version_bound: [9.1.0의 buildAssessment 구현, T2_NSFW_BROWSER_MODEL_TYPE 설정]
15 related_docs: [guide-nsfwjs-custom-model-installation, guide-nsfwjs-overview, config-nsfwjs-runtime-settings] 15 related_docs: [guide-nsfwjs-custom-model-installation, guide-nsfwjs-overview, config-nsfwjs-runtime-settings]
16 related_files: [9.1.0/t2editor/config/nsfw_api_browser.js] 16 related_files: [9.1.0/t2editor/config/nsfw_api_browser.js]
17 related_functions: [buildAssessment, classify] 17 related_functions: [buildAssessment, classify]
18 related_classes_modules: [NSFWFilterAPI] 18 related_classes_modules: [NSFWFilterAPI]
19 related_features: [모델 교체, 자체 호스팅, 분류 결과 해석] 19 related_features: [모델 교체, 자체 호스팅, 분류 결과 해석]
20 related_ui: [NSFW 상태 배지] 20 related_ui: [NSFW 상태 배지]
21 change_risk: 호환성 판단을 잘못하면 로딩은 성공하지만 실제 판정 의미가 달라질 수 있습니다. 21 change_risk: 호환성 판단을 잘못하면 로딩은 성공하지만 실제 판정 의미가 달라질 수 있습니다.
22 reading_order: 32 22 reading_order: 32
23 summary: T2Editor 9.1.0에서 NSFWJS 모델 교체 시 확인해야 하는 입력 크기, 모델 타입, 출력 클래스, 운영 리스크를 정리한 참고 문서입니다. 23 summary: T2Editor 9.1.0에서 NSFWJS 모델 교체 시 확인해야 하는 입력 크기, 모델 타입, 출력 클래스, 운영 리스크를 정리한 참고 문서입니다.
24 description: NSFWJS 기본 모델과 커스텀 TFJS 모델을 T2Editor 9.1.0에 연결할 때의 호환 조건을 표 중심으로 정리한 참고 문서입니다. 24 description: NSFWJS 기본 모델과 커스텀 TFJS 모델을 T2Editor 9.1.0에 연결할 때의 호환 조건을 표 중심으로 정리한 참고 문서입니다.
25 tags: [NSFWJS, compatibility, reference, T2Editor] 25 tags: [NSFWJS, compatibility, reference, T2Editor]
26 version_tag: 9.1.0 26 version_tag: 9.1.0
27 maintenance_difficulty: Medium 27 maintenance_difficulty: Medium
28 test_requirement: High 28 test_requirement: High
29 ai_agent_risk: Medium 29 ai_agent_risk: Medium
30 source_basis: [현재 코드 분석 기반, NSFWJS 공식 README 기반, TensorFlow.js 공식 문서 기반] 30 source_basis: [현재 코드 분석 기반, NSFWJS 공식 README 기반, TensorFlow.js 공식 문서 기반]
31 beginner_section_included: false 31 beginner_section_included: false
32 webmaster_section_included: true 32 webmaster_section_included: true
33 developer_section_included: true 33 developer_section_included: true
34 --- 34 ---
35   35  
36 [목차] 36 [목차]
37   37  
38 [[분류:참고자료]] 38 [[분류:참고자료]]
39 [[분류:NSFWJS]] 39 [[분류:NSFWJS]]
40 [[guide-nsfwjs-custom-model-installation|커스텀 모델 설치 가이드]]  
41   40  
42 = 빠른 판정 = 41 = 빠른 판정 =
43   42  
44 ||= 질문 ||= 바로 확인할 항목 ||= 결과 || 43 ||= 질문 ||= 바로 확인할 항목 ||= 결과 ||
45 || 모델 파일만 바꾸면 되나? || 출력 클래스 5종 유지 여부 || 유지되면 가능성이 높음 || 44 || 모델 파일만 바꾸면 되나? || 출력 클래스 5종 유지 여부 || 유지되면 가능성이 높음 ||
46 || URL만 바꾸면 되나? || `model.json` 공개 경로, weight shard 경로 || 경로가 맞아야 함 || 45 || URL만 바꾸면 되나? || `model.json` 공개 경로, weight shard 경로 || 경로가 맞아야 함 ||
47 || `graph`가 필요한가? || 모델이 GraphModel인지 확인 || 맞으면 필요 || 46 || `graph`가 필요한가? || 모델이 GraphModel인지 확인 || 맞으면 필요 ||
48 || `size`도 필요한가? || 입력이 224 외 크기인지 확인 || 모델에 따라 필요 || 47 || `size`도 필요한가? || 입력이 224 외 크기인지 확인 || 모델에 따라 필요 ||
49 || UI 수정도 필요한가? || 클래스 체계/threshold 변경 여부 || 다르면 필요 || 48 || UI 수정도 필요한가? || 클래스 체계/threshold 변경 여부 || 다르면 필요 ||
50   49  
51 = 모델별 기본 호환성 = 50 = 모델별 기본 호환성 =
52   51  
53 ||= 모델 ||= load 방식 ||= 권장 type ||= 입력 크기 ||= 드롭인 교체성 ||= 메모 || 52 ||= 모델 ||= load 방식 ||= 권장 type ||= 입력 크기 ||= 드롭인 교체성 ||= 메모 ||
54 || MobileNetV2 || 이름 또는 URL || null || 224 || 높음 || 가장 가벼운 축 || 53 || MobileNetV2 || 이름 또는 URL || null || 224 || 높음 || 가장 가벼운 축 ||
55 || MobileNetV2Mid || 이름 또는 URL || `graph` || 문서상 mid graph 취급 || 매우 높음 || 9.1.0 기본값 || 54 || MobileNetV2Mid || 이름 또는 URL || `graph` || 문서상 mid graph 취급 || 매우 높음 || 9.1.0 기본값 ||
56 || InceptionV3 || 이름 또는 URL || null || 299 || 보통 || 더 무거울 수 있음 || 55 || InceptionV3 || 이름 또는 URL || null || 299 || 보통 || 더 무거울 수 있음 ||
57 || 커스텀 LayersModel || URL || null || 모델별 상이 || 낮음~보통 || 출력 클래스 확인 필요 || 56 || 커스텀 LayersModel || URL || null || 모델별 상이 || 낮음~보통 || 출력 클래스 확인 필요 ||
58 || 커스텀 GraphModel || URL || `graph` || 모델별 상이 || 낮음~보통 || TFJS 변환 방식 확인 필요 || 57 || 커스텀 GraphModel || URL || `graph` || 모델별 상이 || 낮음~보통 || TFJS 변환 방식 확인 필요 ||
59   58  
60 = 현재 9.1.0 코드가 기대하는 출력 = 59 = 현재 9.1.0 코드가 기대하는 출력 =
61   60  
62 현재 T2Editor 9.1.0은 예측 결과 배열에서 `className` 값을 소문자로 읽고 아래 키를 찾습니다. 61 현재 T2Editor 9.1.0은 예측 결과 배열에서 `className` 값을 소문자로 읽고 아래 키를 찾습니다.
63   62  
64 ||= 키 ||= 용도 ||= 누락 시 영향 || 63 ||= 키 ||= 용도 ||= 누락 시 영향 ||
65 || porn || explicitScore 계산 || unsafe 판정 약화 || 64 || porn || explicitScore 계산 || unsafe 판정 약화 ||
66 || hentai || explicitScore 계산 || unsafe 판정 약화 || 65 || hentai || explicitScore 계산 || unsafe 판정 약화 ||
67 || sexy || suspect/unsafe 보조 || suspect 판정 약화 || 66 || sexy || suspect/unsafe 보조 || suspect 판정 약화 ||
68 || neutral || safeScore 계산 || safe 판정 약화 || 67 || neutral || safeScore 계산 || safe 판정 약화 ||
69 || drawing || safeScore 계산 || 드로잉 안전 판정 약화 || 68 || drawing || safeScore 계산 || 드로잉 안전 판정 약화 ||
70   69  
71 [note] 70 [note]
72 즉, 모델이 성공적으로 로드되더라도 `className` 체계가 다르면 현재 UI에 맞는 의미로 결과를 해석할 수 없습니다. 71 즉, 모델이 성공적으로 로드되더라도 `className` 체계가 다르면 현재 UI에 맞는 의미로 결과를 해석할 수 없습니다.
73 [/note] 72 [/note]
74   73  
75 = 호환되지 않는 대표 사례 = 74 = 호환되지 않는 대표 사례 =
76   75  
77 - 클래스 이름이 숫자 인덱스만 있는 모델 76 - 클래스 이름이 숫자 인덱스만 있는 모델
78 - `safe/unsafe` 2분류만 반환하는 모델 77 - `safe/unsafe` 2분류만 반환하는 모델
79 - 멀티라벨이지만 `Porn/Hentai/Sexy/Neutral/Drawing` 체계가 아닌 모델 78 - 멀티라벨이지만 `Porn/Hentai/Sexy/Neutral/Drawing` 체계가 아닌 모델
80 - 이미지 전처리를 별도로 요구하는 모델 79 - 이미지 전처리를 별도로 요구하는 모델
81 - 입력 크기와 색공간이 크게 다른 모델 80 - 입력 크기와 색공간이 크게 다른 모델
82   81  
83 = 운영 체크리스트 = 82 = 운영 체크리스트 =
84   83  
85 [warning] 84 [warning]
86 다음 네 항목을 모두 만족하기 전에는 운영 반영을 권장하지 않습니다. 85 다음 네 항목을 모두 만족하기 전에는 운영 반영을 권장하지 않습니다.
87 [/warning] 86 [/warning]
88   87  
89 1. `model.json`과 `.bin` 파일이 모두 HTTP 200으로 열림 88 1. `model.json`과 `.bin` 파일이 모두 HTTP 200으로 열림
90 2. `type` 설정이 실제 모델 형식과 맞음 89 2. `type` 설정이 실제 모델 형식과 맞음
91 3. 클래스 이름이 현재 판정 코드와 맞음 90 3. 클래스 이름이 현재 판정 코드와 맞음
92 4. 샘플 이미지 세트로 threshold를 점검함 91 4. 샘플 이미지 세트로 threshold를 점검함
93   92  
94 [folding(샘플 테스트 최소 세트)] 93 [folding(샘플 테스트 최소 세트)]
95 - 일반 인물 사진 94 - 일반 인물 사진
96 - 풍경/사물 사진 95 - 풍경/사물 사진
97 - 애니/일러스트 96 - 애니/일러스트
98 - 경계 사례 97 - 경계 사례
99 - 실제 차단 대상 사례 98 - 실제 차단 대상 사례
100 [/folding] 99 [/folding]
101   100  
102 = 차기 개선 후보 = 101 = 차기 개선 후보 =
103   102  
104 - `T2_NSFW_BROWSER_MODEL_SIZE` 전역 설정 추가 103 - `T2_NSFW_BROWSER_MODEL_SIZE` 전역 설정 추가
105 - `class map` 설정 추가 104 - `class map` 설정 추가
106 - 모델별 threshold preset 추가 105 - 모델별 threshold preset 추가
107 - IndexedDB 캐시 정책 선택 기능 추가 106 - IndexedDB 캐시 정책 선택 기능 추가
108   107  
109 == 수정 요약 == 108 == 수정 요약 ==
110 - 커스텀 모델 교체 시의 호환 기준을 표 중심으로 정리했습니다. 109 - 커스텀 모델 교체 시의 호환 기준을 표 중심으로 정리했습니다.
111   110  
✏ 이 상태를 참고해 편집
T2WIKI · 기술 통합 위키 & 프로젝트 허브 · 나무위키 + Markdown 완벽 지원 · SQLite · PHP 8.2 · 소개 · 문법 안내