• v1.11.0 a2eb5ec146

    jkaindl released this 2026-06-02 20:53:46 +00:00 | 3 commits to main since this release

    v1.11.0 — DJI HDR footage support

    DJI Osmo Pocket / Action footage (HLG / Dolby Vision HDR) now just works.
    Previously the whole clip was rejected as "too blurry" — HDR decoded flat and
    grey and tripped the blur gate. autosplat now detects HDR and tone-maps it to
    SDR during extraction (stock ffmpeg, no zscale/libplacebo needed).

    Added

    • HDR (HLG / Dolby Vision) → SDR auto tone-mapping. Toggle preprocess.hdr_tonemap.
    • Adaptive blur rescue — keep the sharpest frames relative to the batch instead
      of failing on soft/HDR footage. Toggle preprocess.blur_rescue.

    Fixed

    • Re-running process on the same capture no longer mixes runs — run_colmap
      wipes the stale COLMAP database first (quick-iter → quality-run was corrupted).

    Changed

    • Release app + DMG are Developer ID-signed and Apple-notarized.

    Docs

    • CAPTURE-GUIDE: HDR handling + scanning people (record SDR/"Normal", microSD
      originals, several fast rings).
    Downloads
  • v1.10.0 19d5997963

    jkaindl released this 2026-05-29 20:47:01 +00:00 | 13 commits to main since this release

    Multi-video bisection-rescue

    Auto-bisection now fires for multi-video captures — two independent drone flights of the same subject, or footage added later via add-video. Previously only single-video captures could be rescued; a multi-video set that exhausted the matcher-swap retry just failed.

    How it works

    Each source video is first probed whole (exhaustive matcher, full target_frames). Flights that register on their own are kept as-is; only the failing flights are bisected, and all survivors recombine through the multi-video pipeline. A single bad flight poisoning the joint SfM model is now rescuable.

    If every flight registers alone but the set still won't co-register, the run stops fast with bisection_no_culprit — a cross-video overlap problem that shorter clips can't fix — instead of pointlessly re-running the identical set.

    Also

    • probe_clip gained a target_frames override (whole-video probes use the full budget, not the cheap sub-clip cap, to avoid false-failing a long flight). Single-video bisection is unchanged.
    • Forensic probe artefacts are namespaced per source video (rescue/probes/v0_…, v1_…, v<N>_whole) so two flights never collide.
    • Fixed the SfM failure hint — auto-rescue already runs in the pipeline, so it no longer implies a manual autosplat rescue step.

    See CHANGELOG and docs/superpowers/specs/2026-05-29-multi-video-bisection-design.md for the full design.

    Downloads
  • v1.9.2 ca674302e1

    jkaindl released this 2026-05-29 18:17:59 +00:00 | 20 commits to main since this release

    Fixes the app not launching — it would bounce in the Dock with no window and need a force-quit.

    A Finder/Dock launch gives the app a minimal system PATH that doesn't include Homebrew, so it couldn't find ffmpeg/colmap even when they were installed — and got stuck waiting for tools it could never detect. The app now adds the Homebrew locations to its PATH at startup, so it finds the tools and opens its window normally.

    Install reminder

    Unsigned app — after dragging to Applications: xattr -dr com.apple.quarantine /Applications/AutoSplat.app

    Downloads
  • v1.9.1 4fc60cfdf2

    jkaindl released this 2026-05-29 17:17:24 +00:00 | 22 commits to main since this release

    Branding pass — the redesigned point-cloud marks are now used across the app.

    Added

    • Favicon + social card in the WebUI — the orb mark as favicon/apple-touch-icon, a theme-color, and an Open Graph / Twitter card so shared links render a proper preview.
    • App iconAutoSplat.app now shows the orb mark in the Dock and Finder (was a generic placeholder).
    • Reproducible brand-asset pipeline in docs/brand + scripts/build_brand_assets.sh (generates the static SVGs/PNGs/.icns from the generative mark system).

    Changed

    • mypy strict added to the pre-push hooks so the type-check can't silently drift.

    Install reminder

    Unsigned app — after dragging to Applications: xattr -dr com.apple.quarantine /Applications/AutoSplat.app

    Downloads
  • v1.9.0 2a22a91e32

    jkaindl released this 2026-05-29 16:19:47 +00:00 | 25 commits to main since this release

    A quality pass on top of the failure-diagnostics work.

    Added

    • blur_threshold override on the New-capture form — an optional field lets you lower the blur threshold for a single run. When a capture fails with "all frames too blurry", you can retry with a lower threshold right there, no config-file editing.
    • Fast-fail on too-few frames — if fewer than 3 frames survive the blur filter (not just zero), the run fails immediately with a clear message instead of a cryptic COLMAP error.

    Changed

    • Strict type-check (mypy) is runnable and green again — it had silently drifted to 66 errors because it was missing from the dev environment. Fixed entirely with type annotations (no behaviour change), and mypy is now part of the dev dependency group.

    Install reminder

    Unsigned app — after dragging to Applications: xattr -dr com.apple.quarantine /Applications/AutoSplat.app

    Downloads
  • v1.8.0 2d7b992702

    jkaindl released this 2026-05-29 15:45:03 +00:00 | 29 commits to main since this release

    Failed captures now tell you when they failed, why in plain language, and what to do so it doesn't recur — instead of a raw COLMAP stderr tail.

    Added

    • Failure classification (failure.py): maps a failure to a human headline + actionable hint — too-blurry footage, COLMAP couldn't align the frames (low overlap / rotation-heavy → rescue), Brush OOM (lower resolution_cap), missing source video, interrupted run, or a generic fallback.
    • Prominent failure panel on the capture detail page: ⚠ headline · when (stage + time) · the verbatim reason · 💡 what to do · Resume / jump-to-log.
    • Failure headline on the captures list, so the cause is visible at a glance on every failed row.

    Fixed

    • Durable failed status: a WebUI job that failed before a restart used to revert to "idle". It now keeps its failed status + reason from runs.jsonl across restarts — which is what makes the panel appear for past failures.

    Install reminder

    Unsigned app — after dragging to Applications, clear quarantine once:
    xattr -dr com.apple.quarantine /Applications/AutoSplat.app

    Downloads
  • v1.7.2 39b67521c2

    jkaindl released this 2026-05-29 15:19:32 +00:00 | 35 commits to main since this release

    Two fixes on top of v1.7.1.

    Blur fast-fail

    If the blur filter rejects every extracted frame (too-soft footage), the run now fails immediately with a clear, actionable message — instead of proceeding into COLMAP and dying with a cryptic "No images with matches". The error tells you to use sharper video or lower blur_threshold.

    Install (important)

    The app is unsigned / not notarized, so macOS quarantines it and right-click → Open is unreliable (App Translocation still blocks the launch with a -1712 error). Clear the quarantine flag once after installing:

    xattr -dr com.apple.quarantine /Applications/AutoSplat.app
    

    Then it opens as a normal window. First run installs ffmpeg / COLMAP / Brush via Homebrew.

    Supersedes v1.7.1.

    Downloads
  • v1.7.1 23c870c263

    jkaindl released this 2026-05-29 12:31:48 +00:00 | 38 commits to main since this release

    Classic app window. v1.7.0 launched as a menubar agent (no Dock icon, no window) — a double-click looked like nothing happened. v1.7.1 fixes that.

    Double-click → a real AutoSplat window (WKWebView) opens with the WebUI inside, a Dock icon, and Cmd-Q to quit. No browser tab, no menubar item.

    Install

    1. Download AutoSplat.dmg below, open it, drag AutoSplat to Applications.
    2. First launch: right-click → Open (unsigned — clears Gatekeeper once).
    3. First run installs ffmpeg / COLMAP / Brush via Homebrew in a Terminal, then the app window opens.

    Unsigned / not notarized (no Developer ID yet); the build pipeline wires both as optional env-gated steps. Supersedes v1.7.0.

    Downloads
  • v1.7.0 b0fc859467

    jkaindl released this 2026-05-29 12:01:16 +00:00 | 39 commits to main since this release

    AutoSplat.app — autosplat now ships as a double-clickable macOS app.

    The Python CLI + WebUI (FastAPI / cv2 / uvicorn) are frozen into AutoSplat.app with PyInstaller. The heavy external tools (ffmpeg, COLMAP, Brush) are installed at first run via Homebrew rather than bundled.

    Install

    1. Download AutoSplat.dmg below, open it, drag AutoSplat to Applications.
    2. First launch: right-click → Open (the app is unsigned — this clears Gatekeeper once).
    3. On first run it opens a Terminal and installs ffmpeg / COLMAP / Brush via Homebrew, then opens the WebUI. A menubar item keeps it running.

    Unsigned / not notarized yet (no Developer ID). The build pipeline already wires signing + notarization as optional env-gated steps for when one exists.

    Build it yourself

    brew install create-dmg
    uv sync --group build
    ./scripts/build_app.sh   # → dist/AutoSplat.dmg
    

    Notes

    • autosplat app runs the same launcher from a source checkout.
    • Verified: the frozen binary serves the WebUI end-to-end (healthz / dashboard / static / templates). Menubar + Gatekeeper + fresh-Mac first-run are human-verified.
    • Full design: docs/superpowers/specs/2026-05-29-dmg-app-design.md.
    Downloads
  • v1.6.0 d4dfbc4ee6

    jkaindl released this 2026-05-29 10:27:14 +00:00 | 44 commits to main since this release

    Live Progress / Mission-Control — the WebUI no longer sits frozen during the long, silent stages.

    A capture's progress is now published to a progress.json single-source-of-truth and surfaced live: a moving percent bar, elapsed + ETA-remaining, a pulsing "updated Xs ago" health dot with a stall warning, and a stage-agnostic liveness pulse that also covers the silent COLMAP mapper. Real step/PSNR tiles appear when the plateau monitor is enabled.

    Honest about the data: %/ETA are wall-time estimates; loss/iter-s/GPU/VRAM are not shown because Brush emits no per-step stdout and exposes no GPU telemetry — the old all- placeholder card is gone.

    Highlights

    • progress.json SSOT — atomic write/read; the single channel between the running pipeline and any reader.
    • Live brush card — moving bar, elapsed/ETA, pulsing health dot + stall warning, real step/PSNR tiles when plateau is on, collapsible (state in localStorage).
    • All-stages liveness pulse — "last activity Xs ago" from pipeline.log mtime, with a "quiet for Xs" warning past 120s. Covers the silent COLMAP mapper.
    • brush.stdout.log — every Brush stdout line teed to a dedicated, live-readable log.
    • Native Finder file-picker for the New-capture form (POST /captures/pick-file via osascript — a browser file input can't hand the server an absolute path).
    • Train heartbeat log throttle tightened 300s → 30s; brush card gated to stage == train.

    378 tests passing. Full design in docs/superpowers/specs/2026-05-29-live-progress-design.md.

    Downloads