Local-first · free & open source
A smooth, configurable gaze target for eye-movement work.
Sweeps, circles, infinity figures, and steady fixation holds — a ball you set moving or hold still, shaped to the session, running as a tiny app on your own machine.
Zoetrope opens like a desktop app in its own chromeless window. One self-contained binary — no account to create, no cloud in the loop, nothing you configure ever leaves your computer.
GPLv3 · Linux, macOS & Windows · a tool for use with a qualified practitioner, not a treatment
Every motion the work needs
One animation engine, many shapes. Build a playlist of patterns, tune each one, and play it back at a steady, calibrated pace — every pattern moves at the same on-screen speed at a given setting.
Linear sweeps
Horizontal, vertical, and both diagonals — the ball tracks edge to edge at a constant pace. The classic left-right pass, plus every axis in between.
Circles & figure-8s
Clockwise or counter-clockwise revolutions, and true figure-8s built from two tangent circles — in both the ∞ and 8 orientations.
Infinity ∞ & Lissajous
Smooth infinity traces, lobes side-by-side or stacked, clockwise or counter — the continuous, flowing path many practitioners reach for.
Serpentine & lightbulbs
Closed-loop raster scans across a configurable number of lanes, with rounded U-turns — or turns that balloon into circular bulbs the ball loops around.
Free-angle bounce
Set an initial heading and let the ball ricochet off the edges — a wandering path that never repeats the same way twice.
Edge-linger pulse
An optional vision-training dwell: the ball pauses and grows at each extreme of a sweep, then shrinks and reverses — peripheral feedback so the eyes can travel to the edge and pick it back up smoothly.
Position sequences
A separate engine that steps through named gaze targets on a 3×3 grid plus center — the basis for IEMT, saccade and anti-saccade drills, and brainspotting fixation. Park the ball on a single target for a still fixation hold, or step between targets with the dwell (up to 120s) and smooth-pursuit transit times you set.
Smooth-pursuit transitions
Between fixation points the ball glides on a cosine ease-in-out — a true smooth pursuit, not a jump — with the dwell and transit times you set.
Named playlists & libraries
Keep any number of playlists, filed under free-form categories like Continuous, IEMT, or EMDR. Switch the active one from a picker; each has its own loop-or-stop behavior.
Per-item control
Every item takes its own color, repeat count, direction, angle, and an optional speed override — so one playlist can mix a slow warm-up with a brisk set.
One dial, one pace
A single speed knob sets the ball's on-screen pixel speed; every pattern is normalized by its path length, so a circle and a sweep move at the same pace at a given setting.
Transport & keyboard
Play, pause, stop, skip, and restart from a transport bar, or drive it hands-free: Space to play/pause, ←/→ to move between patterns, Home to the top.
Entirely offline
Serves its own UI on 127.0.0.1 and saves your config to a JSON file on disk. No telemetry, no phone-home, no analytics — the only thing it opens is your browser.
See it in action
A full-screen canvas for the animation and a tucked-away editor for everything else. Dark, quiet, and out of the way during a session.
Why Zoetrope
100% local
It runs on your machine and serves itself on localhost. No account, no cloud, no session ever leaves the room.
Free & open
GPLv3, source in the open. No subscription, no per-seat licence, no hardware to buy or replace.
One binary
A single self-contained download that opens like a desktop app. Nothing to configure, no runtime to install.
Endlessly configurable
Thirteen pattern types, per-item tuning, named playlists, and a position-sequence engine that spans several modalities.
What Zoetrope is — and what it isn't
Zoetrope is a configurable gaze-target animator — software that moves a ball on a screen. It is not a treatment, not a medical device, and not a substitute for clinical care.
The included IEMT presets, and any named modality it can be used for — EMDR, saccade training, anti-saccade, brainspotting fixation, smooth-pursuit vision work — are starting templates for use with a qualified practitioner of that modality. The shipped IEMT sequences are drafts, not canonical clinical protocols.
Nothing on this page or in the app is a therapeutic claim. Zoetrope makes no promise of any outcome. If you are seeking care, work with a licensed professional.
How Zoetrope compares
A look at the tool itself — cost, platform, and configurability. Not a comparison of clinical effectiveness. ✅ built in · 🟡 partial / add-on · ❌ not available
| Capability | Zoetrope | bilateralstimulation.io | REMDR | NeuroTek light bar |
|---|---|---|---|---|
| Price | Free | FreePro add-ons | Subscription | Hardware |
| Open source (GPLv3) | ✅ | ❌ | ❌ | ❌ |
| Runs offline, no hosted service | ✅ | ❌browser / hosted | ❌browser / hosted | ✅local hardware |
| No account required | ✅ | ✅ | ❌ | ✅ |
| No dedicated hardware | ✅any computer | ✅ | ✅ | ❌requires the device |
| Visual bilateral stimulation | ✅ | ✅ | ✅ | ✅ |
| Pattern variety beyond horizontal | ✅13 patterns | 🟡limited | ✅8 patterns | ❌mostly horizontal |
| Configurable playlists / sequences | ✅ | 🟡 | 🟡 | ❌ |
| Beyond EMDR (IEMT · saccade · fixation) | ✅ | ❌ | ❌ | ❌ |
| Audio / tactile bilateral stimulation | ❌visual only | ✅audio · tactile add-on | ✅ | 🟡add-on |
| Teletherapy / remote control | ❌single-user, local | ✅ | ✅ | ❌ |
Reach for a hosted tool like bilateralstimulation.io or REMDR when you need audio or tactile stimulation, teletherapy, or therapist-side remote control over the internet; reach for a dedicated light bar when you want purpose-built hardware. Reach for Zoetrope when you want a free, open, offline, endlessly-configurable visual gaze target that never leaves your machine. Comparison covers the tools as software and hardware only — it says nothing about clinical outcomes, and Zoetrope is not a treatment.
How it works
Download the build for your OS and open it. On Linux the .deb adds Zoetrope to your app menu; every platform also has a standalone binary.
# Debian / Ubuntu — installs to your applications menu
sudo apt install ./Zoetrope-*.deb
zoetrope
Or build it yourself — it's one Go module, no build step for the UI (assets are embedded):
git clone https://github.com/daniel-alexander4/zoetrope
cd zoetrope
go build .
./zoetrope # opens the UI in a chromeless app-mode window
On launch it picks a free port on 127.0.0.1, reads or creates config.json in your OS user-config directory, and opens the UI in an installed Chromium-family browser (falling back to a normal tab). Quit by closing the window — the server notices and shuts itself down. Your playlists persist between runs.
Download
Free and GPLv3, for Linux, macOS, and Windows. Builds are unsigned — your OS may warn on first launch; open it anyway.
Linux
Debian & Ubuntu get a .deb that adds Zoetrope to your app menu. Any other distro: the static zoetrope-…-linux-amd64 binary runs anywhere.
macOS
A universal Zoetrope.app (Apple Silicon + Intel), zipped. Unsigned, so right-click → Open the first time.
Windows
A standalone Zoetrope-…-windows-amd64.exe — no console window, nothing to install. SmartScreen may warn; choose More info → Run anyway.
All platforms
Every build, checksum, and the full source live on the releases page.
On Debian or Ubuntu, install the downloaded package:
sudo apt install ./Zoetrope-*.deb
Shape the motion to the session.
A free, open, offline gaze target you tune to the work in front of you.