Skip to content

Repository files navigation

SnapSync logo

SnapSync

Local-first timelapse sync for the Snapmaker U1.

Discover your printer, automate downloads, and keep every timelapse organized on Windows and macOS — without sending anything to the cloud.

CI Latest release Downloads GPL-3.0 license Platforms

Download for Windows Download for macOS


Overview

SnapSync is an open-source desktop companion for the Snapmaker U1. It connects directly to the printer over your local network, finds new timelapse videos, validates each download, and stores it in the folder you choose.

Important

SnapSync is an independent community project. It is not affiliated with, endorsed by, or supported by Snapmaker.

Built around three principles

Local first
No cloud relay, telemetry, or third-party upload.
Safe by design
Atomic transfers, size validation, and host-locked URLs.
Set and forget
Background schedules, tray mode, and persistent deduplication.

Highlights

Automatic discovery
Finds U1 printers through mDNS, with direct IP fallback.
Reliable transfers
Downloads to a temporary file and validates its size before completion.
Smart deduplication
Skips known videos while confirming the local copy still exists.
Background operation
Runs on a configurable schedule and stays available in the system tray.
Visual history
Tracks downloaded, skipped, and failed transfers in one clean interface.
Optional thumbnails
Saves a JPG preview next to each downloaded video.

SnapSync only reads files from the printer. It never deletes remote timelapses.

How it works

flowchart LR
    U1[Snapmaker U1] -->|mDNS discovery| Core[Rust and Tokio core]
    U1 -->|Local Moonraker HTTP| Core
    Core -->|Validated atomic download| Folder[Local timelapse folder]
    Core <--> Tauri[Tauri desktop shell]
    Tauri <--> UI[Vue and TypeScript UI]
Loading
  1. SnapSync discovers the U1 through _snapmaker._tcp.local. or uses the IP you provide.
  2. It queries /server/files/list?root=camera through the local Moonraker API.
  3. New videos are downloaded as .part files.
  4. SnapSync validates the received size and then atomically renames the file.
  5. Persistent history prevents unnecessary downloads on future syncs.

Technology stack

Vue 3 TypeScript Vite Tauri 2 Rust Tokio

Layer Technology Responsibility
Interface Vue 3 + TypeScript Reactive desktop UI and type-safe IPC contracts
Tooling Vite Fast development server and optimized frontend builds
Desktop Tauri 2 Native windows, tray integration, autostart, and installers
Core Rust + Tokio Discovery, scheduling, downloads, and persistence
Printer mDNS + Moonraker HTTP API Local discovery and timelapse access
Delivery GitHub Actions Tested Windows EXE and universal macOS DMG releases

Download and install

Get the newest build from GitHub Releases.

Windows

  1. Download SnapSync_*_x64-setup.exe.
  2. Run the NSIS installer.
  3. Open SnapSync from the Start menu.

macOS

  1. Download SnapSync_*_universal.dmg.
  2. Open the DMG and move SnapSync to Applications.
  3. Launch SnapSync from Applications.

Warning

Current builds are not code-signed. Windows SmartScreen or macOS Gatekeeper may display a warning. On macOS, use System Settings → Privacy & Security → Open Anyway after the first blocked launch. Signing and Apple notarization are planned.

Quick start

  1. Open Settings → Printer.
  2. Select Search network, or enter the U1 IP address manually.
  3. Select Test to verify the connection.
  4. Under General, choose a destination folder.
  5. Select Sync now or enable automatic synchronization.

Requirements

  • Snapmaker U1
  • Windows 10 or newer, or macOS 10.15 or newer
  • Computer and printer connected to the same local network
  • Local firewall access:
    • UDP 5353 for mDNS discovery
    • TCP 7125 for Moonraker
    • TCP 8080 for the U1 download fallback

Development

Prerequisites

  • Node.js 20 or newer
  • Stable Rust toolchain
  • Tauri 2 system dependencies
  • Windows: Visual Studio Build Tools with C++ and WebView2
  • macOS: Xcode Command Line Tools

Run locally

npm ci
npm run tauri dev

Validate

npm run check
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings

Build an installer

npm run tauri build

Native packages must be created on their target operating system. Windows produces an NSIS .exe; macOS produces a .dmg.

Automated releases

Every vX.Y.Z tag on main starts the cross-platform release pipeline:

flowchart LR
    Tag[Version tag] --> Verify[Tests and version validation]
    Verify --> Win[Windows NSIS build]
    Verify --> Mac[Universal macOS build]
    Win --> Release[GitHub Release]
    Mac --> Release
Loading

To publish a future version:

  1. Set the same X.Y.Z version in package.json, src-tauri/Cargo.toml, and src-tauri/tauri.conf.json.
  2. Merge the version change into main.
  3. Create and push the matching tag:
git tag vX.Y.Z
git push origin vX.Y.Z

The release stays in draft mode until both installers finish successfully.

Privacy and security

  • Communication stays on your local network.
  • No analytics or cloud relay is used.
  • Timelapses are never uploaded to a third party.
  • Logs do not contain video contents or credentials.
  • Printer-provided URLs are restricted to the configured printer host.

The proprietary U1 camera service is not included in this repository.

Contributing

Issues and focused pull requests are welcome. Before opening a pull request:

npm run check
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings

Developed by

SnapSync is developed and maintained by Papai Nerd.

References

License

SnapSync is free and open-source software licensed under the GNU General Public License v3.0.

Built for makers who want their timelapses local, organized, and under their control.

About

Automatically sync Snapmaker U1 timelapses to Windows and macOS

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages