----------------
  nsfw-service
----------------

[ Usage ]

Send an HTTP POST request to port 9000 with the request body containing raw image data.

Supported formats: WEBP, PNG, GIF, JPEG.

Animated WEBPs and PNGs are not supported and will return a 415 status code.
For GIFs, only the first frame is used.

--- Response Status Codes ---

400 – Invalid image data
405 – Method not allowed (Use POST for inference and HEAD or GET for health)
411 – Failed to read request body
413 – Request body too large
415 – Unsupported image type
422 – Invalid image dimensions (>8192x4096px or <32px)
500 – Server error, response body is plaintext

--- Example Response Body ---

{
    "allowed": true,
    "image": {
        "hash_md5": "50f64bdb0f11d281505bce990e805569",
        "hash_sha256": "f2a94429ccd5e5467f6a1f2bd166d8def75ced242a59b6f71b659e827c008b75",
        "height": 850,
        "width": 850
    },
    "logits": {
        "drawing": 0.85562634,
        "hentai": 0.14418653,
        "neutral": 0.000010294689,
        "porn": 0.00014420893,
        "sexy": 0.00003254598
    },
    "timings": {
        "classify": 7125,
        "decode": 8746,
        "probe": 0,
        "total": 15871
    }
}

[ Config ]

Configure the service using environment variables:

| Name                | Default          | Description
| HTTP_ADDRESS        | 127.0.0.1:9000   | Address and Port to use for requests
| ONNX_RUNTIME_PATH   | <empty>          | Set to anything to enable CUDA, requires you supply your own ONNX runtime
| ONNX_RUNTIME_PATH   | <empty>          | Path to the ONNX runtime library, either a onnxruntime.dll or libonnxruntime.so
| HTTP_CONCURRENCY    | 16               | Maximum concurrent api requests
| HTTP_MAX_BODY_BYTES | 16777216         | Maximum request size in bytes, default is 16MB
| MODEL_THRESHOLD     | 0.7              | Threshold before an image is consider inappropriate

[ Credits ]

Uses the following AI model: https://github.com/GantMan/nsfw_model