NSFWJS 관련 핵심 설정은 editor.lib.php에서 정의되고, 실제 브라우저 실행 시에는 window.T2EDITOR_NSFW_* 전역 값으로 전달됩니다. 즉, PHP 상수와 브라우저 런타임 값이 둘 다 맞아야 정상 동작합니다.
9.1.0/t2editor/editor.lib.php9.1.0/t2editor/config/nsfw_api_browser.js이 문서는 “어떤 값을 어디서 바꾸면 되는가”를 정리한 운영 문서입니다.
이 기능은 크게 두 층으로 나뉩니다.
| 층 | 역할 |
|---|---|
| PHP 설정층 | 기본값 선언, URL 조립, JS 전역 설정 출력 |
| 브라우저 실행층 | 모델 로딩, 백엔드 선택, 이미지 판정 수행 |
그래서 파일만 복사해 넣고 끝나는 경우보다, 설치 경로와 URL 경로까지 정확히 맞추는 일이 더 중요합니다.
phpdefine('T2_NSFW_ENABLED', true);
NSFW 필터 전체 사용 여부입니다.
true: 필터 활성화false: 필터 비활성화phpdefine('T2_NSFW_MODE', 'browser');
판정 방식입니다.
| 값 | 의미 |
|---|---|
browser | 브라우저에서 NSFWJS로 판정 |
server | 서버 API 경로를 사용하는 레거시 또는 대체 방식 |
9.1.0에서는 browser를 기본 권장값으로 문서화하는 것이 맞습니다.
phpdefine('T2_NSFW_ALLOW_SUSPICIOUS', true);
safe가 아닌 결과 중 suspect 또는 unsafe를 어떻게 처리할지 결정하는 정책입니다.
true: 경고 후 업로드를 허용할 수 있음false: 정책상 업로드 취소 처리 가능phpdefine('T2_NSFW_RUNTIME_ASSET_BASE', T2EDITOR_URL . '/vendor');
TensorFlow.js, 백엔드 스크립트, NSFWJS, 모델 파일의 루트 경로입니다.
이 값이 틀리면 아래 자산 경로도 모두 틀어질 수 있습니다.
phpdefine('T2_NSFW_BROWSER_MODEL', 'MobileNetV2Mid');
브라우저에서 사용할 기본 모델 이름입니다.
phpdefine('T2_NSFW_BROWSER_MODEL_TYPE', 'graph');
모델 유형입니다. modelUrl로 직접 호스팅한 MobileNetV2Mid를 읽을 때는 문서와 코드가 모두 이 설정을 기준으로 움직이도록 맞춰 두는 편이 안전합니다.
phpdefine( 'T2_NSFW_BROWSER_MODEL_URL', T2_NSFW_RUNTIME_ASSET_BASE . '/nsfwjs/models/mobilenet_v2_mid/model.json' );
모델 파일의 실제 URL입니다. 브라우저는 결국 이 주소로 model.json을 요청합니다.
phpdefine('T2_NSFW_BROWSER_BACKEND_PRIORITY', 'webgpu,webgl,wasm,cpu');
백엔드 우선순위입니다. 문자열로 선언해도 되고, JS 주입 시 배열로 변환하는 방식으로 다룰 수 있습니다.
PHP 설정은 최종적으로 아래 값들로 변환되어 브라우저에 전달됩니다.
jswindow.T2EDITOR_NSFW_ENABLED window.T2EDITOR_NSFW_MODE window.T2EDITOR_NSFW_ALLOW_SUSPICIOUS window.T2EDITOR_NSFW_SERVER_URL window.T2EDITOR_NSFW_BROWSER_URL window.T2EDITOR_NSFW_BROWSER_MODEL window.T2EDITOR_NSFW_BROWSER_MODEL_TYPE window.T2EDITOR_NSFW_BROWSER_MODEL_URL window.T2EDITOR_NSFW_BROWSER_BACKEND_PRIORITY window.T2EDITOR_NSFW_RUNTIME_ASSETS
즉 editor.lib.php를 수정했다면, 실제 렌더링된 페이지 소스나 브라우저 콘솔에서 저 값이 제대로 주입됐는지 꼭 확인해야 합니다.
예를 들어 에디터가 아래 경로에 설치됐다면
text/var/www/html/plugin/editor/t2editor/
웹 경로는 보통 아래처럼 맞춰야 합니다.
phpdefine('T2EDITOR_URL', '/plugin/editor/t2editor');
그 다음에야 T2_NSFW_RUNTIME_ASSET_BASE와 T2_NSFW_BROWSER_MODEL_URL이 올바른 URL을 만들 수 있습니다.
| 항목 | 확인 내용 |
|---|---|
| 정적 파일 응답 | vendor/ 아래 JS, WASM, model.json이 200 응답인지 확인 |
| 전역 설정 주입 | window.T2EDITOR_NSFW_* 값이 기대값과 같은지 확인 |
| 모드 확인 | browser 모드인지 확인 |
| 모델 타입 | graph가 필요한 배포인지 확인 |
| 백엔드 선택 | 콘솔에서 실제 선택된 백엔드가 기대와 비슷한지 확인 |
경로를 바꿨다면 캐시를 먼저 의심하기 쉽지만, 실제 원인은 T2EDITOR_URL과 T2_NSFW_RUNTIME_ASSET_BASE 불일치인 경우가 많습니다.
9.1.0 설정 문서 관점에서 중요한 변경점은 다음과 같습니다.
NSFWJS 관련 핵심 설정은 editor.lib.php에서 정의되고, 실제 브라우저 실행 시에는 window.T2EDITOR_NSFW_* 전역 값으로 전달됩니다. 즉, PHP 상수와 브라우저 런타임 값이 둘 다 맞아야 정상 동작합니다.
9.1.0/t2editor/editor.lib.php9.1.0/t2editor/config/nsfw_api_browser.js이 문서는 “어떤 값을 어디서 바꾸면 되는가”를 정리한 운영 문서입니다.
이 기능은 크게 두 층으로 나뉩니다.
| 층 | 역할 |
|---|---|
| PHP 설정층 | 기본값 선언, URL 조립, JS 전역 설정 출력 |
| 브라우저 실행층 | 모델 로딩, 백엔드 선택, 이미지 판정 수행 |
그래서 파일만 복사해 넣고 끝나는 경우보다, 설치 경로와 URL 경로까지 정확히 맞추는 일이 더 중요합니다.
phpdefine('T2_NSFW_ENABLED', true);
NSFW 필터 전체 사용 여부입니다.
true: 필터 활성화false: 필터 비활성화phpdefine('T2_NSFW_MODE', 'browser');
판정 방식입니다.
| 값 | 의미 |
|---|---|
browser | 브라우저에서 NSFWJS로 판정 |
server | 서버 API 경로를 사용하는 레거시 또는 대체 방식 |
9.1.0에서는 browser를 기본 권장값으로 문서화하는 것이 맞습니다.
phpdefine('T2_NSFW_ALLOW_SUSPICIOUS', true);
safe가 아닌 결과 중 suspect 또는 unsafe를 어떻게 처리할지 결정하는 정책입니다.
true: 경고 후 업로드를 허용할 수 있음false: 정책상 업로드 취소 처리 가능phpdefine('T2_NSFW_RUNTIME_ASSET_BASE', T2EDITOR_URL . '/vendor');
TensorFlow.js, 백엔드 스크립트, NSFWJS, 모델 파일의 루트 경로입니다.
이 값이 틀리면 아래 자산 경로도 모두 틀어질 수 있습니다.
phpdefine('T2_NSFW_BROWSER_MODEL', 'MobileNetV2Mid');
브라우저에서 사용할 기본 모델 이름입니다.
phpdefine('T2_NSFW_BROWSER_MODEL_TYPE', 'graph');
모델 유형입니다. modelUrl로 직접 호스팅한 MobileNetV2Mid를 읽을 때는 문서와 코드가 모두 이 설정을 기준으로 움직이도록 맞춰 두는 편이 안전합니다.
phpdefine( 'T2_NSFW_BROWSER_MODEL_URL', T2_NSFW_RUNTIME_ASSET_BASE . '/nsfwjs/models/mobilenet_v2_mid/model.json' );
모델 파일의 실제 URL입니다. 브라우저는 결국 이 주소로 model.json을 요청합니다.
phpdefine('T2_NSFW_BROWSER_BACKEND_PRIORITY', 'webgpu,webgl,wasm,cpu');
백엔드 우선순위입니다. 문자열로 선언해도 되고, JS 주입 시 배열로 변환하는 방식으로 다룰 수 있습니다.
PHP 설정은 최종적으로 아래 값들로 변환되어 브라우저에 전달됩니다.
jswindow.T2EDITOR_NSFW_ENABLED window.T2EDITOR_NSFW_MODE window.T2EDITOR_NSFW_ALLOW_SUSPICIOUS window.T2EDITOR_NSFW_SERVER_URL window.T2EDITOR_NSFW_BROWSER_URL window.T2EDITOR_NSFW_BROWSER_MODEL window.T2EDITOR_NSFW_BROWSER_MODEL_TYPE window.T2EDITOR_NSFW_BROWSER_MODEL_URL window.T2EDITOR_NSFW_BROWSER_BACKEND_PRIORITY window.T2EDITOR_NSFW_RUNTIME_ASSETS
즉 editor.lib.php를 수정했다면, 실제 렌더링된 페이지 소스나 브라우저 콘솔에서 저 값이 제대로 주입됐는지 꼭 확인해야 합니다.
예를 들어 에디터가 아래 경로에 설치됐다면
text/var/www/html/plugin/editor/t2editor/
웹 경로는 보통 아래처럼 맞춰야 합니다.
phpdefine('T2EDITOR_URL', '/plugin/editor/t2editor');
그 다음에야 T2_NSFW_RUNTIME_ASSET_BASE와 T2_NSFW_BROWSER_MODEL_URL이 올바른 URL을 만들 수 있습니다.
| 항목 | 확인 내용 |
|---|---|
| 정적 파일 응답 | vendor/ 아래 JS, WASM, model.json이 200 응답인지 확인 |
| 전역 설정 주입 | window.T2EDITOR_NSFW_* 값이 기대값과 같은지 확인 |
| 모드 확인 | browser 모드인지 확인 |
| 모델 타입 | graph가 필요한 배포인지 확인 |
| 백엔드 선택 | 콘솔에서 실제 선택된 백엔드가 기대와 비슷한지 확인 |
경로를 바꿨다면 캐시를 먼저 의심하기 쉽지만, 실제 원인은 T2EDITOR_URL과 T2_NSFW_RUNTIME_ASSET_BASE 불일치인 경우가 많습니다.
9.1.0 설정 문서 관점에서 중요한 변경점은 다음과 같습니다.
| 이전 | 새 버전 | ||
|---|---|---|---|
| 1 | --- | 1 | --- |
| 2 | title: 설정: NSFWJS 런타임과 모델 경로 | 2 | title: 설정: NSFWJS 런타임과 모델 경로 |
| 3 | document_id: config-nsfwjs-runtime-settings | 3 | document_id: config-nsfwjs-runtime-settings |
| 4 | slug: config-nsfwjs-runtime-settings | 4 | slug: config-nsfwjs-runtime-settings |
| 5 | target_editor_version: 9.1.0 | 5 | target_editor_version: 9.1.0 |
| 6 | document_type: config-guide | 6 | document_type: config-guide |
| 7 | doc_type: config-guide | 7 | doc_type: config-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 | - editor.lib.php에서 JS 전역 설정 주입 | 14 | - editor.lib.php에서 JS 전역 설정 주입 |
| 15 | - browser 모드 기본 권장 | 15 | - browser 모드 기본 권장 |
| 16 | version_bound: | 16 | version_bound: |
| 17 | - T2_NSFW_RUNTIME_ASSET_BASE | 17 | - T2_NSFW_RUNTIME_ASSET_BASE |
| 18 | - T2_NSFW_BROWSER_MODEL | 18 | - T2_NSFW_BROWSER_MODEL |
| 19 | - T2_NSFW_BROWSER_MODEL_TYPE | 19 | - T2_NSFW_BROWSER_MODEL_TYPE |
| 20 | - T2_NSFW_BROWSER_MODEL_URL | 20 | - T2_NSFW_BROWSER_MODEL_URL |
| 21 | - T2_NSFW_BROWSER_BACKEND_PRIORITY | 21 | - T2_NSFW_BROWSER_BACKEND_PRIORITY |
| 22 | related_docs: | 22 | related_docs: |
| 23 | - guide-nsfwjs-overview | 23 | - guide-nsfwjs-overview |
| 24 | - core-nsfw_api_browser-js | 24 | - core-nsfw_api_browser-js |
| 25 | - ops-nsfwjs-selfhost-webgpu-ubuntu | 25 | - ops-nsfwjs-selfhost-webgpu-ubuntu |
| 26 | related_files: | 26 | related_files: |
| 27 | - 9.1.0/t2editor/editor.lib.php | 27 | - 9.1.0/t2editor/editor.lib.php |
| 28 | - 9.1.0/t2editor/config/nsfw_api_browser.js | 28 | - 9.1.0/t2editor/config/nsfw_api_browser.js |
| 29 | - 9.1.0/t2editor/plugin/image/image.js | 29 | - 9.1.0/t2editor/plugin/image/image.js |
| 30 | related_functions: | 30 | related_functions: |
| 31 | - editor_html | 31 | - editor_html |
| 32 | related_classes_modules: | 32 | related_classes_modules: |
| 33 | - NSFWFilterAPI | 33 | - NSFWFilterAPI |
| 34 | related_features: | 34 | related_features: |
| 35 | - 전역 설정 주입 | 35 | - 전역 설정 주입 |
| 36 | - 모델 경로 설정 | 36 | - 모델 경로 설정 |
| 37 | - 백엔드 우선순위 설정 | 37 | - 백엔드 우선순위 설정 |
| 38 | related_ui: [] | 38 | related_ui: [] |
| 39 | change_risk: 설정 이름과 실제 파일 경로가 어긋나면 모델이 로드되지 않고 업로드 흐름 전체가 실패할 수 있습니다. | 39 | change_risk: 설정 이름과 실제 파일 경로가 어긋나면 모델이 로드되지 않고 업로드 흐름 전체가 실패할 수 있습니다. |
| 40 | reading_order: 19 | 40 | reading_order: 19 |
| 41 | summary: editor.lib.php에서 NSFWJS 관련 설정이 어떻게 선언되고 브라우저 전역 값으로 주입되는지 설명합니다. | 41 | summary: editor.lib.php에서 NSFWJS 관련 설정이 어떻게 선언되고 브라우저 전역 값으로 주입되는지 설명합니다. |
| 42 | description: 브라우저 NSFW 모드, self-hosted 경로, WebGPU 우선순위, 모델 URL 설정을 운영 관점에서 정리한 문서입니다. | 42 | description: 브라우저 NSFW 모드, self-hosted 경로, WebGPU 우선순위, 모델 URL 설정을 운영 관점에서 정리한 문서입니다. |
| 43 | tags: [config, NSFWJS, editor.lib.php, self-hosted, webgpu, T2Editor] | 43 | tags: [config, NSFWJS, editor.lib.php, self-hosted, webgpu, T2Editor] |
| 44 | version_tag: 9.1.0 | 44 | version_tag: 9.1.0 |
| 45 | maintenance_difficulty: Medium | 45 | maintenance_difficulty: Medium |
| 46 | test_requirement: High | 46 | test_requirement: High |
| 47 | ai_agent_risk: Medium | 47 | ai_agent_risk: Medium |
| 48 | source_basis: [현재 코드 분석 기반] | 48 | source_basis: [현재 코드 분석 기반] |
| 49 | beginner_section_included: true | 49 | beginner_section_included: true |
| 50 | webmaster_section_included: true | 50 | webmaster_section_included: true |
| 51 | developer_section_included: true | 51 | developer_section_included: true |
| 52 | --- | 52 | --- |
| 53 | 53 | ||
| 54 | [목차] | 54 | [목차] |
| 55 | 55 | ||
| 56 | [[분류:설정]] | 56 | [[분류:설정]] |
| 57 | [[분류:NSFW]] | 57 | [[분류:NSFW]] |
| 58 | [[guide-nsfwjs-overview|전체 개요]] | ||
| 59 | [[core-nsfw_api_browser-js|코어 파일 문서]] | ||
| 60 | 58 | ||
| 61 | [note(요약)] | 59 | [note(요약)] |
| 62 | NSFWJS 관련 핵심 설정은 `editor.lib.php`에서 정의되고, 실제 브라우저 실행 시에는 `window.T2EDITOR_NSFW_*` 전역 값으로 전달됩니다. | 60 | NSFWJS 관련 핵심 설정은 `editor.lib.php`에서 정의되고, 실제 브라우저 실행 시에는 `window.T2EDITOR_NSFW_*` 전역 값으로 전달됩니다. |
| 63 | 즉, PHP 상수와 브라우저 런타임 값이 둘 다 맞아야 정상 동작합니다. | 61 | 즉, PHP 상수와 브라우저 런타임 값이 둘 다 맞아야 정상 동작합니다. |
| 64 | [/note] | 62 | [/note] |
| 65 | 63 | ||
| 66 | # 파일 개요 | 64 | # 파일 개요 |
| 67 | 65 | ||
| 68 | - **핵심 파일**: `9.1.0/t2editor/editor.lib.php` | 66 | - **핵심 파일**: `9.1.0/t2editor/editor.lib.php` |
| 69 | - **관련 런타임 파일**: `9.1.0/t2editor/config/nsfw_api_browser.js` | 67 | - **관련 런타임 파일**: `9.1.0/t2editor/config/nsfw_api_browser.js` |
| 70 | 68 | ||
| 71 | 이 문서는 “어떤 값을 어디서 바꾸면 되는가”를 정리한 운영 문서입니다. | 69 | 이 문서는 “어떤 값을 어디서 바꾸면 되는가”를 정리한 운영 문서입니다. |
| 72 | 70 | ||
| 73 | ## 초보자와 웹마스터를 위한 이해 | 71 | ## 초보자와 웹마스터를 위한 이해 |
| 74 | 72 | ||
| 75 | 이 기능은 크게 두 층으로 나뉩니다. | 73 | 이 기능은 크게 두 층으로 나뉩니다. |
| 76 | 74 | ||
| 77 | ||= 층 ||= 역할 || | 75 | ||= 층 ||= 역할 || |
| 78 | || PHP 설정층 || 기본값 선언, URL 조립, JS 전역 설정 출력 || | 76 | || PHP 설정층 || 기본값 선언, URL 조립, JS 전역 설정 출력 || |
| 79 | || 브라우저 실행층 || 모델 로딩, 백엔드 선택, 이미지 판정 수행 || | 77 | || 브라우저 실행층 || 모델 로딩, 백엔드 선택, 이미지 판정 수행 || |
| 80 | 78 | ||
| 81 | 그래서 파일만 복사해 넣고 끝나는 경우보다, **설치 경로와 URL 경로까지 정확히 맞추는 일**이 더 중요합니다. | 79 | 그래서 파일만 복사해 넣고 끝나는 경우보다, **설치 경로와 URL 경로까지 정확히 맞추는 일**이 더 중요합니다. |
| 82 | 80 | ||
| 83 | ## 주요 설정값 | 81 | ## 주요 설정값 |
| 84 | 82 | ||
| 85 | ### T2_NSFW_ENABLED | 83 | ### T2_NSFW_ENABLED |
| 86 | 84 | ||
| 87 | ```php | 85 | ```php |
| 88 | define('T2_NSFW_ENABLED', true); | 86 | define('T2_NSFW_ENABLED', true); |
| 89 | ``` | 87 | ``` |
| 90 | 88 | ||
| 91 | NSFW 필터 전체 사용 여부입니다. | 89 | NSFW 필터 전체 사용 여부입니다. |
| 92 | 90 | ||
| 93 | - `true`: 필터 활성화 | 91 | - `true`: 필터 활성화 |
| 94 | - `false`: 필터 비활성화 | 92 | - `false`: 필터 비활성화 |
| 95 | 93 | ||
| 96 | ### T2_NSFW_MODE | 94 | ### T2_NSFW_MODE |
| 97 | 95 | ||
| 98 | ```php | 96 | ```php |
| 99 | define('T2_NSFW_MODE', 'browser'); | 97 | define('T2_NSFW_MODE', 'browser'); |
| 100 | ``` | 98 | ``` |
| 101 | 99 | ||
| 102 | 판정 방식입니다. | 100 | 판정 방식입니다. |
| 103 | 101 | ||
| 104 | ||= 값 ||= 의미 || | 102 | ||= 값 ||= 의미 || |
| 105 | || `browser` || 브라우저에서 NSFWJS로 판정 || | 103 | || `browser` || 브라우저에서 NSFWJS로 판정 || |
| 106 | || `server` || 서버 API 경로를 사용하는 레거시 또는 대체 방식 || | 104 | || `server` || 서버 API 경로를 사용하는 레거시 또는 대체 방식 || |
| 107 | 105 | ||
| 108 | 9.1.0에서는 `browser`를 기본 권장값으로 문서화하는 것이 맞습니다. | 106 | 9.1.0에서는 `browser`를 기본 권장값으로 문서화하는 것이 맞습니다. |
| 109 | 107 | ||
| 110 | ### T2_NSFW_ALLOW_SUSPICIOUS | 108 | ### T2_NSFW_ALLOW_SUSPICIOUS |
| 111 | 109 | ||
| 112 | ```php | 110 | ```php |
| 113 | define('T2_NSFW_ALLOW_SUSPICIOUS', true); | 111 | define('T2_NSFW_ALLOW_SUSPICIOUS', true); |
| 114 | ``` | 112 | ``` |
| 115 | 113 | ||
| 116 | `safe`가 아닌 결과 중 `suspect` 또는 `unsafe`를 어떻게 처리할지 결정하는 정책입니다. | 114 | `safe`가 아닌 결과 중 `suspect` 또는 `unsafe`를 어떻게 처리할지 결정하는 정책입니다. |
| 117 | 115 | ||
| 118 | - `true`: 경고 후 업로드를 허용할 수 있음 | 116 | - `true`: 경고 후 업로드를 허용할 수 있음 |
| 119 | - `false`: 정책상 업로드 취소 처리 가능 | 117 | - `false`: 정책상 업로드 취소 처리 가능 |
| 120 | 118 | ||
| 121 | ### T2_NSFW_RUNTIME_ASSET_BASE | 119 | ### T2_NSFW_RUNTIME_ASSET_BASE |
| 122 | 120 | ||
| 123 | ```php | 121 | ```php |
| 124 | define('T2_NSFW_RUNTIME_ASSET_BASE', T2EDITOR_URL . '/vendor'); | 122 | define('T2_NSFW_RUNTIME_ASSET_BASE', T2EDITOR_URL . '/vendor'); |
| 125 | ``` | 123 | ``` |
| 126 | 124 | ||
| 127 | TensorFlow.js, 백엔드 스크립트, NSFWJS, 모델 파일의 **루트 경로**입니다. | 125 | TensorFlow.js, 백엔드 스크립트, NSFWJS, 모델 파일의 **루트 경로**입니다. |
| 128 | 126 | ||
| 129 | 이 값이 틀리면 아래 자산 경로도 모두 틀어질 수 있습니다. | 127 | 이 값이 틀리면 아래 자산 경로도 모두 틀어질 수 있습니다. |
| 130 | 128 | ||
| 131 | ### T2_NSFW_BROWSER_MODEL | 129 | ### T2_NSFW_BROWSER_MODEL |
| 132 | 130 | ||
| 133 | ```php | 131 | ```php |
| 134 | define('T2_NSFW_BROWSER_MODEL', 'MobileNetV2Mid'); | 132 | define('T2_NSFW_BROWSER_MODEL', 'MobileNetV2Mid'); |
| 135 | ``` | 133 | ``` |
| 136 | 134 | ||
| 137 | 브라우저에서 사용할 기본 모델 이름입니다. | 135 | 브라우저에서 사용할 기본 모델 이름입니다. |
| 138 | 136 | ||
| 139 | ### T2_NSFW_BROWSER_MODEL_TYPE | 137 | ### T2_NSFW_BROWSER_MODEL_TYPE |
| 140 | 138 | ||
| 141 | ```php | 139 | ```php |
| 142 | define('T2_NSFW_BROWSER_MODEL_TYPE', 'graph'); | 140 | define('T2_NSFW_BROWSER_MODEL_TYPE', 'graph'); |
| 143 | ``` | 141 | ``` |
| 144 | 142 | ||
| 145 | 모델 유형입니다. | 143 | 모델 유형입니다. |
| 146 | `modelUrl`로 직접 호스팅한 `MobileNetV2Mid`를 읽을 때는 문서와 코드가 모두 이 설정을 기준으로 움직이도록 맞춰 두는 편이 안전합니다. | 144 | `modelUrl`로 직접 호스팅한 `MobileNetV2Mid`를 읽을 때는 문서와 코드가 모두 이 설정을 기준으로 움직이도록 맞춰 두는 편이 안전합니다. |
| 147 | 145 | ||
| 148 | ### T2_NSFW_BROWSER_MODEL_URL | 146 | ### T2_NSFW_BROWSER_MODEL_URL |
| 149 | 147 | ||
| 150 | ```php | 148 | ```php |
| 151 | define( | 149 | define( |
| 152 | 'T2_NSFW_BROWSER_MODEL_URL', | 150 | 'T2_NSFW_BROWSER_MODEL_URL', |
| 153 | T2_NSFW_RUNTIME_ASSET_BASE . '/nsfwjs/models/mobilenet_v2_mid/model.json' | 151 | T2_NSFW_RUNTIME_ASSET_BASE . '/nsfwjs/models/mobilenet_v2_mid/model.json' |
| 154 | ); | 152 | ); |
| 155 | ``` | 153 | ``` |
| 156 | 154 | ||
| 157 | 모델 파일의 실제 URL입니다. | 155 | 모델 파일의 실제 URL입니다. |
| 158 | 브라우저는 결국 이 주소로 `model.json`을 요청합니다. | 156 | 브라우저는 결국 이 주소로 `model.json`을 요청합니다. |
| 159 | 157 | ||
| 160 | ### T2_NSFW_BROWSER_BACKEND_PRIORITY | 158 | ### T2_NSFW_BROWSER_BACKEND_PRIORITY |
| 161 | 159 | ||
| 162 | ```php | 160 | ```php |
| 163 | define('T2_NSFW_BROWSER_BACKEND_PRIORITY', 'webgpu,webgl,wasm,cpu'); | 161 | define('T2_NSFW_BROWSER_BACKEND_PRIORITY', 'webgpu,webgl,wasm,cpu'); |
| 164 | ``` | 162 | ``` |
| 165 | 163 | ||
| 166 | 백엔드 우선순위입니다. | 164 | 백엔드 우선순위입니다. |
| 167 | 문자열로 선언해도 되고, JS 주입 시 배열로 변환하는 방식으로 다룰 수 있습니다. | 165 | 문자열로 선언해도 되고, JS 주입 시 배열로 변환하는 방식으로 다룰 수 있습니다. |
| 168 | 166 | ||
| 169 | ## 브라우저 전역값으로 주입되는 항목 | 167 | ## 브라우저 전역값으로 주입되는 항목 |
| 170 | 168 | ||
| 171 | PHP 설정은 최종적으로 아래 값들로 변환되어 브라우저에 전달됩니다. | 169 | PHP 설정은 최종적으로 아래 값들로 변환되어 브라우저에 전달됩니다. |
| 172 | 170 | ||
| 173 | ```js | 171 | ```js |
| 174 | window.T2EDITOR_NSFW_ENABLED | 172 | window.T2EDITOR_NSFW_ENABLED |
| 175 | window.T2EDITOR_NSFW_MODE | 173 | window.T2EDITOR_NSFW_MODE |
| 176 | window.T2EDITOR_NSFW_ALLOW_SUSPICIOUS | 174 | window.T2EDITOR_NSFW_ALLOW_SUSPICIOUS |
| 177 | window.T2EDITOR_NSFW_SERVER_URL | 175 | window.T2EDITOR_NSFW_SERVER_URL |
| 178 | window.T2EDITOR_NSFW_BROWSER_URL | 176 | window.T2EDITOR_NSFW_BROWSER_URL |
| 179 | window.T2EDITOR_NSFW_BROWSER_MODEL | 177 | window.T2EDITOR_NSFW_BROWSER_MODEL |
| 180 | window.T2EDITOR_NSFW_BROWSER_MODEL_TYPE | 178 | window.T2EDITOR_NSFW_BROWSER_MODEL_TYPE |
| 181 | window.T2EDITOR_NSFW_BROWSER_MODEL_URL | 179 | window.T2EDITOR_NSFW_BROWSER_MODEL_URL |
| 182 | window.T2EDITOR_NSFW_BROWSER_BACKEND_PRIORITY | 180 | window.T2EDITOR_NSFW_BROWSER_BACKEND_PRIORITY |
| 183 | window.T2EDITOR_NSFW_RUNTIME_ASSETS | 181 | window.T2EDITOR_NSFW_RUNTIME_ASSETS |
| 184 | ``` | 182 | ``` |
| 185 | 183 | ||
| 186 | 즉 `editor.lib.php`를 수정했다면, 실제 렌더링된 페이지 소스나 브라우저 콘솔에서 저 값이 제대로 주입됐는지 꼭 확인해야 합니다. | 184 | 즉 `editor.lib.php`를 수정했다면, 실제 렌더링된 페이지 소스나 브라우저 콘솔에서 저 값이 제대로 주입됐는지 꼭 확인해야 합니다. |
| 187 | 185 | ||
| 188 | ## 설치 경로가 바뀔 때 가장 먼저 볼 것 | 186 | ## 설치 경로가 바뀔 때 가장 먼저 볼 것 |
| 189 | 187 | ||
| 190 | 예를 들어 에디터가 아래 경로에 설치됐다면 | 188 | 예를 들어 에디터가 아래 경로에 설치됐다면 |
| 191 | 189 | ||
| 192 | ```text | 190 | ```text |
| 193 | /var/www/html/plugin/editor/t2editor/ | 191 | /var/www/html/plugin/editor/t2editor/ |
| 194 | ``` | 192 | ``` |
| 195 | 193 | ||
| 196 | 웹 경로는 보통 아래처럼 맞춰야 합니다. | 194 | 웹 경로는 보통 아래처럼 맞춰야 합니다. |
| 197 | 195 | ||
| 198 | ```php | 196 | ```php |
| 199 | define('T2EDITOR_URL', '/plugin/editor/t2editor'); | 197 | define('T2EDITOR_URL', '/plugin/editor/t2editor'); |
| 200 | ``` | 198 | ``` |
| 201 | 199 | ||
| 202 | 그 다음에야 `T2_NSFW_RUNTIME_ASSET_BASE`와 `T2_NSFW_BROWSER_MODEL_URL`이 올바른 URL을 만들 수 있습니다. | 200 | 그 다음에야 `T2_NSFW_RUNTIME_ASSET_BASE`와 `T2_NSFW_BROWSER_MODEL_URL`이 올바른 URL을 만들 수 있습니다. |
| 203 | 201 | ||
| 204 | ## 운영 체크리스트 | 202 | ## 운영 체크리스트 |
| 205 | 203 | ||
| 206 | ||= 항목 ||= 확인 내용 || | 204 | ||= 항목 ||= 확인 내용 || |
| 207 | || 정적 파일 응답 || `vendor/` 아래 JS, WASM, model.json이 200 응답인지 확인 || | 205 | || 정적 파일 응답 || `vendor/` 아래 JS, WASM, model.json이 200 응답인지 확인 || |
| 208 | || 전역 설정 주입 || `window.T2EDITOR_NSFW_*` 값이 기대값과 같은지 확인 || | 206 | || 전역 설정 주입 || `window.T2EDITOR_NSFW_*` 값이 기대값과 같은지 확인 || |
| 209 | || 모드 확인 || `browser` 모드인지 확인 || | 207 | || 모드 확인 || `browser` 모드인지 확인 || |
| 210 | || 모델 타입 || `graph`가 필요한 배포인지 확인 || | 208 | || 모델 타입 || `graph`가 필요한 배포인지 확인 || |
| 211 | || 백엔드 선택 || 콘솔에서 실제 선택된 백엔드가 기대와 비슷한지 확인 || | 209 | || 백엔드 선택 || 콘솔에서 실제 선택된 백엔드가 기대와 비슷한지 확인 || |
| 212 | 210 | ||
| 213 | [warning] | 211 | [warning] |
| 214 | 경로를 바꿨다면 캐시를 먼저 의심하기 쉽지만, 실제 원인은 `T2EDITOR_URL`과 `T2_NSFW_RUNTIME_ASSET_BASE` 불일치인 경우가 많습니다. | 212 | 경로를 바꿨다면 캐시를 먼저 의심하기 쉽지만, 실제 원인은 `T2EDITOR_URL`과 `T2_NSFW_RUNTIME_ASSET_BASE` 불일치인 경우가 많습니다. |
| 215 | [/warning] | 213 | [/warning] |
| 216 | 214 | ||
| 217 | ## 수정 요약 | 215 | ## 수정 요약 |
| 218 | 216 | ||
| 219 | 9.1.0 설정 문서 관점에서 중요한 변경점은 다음과 같습니다. | 217 | 9.1.0 설정 문서 관점에서 중요한 변경점은 다음과 같습니다. |
| 220 | 218 | ||
| 221 | - 브라우저 NSFW 엔진을 위한 별도 모델/자산 설정 추가 | 219 | - 브라우저 NSFW 엔진을 위한 별도 모델/자산 설정 추가 |
| 222 | - WebGPU 우선순위를 제어하는 설정 추가 | 220 | - WebGPU 우선순위를 제어하는 설정 추가 |
| 223 | - self-hosted vendor 경로를 1급 설정값으로 승격 | 221 | - self-hosted vendor 경로를 1급 설정값으로 승격 |
| 224 | - 브라우저 전역 설정 주입 항목 확대 | 222 | - 브라우저 전역 설정 주입 항목 확대 |
| 225 | 223 | ||
| 226 | ## 관련 문서 | ||
| 227 | |||
| 228 | - [[guide-nsfwjs-overview|가이드: NSFWJS 기반 이미지 필터 개요]] | ||
| 229 | - [[core-nsfw_api_browser-js|코어 파일: nsfw_api_browser.js]] | ||
| 230 | - [[ops-nsfwjs-selfhost-webgpu-ubuntu|운영: Ubuntu self-hosted + WebGPU 설치]] | ||
| 231 | |||