Skip to content

Releases

SplatWork 1.2.0

Choose a tag to compare

@github-actions github-actions released this 13 Nov 07:37

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 o...
Read more

SplatWork developer build 243

Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Nov 14:47

Developer build 1.2.0-dev (build 243) from 18e7a7d — rebuilt on every push to main; may be unstable.
Turn on SplatWork → Settings → Updates → Developer builds to update to these automatically.

Recent changes

  • Docs: VHS.md as built and results (clip 13, clip 6 default flow, joint solve), user guide for the recommended clip
  • Home video: Object Capture for a single clip with one lens setting
  • Home video: one recommended clip by default, leave out wrongly joined clips, rigidity
  • Home video: worker capability, clip listing in the CLI, sheet snapshot, cleaner thumbnails and picks; docs
  • Home video in SplatWork for Linux; frame cap fix; settings reference
  • Home video (VHS) restoration in splatprep and the Mac app; square pixels for all video
  • Docs: VHS footage study and plan (docs/dev/VHS.md)
  • vktrain: run the float-atomics start-up probe six rounds; lavapipe's lost updates are intermittent and one round let them through about once in 25 runs
  • docs: Vulkan trainer stage 2b numbers (test times, resume precision, lavapipe atomics note)
  • vktrain: stage 2b in the training loop — skybox (sky.png / sky.json), appearance correction, bilateral grid, decoupled SSIM, depth + depth-normal losses (cached depth priors), transient masking, pose refinement, optimizerPrecision compact; resume file v2; synthetic scenes per feature and end-to-end tests; compare_training.sh runs every feature (--core-only for 2a)
  • vktrain: stage 2b kernels — skybox, colour correction (affine / bilateral grid), decoupled SSIM, depth and depth-normal losses on ED, transient masks, camera-pose gradient; gradient checks against the double-precision reference
  • Drone surveys: GPS-neighbour matching, GPS-held re-solve when the solve disagrees with GPS, stop before training on a folded solve
  • vktrain: silence a GCC false positive in the PLY reader's byte swap
  • docs: Vulkan trainer stage 2a status (interface, what matches trainer.py, unsupported keys, deviations, lavapipe numbers, PC comparison)
  • vktrain: compare_training.sh — CUDA (Flatpak --cli train) vs Vulkan trainer on one dataset and config; builds the Vulkan trainer on the host or in the Freedesktop SDK

SplatWork 1.1.0

Choose a tag to compare

@github-actions github-actions released this 08 Nov 13:04

Install

Mac (Apple silicon, macOS 15 or later) — SplatWork-1.1.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 Node 1.3.16, SplatWorkNode-1.3.16-x86_64.flatpak:

flatpak install --user SplatWorkNode-1.3.16-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/Gaussian-Vibe-Code/flatpak/splatworker.flatpakref.

iPhone (SplatWork Capture) — not included: iOS apps can't be installed from a download; build it from ios/ in Xcode.

