1
0

Тайлбар байхгүй

tuanchris 9c585ffe16 update version 1 өдөр өмнө
.github 92071351ea ci(04-01): extend workflow for frontend tests 1 долоо хоног өмнө
dune-weaver-touch 49ee730824 fix(lint+test): remove unused imports, fix bare except, update delete button tests 5 өдөр өмнө
firmware 2c75c085a7 update DAGGKAPRIFOL config 2 долоо хоног өмнө
frontend 714672344e feat(ui): add update notification indicator and version link 1 өдөр өмнө
modules d2418bea9e Merge origin/main into feature/react-ui 1 өдөр өмнө
patterns 1d508dba40 update mini clear patterns 3 сар өмнө
scripts f2240ed29e chore: add pre-commit hook for Ruff lint and frontend tests 5 өдөр өмнө
static c9218274db docs: add CONTRIBUTING.md and update README 4 өдөр өмнө
steps_calibration 4a282335fb latest new_ui 7 сар өмнө
templates 2d833dd71f Remove old Jinja frontend code and assets 3 долоо хоног өмнө
tests f6de1c6edf fix: preserve playlist state when async task is cancelled by TestClient 1 долоо хоног өмнө
.dockerignore a7851e341e Improve React UI layout and Docker build setup 3 долоо хоног өмнө
.env.example 4a282335fb latest new_ui 7 сар өмнө
.gitattributes 8cf7146d71 Fix start.sh execution issues 3 долоо хоног өмнө
.gitignore cc7b91e3bc add gitignore 1 долоо хоног өмнө
CONTRIBUTING.md c9218274db docs: add CONTRIBUTING.md and update README 4 өдөр өмнө
Dockerfile 417a324398 Add frontend Dockerfile and update CI for two-container setup 3 долоо хоног өмнө
LICENSE 4a282335fb latest new_ui 7 сар өмнө
PATTERN_CREDITS.md 4a282335fb latest new_ui 7 сар өмнө
README.md c9218274db docs: add CONTRIBUTING.md and update README 4 өдөр өмнө
VERSION 9c585ffe16 update version 1 өдөр өмнө
__init__.py 4a282335fb latest new_ui 7 сар өмнө
docker-compose.yml 714672344e feat(ui): add update notification indicator and version link 1 өдөр өмнө
dw 2905feaf14 fix(dw): update touch app dependencies during dw update 1 долоо хоног өмнө
main.py 49ee730824 fix(lint+test): remove unused imports, fix bare except, update delete button tests 5 өдөр өмнө
nginx.conf 61c5f3bf60 fix(nginx): add missing endpoint proxies to prevent 405 errors 3 өдөр өмнө
package-lock.json 3b4f60ca66 Update package-lock.json dependencies 1 долоо хоног өмнө
package.json f2240ed29e chore: add pre-commit hook for Ruff lint and frontend tests 5 өдөр өмнө
pyproject.toml 8e28021f8c chore(backend-testing-01): configure pytest in pyproject.toml 1 долоо хоног өмнө
requirements-dev.txt 5599bec83c chore(backend-testing-01): add testing dependencies 1 долоо хоног өмнө
requirements-nonrpi.txt 629a8dcbf3 Add multi-table control support with mDNS discovery 3 долоо хоног өмнө
requirements.txt f0ea6c4f2b Remove mDNS implementation and zeroconf dependency 3 долоо хоног өмнө
setup-pi.sh 717d25c561 Revert auto-update feature, instruct users to SSH and run dw update 2 долоо хоног өмнө

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!