Improved media browser for SD card storage on SV3C/CamHiPro compatible IP webcams
5.9K
An improved web application for browsing and viewing recordings and snapshots on an SD-card equipped SV3C/CamHiPro compatible IP webcam.

# Add repository
echo "deb http://dist.cdzombak.net/deb_oss any oss" | sudo tee /etc/apt/sources.list.d/dist-cdzombak-net-deb-oss.list
sudo apt update
# Install
sudo apt install ipcam-browser
Note: You'll also need to install ffmpeg: sudo apt install ffmpeg
brew install cdzombak/oss/ipcam-browser
Note: ffmpeg is automatically installed as a dependency.
Docker images are available on both GitHub Container Registry and Docker Hub:
# Using Docker Hub
docker pull cdzombak/ipcam-browser:latest
# Using GitHub Container Registry
docker pull ghcr.io/cdzombak/ipcam-browser:latest
# Run with Docker Compose (recommended)
# Edit docker-compose.yml with your camera settings, then:
docker compose up -d
# Or run directly with docker run:
docker run -d \
-p 8080:8080 \
-e CAMERA_URL=http://your-camera-ip/web/sd \
-e CAMERA_USERNAME=admin \
-e CAMERA_PASSWORD=your-password \
-e CAMERA_NAME=your-camera-name \
-v ipcam-cache:/var/cache/ipcam-browser \
cdzombak/ipcam-browser:latest
See docker-compose.yml for a complete example with all configuration options.
Download pre-built binaries from the releases page.
Prerequisites:
Install ffmpeg:
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt install ffmpeg
# Windows
# Download from https://ffmpeg.org/download.html
export CAMERA_URL="http://192.168.1.100/web/sd"
export CAMERA_USERNAME="admin"
export CAMERA_PASSWORD="your-password"
export PORT="8080"
ipcam-browser
Then open your browser to http://localhost:8080
Configuration is via environment variables:
CAMERA_URL - [Required] Base URL to camera SD card (e.g., http://192.168.1.100/web/sd)CAMERA_USERNAME - Camera username (default: admin)CAMERA_PASSWORD - [Required] Camera passwordCAMERA_NAME - Display name for your camera (default: camera)PORT - Server port (default: 8080)CACHE_DIR - Directory for caching media files (default: /tmp/ipcam-browser-cache)MAX_CONCURRENT_CONVERSIONS - Maximum parallel video conversions (default: 3)BACKGROUND_CACHE_ENABLED - Enable background media caching (default: false)BACKGROUND_CACHE_INTERVAL_MINUTES - Interval between background cache runs in minutes (default: 5)When enabled via BACKGROUND_CACHE_ENABLED=true, the application periodically fetches the media list from the camera and pre-caches both videos and images. This improves the user experience when loading the web interface after not using it for a while, as content will already be cached and ready to view.
How it works:
Example configuration:
export BACKGROUND_CACHE_ENABLED=true
export BACKGROUND_CACHE_INTERVAL_MINUTES=10 # Cache every 10 minutes
Note: Background caching is disabled by default. The on-demand caching path continues to work regardless of this setting.
To prevent unbounded cache growth, use the provided cleanup script to remove old cached files:
# Remove files older than 30 days from cache directory
./cleanup-old-cache.sh /mnt/ipcam-cache 30
# Set up automated cleanup via cron (runs daily at 3 AM)
crontab -e
# Add this line:
0 3 * * * /path/to/cleanup-old-cache.sh /mnt/ipcam-cache 30 >> /var/log/ipcam-cache-cleanup.log 2>&1
The script:
temp-* files left behind by an interrupted conversion (older than 1 day)This program provides no authentication. I recommend hosting it behind an authenticating reverse proxy or via Tailscale.
This program is provided under the MIT license; see LICENSE in this repo.
Chris Dzombak (dzombak.com / GitHub @cdzombak) assisted by Claude Code.
Content type
Image
Digest
sha256:c20e04c88…
Size
58.9 MB
Last updated
3 months ago
docker pull cdzombak/ipcam-browser