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

#운영 #NSFW 설정 문서 전체 개요

요약

이 문서는 Ubuntu에서 T2Editor 9.1.0의 NSFWJS 브라우저 필터를 self-hosted 방식으로 배포할 때 필요한 운영 절차를 정리합니다. 기본 전제는 vendor/ 아래에 TensorFlow.js, backend 스크립트, NSFWJS, MobileNetV2Mid 모델을 직접 배치하는 것입니다.

설치 대상 예시

이 문서는 아래 설치 위치를 예시로 사용합니다.

text
/var/www/html/plugin/editor/t2editor/

웹 경로는 보통 아래처럼 맞춰야 합니다.

php
define('T2EDITOR_URL', '/plugin/editor/t2editor');

준비

필요 패키지 예시:

bash
sudo apt update sudo apt install -y curl git

권장 디렉터리 구조

text
/plugin/editor/t2editor/vendor/ tfjs/ tfjs-backend-webgl/ tfjs-backend-webgpu/ tfjs-backend-wasm/ nsfwjs/ nsfwjs/models/mobilenet_v2_mid/

수동 설치 예시

bash
sudo mkdir -p /var/www/html/plugin/editor/t2editor/vendor/{tfjs,tfjs-backend-webgl,tfjs-backend-webgpu,tfjs-backend-wasm,nsfwjs,nsfwjs/models} cd /var/www/html/plugin/editor/t2editor/vendor sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.22.0/dist/tf.min.js \ -o tfjs/tf.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgl@4.22.0/dist/tf-backend-webgl.min.js \ -o tfjs-backend-webgl/tf-backend-webgl.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgpu@4.22.0/dist/tf-backend-webgpu.min.js \ -o tfjs-backend-webgpu/tf-backend-webgpu.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tf-backend-wasm.min.js \ -o tfjs-backend-wasm/tf-backend-wasm.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm.wasm \ -o tfjs-backend-wasm/tfjs-backend-wasm.wasm sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-simd.wasm \ -o tfjs-backend-wasm/tfjs-backend-wasm-simd.wasm sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-threaded-simd.wasm \ -o tfjs-backend-wasm/tfjs-backend-wasm-threaded-simd.wasm sudo curl -L https://cdn.jsdelivr.net/npm/nsfwjs@2.4.2/dist/nsfwjs.min.js \ -o nsfwjs/nsfwjs.min.js

모델 폴더는 배포 방식에 따라 수동 복사 또는 저장소에서 별도 수집해 배치합니다.

퍼미션 예시

bash
sudo chown -R www-data:www-data /var/www/html/plugin/editor/t2editor/vendor sudo find /var/www/html/plugin/editor/t2editor/vendor -type d -exec chmod 755 {} \; sudo find /var/www/html/plugin/editor/t2editor/vendor -type f -exec chmod 644 {} \;

설정 점검

editor.lib.php에서 아래 값이 실제 설치 위치와 맞는지 확인합니다.

php
define('T2EDITOR_URL', '/plugin/editor/t2editor'); define('T2_NSFW_RUNTIME_ASSET_BASE', T2EDITOR_URL . '/vendor'); define('T2_NSFW_BROWSER_MODEL', 'MobileNetV2Mid'); define('T2_NSFW_BROWSER_MODEL_TYPE', 'graph'); define('T2_NSFW_BROWSER_MODEL_URL', T2_NSFW_RUNTIME_ASSET_BASE . '/nsfwjs/models/mobilenet_v2_mid/model.json'); define('T2_NSFW_BROWSER_BACKEND_PRIORITY', 'webgpu,webgl,wasm,cpu');

동작 확인

아래 URL이 브라우저 또는 curl -I에서 200 응답이어야 합니다.

text
/plugin/editor/t2editor/vendor/tfjs/tf.min.js /plugin/editor/t2editor/vendor/tfjs-backend-webgpu/tf-backend-webgpu.min.js /plugin/editor/t2editor/vendor/tfjs-backend-wasm/tfjs-backend-wasm.wasm /plugin/editor/t2editor/vendor/nsfwjs/nsfwjs.min.js /plugin/editor/t2editor/vendor/nsfwjs/models/mobilenet_v2_mid/model.json

문제 해결

