use-simple-camera
v2.0.1
Published
Production-ready React Hooks for Camera, Video Recording, QR/Barcode Scanning, Motion Detection, and Audio Analysis. Zero dependencies, fully typed, and easy to use.
Maintainers
Readme
🎥 Use Simple Camera
Use Simple Camera is a production-ready, zero-dependency React hook library for comprehensive camera and media handling. It provides a robust set of hooks for video recording, local/remote storage, computer vision (barcodes, motion detection), and hardware controls (zoom, flash, pan, tilt).
✨ Features
- 📸 Easy Camera Access: Simple API to get camera stream, switch cameras, and capture images.
- 🎥 Video Recording: Record video/audio blobs with
MediaRecorderAPI. - 💾 Storage: Save recordings to IndexedDB or upload via XHR/S3.
- 🔍 Computer Vision: Built-in hooks for Barcode detection and Motion detection.
- 🛠 Hardware Controls: Control Zoom, Flash, Pan, and Tilt if supported.
- 🎙 Audio Utilities: Monitor microphone volume levels in real-time.
- 📱 Orientation: Detect device orientation for responsive UI.
- 🌲 Tree Shakeable: Import only the hooks you need.
📦 Installation
npm install /use-simple-camera
# or
pnpm add /use-simple-camera
# or
yarn add /use-simple-camera⚡ Quick Start
The useSimpleCamera hook is the entry point that composes most features, but you can use individual hooks as standalone primitives.
import { useSimpleCamera } from "/use-simple-camera";
const App = () => {
const { stream, ref, error, startCamera, captureImage } = useSimpleCamera();
if (error) return <p>Error: {error.message}</p>;
return (
<div>
<video ref={ref} autoPlay muted playsInline />
<button onClick={() => captureImage()}>Take Photo</button>
</div>
);
};📚 API Documentation
1. useSimpleCamera
The main hook for managing camera lifecycle, permissions, and stream state.
| Property | Type | Description |
| :--- | :--- | :--- |
| stream | MediaStream \| null | The active camera stream. |
| startCamera | (constraints?) => Promise | Manually starts the camera. |
| stopCamera | () => void | Stops all tracks and releases camera. |
| captureImage | (options?) => string | Captures a base64 image. |
| error | CameraError \| null | Typed error object if something fails. |
| isCameraActive | boolean | True if stream is active. |
| switchCamera | () => void | Toggles between front and back cameras. |
2. useRecorder
Handles video and audio recording with support for separate streams and callbacks.
import { useRecorder } from "use-simple-camera";
const { startRecording, stopRecording, isRecording } = useRecorder(stream);| Property | Type | Description |
| :--- | :--- | :--- |
| startRecording | (options?) => void | Starts recording media. Options: mode, onComplete. |
| stopRecording | () => void | Stops recording and triggers onComplete with blob. |
| takeSnapshot | () => Promise<Blob> | Captures a high-res still photo. |
3. useStorage
Manage local persistence (IndexedDB) and remote uploads (S3/XHR).
import { useStorage } from "use-simple-camera";
const { saveToLocal, uploadToRemote } = useStorage();| Property | Type | Description |
| :--- | :--- | :--- |
| saveToLocal | (blob, name, opts) => Promise | Save blob to IndexedDB with optional retention. |
| getFromLocal | (name) => Promise<Blob> | Retrieve blob from IndexedDB. |
| uploadToRemote | (blob, opts) => Promise | Upload to signed URL. Options: headers, timeout, etc. |
4. useCameraControls
Control hardware features like Zoom, Flash, Pan, and Tilt.
import { useCameraControls } from "use-simple-camera";
const { zoom, setZoom, flash, setFlash, supports } = useCameraControls(stream);5. useBarcodeScanner
Detects QR codes and Barcodes in real-time.
const { barcodes, isScanning } = useBarcodeScanner(stream, { formats: ['qr_code'] });6. useMotionDetection
Detects movement in the video feed using pixel differencing.
const { motionDetected } = useMotionDetection(stream, { threshold: 10 });7. useAudioLevel
Monitors real-time microphone volume.
const { volume } = useAudioLevel(stream); // 0-1008. useOrientation
Tracks device screen orientation.
const { orientation, angle } = useOrientation(); // 'portrait' | 'landscape'9. useMediaDevices
Enumerates available audio and video inputs.
const { videoDevices, audioDevices } = useMediaDevices();🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
📄 License
This project is licensed under the MIT License.
