• v1.1.2 d8d8c4bebb

    jkaindl released this 2026-05-20 18:46:39 +00:00 | 109 commits to main since this release

    Hotfix Release

    Closes the three v1.1.1 backlog items: wall-clock job timestamps + within-day sort, zero ruff findings, and a job-specific status badge. WebUI- and hygiene-only — no change to the capture/train/export algorithm.

    Fixed

    • [SF-G3-1] + [SF-NEW-3] Wall-clock job timestamps + within-day sort — JobState now carries started_at_walltime and finished_at_walltime as ISO-Z strings (monotonic siblings stay for duration math). state.py grew an explicit done-branch so WebUI-completed jobs surface their finished_at instead of falling through to the ply-not-None path. list_captures now sorts by finished_at DESC with capture-name DESC as a tiebreaker.
    • [SF-G3-2] Job-status badge cancelled/queued rendering — the jobs view rendered cancelled/queued JobStates as a grey "ready" badge because capture_badge had no branches for them. New sibling job_badge macro purpose-built for JobState: explicit branches for queued, running, done, failed, cancelled. New CSS class .s-cancelled keeps cancelled runs visually distinct. capture_badge stays unchanged — it remains the right macro for CaptureInfo.

    Changed (Hygiene)

    • [SF-H1-1] Zero ruff findings — uv run ruff check src/ tests/ now passes cleanly (23 pre-existing findings resolved). Categories: 11× F401 unused imports, 3× I001 unsorted import blocks, 7× SIM117 nested with-statements collapsed via PEP 617, 2× B904 raise typer.Exit(...) from None in cli.py.

    Design Notes

    • job_badge vs capture_badge separation — the two macros now own different status enums. capture_badge knows pipeline stages (preflight → export) and the CaptureInfo lifecycle. job_badge knows the JobRunner lifecycle (queued/running/done/failed/cancelled).
    • Wall-clock timestamps coexist with monotonicJobState keeps both started_at/finished_at (monotonic float, for duration math) and started_at_walltime/finished_at_walltime (ISO-Z strings, for display + sorting).

    Tests

    206 unit tests (204 passed, 2 opt-in E2E skipped) — +6 over v1.1.1.

    For the full changelog see CHANGELOG.md.

    Downloads
  • v1.1.1 fb70f70cf5

    jkaindl released this 2026-05-17 22:13:57 +00:00 | 116 commits to main since this release

    Hotfix Release

    Resolves all three v1.1.0 known issues plus four polish findings from cowork smoke-testing. WebUI-and-pipeline fixes only — no change to the capture/train/export algorithm.

    Fixed

    • [SF-G2-9] Backend status-write sync — the WebUI now tracks runs from every trigger path (CLI-direct autosplat process, watch-daemon, WebUI Process-button). Live monitoring shows correct running/stage/done/failed states.
      • Part 1 — list_captures/get_capture overlay the in-memory JobRunner status for WebUI-button-triggered jobs.
      • Part 2 — run_pipeline() reports status into an optional WatcherState (begin / update_stage / mark_done), keyed by the capture directory, for the CLI-direct and watch-daemon paths.
    • [SF-PIPE-1] Embedded SuperSplat viewer URL-loading — the PLY route moved from /captures/{id}/ply to /captures/{id}/scene.ply. SuperSplat detects file type from URL extension, so it now recognizes the .ply suffix. Bonus: browser downloads are named scene.ply.
    • [SF-G3-3] Recent-jobs single-run-per-capture — JobRunner now keeps an in-memory _history list; all_jobs() exposes the full history so re-triggering a capture no longer hides earlier runs.
    • [SF-PIPE-2] Log-box width — raw log lines (.msg:only-child) now span the full row instead of collapsing into the 56 px time column.
    • [SF-PIPE-3] REASON-card text overflow — .as-kv .v gets min-width: 0; overflow-wrap: anywhere; long whitespace-free error strings now wrap inside the card.
    • [SF-PIPE-4] Vertical scroll — there was no html, body { height: 100% } rule, so <body> collapsed to content height, its overflow: hidden propagated to the viewport, and the page could not scroll.
    • [SF-PIPE-5] Viewer-iframe full-height — same root cause as SF-PIPE-4; without the height chain the viewer's flex:1 subtree had no parent height, so the SuperSplat iframe collapsed to a strip.

    Changed (Internal)

    • The CLI process command broadened its exception handling from except RuntimeError to except Exception — domain errors (QualityGateFailure, BrushOOMError) now exit cleanly via EXIT_PIPELINE_FAILURE and record a failed entry instead of raising an untrapped traceback.

    Design Notes

    • JobRunner history is in-memory — a WebUI server restart resets it. Persistent per-capture history (runs.jsonl append-log) shipped in v1.2.0.
    • WatcherState.in_progress is single-slot — single-user Mac tool; use one trigger path at a time.
    • PLY URL renamed from /captures/{id}/ply to /captures/{id}/scene.ply — pre-v1.1.0 had no public users.

    Tests

    200 unit tests (198 passed, 2 opt-in E2E skipped) — +5 over v1.1.0.

    For the full changelog see CHANGELOG.md.

    Downloads
  • v1.1.0 fe0b427919

    jkaindl released this 2026-05-17 16:37:00 +00:00 | 123 commits to main since this release

    Kuro Signal Protocol WebUI Restyle

    Full visual restyle of the WebUI. All seven browser surfaces migrated to the Kuro Signal Protocol design system. No pipeline behaviour changes — the capture/train/export flow is byte-identical to v1.0.1.

    Added

    • Kuro Signal Protocol WebUI restyle — all 7 surfaces migrated to KSP design tokens (tokens.css + autosplat.css). Local-first, no CDN dependencies.
    • Theme toggle (dark/light) with anti-flash localStorage persistence on <html> via the data-theme attribute. Default dark.
    • Pre-rendered icon toggle for the theme button (sun/moon SVG with label).
    • Captures-list HTMX polling every 3 s (the list was static before).
    • Capture-detail two-column layout with a stage_timeline macro using the STAGE_MAP backend→mockup-slot mapping (6-slot pipeline visualization).
    • Brush-metrics partial — 8-tile card with 3 s HTMX polling.
    • Viewer page with sidebar-collapse + CSS-only fullscreen toggle + Esc-key + GUI close-button. Three-state fallback (SuperSplat+PLY / PLY-only / no-PLY).
    • Jobs page Active + Recent sections with 2 s HTMX polling.
    • Source page KSP-styled AGPL §13 compliance card.
    • WebUI smoke-test suite — 10 HTTP-integration tests covering all 7 surfaces, static assets, and partial routes.
    • Vendored HTMX (/static/js/htmx.min.js, htmx@1.9.12, BSD-2) — eliminates the CDN SRI-mismatch class of failure.
    • Latent features (no UI exposure, console-accessible): HTMX polling annotation overlay and aspect-subthemes gunshi/kantoku/sensei (CSS tokens, default shugo hardcoded).

    Changed

    • static/style.css removed in favour of static/css/tokens.css + static/css/autosplat.css.
    • All page templates restructured with proper as-poll-region (HTMX outerHTML-swap target, no padding) vs as-main-inner (layout-padding wrapper) differentiation.
    • Pipeline live-pip text "chamber quiet" → "idle" (less lore, more clarity).

    Known Issues at release (resolved in v1.1.1)

    • Backend status-write sync (SF-G2-9)
    • SuperSplat viewer URL-loading (SF-PIPE-1)
    • Recent-jobs single-run-per-capture (SF-G3-3)

    All three were WebUI-display-only — the underlying pipeline ran correctly in every case.

    Tests

    195 unit tests (193 passed, 2 opt-in E2E skipped) — +10 over v1.0.1 from the new WebUI smoke-test suite.

    For the full changelog see CHANGELOG.md.

    Downloads
  • v1.0.1 ba7c4ae32f

    jkaindl released this 2026-05-16 08:17:51 +00:00 | 139 commits to main since this release

    Documentation-only patch release. Brings README + docs/ in sync with the v1.0.0 WebUI release state.

    What changed

    • README.md — status badge updated; phase table now includes Phase 10 WebUI row; quick start covers autosplat webui; CLI section has WebUI subsection
    • docs/GETTING-STARTED.md — added "Option B: Use the WebUI" walkthrough
    • docs/WORKFLOWS.md — new "Web-UI control" section (dashboard, trigger, cancel, SuperSplat embed, LAN access)
    • docs/ARCHITECTURE.md — "future web UI" reference updated to implemented Phase 10 module; WebUI module section added
    • docs/PHASE-10-WEBUI.md — new plan-style snapshot documenting Phase 10

    No code changes. v1.0.0 is fully usable; v1.0.1 just makes the docs match.

    Install / upgrade

    uv tool install autosplat  # first install
    uv tool upgrade autosplat  # upgrade from v1.0.0
    

    Full changelog: CHANGELOG.md

    Downloads
  • v1.0.0 85dce52455

    jkaindl released this 2026-05-16 07:09:39 +00:00 | 140 commits to main since this release

    Full browser-based control interface for the autosplat pipeline.

    What's new

    • autosplat webui --port 8080 — starts FastAPI + HTMX + Jinja2 web interface
    • Dashboard — live queue + recent captures (HTMX auto-refresh)
    • Capture detail — stage timeline, PLY info, process/cancel/retry buttons
    • SuperSplat embed — iframe viewer with local PLY streaming
    • Job runner — async background executor with cancel support
    • AGPL §13/source route + footer on every page → Codeberg source

    Install / upgrade

    uv tool install autosplat  # first install
    uv tool upgrade autosplat  # upgrade from v0.9.0
    

    Test it

    autosplat webui --port 8080
    # → open http://127.0.0.1:8080
    

    Full changelog

    See CHANGELOG.md for complete details including pre-1.0 polish commits.

    Downloads
  • v0.9.0 4a56031c7e

    jkaindl released this 2026-05-15 18:35:15 +00:00 | 150 commits to main since this release

    First public release of video-to-3d-gaussian-splat — a local 3D Gaussian-Splat pipeline for Mac Silicon. Pre-1.0, CLI-only. WebUI as v1.0.0.

    Added — Phases 0–9.7 (complete scope)

    • Phase 0 — Manual baseline: first end-to-end run establishing the full pipeline manually (ffmpeg → COLMAP → Brush → PLY). Calibration data for blur threshold, SfM parameters, and training steps.
    • Phase 1 — CLI MVP: autosplat process <video> runs the complete pipeline in one command. 15 Python modules under src/autosplat/.
    • Phase 2 — Watch-folder daemon: autosplat watch <inbox> with persistent state.json, atomic queue operations, crash-recovery on restart.
    • Phase 3 — Quality-gate + adaptive retry: gate before Brush training checks minimum camera count and point density. Automatic retry with exhaustive COLMAP matcher hint on first failure.
    • Phase 4 — Obsidian capture-note auto-generation: opt-in via [obsidian].enabled = true. Writes structured frontmatter note per capture. Preserves user-added content via marker-based tail split.
    • Phase 5 — Compress stage: autosplat compress <ply>, SOG + SPZ + ksplat output via splat-transform npx backend. Real-world compression ratios: 82–91% size reduction.
    • Phase 6 — Spec-mandate sweep: preflight checks for all binary deps, OOM retry logic, skipped-frames guard, PLY min-size gate. Closes §9.2 + §5 of spec.
    • Phase 7 — Pipeline visibility: Rich progress bar with wall-time-based ETA during Brush training. autosplat status table for queue + history.
    • Phase 8 — Obsidian polish: vault-agnostic config defaults, user frontmatter key preservation across pipeline re-runs.
    • Phase 9 — Local SuperSplat auto-open: starts local SuperSplat static server + PLY HTTP server in parallel, auto-opens browser after training. CORS fix (Phase 9.6) discovered via manual smoke run — browser blocked cross-origin PLY fetch.
    • Phase 9.7 — splat CLI real executable: scripts/install_splat.sh installs ~/.local/bin/splat as a real Bash binary with subcommand-aware caffeinate wrap. Enables nohup splat watch, tmux usage, background process management.

    Tests

    ~175 unit tests across 15 test modules. 2 opt-in E2E tests (AUTOSPLAT_E2E=1, AUTOSPLAT_COMPRESS_E2E=1). All unit tests pass in ~3s on Apple Silicon.

    Validated

    8/11 real-world captures trained successfully in overnight run 2026-05-15. Failure modes are deterministic and structured — COLMAP SfM failure, quality-gate rejection, and compress-backend unavailability all produce explicit events and are visible via autosplat status. No silent failures.

    Build Methodology

    Pipeline built phase by phase using a Recon → Plan → Sub-Phase pattern. Each phase has a docs/PHASE-N-RECON.md (problem space mapping) and docs/PHASE-N-PLAN.md (acceptance criteria before code). Phases tagged in git on completion. Part of ongoing research into trace-based emergent coordination.

    License

    Switched from MIT to AGPL-3.0-or-later (code) + CC BY-SA 4.0 (documentation). See LICENSE and LICENSE-DOCS.

    Release Polish (Burst C.1)

    • PII strip: /Users/johannes/ paths replaced with ~/ (docs) and Path.home() (Python)
    • examples/ generalized: location-specific capture names replaced with generic identifiers
    • *.sog added to .gitignore
    • pyproject.toml: version bump 0.1.0 → 0.9.0, author identity updated, AGPL-3.0 license-id set
    • Issue templates added (.forgejo/issue_template/)
    Downloads