증상: 계속 loading만 보임

  • 모델 파일 또는 backend 스크립트가 404인지 확인
  • window.T2EDITOR_NSFW_RUNTIME_ASSETS가 올바른지 확인
  • 콘솔에서 import 오류가 없는지 확인

증상: WebGPU가 선택되지 않음

  • 브라우저가 WebGPU를 지원하는지 확인
  • WebGPU backend 스크립트가 실제로 로드되는지 확인
  • 너무 오래된 브라우저나 보안 정책 이슈가 없는지 확인

증상: WebGPU는 실패하고 CPU로만 감

  • webgl 또는 wasm 스크립트 누락 여부 확인
  • WASM 바이너리 3종이 모두 배치되었는지 확인
  • 폴백 순서 설정이 잘못되지 않았는지 확인
주의

운영에서 가장 흔한 실수는 “파일은 복사했는데 T2EDITOR_URL을 기존 기본값으로 둔 상태”입니다. 이 경우 파일이 서버에 있어도 브라우저는 전혀 다른 URL을 요청합니다.

수정 요약

이 문서가 다루는 9.1.0 운영 포인트는 아래와 같습니다.

  • CDN 의존이 아닌 self-hosted 구조
  • vendor 중심 정적 자산 배치
  • WebGPU 우선, WebGL/WASM/CPU 폴백
  • 모델 파일까지 포함한 정적 경로 검증

관련 문서

r2 고아링크삭제
2026-04-17 19:24

#운영 #NSFW

요약

이 문서는 Ubuntu에서 T2Editor 9.1.0의 NSFWJS 브라우저 필터를 self-hosted 방식으로 배포할 때 필요한 운영 절차를 정리합니다. 기본 전제는 vendor/ 아래에 TensorFlow.js, backend 스크립트, NSFWJS, MobileNetV2Mid 모델을 직접 배치하는 것입니다.

설치 대상 예시

이 문서는 아래 설치 위치를 예시로 사용합니다.

text
/var/www/html/plugin/editor/t2editor/

웹 경로는 보통 아래처럼 맞춰야 합니다.

php
define('T2EDITOR_URL', '/plugin/editor/t2editor');

준비

필요 패키지 예시:

bash
sudo apt update sudo apt install -y curl git

권장 디렉터리 구조

text
/plugin/editor/t2editor/vendor/ tfjs/ tfjs-backend-webgl/ tfjs-backend-webgpu/ tfjs-backend-wasm/ nsfwjs/ nsfwjs/models/mobilenet_v2_mid/

수동 설치 예시

bash
sudo mkdir -p /var/www/html/plugin/editor/t2editor/vendor/{tfjs,tfjs-backend-webgl,tfjs-backend-webgpu,tfjs-backend-wasm,nsfwjs,nsfwjs/models} cd /var/www/html/plugin/editor/t2editor/vendor sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.22.0/dist/tf.min.js \ -o tfjs/tf.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgl@4.22.0/dist/tf-backend-webgl.min.js \ -o tfjs-backend-webgl/tf-backend-webgl.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgpu@4.22.0/dist/tf-backend-webgpu.min.js \ -o tfjs-backend-webgpu/tf-backend-webgpu.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tf-backend-wasm.min.js \ -o tfjs-backend-wasm/tf-backend-wasm.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm.wasm \ -o tfjs-backend-wasm/tfjs-backend-wasm.wasm sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-simd.wasm \ -o tfjs-backend-wasm/tfjs-backend-wasm-simd.wasm sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-threaded-simd.wasm \ -o tfjs-backend-wasm/tfjs-backend-wasm-threaded-simd.wasm sudo curl -L https://cdn.jsdelivr.net/npm/nsfwjs@2.4.2/dist/nsfwjs.min.js \ -o nsfwjs/nsfwjs.min.js

모델 폴더는 배포 방식에 따라 수동 복사 또는 저장소에서 별도 수집해 배치합니다.

퍼미션 예시

bash
sudo chown -R www-data:www-data /var/www/html/plugin/editor/t2editor/vendor sudo find /var/www/html/plugin/editor/t2editor/vendor -type d -exec chmod 755 {} \; sudo find /var/www/html/plugin/editor/t2editor/vendor -type f -exec chmod 644 {} \;

설정 점검

editor.lib.php에서 아래 값이 실제 설치 위치와 맞는지 확인합니다.

