Wrapper around NSFWJS to provide API.
Find a file
Andrew 0155c893c2
Add docker image with min version of model (#50)
* Add docker image with min version of model

* codestyle fix

* build image on pull requests

* fix build

* update eslint rules

* update readme

* update deps

* update ci
2023-04-02 15:04:28 +02:00
.github Add docker image with min version of model (#50) 2023-04-02 15:04:28 +02:00
models Add docker image with min version of model (#50) 2023-04-02 15:04:28 +02:00
src Add docker image with min version of model (#50) 2023-04-02 15:04:28 +02:00
.dockerignore include model to docker image 2023-03-06 11:25:32 +01:00
.eslintrc.js Add docker image with min version of model (#50) 2023-04-02 15:04:28 +02:00
.gitattributes initial 2021-09-23 22:37:07 +02:00
.gitignore initial 2021-09-23 22:37:07 +02:00
Dockerfile Add docker image with min version of model (#50) 2023-04-02 15:04:28 +02:00
package.json Add docker image with min version of model (#50) 2023-04-02 15:04:28 +02:00
README.md Add docker image with min version of model (#50) 2023-04-02 15:04:28 +02:00
tsconfig.json Add docker image with min version of model (#50) 2023-04-02 15:04:28 +02:00
yarn.lock Add docker image with min version of model (#50) 2023-04-02 15:04:28 +02:00

NSFW API

build TypeScript

Wrapper around NSFWJS to provide API.

Usage

Docker

There are docker images bundled with models v3 from https://github.com/gantman/nsfw_model:

  • ghcr.io/arnidan/nsfw-api:latest - bundled with TensorflowJS 299x299 Image Model (better detection, as for me)
  • ghcr.io/arnidan/nsfw-api:latest-min - bundled with TensorflowJS Quantized 299x299 Image Model (see #39)

Each image is available for linux/amd64 and linux/arm64 platforms.

docker run -p 3000:3000 ghcr.io/arnidan/nsfw-api:latest
docker-compose.yml example
version: "3.9"

services:
  nsfw-api:
    image: "ghcr.io/arnidan/nsfw-api:latest"
    ports:
      - "3000:3000"
    restart: always

Manual deploy

  1. Clone the repo
  2. Download and unpack model from models repo to model folder
  3. yarn
  4. yarn build
  5. yarn start

Now app started on port 3000.

API Methods

  • POST /classify
  • POST /classify-many

POST /classify

Example of the request

POST /classify HTTP/1.1
Content-Type: multipart/form-data

Image should be provided in image field.

Example of the response

HTTP/1.1 200 OK
Content-Type: application/json
{
    "porn": 0.59248286485672,
    "sexy": 0.39802199602127075,
    "hentai": 0.006243097595870495,
    "neutral": 0.0031403270550072193,
    "drawing": 0.00011181648733327165
}

POST /classify-many

Example of the request

POST /classify-many HTTP/1.1
Content-Type: multipart/form-data

Images should be provided in images field.

Example of the response

HTTP/1.1 200 OK
Content-Type: application/json
[
    {
        "porn": 0.3996206820011139,
        "neutral": 0.388679563999176,
        "sexy": 0.19470958411693573,
        "hentai": 0.015063910745084286,
        "drawing": 0.001926235854625702
    },
    {
        "sexy": 0.8366416692733765,
        "porn": 0.13645528256893158,
        "neutral": 0.0222245492041111,
        "hentai": 0.004213324282318354,
        "drawing": 0.0004651622730307281
    },
    {
        "sexy": 0.8017168045043945,
        "porn": 0.1770564466714859,
        "neutral": 0.015829339623451233,
        "hentai": 0.005097625777125359,
        "drawing": 0.00029983260901644826
    }
]