Repository navigation
What's new
SplatWork 1.2.0 for Mac, SplatWork for Linux 1.5.0.
Highlights
- Never start over: every processing stage is checkpointed and training saves checkpoints and finished blocks,
so quitting, a crash or Stop costs at most the step that was running. A new Projects list shows where every
project stands and resumes or redoes it from any stage. - Drone footage and photo locations: imported photos keep their GPS (only that), so camera solving checks the
cameras against it and puts the scene in metres. Drone photos are recognised by the drone's own markers — not by
GPS, so phone photos stay ordinary — and get aerial settings; there's a new Drone / aerial tile. - Training on several devices, sturdier: Retry or leave out a failed block without stopping the rest, Pause and
Stop reach every device, a live view of block runs, and Show Live View to get back to a run from anywhere. - SplatWork for Linux: the Linux app (formerly SplatWork Node) now has the Mac's layout and wording, and keeps
training jobs' saved state when it is stopped. - New look: the hex mesh logo on every app, the website and the docs.
Projects and resuming
- Projects list in the sidebar replaces Recent: every project you've worked on, including ones made with New
Project and training results, with its status (processing, interrupted, ready, training, trained). - Project page: each processing stage with what it produced, Resume, Redo from Here, Change Settings…,
Train, and every result. The start page offers projects that stopped partway. - Processing checkpoints: each stage (frames, masks, camera positions, dataset) is saved and reused on any rerun
whose settings and source files haven't changed. Quitting, a crash, Stop or a failure costs at most the stage
that was running. Try Again after a failure continues where it failed. - Training resume: this Mac checkpoints every 10 minutes and on Stop; block runs keep every finished block and
reuse it. - Choose the processing device in New Project (Cameras & masks page) and when resuming, separately from the
training devices; the training devices you tick are remembered.
Photo locations and drone footage
- Imported photos keep only their location (GPS, and a drone's height above take-off), on the Mac and on Linux,
under a new Use photo locations switch; off strips locations from the project's photos. - Drone footage (camera maker, DJI flight / gimbal tags, DJI file names) gets Aerial settings: learned camera
solving with GPS checks, the sky as a learned skybox, the High quality preset. - The Maximum preset stores photos at its 2400 px training resolution.
- Sky masking is on for video, photos and 360° whichever way the project is started, and is skipped with a note
(not a failed run) when no sky model is available.
Training on several devices
- A failed block waits for Retry (on any device) or Leave This Block Out instead of failing the whole run.
- Pause / Resume now reach worker jobs and blocks, not only a single run on the Mac. Stop stops a block
training on the Mac too, and shows Stopping… while the run winds down. - Live view for block runs: the viewer shows every block's latest state, merged.
- Show Live View: look at other projects while one trains, then get back to it from the toolbar, the banner,
the Train tab or the project page. Home no longer stops training. - Charts no longer draw a line back to zero when a block restarts; block cards keep the device's name if it drops
off the network.
Quality
- Flat surfaces: surface-normal consistency loss and flat-splat regulariser on by default; predicted depth
(Depth Anything V2 on the Mac, monocular depth priors on Linux) for photos without a depth sensor. - Fisheye footage: solved with a fisheye lens model, with masks warped along.
- Camera solving drops cameras placed far off the camera path.
SplatWork for Linux 1.4–1.5
- The Linux app is now a full studio: viewer, New Project, editing (including Auto clean and the mask editor),
export, turntable videos, iPhone Inbox, compute devices and block-parallel training across machines, all next to
the worker server. - Renamed from SplatWork Node to SplatWork; sidebar, start page and New Project follow the Mac's.
- Worker jobs can be paused (state saved, GPU freed) and checkpointed; stopping the worker pauses running training
jobs instead of discarding their state. - Multi-device runs follow a device that changes address and retry a block here after 30 minutes unreachable.
- The setup screen shows the exact command to install a missing NVIDIA driver extension.
Fixes
- About 30 issues from an independent review of this release's new code, among them: masks from an earlier run
baked into reused frames; two preparations running in one folder after Stop; Stop not reaching a block
training on the Mac; a failed block holding up its device's other blocks; resumed runs on the wrong devices or
from step 0; the Linux mask editor not showing why a job failed.
Security
- Mac worker requests need an access token; Bonjour-advertised addresses are only trusted once the worker confirms
them; dataset paths can't escape their folder; benchmark runs are isolated.
Changes
- Licensed under Apache 2.0; public documentation, website and project files.
- The repository moved to
Benevision/SplatWork. - Local Mac builds are signed with a development identity when there is one, so the Keychain stops asking again
after every update. - iPhones no longer act as training workers for other devices; SplatWork Capture still processes and trains its own
scans.
Install
Mac (Apple silicon, macOS 15 or later) — SplatWork-1.2.0-macOS-arm64.dmg: open it and drag SplatWork to Applications. This build is ad-hoc signed (not notarized): the first time, right-click the app → Open → Open, or run xattr -dr com.apple.quarantine "/Applications/SplatWork.app".
Linux GPU worker (NVIDIA) — SplatWork for Linux 1.5.0, SplatWork-Linux-1.5.0-x86_64.flatpak:
flatpak install --user SplatWork-Linux-1.5.0-x86_64.flatpak
On first start its setup assistant downloads PyTorch, CUDA and gsplat for your driver (about 3 GB). To get updates automatically instead, add the repository: flatpak install --user https://benevision.github.io/SplatWork/flatpak/splatworker.flatpakref.
iPhone (SplatWork Capture) — not included: iOS apps can't be installed from a download; build it from ios/ in Xcode.
All changes
- Prepare release 1.2.0: SplatWork 1.2.0 (Mac), SplatWork for Linux 1.5.0, SplatWork Capture 1.2
- The Linux app is SplatWork (no more "Node"), with the Mac's layout and wording
- Release debugging pass: fixes from three independent code reviews
- Hex mesh logo across the suite
- Local Mac builds sign with the Apple Development identity when there is one
- Photo locations kept on import; drone footage recognised and given aerial settings
- Job defaults: consistent sky masking, Maximum preset resolution, remembered devices, processing device up front
- Fix a flaky worker API test; user guide: local colour correction is on by default
- Landing page for the project site
- Retire iPhones as training workers; SplatWork Capture keeps training its own scans
- Docs: public-facing revamp, Apache-2.0 licence
- Block runs: live view, charts that survive a restarted block, device names that stay
- Show Live View: get back to a running training after looking at another project
- Projects list with resume from any stage; processing device choice
- Stop: show Stopping… while the run winds down, and disable Pause/Stop meanwhile
- Pause/Resume reach worker jobs and block runs, not just a single run on this Mac
- Block training: a failed block waits for Retry (any device) or Leave Out instead of failing the run
- Node setup: give the exact flatpak install command for a missing NVIDIA driver extension
- iOS: regenerate the Xcode project with xcodegen so it includes Train/MonoDepth.swift (the committed project no longer built)
- Security fixes from the Claude Security review (F2, F3, F5, F6, F21)
- Camera solving: drop cameras placed far off the camera path (PoseSanity), with a note in the prep log
- Revert to sequential matching for video solves: auto's loop closures mis-registered the Arcturus garden video
- Video camera solving uses splatprep's auto matching (neighbours + loop closure) instead of plain sequential
- Masks follow undistortion: splatprep warps each mask with the lens model into the undistorted image; the Mac uses those (and drops the frame's distorted mask / sky / depth layers) for undistorted frames; SplatWork Node 1.4.4
- Tests: fisheye focal guess is a prior for initialisation but never fixes the focal length
- Fisheye camera solving works: flag splatprep's fisheye focal guess as a prior (COLMAP otherwise marks every fisheye pair degenerate) but keep it free in bundle adjustment; SplatWork Node 1.4.3
- Depth-prior caches written atomically (blocks of one run may cache the same photo at once)
- Predicted depth only for real training: off for Auto clean, --eval and the speed benchmark (which also keeps normalWeight 0 to stay comparable)
- Flat surfaces on by default (normalWeight 0.05, Mac + Linux 1.4.2); stereo-fisheye camera solving fixes
- Regenerate SETTINGS.md and the Linux settings catalog (flat surfaces, predicted depth, flat splats)
- Predicted depth on the Mac (Core ML Depth Anything V2), edge-aware normal loss, normal-map export, settings UI
- Depth priors: dense start from the predicted depth maps (priorInitPoints), cache keyed on photo + pose
- Flat surfaces: depth-normal consistency loss, flat-disc regulariser, monocular depth priors (Linux), fisheye routing
- Repository renamed to Benevision/SplatWork: update URLs (Mac updater, Node update check, gsplat wheels, docs)
- PROTOCOL: who may pause, auto-resume of other computers' paused jobs, the desktop app's jobs as other computers see them
- Review fixes: pause race, foreign paused jobs, local jobs private from the LAN, quit cancels remote jobs, fallback page
- iPhone receiver: attempts admitted and counted in one locked step, global cap on misses, misses never rotate the code or unblock anyone
- 360° photos and Stereo tiles on the viewer home; docs: checklist and PC tests for the mask editor, 360° photos, stereo, static regions
- SplatWork Node: stereo photos folder (SBS / over-under split here), test isolation for the real splatprep
- Docs: checklist and PC tests for pause/checkpoint, compute devices, block-parallel, coverage, turntable, benchmark, Studio preferences
- Compute devices use measured benchmark speeds when there are any; shortcuts list 1–6 incl. Coverage
- SplatWork Node: stereo footage source (split on the worker, rig, metric scale, stereo depth)
- Turntable: leave training-camera frustums and the crop box out of the video
- splatprep: stereo footage in task frames (SBS / over-under / dual-stream / two files), rigs with a baseline
- Preferences: Studio page for studio.json (projects folder, local jobs first, viewer and navigation defaults, iPhone receiver on/off, pairing, port), saved through the controller so the Viewer and iPhone Inbox stay in sync; benchmark measurement falls back to the wall clock
- Benchmark: the Mac's standard training benchmark on this PC (synthetic 48-view scene, 1 M splats, 2,000 steps) as a job of the local worker; results in benchmarks.json (Mac DeviceBenchmark fields, load_benchmarks / throughput API), a table on Models & Benchmarks, and splatworker benchmark
- SplatWork Node: mask editor (SAM 2 clicks, brush, tracking, fixed parts) as its own mask layer
- SplatWork Node: 360° photos folder source, mask fixed parts of the frame, mask layers survive Prepare again
- Studio viewer: turntable video (Export tab: resolution, length, frame rate, progress + cancel) — frames rendered offscreen one at a time and streamed to GStreamer (H.264 MP4 if an encoder exists, else VP9/VP8 WebM), PNG sequence fallback
- Studio viewer: Coverage display mode (key 6) — which dataset photos saw each splat and how closely, CPU numpy in chunks on a background thread, Mac colour ramp; only offered for a project with a dataset
- SplatWork Node: Compute Devices page, Add worker dialog, New Project "Train on"
- Training progress: a card per block/device (stage, own progress, speed, splats, PSNR, time left) plus a combined status
- SplatWork Node: train on other compute devices and block-parallel across machines (core)
- Studio: Pause / Resume and Save checkpoint on the live training dashboard and Queue & Worker job rows
- Studio client: pause, resume and checkpoint download; pipeline keeps waiting while a job is paused
- Worker: pause / resume and on-demand checkpoints of training jobs (capability "pause")
- Updater: "Relaunch to Update" now actually quits — close the prompt sheet before terminating
- Fix the video-decoding leak that froze the Mac: drain an autorelease pool per decoded frame
- Docs: the desktop app's per-launch secret, local datasets hidden from other clients, receiver lockout
- Review fixes: desktop-app secret instead of loopback trust, iPhone receiver lockout, clean quit
- iPhone/Mac workers: fit big jobs by dropping the colour grid, then photos down to 320 px; Mac preflight runs the same sizing
- Use the new suite name SplatWork for the Linux app's user-facing text (window, desktop entry, metainfo, docs)
- Docs: parity checklist with status per item and the PC test list (docs/LINUX_APP.md), protocol additions (local datasets, shared priority queue, census), README
- Splat Studio 1.4.0: Flatpak/desktop/metainfo as Splat Studio, ~/Documents/SplatStudio permission, CI tests + PR Flatpak build, CLI convert / splat-info, all-training-settings editor, navigation speed controls
- Linux Studio GUI: sidebar shell (Viewer, Projects, Queue & Worker, iPhone Inbox, Models, Settings Reference, Recent), GL viewer page with inspector, New Project dialog, projects + live training dashboard
- Linux Studio: settings reference catalog (generated from SettingsCatalog.swift), Studio prefs, iPhone capture receiver
- Linux Studio: local pipeline (frames → stacked masks → sky → solve → train as local server jobs), importers, presets, projects, Auto clean plan
- Worker: local-folder datasets for the Studio on this PC, priority queue with job origin, census jobs for Auto clean
- Linux Studio: OpenGL 4.3 splat renderer (ctypes GL, compute projection, sorted instanced quads, skybox), camera, sorting, editing core
- Linux Studio: parity plan (docs/LINUX_APP.md) and splat formats core (PLY, compressed PLY, .splat, SPZ, skybox sidecar)