A clean, dark-themed web app for managing and downloading files from VIOFO dashcams over WiFi.
- Auto-sync: Priority queue downloads locked (RO) files first, then normal driving clips. Parking files are never auto-downloaded.
- File browser: Table view with filtering, sorting, date range search, and server-side pagination.
- Gallery: Card-based layout with lazy-loaded thumbnails and intersection observer.
- Manual pull: Download individual files from the dashcam to your server on demand.
- Delete: Permanent delete for both local storage and dashcam SD card, with confirmation dialogs.
- Bulk delete: Select multiple files (with shift-click range select) and delete in one action.
- Storage management: See disk usage at a glance, and bulk-delete old files by age.
- Download controls: Pause, resume, cancel downloads and clear the queue from the dashboard.
Tested on the VIOFO A229 Pro. Any VIOFO dashcam that exposes a standard HTTP web interface (typically at http://192.168.1.254/DCIM) should work. Your dashcam should receive 192.168.1.254 from your DHCP server so you can also use the official VIOFO mobile app on the same network.
- Debian/Ubuntu Linux (or compatible)
- Python 3,
python3-venv,python3-pip - Node.js and npm
- FFmpeg (for thumbnail generation)
- Systemd (for service management)
git clone https://github.com/renfrewcountyscanner/viofo-a229-manager.git
cd viofo-a229-manager
sudo ./install.shThe default install directory is /app/viofo-manager. You can change it:
sudo ./install.sh /opt/my-dashcamThen open http://<your-server-ip>:8000 in a browser.
If you prefer to set things up yourself:
# 1. System dependencies
sudo apt-get update
sudo apt-get install -y python3 python3-venv python3-pip nodejs npm ffmpeg
# 2. Create install directory (replace with your path)
export INSTALL_DIR=/app/viofo-manager
sudo mkdir -p "$INSTALL_DIR"
# 3. Copy files
sudo cp -r backend frontend config.json systemd "$INSTALL_DIR/"
# 4. Python virtualenv
sudo python3 -m venv "$INSTALL_DIR/venv"
sudo "$INSTALL_DIR/venv/bin/pip" install -r "$INSTALL_DIR/backend/requirements.txt"
# 5. Build frontend
cd "$INSTALL_DIR/frontend"
sudo npm install
sudo npm run build
# 6. Install systemd service
sudo cp "$INSTALL_DIR/systemd/dashcam-backend.service" /etc/systemd/system/
sudo sed -i "s|/app/viofo-manager|$INSTALL_DIR|g" /etc/systemd/system/dashcam-backend.service
sudo systemctl daemon-reload
sudo systemctl enable dashcam-backend
sudo systemctl start dashcam-backendEdit config.json (default: /app/viofo-manager/config.json):
{
"dashcam_url": "http://192.168.1.254/DCIM",
"save_path": "/data/dashcam/",
"sync_interval_seconds": 90,
"directories": ["MOVIE/RO", "MOVIE", "MOVIE/Parking"],
"sync_directories": ["MOVIE/RO", "MOVIE"]
}| Field | Description |
|---|---|
dashcam_url |
Base URL of the dashcam HTTP server |
save_path |
Local directory to save downloaded files |
sync_interval_seconds |
How often to check for new files |
directories |
All folders shown in the app (including Parking) |
sync_directories |
Folders that are auto-downloaded (Parking excluded by design) |
You can also set environment variables:
DASHCAM_CONFIG_PATH— path toconfig.jsonDASHCAM_SAVE_PATH— override the save path
There is no built-in authentication. Run this on a trusted local network. If you need to expose it to the internet, place it behind a reverse proxy (Nginx, Caddy, Traefik) with Basic Auth or OAuth.
- Make sure your server and the dashcam are on the same WiFi network.
- Verify the dashcam IP in Settings. It should match what your router assigned (commonly
192.168.1.254). - Try visiting
http://192.168.1.254/DCIM/MOVIE/directly from the server to confirm HTTP access.
- Check
journalctl -u dashcam-backend -ffor errors. - The VIOFO HTTP server is single-threaded: while a download is in progress, directory listings may return empty. The sync loop handles this by retrying on the next cycle.
- Ensure the
save_pathdirectory is writable by the service user.
- Make sure
ffmpegis installed and in your system PATH. - Check disk space in the thumbnail cache directory (
backend/.thumbcache/).
MIT License — see LICENSE.
