• Stars
    star
    165
  • Rank 228,906 (Top 5 %)
  • Language
    TypeScript
  • Created about 1 year ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A minimal library that helps filter out NSFW images.

NSFW Filter

An npm library that helps filter out inappropriate images using AI.

Current version


Installation

npm i nsfw-filter

Usage

import NSFWFilter from 'nsfw-filter';

const isSafe = await NSFWFilter.isSafe(image);

Full example

import { useState } from 'react';
import NSFWFilter from 'nsfw-filter';

function ImageUploader() {
  const [imageUrl, setImageUrl] = useState('');

  const handleImageUpload = async (event) => {
    const file = event.target.files[0];

    // Check to see if the image is appropriate
    const isSafe = await NSFWFilter.isSafe(file);
    if (!isSafe) return 'Image is not appropriate';

    // Process the image if it is safe
    if (file) {
      const reader = new FileReader();
      reader.onloadend = () => {
        setImageUrl(reader.result);
      };
      reader.readAsDataURL(file);
    }
  };

  return (
    <div>
      <input type="file" onChange={handleImageUpload} />
      {imageUrl && <img src={imageUrl} alt="Uploaded" />}
    </div>
  );
}

export default ImageUploader;

Real world usage

nsfw-filter is currently used in production to process hundreds of thousands of images for a popular image restoration service called restorePhotos. It helps prevent people from uploading inappropriate pictures. See how it's used here.

Using in a browser environment with vite

you can polyfill the core node modules used in nsfw-filter for browser compatibility such as

["path", "stream", "assert", "events", "zlib", "util", "buffer"]

more on this: https://vitejs.dev/guide/troubleshooting.html

install vite-plugin-node-polyfills with npm: https://www.npmjs.com/package/vite-plugin-node-polyfills in vite.config.js

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
import { nodePolyfills } from "vite-plugin-node-polyfills";
import path from "path";
export default defineConfig({
  plugins: [
    nodePolyfills({
      // To add only specific polyfills, add them here. If no option is passed, adds all polyfills
      include: ["path", "stream", "assert", "events", "zlib", "util", "buffer"],
    }),
    react(),
  ],
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "./src"),
      "~": path.resolve(__dirname, "./"),
    },
  },
});

bonus: you can polyfill path to support path aliases for vite when you deploy your could on the cloud for example vercel. so you can use @ import { cn } from "@/lib/utils" disclaimer: using nsfw-filter on the browser will dramatically increase your bundle size.

How it works

This library uses both Tensorflow.js, an OSS library for machine learning models, and nsfwjs to predict whether a given image is NSFW (Not Safe For Work).

More Repositories

1

roomGPT

Upload a photo of your room to generate your dream room with AI.
TypeScript
9,779
star
2

aicommits

A CLI that writes your git commit messages for you with AI
TypeScript
7,574
star
3

restorePhotos

Restoring old and blurry face photos with AI.
TypeScript
3,801
star
4

llamacoder

Open source Claude Artifacts – built with Llama 3.1 405B
TypeScript
2,007
star
5

notesGPT

Record voice notes & transcribe, summarize, and get tasks
TypeScript
1,650
star
6

twitterbio

Generate your Twitter bio with Mixtral and GPT-3.5.
TypeScript
1,639
star
7

llamatutor

An AI personal tutor built with Llama 3.1
TypeScript
1,199
star
8

pdftochat

Chat with your PDFs with AI
TypeScript
910
star
9

turboseek

An AI search engine inspired by Perplexity
TypeScript
820
star
10

qrGPT

An AI QR Code Generator
TypeScript
580
star
11

news-summarizer

News summarizer with AI
TypeScript
346
star
12

tailwind-color-picker

A chrome extension color picker for Tailwind
TypeScript
323
star
13

explorecareers

Explore careers based on your interests and skills with AI
TypeScript
207
star
14

alt-text-generator

A flask API that generates a description for any image using AI.
Python
121
star
15