php
define('T2EDITOR_URL', '/plugin/editor/t2editor'); define('T2_NSFW_RUNTIME_ASSET_BASE', T2EDITOR_URL . '/vendor'); define('T2_NSFW_BROWSER_MODEL', 'MobileNetV2Mid'); define('T2_NSFW_BROWSER_MODEL_TYPE', 'graph'); define('T2_NSFW_BROWSER_MODEL_URL', T2_NSFW_RUNTIME_ASSET_BASE . '/nsfwjs/models/mobilenet_v2_mid/model.json'); define('T2_NSFW_BROWSER_BACKEND_PRIORITY', 'webgpu,webgl,wasm,cpu');

동작 확인

아래 URL이 브라우저 또는 curl -I에서 200 응답이어야 합니다.

text
/plugin/editor/t2editor/vendor/tfjs/tf.min.js /plugin/editor/t2editor/vendor/tfjs-backend-webgpu/tf-backend-webgpu.min.js /plugin/editor/t2editor/vendor/tfjs-backend-wasm/tfjs-backend-wasm.wasm /plugin/editor/t2editor/vendor/nsfwjs/nsfwjs.min.js /plugin/editor/t2editor/vendor/nsfwjs/models/mobilenet_v2_mid/model.json

문제 해결

증상: 계속 loading만 보임

  • 모델 파일 또는 backend 스크립트가 404인지 확인
  • window.T2EDITOR_NSFW_RUNTIME_ASSETS가 올바른지 확인
  • 콘솔에서 import 오류가 없는지 확인

증상: WebGPU가 선택되지 않음

  • 브라우저가 WebGPU를 지원하는지 확인
  • WebGPU backend 스크립트가 실제로 로드되는지 확인
  • 너무 오래된 브라우저나 보안 정책 이슈가 없는지 확인

증상: WebGPU는 실패하고 CPU로만 감

  • webgl 또는 wasm 스크립트 누락 여부 확인
  • WASM 바이너리 3종이 모두 배치되었는지 확인
  • 폴백 순서 설정이 잘못되지 않았는지 확인
주의

운영에서 가장 흔한 실수는 “파일은 복사했는데 T2EDITOR_URL을 기존 기본값으로 둔 상태”입니다. 이 경우 파일이 서버에 있어도 브라우저는 전혀 다른 URL을 요청합니다.

수정 요약

이 문서가 다루는 9.1.0 운영 포인트는 아래와 같습니다.

  • CDN 의존이 아닌 self-hosted 구조
  • vendor 중심 정적 자산 배치
  • WebGPU 우선, WebGL/WASM/CPU 폴백
  • 모델 파일까지 포함한 정적 경로 검증
