Automatic dashcam footage sync for VIOFO cameras (tested with A329S).
Polls for your dashcam on the network at a configurable interval (default: 5 minutes). When reachable, downloads new footage to a local or external drive and prunes old recordings when storage runs low.
Works on macOS, Linux, and WSL.
- Syncs footage when camera is detected on network
- Preserves RO (locked/protected) recordings during pruning
- Alerts when no new footage for configurable days (camera may be disconnected)
- Lock file prevents concurrent syncs
- Status command shows sync state at a glance
git clone https://github.com/johanthoren/viofo-sync.git
cd viofo-sync
make installThe installer will prompt for your camera IP, storage paths, and set up automatic scheduling (launchd on macOS, systemd on Linux).
To uninstall:
make uninstall- Check your router's DHCP leases, or
- Connect to camera WiFi and check gateway, or
- Look in camera network settings
If you prefer manual installation:
- Copy script to
~/.local/bin/viofo-sync - Copy
viofo-sync.conf.exampleto~/.config/viofo-sync.confand edit - Set up scheduler: see
com.example.viofo-sync.plist(macOS) orviofo-sync.service/viofo-sync.timer(Linux)
# Manual sync
viofo-sync
# Check status
viofo-sync --statusConfig file location: ~/.config/viofo-sync.conf
| Setting | Description |
|---|---|
CAM_IP |
Dashcam IP address on your network |
VOLUME |
Mount point of external drive (or any directory on Linux) |
DEST_DIR |
Directory for footage storage |
MIN_FREE_GB |
Start pruning below this free space |
TARGET_FREE_GB |
Stop pruning at this free space |
STALE_DAYS |
Alert after this many days without new footage |
- Checks if storage directory exists
- Checks if camera is reachable on network
- Crawls camera's HTTP directory listing
- Downloads new MP4 files (skips existing)
- Prunes oldest non-RO files if storage is low
- Alerts if no recent footage (camera may be disconnected)
- macOS: Uses
launchdfor scheduling,osascriptfor notifications - Linux/WSL: Uses
systemdfor scheduling,notify-sendfor notifications (optional) - VIOFO dashcam with WiFi
- External storage for footage
curlfor HTTP requestspython3(for path validation on macOS)
This script has limited real-world testing:
- Camera: Only tested with VIOFO A329S. Other VIOFO models may work if they use the same HTTP directory listing format.
- macOS: Primary development and daily use on macOS 26 (Tahoe).
- Linux: Basic functionality verified in container. No long-term use.
- WSL: Untested but should work (uses same code paths as Linux).
Contributions and bug reports from users with other setups are welcome.
This project is not affiliated with, endorsed by, or connected to VIOFO in any way. VIOFO is a trademark of its respective owner.
MIT