devwriting

All resources & exercises from the Miami Dev Writer's Retreat
105
star
16

aiangels

A directory of angel investors in AI startups.
TypeScript
71
star
17

devrel-resources

A repo filled with devrel resources, communities, and people in the space to follow
69
star
18

vercel-deploy-extension

A chrome extension that can deploy any Github repo to Vercel for you
JavaScript
56
star
19

whatisdevrel

A site that explains what developer relations is
JavaScript
55
star
20

nextjs-swell

A Next.js and Swell demo
JavaScript
42
star
21

devtool-angels

A site that lists angel investors that invest in devtools
TypeScript
39
star
22

ai-search-engine

AI search engine in 100 LOC
Python
31
star
23

intercom-nextjs

A Next.js app that uses Intercom
JavaScript
24
star
24

yt-search-engine

Search Engine for YouTuber Ali Abdaal's videos
JavaScript
24
star
25

scripts

Scripts I use to enhance my workflow, focused on React & Git
Shell
22
star
26

algorithms

My solved algorithm problems, notes, and techniques
Python
20
star
27

finetune

Fine-tuning Llama-3-8B on the MathInstruct dataset
Python
20
star
28

chat

A simple Next.js chat app.
TypeScript
19
star
29

bobrossextension

A Chrome extension that replaces all images on Youtube.com with pictures of Bob Ross.
JavaScript
19
star
30

passive-to-active-voice

Transform passive voice into active voice with AI.
TypeScript
15
star
31

together-js

Together.ai Node.js SDK
TypeScript
13
star
32

finetuning

Python scripts to finetune GPT 3.5
Python
13
star
33

deliveroo

A site I made for one of my dad's app ideas to get feedback
JavaScript
11
star
34

uploader

Simple Next.js app that uses ByteScale to upload docs
TypeScript
9
star
35

pmsox-site

Landing page for a fintech startup
JavaScript
9
star
36

next-blog

My blog where I talk about devrel, tech, and coding.
JavaScript
9
star
37

prisma-data-proxy

A serverless app using the Next.js and the Prisma Data Proxy presented at Prisma Serverless Conference
JavaScript
8
star
38

nextjs-prisma-demo

A Next.js and Prisma Demo.
JavaScript
7
star
39

nowtrailer-site

A site I made for one of my dad's friends about trailers
JavaScript
6
star
40

vscode

My vscode settings, custom keybindings, and extensions
6
star
41

json_to_firestore

A script that turns a JSON file into a FireStore collection
JavaScript
5
star
42

astro-markdown

A minimalistic markdown page in Astro
JavaScript
4
star
43

dotfiles

My dotfiles
Shell
4
star
44

polls-app

A polling react app that allows users to vote and create polls anonymously
JavaScript
4
star
45

ultimate_rust_crash_course

Exercises from the Rust Fundamentals Course
Rust
3
star
46

eatnow

A mobile app that reminds you to eat each day
JavaScript
3
star
47

evals

Run evals for Together AI models using Braintrust
TypeScript
3
star
48

cell-tracking-viz

Dashboard for Cell Tracking Challenge data for Dr. Andrew Cohen
JavaScript
2
star
49

sveltekit-app

Default Sveltekit app
Svelte
2
star
50

advent-of-code

Advent of Code 2021
2
star
51

css

Documenting my knowledge about CSS
HTML
1
star
52

qualtrics-spss

A script that uses the Qualtrics API to scrape survey data and format it into a CSV/SPSS file
Python
1
star
53

covid-tracker

A React web app that tracks covid in the US (in-progress)
JavaScript
1
star
54

Nutlope

Personal README
1
star
55

covid-classifier

A machine learning model that classifies CT scans as covid or non-covid using a k-nearest neighbor algorithm
Python
1
star
56

TIL

A collection of tips and learnings about CS
1
star
57

dvtpd

Landing page for my DVT prevention medical device
JavaScript
1
star