别再把图片上传到第三方网站查“是不是黄图”了。
那些网站看着免费,其实悄悄存你图、分析你习惯、甚至拿去训练模型——你根本不知道后台在干啥。
而这个叫 nsfwjs 的工具,整个检测过程全在你自己的浏览器里跑,图片一帧都不出你的电脑。
替代了哪些付费软件
它不直接对标某款具体收费App,而是干掉了整类“云查图”服务的付费逻辑:比如某些企业用的网页内容审核API,按调用量收费,单次几毛到一块不等;小团队每月轻松花掉几百块。
数据全程不出你的电脑。
也替代了部分手机厂商内置的“相册智能过滤”功能——那些功能要么关不掉,要么只对自家云盘生效,还常误删动漫截图。而 nsfwjs 是纯前端,你嵌进任何网页就能用,想查哪张查哪张。
官方没提兼容性,这点得自己确认;但文档明确说支持 iOS 和主流 Linux 桌面浏览器,Windows 和 macOS 用户只要用 Chrome/Firefox/Safari 就能跑起来。
Android 用户注意:需使用 Chrome 84+ 或 Firefox 79+,旧版 WebView 不支持 WebAssembly 后端,可能无法加载中大型模型。
如果你用的是 Electron 封装的桌面应用,它也能工作,只要底层 Chromium 版本够新,且未禁用 WebGL 或 WASM。
不支持 IE,也不支持 Safari 13 以下版本,因为这些环境缺少 TensorFlow.js 所需的 WebGPU 或 WebGL2 基础能力。
核心功能
- 上传一张图,3秒内返回5类概率:Drawing(安全动漫)、Hentai(色情动漫)、Neutral(普通图)、Porn(真实色情)、Sexy(擦边)。不是简单打个“是/否”,而是告诉你“像什么”,方便你人工复核。
- 不用注册、不用登录、不联网查图,模型文件下载后就存在本地内存里,断网也能分类。你关掉网页,所有数据自动清空,不留痕迹。
- 支持三种模型大小可选:最小版(MobileNetV2)占内存少,适合老手机;中号版(MobileNetV2Mid)准确率约93%,平衡速度和精度;最大版(InceptionV3)更准但吃资源。你按自己设备选就行,不用硬扛。
- 能直接嵌进你自己的网页或内部系统里。比如公司HR建个简历上传页,加三行代码就能自动过滤不合适的头像;或者你做个私人图床,上传前先过一遍,省得回头手忙脚乱删。
- 没有后台、没有账号、没有设置项。它就是一个 JavaScript 库,你调用 load() 和 classify() 两个函数,剩下的事它自己干。连“偏好设置”这种按钮都不存在。
- 开源协议是 MIT,意味着你可以放心把它放进商业项目里用,改代码、打包进App、甚至二次封装卖服务,法律上都没问题,只要保留原作者声明。
- 支持多种部署方式:可直接用 CDN 引入,也可通过 npm 安装后用 Webpack/Vite 打包;React、Vue、Svelte 项目都能接入,只需确保 DOM 元素已挂载再调用 classify。
- 模型加载时会自动检测当前浏览器支持的后端:优先尝试 WebGPU(Chrome 120+),失败则降级到 WebGL,最后 fallback 到 WASM。整个过程对开发者透明,无需手动切换。
上手只要三步
- 打开官网 demo 页:nsfwjs.com,直接拖图进去试试效果。这是最零门槛的方式,不用装任何东西,Chrome 浏览器点开就能用。
- 如果想集成进自己的网页,用 npm 安装:npm install nsfwjs,然后照着 README 里那段 4 行 JS 代码抄过去,替换掉页面里的
img元素 ID 就行。 - 嫌 CDN 加载慢?文档里写了怎么“自托管模型文件”:下载好模型包,放到你自己的服务器上,再改一行加载路径,这样以后每次访问都从你家域名拉,更快更稳。
- 遇到模型加载失败?检查浏览器控制台报错类型:如果是 CORS 错误,说明你没配好服务器响应头;如果是 “model not found”,大概率是你改错了路径名,比如把
model.json写成model.bin。 - 想减小首屏体积?可以只引入
nsfwjs/core,再手动导入需要的模型定义,Webpack 会自动做 tree-shaking,最终打包体积比全量引入小 40% 左右。
项目信息
NSFW detection on the client-side via TensorFlow.js






