La modération d’images est un défi pour tout site ou application acceptant des contenus envoyés par les utilisateurs. Entre les services payants qui transmettent vos fichiers à des serveurs distants et les solutions maison coûteuses à développer, il existe une voie intermédiaire : NSFWJS. Cette bibliothèque JavaScript open source, maintenue par le studio Infinite Red, permet de classer des images potentiellement explicites directement dans le navigateur ou en Node.js, sans jamais envoyer les fichiers vers un service externe. Concrètement, elle s’appuie sur TensorFlow.js pour faire tourner un modèle de vision par ordinateur côté client et attribuer à chaque image un score réparti sur cinq catégories. Pour un développeur web, cela signifie un premier filtre rapide à mettre en place, gratuit et respectueux de la confidentialité, idéal pour identifier les contenus à risque avant qu’ils n’apparaissent sur une plateforme. Dans les sections qui suivent, nous détaillons ce qu’est exactement NSFWJS, comment il fonctionne, ses cas d’usage concrets, ses avantages, son modèle économique et ce qu’il faut en retenir.
Qu’est-ce que NSFWJS ?
NSFWJS est une bibliothèque JavaScript conçue pour identifier rapidement des images potentiellement inappropriées, comme l’indique sa propre description : aider à repérer ces images entièrement dans le navigateur du client. Le projet est porté par Infinite Red et distribué sous licence MIT, ce qui le rend libre, gratuit et modifiable. Techniquement, il repose sur TensorFlow.js et propose plusieurs modèles pré-entraînés, notamment MobileNetV2 et InceptionV3. À partir d’une image fournie, le modèle calcule une probabilité pour cinq classes distinctes : Drawing (dessins sûrs, y compris l’animation), Hentai, Neutral (contenu neutre), Porn et Sexy. La bibliothèque fonctionne aussi bien dans le navigateur que côté serveur avec Node.js, et un package complémentaire existe pour les applications React Native.
Fonctionnalités principales
Le cœur de NSFWJS tient dans une API simple. Après avoir chargé le modèle avec la méthode load, on appelle classify en lui passant une source d’image : balise HTML image, élément canvas, vidéo, données image brutes ou tenseur TensorFlow.js. La fonction retourne la liste des cinq classes accompagnées de leur probabilité, ce qui laisse au développeur le choix du seuil de blocage. Trois modèles sont proposés selon le compromis recherché entre taille et précision : un petit modèle MobileNetV2 en 224×224, une variante intermédiaire, et un modèle InceptionV3 plus lourd en 299×299. La précision annoncée se situe autour de 90 % pour le petit modèle et 93 % pour le modèle intermédiaire. La bibliothèque prend en charge plusieurs backends de calcul (WebGL, WebGPU, WASM, CPU) et peut mettre les modèles en cache dans le navigateur via IndexedDB pour accélérer les chargements suivants. Un projet d’extension Chrome open source, NSFW Filter, s’appuie d’ailleurs sur NSFWJS pour masquer les images sensibles lors de la navigation, illustrant la souplesse de la bibliothèque.
Cas d’usage
NSFWJS trouve naturellement sa place dans la modération de contenu sur les plateformes acceptant des téléversements d’images : forums, réseaux sociaux, marketplaces ou espaces commentaires. Comme l’analyse se déroule côté client, on peut bloquer ou flouter une image suspecte avant même son envoi au serveur, ce qui réduit la bande passante et protège la vie privée des utilisateurs. Les développeurs d’extensions de navigateur l’utilisent pour filtrer automatiquement les images affichées, à l’image de l’extension NSFW Filter. Le package nsfwjs-mobile ouvre la voie aux applications React Native qui souhaitent intégrer un contrôle de contenu sur mobile. Enfin, en environnement Node.js, NSFWJS peut servir de première couche de tri dans un pipeline de traitement d’images, par exemple pour signaler les contenus à examiner manuellement.
Avantages
Le principal atout de NSFWJS est son fonctionnement entièrement côté client : aucune image n’est transmise à un service tiers, un argument de poids pour la confidentialité et la conformité. Vient ensuite la gratuité totale sous licence MIT, qui autorise un usage commercial sans frais ni quotas. La bibliothèque est légère à intégrer, repose sur l’écosystème TensorFlow.js déjà bien documenté, et laisse le développeur libre de choisir son modèle et ses seuils. Sa compatibilité multi-environnements (navigateur, Node.js, React Native) et sa communauté open source active en font une brique réutilisable dans des contextes variés, du prototype au produit en production.
Tarifs
NSFWJS est un projet open source publié sous licence MIT : il est gratuit et ne comporte aucun palier payant, abonnement ou clé d’API à acheter. Il n’existe pas d’API hébergée commerciale ni de service géré officiel : vous installez la bibliothèque via npm ou yarn et hébergez vous-même les modèles si vous le souhaitez. Les seuls coûts éventuels sont indirects, liés à votre propre infrastructure si vous l’exécutez en Node.js à grande échelle. Cette absence de frais en fait une solution particulièrement intéressante pour les projets à budget limité ou les expérimentations.
Conclusion
NSFWJS est une réponse pragmatique au besoin de filtrer des images sensibles sans dépendre d’un service externe. Gratuit, open source et exécuté côté client, il offre aux développeurs un premier garde-fou rapide à déployer et respectueux de la confidentialité. Sa précision de 90 à 93 % et l’absence d’interface no-code le destinent toutefois aux équipes techniques, et il gagne à être complété par une relecture humaine pour les usages à enjeu. Pour un développeur web ou mobile cherchant une solution de modération d’images libre et fiable, c’est une option à connaître.


