Next level projection mapping, live visuals and content creation software for MAC + PC. Free Open Source + Pro / Enterprise options. Created by @justinrobiewood
Update: v1.4.0May 24, 2026
Auto playhead everywhere + VJ effect parity
Auto playhead everywhere — the LFO-style "Auto" source that sweeps a parameter between a min/max sub-range is now selectable on every numeric param across the app: mapping + VJ effect params (both deck banks, per-clip routing), edge effect params (stroke / fill / animation), mapping-mode shader inputs, and VJ clip shader values. Auto sits at position 2 in the source dropdown (under Manual) on all three editor surfaces.
▸Automation re-architected to live ON the data it animates (effect.paramAuto, edgeEffect.paramAuto, source.shaderValueAuto, clip.shaderValueAuto) rather than in a side modulation map keyed by layer index. The old index-keyed design broke on layer reorder/delete and produced cross-mode collisions; the new design means save / load / reorder / mode-switch all round-trip for free. A single autoEngine RAF walks every layer's paramAuto each frame and writes resolved values directly into the params.
▸VJ effect parity — the "No adjustable parameters" dead-end in performer mode is fixed. VJModePanel now mirrors LayerPanel's param-lookup chain, so the 41 newer effects render their full slider grids in VJ mode the same as they do in mapping mode.
▸Fixes along the way: per-layer Auto now runs independently on as many layers as you activate it on (was previously stopping on all but the most-recently-activated layer); VJ ↔ mapping parameter ranges are namespaced so switching modes no longer freezes the other mode's running playheads; effect mods route through the correct mapping vs VJ path (this had quietly broken audio modulation on mapping-mode effects too, not just Auto); macro knob fill arc no longer bleeds outside its ring between 50–67% travel.
Update: v1.3.5May 22, 2026
Render to Video, loop creator solidified, update checker fix
▸New File → Render to Video pipeline. Pick filename, duration, fps (24/30/60), resolution (720p/1080p/1440p/4K/square/vertical/custom), and quality tier. Deterministic frame-by-frame render: engine iTime, ISF shader TIME, stage-effects tick, keyframe timeline, and sequencer all step by exactly 1/fps per virtual frame. No drops, exact timing, any resolution.
▸JPEG-per-frame intermediate (q=0.92) keeps ffmpeg.wasm under its 2GB heap — raw RGBA OOM'd at 1080p past a few seconds. Final encode is libx264 + yuv420p MP4; output lands in the media library AND auto-downloads.
▸Video Loop Creator solidified: FFmpeg core now vendored locally via Vite ?url imports (the CDN-fetch path was failing under Electron's renderer CSP / file:// origin), per-call progress handler binding (the old handler closed over the first caller's callback forever), phase-aware monotonic progress bar (load → probe → render → read, no jumping back to 0%), FFmpeg-log time= parsing for smooth xfade progress, strict clamping at every external-data ingest (no more >100% or NaN readings), 60s watchdog so silent hangs throw a clear error instead of waiting forever.
▸Update-checker fix: users on v1.3.1 were seeing "v1.1.3 is available" because getCachedVersionResult returned a stale cache from a previous install. Cache now invalidates when stored current ≠ runtime version, and hasUpdate is re-derived from compareVersions(latest, runtime) at every read so a corrupted cache can't fake an upgrade prompt.
Update: v1.3.0May 21, 2026
Stage Designer, Stage Effects, OSC + NDI, mapping precision
▸New Stage Designer — full-screen workspace for polygon slice layouts with pen tool, bezier-vertex editing, SVG import, scale + rotate handles, 8 one-click templates (Wall of Circles, Triptych, Hexagon Wall, Concert Stage, Pillar Array, Diamond Grid, more). Apply Stage spits out Screen (VJ Output) mapping layers wired to vjLayerIndex, so VJ clips flow through the slice geometry.
▸Stage Effects — dedicated VJ tab with a 16-effect catalog (Still, Radial Pulse, Chase, Strobe, Twinkle, Sine Wave, Beat Pulse, Spiral, Cascade, Random Hits, Breathing, Checker, Inverse Pulse, Split Flash, more). Single-active radio mode + BPM-synced auto-cycle scheduler so the rig walks through your effect set in time with the music. Stage presets capture the full effects bundle alongside the slice layout.
▸OSC integration — UDP listener in Electron main with a pure-JS parser (no native deps). Settings → OSC tab gives you enable / port / live status + a bindings table with Learn mode. Routes through midiRouter.dispatchPath, so every MIDI-mappable parameter is OSC-reachable out of the box (TouchOSC, Lemur, Vezér, your DAW).
▸NDI integration — native addon (sender + receiver) for cross-platform network video streaming. macOS bundles libndi.dylib into Frameworks with ad-hoc codesign; Windows ships Processing.NDI.Lib.x64.dll alongside the addon. VJ tray gets an NDI button → discovers network senders via mDNS → drag onto a clip cell → live frames render through the engine. The addon only builds + ships when the NDI Advanced SDK is present at compile time; installs without the SDK keep working unchanged.
▸Mapping precision — pixel-grid snap (free / sub / 1px / 5px / 10px) in PROJECT pixels (consistent across editor zoom). Arrow-key nudge respects the same granularity; Shift = 10× for gross positioning. Double-tap a corner on touch (or double-click on desktop) for an on-canvas arrow pad with 44px hit targets. Polygon mask cap raised 64 → 256 and the engine now budgets bezier tessellation, so dense SVG paths render without mask truncation; SVG `<circle>` and `<ellipse>` primitives import as exact 4-cubic-bezier polygons instead of faceted polylines.