npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

expo-blur-face

v1.0.2

Published

On-device face detection and blurring for React Native / Expo. Uses Vision (iOS) and ML Kit (Android). No server calls, no FFmpeg — just install and blur.

Readme

expo-blur-face

npm version npm downloads license platforms

Demo

On-device face detection and blurring for React Native / Expo.

Uses Vision on iOS and ML Kit on Android — no server calls, no FFmpeg, no permissions required. Just install and blur.


Features

  • On-device — 100% private, works fully offline
  • Zero config — no config plugin, no npx expo prebuild changes required
  • Fast — hardware-accelerated detection via native frameworks
  • Lightweight — iOS uses built-in Vision + Core Image; Android adds only ML Kit
  • Customizable — control blur intensity, padding, and output format (JPG / PNG)
  • Multi-face — detects and blurs every face in the image simultaneously

Installation

npm install expo-blur-face
# or
yarn add expo-blur-face

No config plugin needed. Works with bare and managed Expo workflows out of the box.


Usage

import { blurFaces } from 'expo-blur-face';

const result = await blurFaces(imageUri, {
  blurIntensity: 30,  // 1-100 (default: 30)
  padding: 10,        // extra px around face bounds (default: 10)
  output: 'jpg',      // 'jpg' | 'png' (default: 'jpg')
  quality: 0.9,       // JPEG quality 0.0-1.0 (default: 0.9)
});

console.log(result.uri);           // file:///path/to/blurred.jpg
console.log(result.facesDetected); // number of faces found and blurred

If no faces are detected, result.uri is the original URI and facesDetected is 0 — no copy is made.

With image picker

import * as ImagePicker from 'expo-image-picker';
import { blurFaces } from 'expo-blur-face';

async function pickAndBlur() {
  const picked = await ImagePicker.launchImageLibraryAsync({
    mediaTypes: ['images'],
    quality: 1,
  });

  if (picked.canceled) return;

  const result = await blurFaces(picked.assets[0].uri, {
    blurIntensity: 40,
    padding: 15,
  });

  console.log(`Blurred ${result.facesDetected} face(s) -> ${result.uri}`);
}

API

blurFaces(fileUrl, options?)

Detects all faces in an image and applies a blur to each detected face region.

Parameters

| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | fileUrl | string | Yes | file:// URI of the image to process | | options | BlurFacesOptions | No | Blur configuration (see below) |

BlurFacesOptions

| Option | Type | Default | Description | |--------|------|---------|-------------| | blurIntensity | number | 30 | Blur strength — 1 (subtle) to 100 (heavy) | | padding | number | 10 | Pixels to expand beyond the detected face bounding box | | output | 'jpg' \| 'png' | 'jpg' | Output image format | | quality | number | 0.9 | JPEG compression quality 0.0-1.0, ignored for PNG |

Returns: Promise<BlurFacesResult>

| Field | Type | Description | |-------|------|-------------| | uri | string | file:// URI of the output image | | facesDetected | number | Number of faces detected and blurred |


How It Works

iOS: VNDetectFaceRectanglesRequest (Vision framework) finds face bounding boxes, then CIGaussianBlur + CISourceAtopCompositing (Core Image) composites blurred regions back onto the original. Output is written to NSTemporaryDirectory() with EXIF preserved.

Android: Google ML Kit Face Detection returns face bounding boxes, then a StackBlur algorithm is applied directly to each face region on the Bitmap. Output is written to context.cacheDir with EXIF preserved.


Requirements

| | Minimum | |---|---| | Expo SDK | 51+ | | iOS | 15.1+ | | Android | API 24 (Android 7.0)+ | | React Native | 0.73+ |


Changelog

1.0.0 — 2026-03-12

  • Initial release
  • On-device face blurring via Vision (iOS) and ML Kit (Android)
  • Configurable blur intensity, padding, output format
  • EXIF data preservation
  • Multi-face support

Contributing

Pull requests are welcome. For major changes, please open an issue first.

git clone https://github.com/faeizfurqan17/expo-blur-face.git
cd expo-blur-face
npm install
cd example && npm install
npx expo run:ios      # or run:android

License

MIT © Faeiz Furqan