A lightweight, offline-capable camera stream viewer for monitoring security cameras, traffic feeds, and other video streams directly in your browser.
- Multiple Stream Types - Supports HLS (.m3u8), HTTP video (MP4/WebM), and MJPEG streams
- Drag & Drop Reordering - Organize your camera grid by dragging cards
- Expandable Cameras - Expand any camera to 2x2 size for a larger view
- Fullscreen Mode - View any stream in fullscreen
- Import/Export Config - Backup and restore your camera setup as JSON
- Dark/Light/System Theme - Choose your preferred appearance
- Offline Storage - All configuration stored locally in IndexedDB
- No Backend Required - Runs entirely in the browser, no server-side storage
| Type | Format | Example URL |
|---|---|---|
| HLS | .m3u8 |
http://server/stream.m3u8 |
| HTTP | MP4/WebM | http://server/video.mp4 |
| MJPEG | Motion JPEG | http://camera/mjpeg |
Browsers cannot play RTSP streams directly. Use a media server to convert RTSP to HLS:
Recommended: go2rtc
- Install go2rtc on your local network
- Add your RTSP streams to go2rtc config
- Use the HLS URL in CamViewer:
http://[go2rtc-ip]:1984/api/stream.m3u8?src=[stream-name]
Other options: MediaMTX, Frigate, or Scrypted.
- Node.js 18+ or Bun
# Install dependencies
npm install
# Start development server
npm run devThe app will be available at http://localhost:5173
# Build for production
npm run build
# Preview production build
npm run previewdocker run -d -p 8080:80 ghcr.io/servettonga/camviewer:latestAccess at http://localhost:8080
# Build the image
docker build -t camviewer .
# Run the container
docker run -d -p 8080:80 camviewerversion: '3.8'
services:
camviewer:
build: .
ports:
- "8080:80"
restart: unless-stoppeddocker-compose up -dAll configuration is stored in your browser's IndexedDB. No server-side database is needed.
- Go to Settings → Export Configuration to download your setup
- Go to Settings → Import Configuration to restore from a JSON file
- Choose between 2 or 4 columns in Settings
- Expanded cameras take 2x2 grid space
- React + TypeScript
- Vite
- Tailwind CSS
- shadcn/ui
- HLS.js for HLS playback
- IndexedDB for local storage
- Nginx (Docker container)
MIT