AIR Transfer is a lightweight, local web application designed for astrophotographers to automatically sync captured images and video files from their ZWO ASIAIR device directly to a local folder (such as an external hard drive, SSD, or local directory) on macOS, Windows, or Linux.
It resolves network connections natively based on your host operating system (using macOS mount_smbfs system mounts, Windows UNC direct paths, or Linux mount -t cifs system mounts), walks the remote directory tree recursively, and copy-syncs new files asynchronously.
- 📡 Auto-Discovery: Scans your local network subnet to automatically discover and locate active ASIAIR devices.
- 📂 Cross-Platform Folder Browser:
- On macOS: Opens a native Finder folder dialog.
- On Windows: Opens a native PowerShell-based folder selection dialog.
- On Linux: Opens a
zenity-based directory selector (or prompts you to type the path manually).
- 🚀 High-Speed Native Syncing:
- On macOS & Linux: Local mounts are created and parsed.
- On Windows: Reads the network path directly using native Windows UNC network paths (
\\<IP>\<Share>).
- ⚡ Type-Direct Walking: Asynchronously queries the folder structures with direct entry type scanning, bypassing heavy network round-trips.
- 🗂 Multi-Share Scan: Automatically iterates through all standard ASIAIR shares (
EMMC Images,Images,Udisk Images,Samba) to find images wherever they are stored. - ⚙️ Configurable File Filters: Choose to synchronize FITS (
.fit,.fits), XISF (.xisf), JPG (.jpg,.jpeg), MP4 (.mp4), or AVI (.avi) files. - 🔄 Incremental & Non-destructive: Only copies new files (based on filename and size matches) and never deletes files from either the ASIAIR or your local drive.
- 📅 Auto-Scheduler: Enable background sync to run automatically at a regular interval (e.g., every 30 seconds).
- Operating System: macOS, Windows, or Linux.
- Node.js: Version 16 or newer.
-
Clone or Copy the repository to your local machine:
cd air_transfer -
Install Node.js dependencies:
npm install
-
Start the local server:
npm start
Note: The server uses NTLM authentication to negotiate with the ASIAIR Samba service. The start script automatically runs with
--openssl-legacy-providerto allow secure legacy negotiations on newer versions of Node.js. -
Open the Web Dashboard: Go to http://localhost:4880 in your web browser.
- Discover your ASIAIR: Click the Discover button next to the IP address input. The app will scan your network subnet and return any active ASIAIR controllers. Click a discovered device in the list to select its IP.
- Select Destination Folder: Click the Browse button next to the local path input. A native folder dialog will open to select your target directory (on Linux, if GUI dialogs are unavailable, simply type the path manually).
- Configure File Filters: Check the box for each file type you want to transfer (e.g., FITS, XISF, JPG, MP4, AVI).
- Trigger a Sync:
- Click Save Settings to write your changes to disk.
- Click Sync Now to run a manual, instantaneous sync cycle.
- Toggle Enable Automatic Scheduling to automatically run the sync cycle in the background at your designated interval.
- View Activity Logs: The interactive console logs on the right side of the screen show the real-time mounting state, folder walk details, and copy progress.
air_transfer/
├── public/ # Frontend web assets
│ ├── index.html # Space-themed layout
│ ├── styles.css # CSS styling variables, glassmorphic styles
│ └── app.js # Client-side API fetchers and polling
├── server.js # Node.js backend express server & sync engine
├── package.json # Run scripts and package configuration
├── .gitignore # Git ignore definitions
└── README.md # Project documentation
This software is released under the MIT License.