Auto-sync VIOFO footage to your computer over WiFi (open source script)

johanthoren

Member
App Developer
Joined
Jan 15, 2026
Messages
31
Reaction score
19
Location
Parañaque
Country
Philippines
Hey everyone,

I just got a VIOFO A329S and didn't want to deal with manually pulling the SD card to transfer footage. Since the camera has WiFi and serves files over HTTP, I wrote a script to automatically sync footage to my computer whenever the car is parked at home.

What it does:
  • Polls for the camera on your network every 5 minutes
  • Downloads new footage when the camera is detected
  • Automatically prunes oldest recordings when storage gets low (keeps locked/RO files)
  • Alerts you if no new footage appears for several days (helpful if the camera disconnects)

Requirements:
  • VIOFO camera with WiFi (tested with A329S, may work with others)
  • macOS or Linux
  • Camera connected to your home WiFi (not the camera's own hotspot)

Setup:
The installer walks you through configuration and sets up automatic scheduling (launchd on macOS, systemd on Linux).

git clone https://github.com/johanthoren/viofo-sync.git
cd viofo-sync
make install

It's open source (MIT license) and available on GitHub: https://github.com/johanthoren/viofo-sync

This is a simple project and testing has been limited to my own A329S on macOS. If you try it with a different VIOFO model, I'd love to hear whether it works. Bug reports and contributions welcome, but I can't promise much support.

One thing I'm still figuring out: How to automatically trigger WiFi station mode when I come home. Right now I have to manually switch it. If anyone knows a way to automate this on the A329S, I'd appreciate the tip!

Cheers!
 
Hey everyone,

I just got a VIOFO A329S and didn't want to deal with manually pulling the SD card to transfer footage. Since the camera has WiFi and serves files over HTTP, I wrote a script to automatically sync footage to my computer whenever the car is parked at home.

What it does:
  • Polls for the camera on your network every 5 minutes
  • Downloads new footage when the camera is detected
  • Automatically prunes oldest recordings when storage gets low (keeps locked/RO files)
  • Alerts you if no new footage appears for several days (helpful if the camera disconnects)

Requirements:
  • VIOFO camera with WiFi (tested with A329S, may work with others)
  • macOS or Linux
  • Camera connected to your home WiFi (not the camera's own hotspot)

Setup:
The installer walks you through configuration and sets up automatic scheduling (launchd on macOS, systemd on Linux).

git clone https://github.com/johanthoren/viofo-sync.git
cd viofo-sync
make install

It's open source (MIT license) and available on GitHub: https://github.com/johanthoren/viofo-sync

This is a simple project and testing has been limited to my own A329S on macOS. If you try it with a different VIOFO model, I'd love to hear whether it works. Bug reports and contributions welcome, but I can't promise much support.

One thing I'm still figuring out: How to automatically trigger WiFi station mode when I come home. Right now I have to manually switch it. If anyone knows a way to automate this on the A329S, I'd appreciate the tip!

Cheers!
Hello, thank you for this. I am very interested but not too clear on some points and I hope you can help. I am not very technical so apologies if the questions seem silly.

To confirm, for this process to work, does the camera need to be switched on? If the car is parked on the drive, and since the automatic triggering of the WIFI station is not yet sorted, do I need to leave the car running? Would I then run the command on the computer while the car is on? Also, I take it having geofencing on and parking mode switched off at home would mean this command wouldn't run even if the automatic connection is sorted?

Could you advise how long the whole process of pruning and downloading will take from start to finish?

I am unsure about the VOLUME step. It mentions that the volume should be the mount point of an external drive. What does this mean exactly? Does it require me to have an external drive such as a micro SD card or an SSD connected? Is it possible to use a cloud storage link, such as OneDrive, instead of an external physical drive?

Regarding DEST_DIR, as I understand it, this refers to the destination folder where the videos and related files will be saved. Is it possible for this destination to be the same as the VOLUME, or could it also be a cloud storage area like OneDrive?

I am hoping you can clarify these points for me. I have managed to get the other steps working, so I think once I understand these two steps, I should be able to fully test the process.

Thank you.
 
Hello, thank you for this. I am very interested but not too clear on some points and I hope you can help. I am not very technical so apologies if the questions seem silly.

To confirm, for this process to work, does the camera need to be switched on? If the car is parked on the drive, and since the automatic triggering of the WIFI station is not yet sorted, do I need to leave the car running? Would I then run the command on the computer while the car is on? Also, I take it having geofencing on and parking mode switched off at home would mean this command wouldn't run even if the automatic connection is sorted?

Could you advise how long the whole process of pruning and downloading will take from start to finish?

I am unsure about the VOLUME step. It mentions that the volume should be the mount point of an external drive. What does this mean exactly? Does it require me to have an external drive such as a micro SD card or an SSD connected? Is it possible to use a cloud storage link, such as OneDrive, instead of an external physical drive?

Regarding DEST_DIR, as I understand it, this refers to the destination folder where the videos and related files will be saved. Is it possible for this destination to be the same as the VOLUME, or could it also be a cloud storage area like OneDrive?

I am hoping you can clarify these points for me. I have managed to get the other steps working, so I think once I understand these two steps, I should be able to fully test the process.

Thank you.

Hi newbeeseun, thanks for your interest! These are great questions, not silly at all. Let me address each one:

Camera Power & WiFi
Yes, the camera needs to be powered on and connected to your home WiFi (in "station mode") for this to work.
My understanding is that WiFi station mode may activate automatically when parking mode is disabled, but I haven't been able to confirm this yet. If that's the case, then with parking mode off and a hardwire kit keeping the camera powered, syncing could potentially happen automatically when you park at home.

The script runs automatically every 5 minutes in the background. When it detects the camera on your network, it syncs. When the camera isn't reachable (car away, camera off, etc.), it simply does nothing and waits for the next check.
Regarding your geofencing question: if you have geofencing set to disable parking mode at home, that might actually help - if my understanding about station mode is correct, disabling parking mode could trigger the WiFi connection automatically. But again, I haven't confirmed this behavior yet. If you test it, I'd love to hear what you find!

Sync Duration
This depends entirely on how much new footage there is and your WiFi speed. The camera's WiFi isn't particularly fast. In my experience:
- A typical day's footage (maybe 2-4GB): 10-20 minutes
- First sync with a full SD card: Could take an hour or more
The script only downloads files it doesn't already have, so subsequent syncs are much faster.

VOLUME and DEST_DIR Explained
These confused me too when I was writing the documentation, so let me clarify:

VOLUME is meant to be the "root" of wherever you're storing footage. The script checks this path exists before syncing, and uses it to calculate free space for the pruning feature. On macOS, external drives appear under /Volumes/YourDriveName, hence the name.

DEST_DIR is the actual folder where footage gets saved. It's typically a subfolder of VOLUME, like /Volumes/ExternalDrive/Dashcam.

Can you use your internal drive?
Absolutely! If you want to store footage on your main drive, you could set:
VOLUME="/Users/yourusername"
DEST_DIR="/Users/yourusername/Dashcam"

Can DEST_DIR be the same as VOLUME?
Yes, technically, though I'd recommend a dedicated subfolder to keep things organized. I might actually remove the need for VOLUME later. But it kind of works as is so I might not bother.

Can you use OneDrive or cloud storage?
Yes, with a caveat. If OneDrive syncs a local folder to the cloud (which is how most cloud sync apps work), you can point DEST_DIR to that folder. For example:
VOLUME="/Users/yourusername/OneDrive"
DEST_DIR="/Users/yourusername/OneDrive/Dashcam"

The footage would download locally first, then OneDrive would sync it to the cloud. Just be mindful of:
- Storage space on your local drive (dashcam footage adds up quickly)
- OneDrive upload bandwidth
- The pruning feature deletes old files locally, which would also delete them from OneDrive

I hope this helps! Let me know if anything is still unclear.
 
Hi newbeeseun, thanks for your interest! These are great questions, not silly at all. Let me address each one:

Camera Power & WiFi
Yes, the camera needs to be powered on and connected to your home WiFi (in "station mode") for this to work.
My understanding is that WiFi station mode may activate automatically when parking mode is disabled, but I haven't been able to confirm this yet. If that's the case, then with parking mode off and a hardwire kit keeping the camera powered, syncing could potentially happen automatically when you park at home.

The script runs automatically every 5 minutes in the background. When it detects the camera on your network, it syncs. When the camera isn't reachable (car away, camera off, etc.), it simply does nothing and waits for the next check.
Regarding your geofencing question: if you have geofencing set to disable parking mode at home, that might actually help - if my understanding about station mode is correct, disabling parking mode could trigger the WiFi connection automatically. But again, I haven't confirmed this behavior yet. If you test it, I'd love to hear what you find!

Sync Duration
This depends entirely on how much new footage there is and your WiFi speed. The camera's WiFi isn't particularly fast. In my experience:
- A typical day's footage (maybe 2-4GB): 10-20 minutes
- First sync with a full SD card: Could take an hour or more
The script only downloads files it doesn't already have, so subsequent syncs are much faster.

VOLUME and DEST_DIR Explained
These confused me too when I was writing the documentation, so let me clarify:

VOLUME is meant to be the "root" of wherever you're storing footage. The script checks this path exists before syncing, and uses it to calculate free space for the pruning feature. On macOS, external drives appear under /Volumes/YourDriveName, hence the name.

DEST_DIR is the actual folder where footage gets saved. It's typically a subfolder of VOLUME, like /Volumes/ExternalDrive/Dashcam.

Can you use your internal drive?
Absolutely! If you want to store footage on your main drive, you could set:
VOLUME="/Users/yourusername"
DEST_DIR="/Users/yourusername/Dashcam"

Can DEST_DIR be the same as VOLUME?
Yes, technically, though I'd recommend a dedicated subfolder to keep things organized. I might actually remove the need for VOLUME later. But it kind of works as is so I might not bother.

Can you use OneDrive or cloud storage?
Yes, with a caveat. If OneDrive syncs a local folder to the cloud (which is how most cloud sync apps work), you can point DEST_DIR to that folder. For example:
VOLUME="/Users/yourusername/OneDrive"
DEST_DIR="/Users/yourusername/OneDrive/Dashcam"

The footage would download locally first, then OneDrive would sync it to the cloud. Just be mindful of:
- Storage space on your local drive (dashcam footage adds up quickly)
- OneDrive upload bandwidth
- The pruning feature deletes old files locally, which would also delete them from OneDrive

I hope this helps! Let me know if anything is still unclear.
Thank you very much for your detailed response. Your explanations were incredibly clear and helpful. Using the information you provided, I was able to get everything working successfully. At present, I have configured the system to sync with iCloud. During my testing, I found that the WiFi does not connect when geofencing is activated.

Once parking mode is disabled at my home location via geofencing, the camera powers down, and the connection is lost. As a result, the syncing process stops, and new files are not uploaded. You correctly pointed out that the initial synchronisation can take some time. I have not managed to leave the car running long enough for a complete sync, but some files did transfer successfully within the time available.

An enhancement that could be beneficial for Viofo would be the option to set different parking recording durations for each geozone. For instance, at home, it would be useful to set the parking recording time to say 15 - 30 minutes instead of two hours or more that might be needed away from home. This adjustment would provide sufficient time for the Wi-Fi connection to establish and for new files to upload.
 
Hi newbeeseun, thanks for your interest! These are great questions, not silly at all. Let me address each one:

Camera Power & WiFi
Yes, the camera needs to be powered on and connected to your home WiFi (in "station mode") for this to work.
My understanding is that WiFi station mode may activate automatically when parking mode is disabled, but I haven't been able to confirm this yet. If that's the case, then with parking mode off and a hardwire kit keeping the camera powered, syncing could potentially happen automatically when you park at home.

The script runs automatically every 5 minutes in the background. When it detects the camera on your network, it syncs. When the camera isn't reachable (car away, camera off, etc.), it simply does nothing and waits for the next check.
Regarding your geofencing question: if you have geofencing set to disable parking mode at home, that might actually help - if my understanding about station mode is correct, disabling parking mode could trigger the WiFi connection automatically. But again, I haven't confirmed this behavior yet. If you test it, I'd love to hear what you find!

Sync Duration
This depends entirely on how much new footage there is and your WiFi speed. The camera's WiFi isn't particularly fast. In my experience:
- A typical day's footage (maybe 2-4GB): 10-20 minutes
- First sync with a full SD card: Could take an hour or more
The script only downloads files it doesn't already have, so subsequent syncs are much faster.

VOLUME and DEST_DIR Explained
These confused me too when I was writing the documentation, so let me clarify:

VOLUME is meant to be the "root" of wherever you're storing footage. The script checks this path exists before syncing, and uses it to calculate free space for the pruning feature. On macOS, external drives appear under /Volumes/YourDriveName, hence the name.

DEST_DIR is the actual folder where footage gets saved. It's typically a subfolder of VOLUME, like /Volumes/ExternalDrive/Dashcam.

Can you use your internal drive?
Absolutely! If you want to store footage on your main drive, you could set:
VOLUME="/Users/yourusername"
DEST_DIR="/Users/yourusername/Dashcam"

Can DEST_DIR be the same as VOLUME?
Yes, technically, though I'd recommend a dedicated subfolder to keep things organized. I might actually remove the need for VOLUME later. But it kind of works as is so I might not bother.

Can you use OneDrive or cloud storage?
Yes, with a caveat. If OneDrive syncs a local folder to the cloud (which is how most cloud sync apps work), you can point DEST_DIR to that folder. For example:
VOLUME="/Users/yourusername/OneDrive"
DEST_DIR="/Users/yourusername/OneDrive/Dashcam"

The footage would download locally first, then OneDrive would sync it to the cloud. Just be mindful of:
- Storage space on your local drive (dashcam footage adds up quickly)
- OneDrive upload bandwidth
- The pruning feature deletes old files locally, which would also delete them from OneDrive

I hope this helps! Let me know if anything is still unclear.
Just an update on this, as I have taken some time to test it out further.

The conclusion is that it appears you need your car to be running and set the WIFI to the station mode to get this script to work.

I deactivated geolocation and enabled parking mode at my address, then connected to WIFI mode. However, it would not work because the WIFI disconnects when in parking mode.

I reactivated geolocation and experienced the same issue. Therefore, I believe the main problem is that the camera deactivates WIFI when the car is in parking mode or turned off, regardless of the geolocation settings.

In my opinion, there are two main obstacles to overcome for this functionality to work well and fully meet most people’s needs:
  • Find a way for WIFI to automatically connect at a specific address. This could be for a set period of time to allow the autosync to work quickly.
  • Find a way to allow WIFI to stay on in parking mode or when the car is turned off. Once again, this could be allowed for a short period to preserve battery life.
  • Another helpful feature would be to allow different parking mode settings per geolocation. For example, you could allow parking mode to run for 30 minutes at your home, so that the autosync works in the background.
Thanks for a wonderful tool.

@VIOFO-Support, any comment please? especially around how WIFI is supposed to work and if supposed to work in parking mode, and any comments to the suggestions in this post. Thank you.
 
Just an update on this, as I have taken some time to test it out further.

The conclusion is that it appears you need your car to be running and set the WIFI to the station mode to get this script to work.

I deactivated geolocation and enabled parking mode at my address, then connected to WIFI mode. However, it would not work because the WIFI disconnects when in parking mode.

I reactivated geolocation and experienced the same issue. Therefore, I believe the main problem is that the camera deactivates WIFI when the car is in parking mode or turned off, regardless of the geolocation settings.

In my opinion, there are two main obstacles to overcome for this functionality to work well and fully meet most people’s needs:
  • Find a way for WIFI to automatically connect at a specific address. This could be for a set period of time to allow the autosync to work quickly.
  • Find a way to allow WIFI to stay on in parking mode or when the car is turned off. Once again, this could be allowed for a short period to preserve battery life.
  • Another helpful feature would be to allow different parking mode settings per geolocation. For example, you could allow parking mode to run for 30 minutes at your home, so that the autosync works in the background.
Thanks for a wonderful tool.

@VIOFO-Support, any comment please? especially around how WIFI is supposed to work and if supposed to work in parking mode, and any comments to the suggestions in this post. Thank you.
I myself would be interested in a clarification on how WiFi Station, Parking, Geolocation, Hardwire Kit, and other relevant pieces work together - because I couldn't piece it together from the manual.

I turned off parking mode, enabled WiFi station, with my hardwire kit connected, and I expected the camera to remain visible on the network when parked at home with plenty of power in the battery, but that didn't seem to be the case. I actually thought my battery was going weak, so I went out to buy a charger only to find out that it's in perfect health.

For now, I'm just leaving my car on ACC power for a while when I want to take a backup. The script picks it up automatically.
 
Just an update on this, as I have taken some time to test it out further.

The conclusion is that it appears you need your car to be running and set the WIFI to the station mode to get this script to work.

I deactivated geolocation and enabled parking mode at my address, then connected to WIFI mode. However, it would not work because the WIFI disconnects when in parking mode.

I reactivated geolocation and experienced the same issue. Therefore, I believe the main problem is that the camera deactivates WIFI when the car is in parking mode or turned off, regardless of the geolocation settings.

In my opinion, there are two main obstacles to overcome for this functionality to work well and fully meet most people’s needs:
  • Find a way for WIFI to automatically connect at a specific address. This could be for a set period of time to allow the autosync to work quickly.
  • Find a way to allow WIFI to stay on in parking mode or when the car is turned off. Once again, this could be allowed for a short period to preserve battery life.
  • Another helpful feature would be to allow different parking mode settings per geolocation. For example, you could allow parking mode to run for 30 minutes at your home, so that the autosync works in the background.
Thanks for a wonderful tool.

@VIOFO-Support, any comment please? especially around how WIFI is supposed to work and if supposed to work in parking mode, and any comments to the suggestions in this post. Thank you.
There is a special firmware to keep the wifi on, but it is the old version : https://we.tl/t-RcfipKNVxe
I will forward this to the related department to ask for a 2.0 version if you need.
 
There is a special firmware to keep the wifi on, but it is the old version : https://we.tl/t-RcfipKNVxe
I will forward this to the related department to ask for a 2.0 version if you need.
I'd love to try that firmware as well. Is there an option to leave the WiFi on for a set period of time? Or until there has been no HTTP traffic for N number of minutes?
 
There is a special firmware to keep the wifi on, but it is the old version : https://we.tl/t-RcfipKNVxe
I will forward this to the related department to ask for a 2.0 version if you need.
Thank you so much. I’m currently running the beta 2.0 firmware, which was released early this year.

I’m guessing that I cannot run both the beta 2.0 firmware and this at the same time.

I’d greatly appreciate it if you could provide feedback to the team so that this feature becomes available in the latest beta release.

Additionally, could you please check if it’s possible to allow setting parking mode time based on geolocation? For instance, I could have 30 minutes of parking time on my drive for autosync to work, and I would need longer parking time in other areas. Perhaps even different parking modes (such as hybrid parking, low impact, etc.) could be set based on geolocation.
 
Additionally, could you please check if it’s possible to allow setting parking mode time based on geolocation? For instance, I could have 30 minutes of parking time on my drive for autosync to work, and I would need longer parking time in other areas. Perhaps even different parking modes (such as hybrid parking, low impact, etc.) could be set based on geolocation.
This sounds like a great feature! I would also love to have a different parking recording configuration based on the location. e.g. Hybrid low bitrate when as a default when at work/shopping and low power impact detection only when at home.
 
I'd love to try that firmware as well. Is there an option to leave the WiFi on for a set period of time? Or until there has been no HTTP traffic for N number of minutes?
Hello again. I hope you’re doing well. I have a quick question. The IP address of my camera has changed, and I’m not sure how or why. Could you please advise me on how to open the script to amend it? Alternatively, should I completely uninstall and reinstall the camera with an updated IP address?

Thanks in advance.
 
Hello again. I hope you’re doing well. I have a quick question. The IP address of my camera has changed, and I’m not sure how or why. Could you please advise me on how to open the script to amend it? Alternatively, should I completely uninstall and reinstall the camera with an updated IP address?

Thanks in advance.
You can edit the configuration file at ~/.config/viofo-sync.conf where ~ is short for your home directory. Files and directories starting with "." are hidden by default, so you will need to update the settings to find it, or edit it through the terminal.

I recommend configuring your router so that it reserves an IP for the MAC address of your camera.
 
@VIOFO-Support, why don't you provide a file in your webserver exposed by the cam that would contain structured data of actual videos/photos (CSV, json, whatever..) so we don't have to parse HTML.. that's not reliable.
Eventually, some sort of simple API.. But not sure if you can manage it on the hardware itself, if it's capable, can we have one? 🙂

Also an option that would let connect the cam via an app while connected in WiFi station mode.

I also opt for a feature that would keep refreshing wifi switch off time counter instead of making it "on" all the time. That drains the battery.

We will write our own local backup tooling. We just need reliable environment provided by you.
 
@VIOFO-Support, why don't you provide a file in your webserver exposed by the cam that would contain structured data of actual videos/photos (CSV, json, whatever..) so we don't have to parse HTML.. that's not reliable.
Eventually, some sort of simple API.. But not sure if you can manage it on the hardware itself, if it's capable, can we have one? 🙂

Also an option that would let connect the cam via an app while connected in WiFi station mode.

I also opt for a feature that would keep refreshing wifi switch off time counter instead of making it "on" all the time. That drains the battery.

We will write our own local backup tooling. We just need reliable environment provided by you.
100%
 
Back
Top