Changes

  • Mac: developer-build update channel (Settings > Developer) following a rolling "dev" pre-release built from main
  • Self-updating apps: Mac updates from GitHub Releases, SplatWork Node 1.3.16 updates itself through Flatpak
  • iPhone training memory: plan with headroom, smaller images when needed, refuse instead of being killed
  • Prep window can be hidden while it works; toolbar progress button brings it back
  • Use the SplatWork names in this branch's new strings (SplatWork, SplatWork Capture, SplatWork Node)
  • Undo the SplatWork rename in this branch (main does it; reconciled on merge)
  • iPhone makes splats on its own and offloads to Macs / PCs; Mac can act as a worker; rebrand to SplatWork
  • Blocks: no empty blocks, no runaway splitting, no forced split for iPhones
  • Trainer: fix Adam seed overflow that trapped on the iPhone (UInt32(k * 0x85EBCA6B) for k ≥ 2)
  • Metal: say which buffer or pipeline failed (and why) instead of a bare trap
  • Rebrand to SplatWork: SplatWork (Mac), SplatWork Capture (iPhone), SplatWork Node (Linux)
  • Preparation never goes to a training-only worker (iPhone Compute); it runs on this Mac
  • Device checkboxes always sit under their label (the row flipped between side-by-side and stacked as the note under the list appeared)
  • iOS: keep the bundle id (com.gunntower.splatcapture), category and landscape orientations set in Xcode in project.yml
  • Mac trainer: learned skybox (same model as the worker), loaded/saved with the PLY
  • A job too big for its one device trains there in blocks that fit instead of being refused
  • Compute devices as checkboxes: this Mac and each worker (PCs, iPhones)
  • iOS: no Objective-C header copy step for SplatTrainKit (it failed under script sandboxing)
  • iOS: set the development team in project.yml (regenerating the project had reset it)
  • iOS: drop the increased-memory-limit entitlement (personal teams can't sign it); compile the whole shared Train folder
  • Mac trainer: compact optimizer state (8/16-bit Adam), memory forecast per mode
  • Camera solving ignores the sky: no keypoints on pixels the sky mask marks
  • Viewer draws a scene's learned skybox behind the splats
  • Sky as its own mask layer and a learned skybox at infinity (worker 1.3.15)
  • iPhone as a training worker: Splat Capture's Compute screen serves the worker protocol for block training
  • Worker 1.3.14: apply mask files when training (they were ignored); compact optimizer state
  • Block-parallel training: per-block splat budgets, memory-aware assignment, reuse photos on the worker
  • Check a training job fits a worker before sending it
  • mac/scripts/update_local.sh: build and install the local app only while it is closed (staged otherwise); local builds are -dev
  • Worker 1.3.13: training images no longer exhaust host memory on very large sets

Splat Studio 1.0.0

Choose a tag to compare

@github-actions github-actions released this 08 Nov 09:04

Install

Mac (Apple silicon, macOS 15 or later) — SplatStudio-1.0.0-macOS-arm64.dmg: open it and drag Splat Studio 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/Splat Studio.app".

Linux GPU worker (NVIDIA) — Splat Worker 1.3.12, SplatWorker-1.3.12-x86_64.flatpak:

flatpak install --user SplatWorker-1.3.12-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/Gaussian-Vibe-Code/flatpak/splatworker.flatpakref.

iPhone (Splat Capture) — not included: iOS apps can't be installed from a download; build it from ios/ in Xcode.

Changes

  • NewProjectSheet: explicit init (Swift 6.3 makes the memberwise one private)
  • Split two expressions Swift 6.3 (GitHub's macOS runner) could not type-check in time
  • build_app.sh: empty-array expansion that works with macOS bash 3.2 under set -u
  • Release workflow: tag v* → GitHub Release with the Mac .dmg and the Linux worker .flatpak
  • Leaner remote transfers: skip the camera solve's nested image copy; upload only what a dataset references; don't re-download a reused solve
  • Ask before reusing earlier results; reuse a worker's earlier video split (no re-upload); tidy slider precision
  • Reruns reuse a project's frames; wait for the worker before falling back to this Mac
  • Pick up earlier worker jobs instead of redoing them; retry result downloads through network drops
  • Rig-aware 360° camera solving: match and map whole 360° frames (worker 1.3.11)
  • Local colour correction (bilateral grid) on by default
  • Prefer ethernet for a worker on both ethernet and Wi-Fi; hide discovered workers
  • splatprep: find the pycolmap mapper behind the LightGlue import blocker; check for a mapper before matching
  • tools/eval/novel_views.py: render models from closer-in viewpoints no photo was taken from (floaters, needles, haze)
  • tools/eval/align_splat.py: bring another tool's splat into our dataset frame (camera-name Sim3) for held-out scoring
  • Worker: backgroundShell option (same far-field sphere as the Mac), tested
  • Mac: backgroundShell option — far-field sphere of splats for distant land/sky beyond the capture (off; drone test queued)
  • Mac trainer: local colour correction (bilateral grid, same model as the worker): apply/backward kernels, CPU Adam + TV per photo, mean pinned to identity every 50 updates
  • Export/open PlayCanvas compressed PLY (.compressed.ply): 4× smaller than PLY at SH 3 (175 → 43 MB), −0.02 dB held-out
  • Mask fixed parts of the frame (lens rim, burned-in overlays, propellers, rig): per-camera low-variance + structure detector, opt-in
  • Mac GPU memory forecast: warns next to the device picker and refuses a Mac run that won't fit (e.g. 9,824-view 360 sets: ~57 GB of photos), suggesting a worker or the largest image size that fits
  • splatprep: parallel two-view verification (thread pool; OpenCV releases the GIL) — identical results, scales with cores
  • Mac: errorDrivenDensify (FastGS-style): MCMC sampling weighted by each splat's share of the worst-fitting pixels (off; to be measured)
  • Docs: rewrite USER_GUIDE and ARCHITECTURE for the current app/worker; Mac progressiveResolution option (¼→½→full, off; to be measured)
  • Worker 1.3.9: progressiveResolution (¼→full over first half of densify) and decoupledSSIM options (off; to be measured)
  • Eval harness: --eval … --save-renders DIR; tools/eval/evaluate.py (PSNR/SSIM/LPIPS-if-available, percentile visual sheets with detail crops)
  • Regenerate docs/SETTINGS.md (109 settings)
  • Compute → Benchmark: same synthetic training test on this Mac and each worker, plus transfer speed
  • Automatic camera solver: learned SfM for 360 video (Object Capture placed 1,041 of 9,824 views)
  • Keep video frames on the worker between steps (worker 1.3.8 'chain')
  • Mac setting for PC local colour correction; worker 1.3.7 records scene up in trained PLYs
  • Ignore splatprep build output
  • Mac: big-splat penalty on by default (10)
  • Worker 1.3.6: per-photo local colour correction (bilateral grid, opt-in)
  • Viewer camera: keep the photo's heading when adopting a straight-down/up camera (drone nadir views were rotated); CLI --view uses dataset up
  • Auto clean: also select floaters seen by few photos (contribution census per photo)
  • Mac: densify stop 14k for High (19k Ultra); big-splat screen-size penalty (off by default, experimental)
  • Opening a splat from a project's outputs/ loads that project's cameras (and clears stale ones); project gravity beats the file's up note; camera toggle enabled when watching
  • Auto clean (Edit tab): select splats that never add > 2 % to any pixel of any project photo
  • Keep the capture's gravity through pose refinement; F frames a watched job from its own central camera
  • build_app.sh: SPLAT_BUILD_PATH to build the app without relinking a running CLI binary

gsplat 1.6.0 dev build (PyTorch 2.7 + CUDA 12.8)

Choose a tag to compare

@Benevision Benevision released this 07 Nov 12:24

Built locally with build-gsplat-wheel.sh --all for RTX 20–50 series. Used by the Splat Worker Flatpak build instead of compiling.