MeeeetupSDK documentationJA

Camera SDK

The Meeeetup camera SDK turns a video stream into one good photograph per face. It detects faces, tracks each one across frames, scores how well the subject is facing the lens, and hands you the best frame it saw.

It is capture-only. The SDK never opens a socket: you receive face crops through a callback and decide where they go — the Meeeetup /capture API, your own backend, disk, anywhere.

Packages

Package Install What it is
@meeeetup/camera-core pnpm add @meeeetup/camera-core The pipeline: tracking, pose scoring, selection. No DOM, no native code.
@meeeetup/camera-web pnpm add @meeeetup/camera-web MediaPipe BlazeFace + React provider, hooks and components.
@meeeetup/camera-react-native pnpm add @meeeetup/camera-react-native Vision Camera frame processor backed by native ML Kit.

The platform packages depend on core, so installing @meeeetup/camera-web pulls the pipeline with it. Install core on its own only when you are wiring a detector the SDK does not ship.

Both platform packages are published publicly on npmjs.org — no token, no registry configuration.

How a face becomes a photo

video frame
  └─ detector (MediaPipe on web, ML Kit on native) → Detection[]
       └─ admission: drop anything under minDetectionScore or minFaceHeight
            └─ track: match each face to a track by centroid distance
                 └─ score pose: getFrontalness() → 0–100
                      └─ select the best frame for that track
                           └─ onSelect(face) / onBatchCapture(faces)

Two things are worth internalising before you configure anything:

Two capture modes

Passive watches a room. Every face in frame is tracked independently, best frames are buffered, and a timer hands them to you in batches. This is the mode for a ceiling camera, a doorway, a reception desk that nobody interacts with.

Interactive captures one subject who knows they are being photographed — a check-in kiosk. On web this is the alignment ring: the subject centres their face, holds still, and a frame is taken.

<MeeeetUpCamProvider mode="passive" onBatchCapture={send}>
  <CameraViewport />
</MeeeetUpCamProvider>

Where to go next

Nothing beats watching it run: the live demo executes this exact pipeline in your browser, with the thresholds on sliders.