Không có mô tả

tuanchris a41d1ac3bd Merge origin/main into feature/native-deployment 4 tháng trước cách đây
.github 0ed12bdf9c Migrate from Docker to native systemd + nginx deployment 4 tháng trước cách đây
dune-weaver-touch 0ed12bdf9c Migrate from Docker to native systemd + nginx deployment 4 tháng trước cách đây
firmware 0132886653 update config 4 tháng trước cách đây
frontend 63997d5d6b Restrict /setup and /wifi-setup in Play Only security mode 4 tháng trước cách đây
modules a1fc3ee0eb Expose touch screen power and brightness to Home Assistant via MQTT 4 tháng trước cách đây
nginx 0ed12bdf9c Migrate from Docker to native systemd + nginx deployment 4 tháng trước cách đây
patterns 1d508dba40 update mini clear patterns 8 tháng trước cách đây
scripts ed8e7bc966 Fix SK6812 RGBW LED support and add frontend build to pre-commit hook 4 tháng trước cách đây
static 63997d5d6b Restrict /setup and /wifi-setup in Play Only security mode 4 tháng trước cách đây
steps_calibration 4a282335fb latest new_ui 1 năm trước cách đây
templates 5a8083d14a feat: Complete React UI rewrite with new frontend architecture (#112) 5 tháng trước cách đây
tests 92a7d5d366 Fix wrong pattern plays after playlist completion and improve pause/resume UX 5 tháng trước cách đây
wifi 0ed12bdf9c Migrate from Docker to native systemd + nginx deployment 4 tháng trước cách đây
.dockerignore 5a8083d14a feat: Complete React UI rewrite with new frontend architecture (#112) 5 tháng trước cách đây
.gitattributes 5a8083d14a feat: Complete React UI rewrite with new frontend architecture (#112) 5 tháng trước cách đây
.gitignore d2037ee167 Commit pre-built frontend, remove Node.js from Pi deployment 4 tháng trước cách đây
CONTRIBUTING.md 5a8083d14a feat: Complete React UI rewrite with new frontend architecture (#112) 5 tháng trước cách đây
LICENSE 4a282335fb latest new_ui 1 năm trước cách đây
PATTERN_CREDITS.md 4a282335fb latest new_ui 1 năm trước cách đây
README.md 5a8083d14a feat: Complete React UI rewrite with new frontend architecture (#112) 5 tháng trước cách đây
VERSION 7ca0faf42f Add app security, settings/state split, and browse page improvements 5 tháng trước cách đây
__init__.py 4a282335fb latest new_ui 1 năm trước cách đây
dune-weaver.service ad0784761e Run service as root for NeoPixel DMA access 4 tháng trước cách đây
dw c6e9b6daff Fix git 'dubious ownership' when dw update runs as root 4 tháng trước cách đây
main.py a1fc3ee0eb Expose touch screen power and brightness to Home Assistant via MQTT 4 tháng trước cách đây
package-lock.json 5a8083d14a feat: Complete React UI rewrite with new frontend architecture (#112) 5 tháng trước cách đây
package.json 5a8083d14a feat: Complete React UI rewrite with new frontend architecture (#112) 5 tháng trước cách đây
pyproject.toml 5a8083d14a feat: Complete React UI rewrite with new frontend architecture (#112) 5 tháng trước cách đây
requirements-dev.txt 5a8083d14a feat: Complete React UI rewrite with new frontend architecture (#112) 5 tháng trước cách đây
requirements-nonrpi.txt 5a8083d14a feat: Complete React UI rewrite with new frontend architecture (#112) 5 tháng trước cách đây
requirements.txt 00af48c484 Fix Pi 5 NeoPixel package version - use pre-release 1.0.0rc1 6 tháng trước cách đây
setup-pi.sh d2037ee167 Commit pre-built frontend, remove Node.js from Pi deployment 4 tháng trước cách đây

README.md

Dune Weaver

Patreon

Dune Weaver

An open-source kinetic sand art table that creates mesmerizing patterns using a ball controlled by precision motors.

Features

  • Modern React UI — A responsive, touch-friendly web interface that installs as a PWA on any device
  • Pattern Library — Browse, upload, and manage hundreds of sand patterns with auto-generated previews
  • Live Preview — Watch your pattern come to life in real time with progress tracking
  • Playlists — Queue up multiple patterns with configurable pause times and automatic clearing between drawings
  • LED Integration — Synchronized lighting via native DW LEDs or WLED, with separate idle, playing, and scheduled modes
  • Still Sands Scheduling — Set quiet hours so the table pauses automatically on your schedule
  • Multi-Table Support — Control several sand tables from a single interface
  • Home Assistant Integration — Connect to Home Assistant or other home automation systems using MQTT
  • Auto-Updates — One-click software updates right from the settings page
  • Add-Ons — Optional Desert Compass for auto-homing and DW Touch for dedicated touchscreen control

How It Works

The system is split across two devices connected via USB:

┌─────────────────┐         USB          ┌─────────────────┐
│  Raspberry Pi   │ ◄──────────────────► │  DLC32 / ESP32  │
│  (Dune Weaver   │                      │  (FluidNC)      │
│   Backend)      │                      │                 │
└─────────────────┘                      └─────────────────┘
        │                                        │
        │ Wi-Fi                                  │ Motor signals
        ▼                                        ▼
   Web Browser                            Stepper Motors
   (Control UI)                           (Theta & Rho)

The Raspberry Pi runs the web UI, manages pattern files and playlists, and converts patterns into G-code. The DLC32/ESP32 running FluidNC firmware receives that G-code and drives the stepper motors in real time.

Hardware

Dune Weaver comes in three premium models:

DW Pro DW Mini Pro DW Gold
Size 75 cm (29.5") 25 cm (10") 45 cm (17")
Enclosure IKEA VITTSJÖ table IKEA BLANDA bowl IKEA TORSJÖ side table
Motors 2 × NEMA 17 2 × NEMA 17 2 × NEMA 17
Controller DLC32 DLC32 DLC32
Best for Living rooms Desktops Side-table accent piece

All models run the same software with FluidNC firmware — only the mechanical parts differ.

Free 3D-printable models on MakerWorld: DW OG · DW Mini

Build guides, BOMs, and wiring diagrams are in the Dune Weaver Docs.

Quick Start

The fastest way to get running on a Raspberry Pi:

curl -fsSL https://raw.githubusercontent.com/tuanchris/dune-weaver/main/setup-pi.sh | bash

This installs Docker, clones the repo, and starts the application. Once it finishes, open http://<hostname>.local in your browser.

For full deployment options (Docker, manual install, development setup, Windows, and more), see the Deploying Backend guide.

Polar coordinates

The sand table uses polar coordinates instead of the typical X-Y grid:

  • Theta (θ) — the angle in radians (2π = one full revolution)
  • Rho (ρ) — the distance from the center (0.0 = center, 1.0 = edge)

Patterns are stored as .thr text files — one coordinate pair per line:

# A simple four-point star
0.000 0.5
1.571 0.7
3.142 0.5
4.712 0.7

The same pattern file works on any table size thanks to the normalized coordinate system. You can create patterns by hand, generate them with code, or browse the built-in library.

Documentation

Full setup instructions, hardware assembly, firmware flashing, and advanced configuration:

Dune Weaver Docs

Contributing

We welcome contributions! See the Contributing Guide for how to get started.


Happy sand drawing!