라인 단위 비교
이전 새 버전
1 --- 1 ---
2 title: 운영: Ubuntu에서 NSFWJS self-hosted + WebGPU 설치 2 title: 운영: Ubuntu에서 NSFWJS self-hosted + WebGPU 설치
3 document_id: ops-nsfwjs-selfhost-webgpu-ubuntu 3 document_id: ops-nsfwjs-selfhost-webgpu-ubuntu
4 slug: ops-nsfwjs-selfhost-webgpu-ubuntu 4 slug: ops-nsfwjs-selfhost-webgpu-ubuntu
5 target_editor_version: 9.1.0 5 target_editor_version: 9.1.0
6 document_type: ops-guide 6 document_type: ops-guide
7 doc_type: ops-guide 7 doc_type: ops-guide
8 target_readers: [웹마스터, 개발자, AI agent] 8 target_readers: [웹마스터, 개발자, AI agent]
9 importance: High 9 importance: High
10 dependency: High 10 dependency: High
11 core_type: Guide 11 core_type: Guide
12 stability: [Stable Anchor, Version-Bound] 12 stability: [Stable Anchor, Version-Bound]
13 stable_anchor: 13 stable_anchor:
14 - vendor 디렉터리 구조 14 - vendor 디렉터리 구조
15 - T2EDITOR_URL 기반 경로 조립 15 - T2EDITOR_URL 기반 경로 조립
16 version_bound: 16 version_bound:
17 - MobileNetV2Mid 모델 폴더명 17 - MobileNetV2Mid 모델 폴더명
18 - TensorFlow.js backend 파일명 18 - TensorFlow.js backend 파일명
19 related_docs: 19 related_docs:
20 - guide-nsfwjs-overview 20 - guide-nsfwjs-overview
21 - config-nsfwjs-runtime-settings 21 - config-nsfwjs-runtime-settings
22 - migration-legacy-nsfw-to-nsfwjs 22 - migration-legacy-nsfw-to-nsfwjs
23 related_files: 23 related_files:
24 - 9.1.0/t2editor/editor.lib.php 24 - 9.1.0/t2editor/editor.lib.php
25 - 9.1.0/t2editor/config/nsfw_api_browser.js 25 - 9.1.0/t2editor/config/nsfw_api_browser.js
26 related_functions: [] 26 related_functions: []
27 related_classes_modules: 27 related_classes_modules:
28 - NSFWFilterAPI 28 - NSFWFilterAPI
29 related_features: 29 related_features:
30 - self-hosted 배포 30 - self-hosted 배포
31 - WebGPU 폴백 31 - WebGPU 폴백
32 - 정적 자산 검증 32 - 정적 자산 검증
33 related_ui: [] 33 related_ui: []
34 change_risk: 운영 서버 경로와 문서 경로가 불일치하면 모델 로딩이 실패하므로, 설정 변경 전에 실제 설치 위치를 먼저 고정해야 합니다. 34 change_risk: 운영 서버 경로와 문서 경로가 불일치하면 모델 로딩이 실패하므로, 설정 변경 전에 실제 설치 위치를 먼저 고정해야 합니다.
35 reading_order: 21 35 reading_order: 21
36 summary: Ubuntu 환경에서 NSFWJS, TensorFlow.js, 모델 파일을 self-hosted 방식으로 설치하고 점검하는 절차를 안내합니다. 36 summary: Ubuntu 환경에서 NSFWJS, TensorFlow.js, 모델 파일을 self-hosted 방식으로 설치하고 점검하는 절차를 안내합니다.
37 description: WebGPU 우선 폴백 구조를 쓰는 브라우저 NSFW 필터를 Ubuntu + Apache/Nginx 계열 환경에 배치하기 위한 운영 문서입니다. 37 description: WebGPU 우선 폴백 구조를 쓰는 브라우저 NSFW 필터를 Ubuntu + Apache/Nginx 계열 환경에 배치하기 위한 운영 문서입니다.
38 tags: [Ubuntu, self-hosted, NSFWJS, WebGPU, TensorFlow.js, 운영] 38 tags: [Ubuntu, self-hosted, NSFWJS, WebGPU, TensorFlow.js, 운영]
39 version_tag: 9.1.0 39 version_tag: 9.1.0
40 maintenance_difficulty: Medium 40 maintenance_difficulty: Medium
41 test_requirement: High 41 test_requirement: High
42 ai_agent_risk: Medium 42 ai_agent_risk: Medium
43 source_basis: [현재 코드 분석 기반] 43 source_basis: [현재 코드 분석 기반]
44 beginner_section_included: false 44 beginner_section_included: false
45 webmaster_section_included: true 45 webmaster_section_included: true
46 developer_section_included: true 46 developer_section_included: true
47 --- 47 ---
48   48  
49 [목차] 49 [목차]
50   50  
51 [[분류:운영]] 51 [[분류:운영]]
52 [[분류:NSFW]] 52 [[분류:NSFW]]
53 [[config-nsfwjs-runtime-settings|설정 문서]]  
54 [[guide-nsfwjs-overview|전체 개요]]  
55   53  
56 [note(요약)] 54 [note(요약)]
57 이 문서는 Ubuntu에서 T2Editor 9.1.0의 NSFWJS 브라우저 필터를 **self-hosted** 방식으로 배포할 때 필요한 운영 절차를 정리합니다. 55 이 문서는 Ubuntu에서 T2Editor 9.1.0의 NSFWJS 브라우저 필터를 **self-hosted** 방식으로 배포할 때 필요한 운영 절차를 정리합니다.
58 기본 전제는 `vendor/` 아래에 TensorFlow.js, backend 스크립트, NSFWJS, `MobileNetV2Mid` 모델을 직접 배치하는 것입니다. 56 기본 전제는 `vendor/` 아래에 TensorFlow.js, backend 스크립트, NSFWJS, `MobileNetV2Mid` 모델을 직접 배치하는 것입니다.
59 [/note] 57 [/note]
60   58  
61 # 설치 대상 예시 59 # 설치 대상 예시
62   60  
63 이 문서는 아래 설치 위치를 예시로 사용합니다. 61 이 문서는 아래 설치 위치를 예시로 사용합니다.
64   62  
65 ```text 63 ```text
66 /var/www/html/plugin/editor/t2editor/ 64 /var/www/html/plugin/editor/t2editor/
67 ``` 65 ```
68   66  
69 웹 경로는 보통 아래처럼 맞춰야 합니다. 67 웹 경로는 보통 아래처럼 맞춰야 합니다.
70   68  
71 ```php 69 ```php
72 define('T2EDITOR_URL', '/plugin/editor/t2editor'); 70 define('T2EDITOR_URL', '/plugin/editor/t2editor');
73 ``` 71 ```
74   72  
75 ## 준비 73 ## 준비
76   74  
77 필요 패키지 예시: 75 필요 패키지 예시:
78   76  
79 ```bash 77 ```bash
80 sudo apt update 78 sudo apt update
81 sudo apt install -y curl git 79 sudo apt install -y curl git
82 ``` 80 ```
83   81  
84 ## 권장 디렉터리 구조 82 ## 권장 디렉터리 구조
85   83  
86 ```text 84 ```text
87 /plugin/editor/t2editor/vendor/ 85 /plugin/editor/t2editor/vendor/
88 tfjs/ 86 tfjs/
89 tfjs-backend-webgl/ 87 tfjs-backend-webgl/
90 tfjs-backend-webgpu/ 88 tfjs-backend-webgpu/
91 tfjs-backend-wasm/ 89 tfjs-backend-wasm/
92 nsfwjs/ 90 nsfwjs/
93 nsfwjs/models/mobilenet_v2_mid/ 91 nsfwjs/models/mobilenet_v2_mid/
94 ``` 92 ```
95   93  
96 ## 수동 설치 예시 94 ## 수동 설치 예시
97   95  
98 ```bash 96 ```bash
99 sudo mkdir -p /var/www/html/plugin/editor/t2editor/vendor/{tfjs,tfjs-backend-webgl,tfjs-backend-webgpu,tfjs-backend-wasm,nsfwjs,nsfwjs/models} 97 sudo mkdir -p /var/www/html/plugin/editor/t2editor/vendor/{tfjs,tfjs-backend-webgl,tfjs-backend-webgpu,tfjs-backend-wasm,nsfwjs,nsfwjs/models}
100   98  
101 cd /var/www/html/plugin/editor/t2editor/vendor 99 cd /var/www/html/plugin/editor/t2editor/vendor
102   100  
103 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.22.0/dist/tf.min.js \ 101 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.22.0/dist/tf.min.js \
104 -o tfjs/tf.min.js 102 -o tfjs/tf.min.js
105   103  
106 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgl@4.22.0/dist/tf-backend-webgl.min.js \ 104 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgl@4.22.0/dist/tf-backend-webgl.min.js \
107 -o tfjs-backend-webgl/tf-backend-webgl.min.js 105 -o tfjs-backend-webgl/tf-backend-webgl.min.js
108   106  
109 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgpu@4.22.0/dist/tf-backend-webgpu.min.js \ 107 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgpu@4.22.0/dist/tf-backend-webgpu.min.js \
110 -o tfjs-backend-webgpu/tf-backend-webgpu.min.js 108 -o tfjs-backend-webgpu/tf-backend-webgpu.min.js
111   109  
112 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tf-backend-wasm.min.js \ 110 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tf-backend-wasm.min.js \
113 -o tfjs-backend-wasm/tf-backend-wasm.min.js 111 -o tfjs-backend-wasm/tf-backend-wasm.min.js
114   112  
115 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm.wasm \ 113 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm.wasm \
116 -o tfjs-backend-wasm/tfjs-backend-wasm.wasm 114 -o tfjs-backend-wasm/tfjs-backend-wasm.wasm
117   115  
118 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-simd.wasm \ 116 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-simd.wasm \
119 -o tfjs-backend-wasm/tfjs-backend-wasm-simd.wasm 117 -o tfjs-backend-wasm/tfjs-backend-wasm-simd.wasm
120   118  
121 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-threaded-simd.wasm \ 119 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-threaded-simd.wasm \
122 -o tfjs-backend-wasm/tfjs-backend-wasm-threaded-simd.wasm 120 -o tfjs-backend-wasm/tfjs-backend-wasm-threaded-simd.wasm
123   121  
124 sudo curl -L https://cdn.jsdelivr.net/npm/nsfwjs@2.4.2/dist/nsfwjs.min.js \ 122 sudo curl -L https://cdn.jsdelivr.net/npm/nsfwjs@2.4.2/dist/nsfwjs.min.js \
125 -o nsfwjs/nsfwjs.min.js 123 -o nsfwjs/nsfwjs.min.js
126 ``` 124 ```
127   125  
128 모델 폴더는 배포 방식에 따라 수동 복사 또는 저장소에서 별도 수집해 배치합니다. 126 모델 폴더는 배포 방식에 따라 수동 복사 또는 저장소에서 별도 수집해 배치합니다.
129   127  
130 ## 퍼미션 예시 128 ## 퍼미션 예시
131   129  
132 ```bash 130 ```bash
133 sudo chown -R www-data:www-data /var/www/html/plugin/editor/t2editor/vendor 131 sudo chown -R www-data:www-data /var/www/html/plugin/editor/t2editor/vendor
134 sudo find /var/www/html/plugin/editor/t2editor/vendor -type d -exec chmod 755 {} \; 132 sudo find /var/www/html/plugin/editor/t2editor/vendor -type d -exec chmod 755 {} \;
135 sudo find /var/www/html/plugin/editor/t2editor/vendor -type f -exec chmod 644 {} \; 133 sudo find /var/www/html/plugin/editor/t2editor/vendor -type f -exec chmod 644 {} \;
136 ``` 134 ```
137   135  
138 ## 설정 점검 136 ## 설정 점검
139   137  
140 `editor.lib.php`에서 아래 값이 실제 설치 위치와 맞는지 확인합니다. 138 `editor.lib.php`에서 아래 값이 실제 설치 위치와 맞는지 확인합니다.
141   139  
142 ```php 140 ```php
143 define('T2EDITOR_URL', '/plugin/editor/t2editor'); 141 define('T2EDITOR_URL', '/plugin/editor/t2editor');
144 define('T2_NSFW_RUNTIME_ASSET_BASE', T2EDITOR_URL . '/vendor'); 142 define('T2_NSFW_RUNTIME_ASSET_BASE', T2EDITOR_URL . '/vendor');
145 define('T2_NSFW_BROWSER_MODEL', 'MobileNetV2Mid'); 143 define('T2_NSFW_BROWSER_MODEL', 'MobileNetV2Mid');
146 define('T2_NSFW_BROWSER_MODEL_TYPE', 'graph'); 144 define('T2_NSFW_BROWSER_MODEL_TYPE', 'graph');
147 define('T2_NSFW_BROWSER_MODEL_URL', T2_NSFW_RUNTIME_ASSET_BASE . '/nsfwjs/models/mobilenet_v2_mid/model.json'); 145 define('T2_NSFW_BROWSER_MODEL_URL', T2_NSFW_RUNTIME_ASSET_BASE . '/nsfwjs/models/mobilenet_v2_mid/model.json');
148 define('T2_NSFW_BROWSER_BACKEND_PRIORITY', 'webgpu,webgl,wasm,cpu'); 146 define('T2_NSFW_BROWSER_BACKEND_PRIORITY', 'webgpu,webgl,wasm,cpu');
149 ``` 147 ```
150   148  
151 ## 동작 확인 149 ## 동작 확인
152   150  
153 아래 URL이 브라우저 또는 `curl -I`에서 200 응답이어야 합니다. 151 아래 URL이 브라우저 또는 `curl -I`에서 200 응답이어야 합니다.
154   152  
155 ```text 153 ```text
156 /plugin/editor/t2editor/vendor/tfjs/tf.min.js 154 /plugin/editor/t2editor/vendor/tfjs/tf.min.js
157 /plugin/editor/t2editor/vendor/tfjs-backend-webgpu/tf-backend-webgpu.min.js 155 /plugin/editor/t2editor/vendor/tfjs-backend-webgpu/tf-backend-webgpu.min.js
158 /plugin/editor/t2editor/vendor/tfjs-backend-wasm/tfjs-backend-wasm.wasm 156 /plugin/editor/t2editor/vendor/tfjs-backend-wasm/tfjs-backend-wasm.wasm
159 /plugin/editor/t2editor/vendor/nsfwjs/nsfwjs.min.js 157 /plugin/editor/t2editor/vendor/nsfwjs/nsfwjs.min.js
160 /plugin/editor/t2editor/vendor/nsfwjs/models/mobilenet_v2_mid/model.json 158 /plugin/editor/t2editor/vendor/nsfwjs/models/mobilenet_v2_mid/model.json
161 ``` 159 ```
162   160  
163 ## 문제 해결 161 ## 문제 해결
164   162  
165 ### 증상: 계속 loading만 보임 163 ### 증상: 계속 loading만 보임
166 - 모델 파일 또는 backend 스크립트가 404인지 확인 164 - 모델 파일 또는 backend 스크립트가 404인지 확인
167 - `window.T2EDITOR_NSFW_RUNTIME_ASSETS`가 올바른지 확인 165 - `window.T2EDITOR_NSFW_RUNTIME_ASSETS`가 올바른지 확인
168 - 콘솔에서 import 오류가 없는지 확인 166 - 콘솔에서 import 오류가 없는지 확인
169   167  
170 ### 증상: WebGPU가 선택되지 않음 168 ### 증상: WebGPU가 선택되지 않음
171 - 브라우저가 WebGPU를 지원하는지 확인 169 - 브라우저가 WebGPU를 지원하는지 확인
172 - WebGPU backend 스크립트가 실제로 로드되는지 확인 170 - WebGPU backend 스크립트가 실제로 로드되는지 확인
173 - 너무 오래된 브라우저나 보안 정책 이슈가 없는지 확인 171 - 너무 오래된 브라우저나 보안 정책 이슈가 없는지 확인
174   172  
175 ### 증상: WebGPU는 실패하고 CPU로만 감 173 ### 증상: WebGPU는 실패하고 CPU로만 감
176 - `webgl` 또는 `wasm` 스크립트 누락 여부 확인 174 - `webgl` 또는 `wasm` 스크립트 누락 여부 확인
177 - WASM 바이너리 3종이 모두 배치되었는지 확인 175 - WASM 바이너리 3종이 모두 배치되었는지 확인
178 - 폴백 순서 설정이 잘못되지 않았는지 확인 176 - 폴백 순서 설정이 잘못되지 않았는지 확인
179   177  
180 [warning] 178 [warning]
181 운영에서 가장 흔한 실수는 “파일은 복사했는데 `T2EDITOR_URL`을 기존 기본값으로 둔 상태”입니다. 179 운영에서 가장 흔한 실수는 “파일은 복사했는데 `T2EDITOR_URL`을 기존 기본값으로 둔 상태”입니다.
182 이 경우 파일이 서버에 있어도 브라우저는 전혀 다른 URL을 요청합니다. 180 이 경우 파일이 서버에 있어도 브라우저는 전혀 다른 URL을 요청합니다.
183 [/warning] 181 [/warning]
184   182  
185 ## 수정 요약 183 ## 수정 요약
186   184  
187 이 문서가 다루는 9.1.0 운영 포인트는 아래와 같습니다. 185 이 문서가 다루는 9.1.0 운영 포인트는 아래와 같습니다.
188   186  
189 - CDN 의존이 아닌 self-hosted 구조 187 - CDN 의존이 아닌 self-hosted 구조
190 - vendor 중심 정적 자산 배치 188 - vendor 중심 정적 자산 배치
191 - WebGPU 우선, WebGL/WASM/CPU 폴백 189 - WebGPU 우선, WebGL/WASM/CPU 폴백
192 - 모델 파일까지 포함한 정적 경로 검증 190 - 모델 파일까지 포함한 정적 경로 검증
193  
194 ## 관련 문서  
195  
196 - [[guide-nsfwjs-overview|가이드: NSFWJS 기반 이미지 필터 개요]]  
197 - [[config-nsfwjs-runtime-settings|설정: NSFWJS 런타임과 모델 경로]]  
198 - [[migration-legacy-nsfw-to-nsfwjs|마이그레이션: 레거시 NSFW 구조에서 NSFWJS로]]  
199  
✏ 이 상태를 참고해 편집
T2WIKI · 기술 통합 위키 & 프로젝트 허브 · 나무위키 + Markdown 완벽 지원 · SQLite · PHP 8.2 · 소개 · 문법 안내