Repository navigation
Release overview video: https://www.youtube.com/watch?v=DIcGFMeBSXU
What's Changed
- CUDA Streams by @MrNeRF in #1302
- Feature: Camera Frustum Visibility Shortcut by @kmeirlaen in #1323
- Keep Set Pivot Available Across Editing Tools by @kmeirlaen in #1324
- Window Resize Behavior by @kmeirlaen in #1326
- Window Resize Plugin Panel Bugfix by @kmeirlaen in #1329
- #1327 fix(sequencer): disable toolbar button while training is active by @tritolol in #1332
- Resize Training Pause Bugfix by @kmeirlaen in #1330
- fix(sequencer): gate on isTraining instead of isToolsDisabled by @tritolol in #1333
- Ability to use CTRL-X to cut splats by @kmeirlaen in #1334
- Harden startup plugin loading and add progress feedback by @francescofugazzi in #1297
- Fix logging panel action layout by @kmeirlaen in #1343
- Fix duplicate frames in full GPU video frame extraction by @kmeirlaen in #1342
- Fix 10-bit hardware-decoded video frame colors by @kmeirlaen in #1341
- Fix Plugin Marketplace Confirm Overlay Hover Glitch by @kmeirlaen in #1347
- Fix Issue 1301: Tooltip Cache Invalidation Fix by @kmeirlaen in #1348
- COLMAP Text Import Performance by @kmeirlaen in #1344
- Issue 1208: Viewport Shortcut Focus Fix by @kmeirlaen in #1352
- COLMAP Minimum Track Length Filter by @kmeirlaen in #1349
- l10n(zh): reorder to en.json order and fill missing keys by @LeoYiMon in #1357
- fix(l10n): sync missing keys, reorder, add --lang filter to validate_localization by @LeoYiMon in #1356
- Fix - PPISP Correction Has No Effect In VkSplat Viewport by @kmeirlaen in #1355
- Various fixes: frustum picking, point cloud selection, file menu, toolbar, and crop tools (box + ellipsoid) by @francescofugazzi in #1351
- Brush Selection Commit Uses Preview Mask by @kmeirlaen in #1358
- VkSplat Training Viewport Stability by @kmeirlaen in #1361
- VkSplat Delete Flash Fix by @kmeirlaen in #1363
- Fix Copy/Paste And Selection Of Soft-Deleted Splats by @kmeirlaen in #1364
- Optimize COLMAP
points3D.txtLoading by @kmeirlaen in #1366 - fix duplicate of models with deleted splats by @kmeirlaen in #1371
- add points3d tests (were missing from the PR) by @kmeirlaen in #1379
- Prevent Camera Deletion During Active Training by @kmeirlaen in #1375
- HDRI Background Fixes by @kmeirlaen in #1367
- transform tools on multiple models by @kmeirlaen in #1374
- GT 16 bits image support + lossless 16bits cache for HDR training [VOLINGA] by @AlbertoValenzuelaRedondo in #1335
- onnx patches by @kmeirlaen in #1380
- fix win onnx ci build by @MrNeRF in #1382
- prebuild ort by @MrNeRF in #1385
- fix hash calculation on windows by @kmeirlaen in #1386
- Bundle cuDNN Runtime DLLs for Windows Builds by @kmeirlaen in #1387
- add update submodule by @xiaobiaodu in #1389
- Video Frame Extractor enhancements by @francescofugazzi in #1368
- Add headless camera-path render mode (--render-camera-path) by @tritolol in #1390
- Drag/drop video files for frame extraction by @kmeirlaen in #1388
- Python API Doc Update by @shadygm in #1392
- explain how to connect claude to LFS MCP Server by @kmeirlaen in #1401
- Better depth by @MrNeRF in #1393
- Vulkan hardening by @MrNeRF in #1411
- Faster build by @MrNeRF in #1412
- Test cleanup by @MrNeRF in #1413
- Harden tensor library by @MrNeRF in #1415
- Sccache cache hits by @MrNeRF in #1417
- fix: correct sign inversion in video rotation detection by @francescofugazzi in #1416
- Clamped color gradient [Volinga] by @Ediolot in #1394
- remove const to match declaration in launch_delay_kernel by @miriameng in #1424
- Better errors by @MrNeRF in #1423
- exact mem usage in viewer by @MrNeRF in #1428
- Fix inconsistent DLL linkage warnings in error.hpp by @francescofugazzi in #1433
- Tensor fixes by @MrNeRF in #1432
- MCP Tool Name Compatibility by @kmeirlaen in #1400
- Fix CommandCenter singleton linkage by @MrNeRF in #1437
- Delete Camera Fix by @kmeirlaen in #1398
- Fix/cropbox by @kmeirlaen in #1404
- Add correct HDR-to-SDR video preview and extraction by @francescofugazzi in #1421
- Bye Bye ImGUI by @shadygm in #1395
- Fix Training Crop Box Pruning by @kmeirlaen in #1365
- Stabilize headless execution and plugin validation by @francescofugazzi in #1441
- Stabilize right panel resizing and empty viewport overlay by @francescofugazzi in #1438
- Fix RmlUI warning from uninitialized status message color by @francescofugazzi in #1442
- Preserve training iterations when resetting the same dataset by @francescofugazzi in #1443
- Preserve explicit training iterations; clean up auto-scale marker sync by @MrNeRF in #1444
- Remove the unused standalone Vulkan path from the RmlUi backend by @MrNeRF in #1455
- Start LichtFeld Studio on demand from the MCP bridge, and shut it down again by @MrNeRF in #1459
- Reduce rebuilds caused by Git version metadata by @francescofugazzi in #1456
- Remove dead no-op event handlers from VisualizerImpl by @MrNeRF in #1465
- Complete locale coverage and add validation by @francescofugazzi in #1464
- Fix NVCC dllimport/dllexport conflict in memory arena diagnostics check by @francescofugazzi in #1466
- Move Vulkan/CUDA interop out of gui_manager.cpp into the rendering module by @MrNeRF in #1461
- Fix Empty-Name Group Merge When Merging To Single PLY by @kmeirlaen in #1468
- Use node ids for scene operations that delete or rename nodes by @MrNeRF in #1471
- Remove stale duplicate SuperSplat viewer bundle by @MrNeRF in #1498
- Remove unreferenced source files by @MrNeRF in #1500
- Stop clang-format from exploding the generated SPIR-V header by @MrNeRF in #1499
- Deduplicate helper_math.h between the fastgs and edge_compute backends by @MrNeRF in #1501
- Video Frame Extractor Source Frame Numbering by @kmeirlaen in #1462
- docs: centralize source build instructions by @ColumbusLabs in #1502
- Scene Graph Camera Group Active Count by @kmeirlaen in #1504
- ci: fix Ubuntu build (sdl3 getresuid/getresgid redeclaration) by @MrNeRF in #1526
- ci: pin CMake to 4.4.0 (fixes the real cause of the Ubuntu break) by @MrNeRF in #1528
- lichtfeld_tests Link Fix by @kmeirlaen in #1533
- Fix PPISP Checkpoint Resume Color Regularizer State by @kmeirlaen in #1535
- Remove misleading video frame orientation helper by @noor-ahmadi in #1550
- #1475 Fix drifted parameter defaults in the property registry by @dusancubik in #1553
- fix: pre-flight GPU check - refuse cards below SM 7.5 with clear message by @jacobvanbeets in #1542
- Complete GUI localization coverage and add headless contracts by @francescofugazzi in #1527
- fix: add libgtk-3-dev to Dockerfile (#1554) by @jacobvanbeets in #1555
- #1494 A single home to all parameters by @MrNeRF in #1556
- Report bugs to the portal from inside the app by @MrNeRF in #1558
- Unblock Windows test build by @francescofugazzi in #1559
- Compute Vulkan barriers instead of hand-writing them by @MrNeRF in #1561
- Pool viewport render targets (#1497) by @MrNeRF in #1562
- Splat simplify target incorrect by @kmeirlaen in #1560
- Remove the remaining viewport host drains and resize churn (#1568) by @MrNeRF in #1573
- End the remaining per-frame CPU waits on the GPU (#1577) by @MrNeRF in #1578
- Fix newer GCC builds and remove inert Python UI APIs by @shadygm in #1585
- Update nvImageCodec to 0.9.0 by @MrNeRF in #1591
- Remove dead code by @MrNeRF in #1592
- Fix GPU running at 100% when no scene is loaded by @MrNeRF in #1593
- Speed and vram by @MrNeRF in #1588
- Fix old library loading and panel register errors by @MrNeRF in #1598
- refactor(ui): unify panel rendering API by @shadygm in #1587
- Stability fixes: video decode fallback, CUDA error recovery, build cache hardening by @MrNeRF in #1599
- Address #1598 review comments and surfaced test regressions by @MrNeRF in #1600
- Eliminate all build warnings by @MrNeRF in #1603
- Remove Edit mode from training-stopped dialog, suppress it on New Project/close by @MrNeRF in #1605
- perf(viewer): decouple tool-overlay cost from the splat raster hot path by @MrNeRF in #1606
- Stop hidden left dock from driving animation frame demand by @MrNeRF in #1607
- Fix transforms.json loading: per-frame intrinsics and camera/point-cloud alignment by @MrNeRF in #1608
- Export provenance stamps: every export records what produced it by @MrNeRF in #1611
- Fix mask loading regression (#1612) and CUDA stream race on GT images/masks (#1427) by @MrNeRF in #1613
- Fix export failure after switching from training to edit mode by @MrNeRF in #1614
- Fix node delete failing for viewer-loaded PLYs (#1616) by @MrNeRF in #1618
- PLY infinite opacity import repair by @kmeirlaen in #1615
- One project file: the .licht format by @MrNeRF in #1525
- Fix Windows test compilation and DLL linkage by @francescofugazzi in #1623
- Fix Save Project failing during paused or running training by @MrNeRF in #1624
- Fix remaining q16 SH bugs and Python bridge correctness by @MrNeRF in #1619
- Fix multi-splat scenes not rendering after project reload by @MrNeRF in #1626
- Fix transform bake on q16 compressed models by @MrNeRF in #1630
- README: point Windows binary downloads at the LichtFeld Portal by @MrNeRF in #1631
- Fix CUDA event-pool cleanup during runtime shutdown by @francescofugazzi in #1632
- add fast compile to test build by @kmeirlaen in #1636
- Add persistent user preferences, recovery controls, and resilient window state by @francescofugazzi in #1629
- Add close buttons to Asset Manager and Python Console by @francescofugazzi in #1637
- Restore training datasets when reopening projects by @francescofugazzi in #1635
- Cancel in-flight dataset import when opening a project by @MrNeRF in #1649
- Do not offer autosave recovery after an intentional discard by @MrNeRF in #1652
- Fix/joint adam reset race by @MrNeRF in #1653
- Offer autosave recovery at startup after an unintentional close by @MrNeRF in #1655
- Accept .licht projects as convert input by @MrNeRF in #1659
- Stream compressed project payloads instead of materializing them by @MrNeRF in #1660
- Reset point cloud mode when loading standalone assets by @francescofugazzi in #1646
- Exclude soft-deleted Gaussians from node-level clipboard copies by @MrNeRF in #1663
- Offer to remove a missing project from the Open Recent menu by @MrNeRF in #1662
- Silence MSVC fast compile override warnings by @francescofugazzi in #1664
- Keep Save As from resurrecting a removed training checkpoint by @MrNeRF in #1665
- Clear the viewport when every splat node is hidden by @MrNeRF in #1666
- Ask to locate a missing dataset when opening a project by @MrNeRF in #1667
- Keep the window inside the GNOME work area on Wayland by @MrNeRF in #1668
- Add persistent MCP server management and privacy-safe diagnostics by @francescofugazzi in #1658
- Polish MCP server management after #1658 by @MrNeRF in #1669
- Fix Sequencer camera path JSON loading on Windows by @francescofugazzi in #1670
- Save Sequencer camera path JSON in binary mode by @MrNeRF in #1671
- Speed up the FastGS training rasterizer: dual-pixel blend, __expf, warp-aggregated edge atomics by @MrNeRF in #1673
- Speed up training by 9% by fixing the edge-map bottleneck by @MrNeRF in #1675
- Free the CPU from hidden GPU waits in the tensor library by @MrNeRF in #1676
- Speed up high-count training by 6% by fixing a hidden memory spill by @MrNeRF in #1682
- Make stopping and saving training instant on large datasets by @MrNeRF in #1689
- Align Input Settings rebind rows by @francescofugazzi in #1680
- Fix training failing to start with SH1 on some datasets by @MrNeRF in #1690
- Add ALT-G Grid Visibility Shortcut by @kmeirlaen in #1687
- Restore plugins and settings location on Windows builds by @MrNeRF in #1691
- Add built-in phase timing to the performance bench by @MrNeRF in #1677
- Accept COLMAP Points With Unknown Error by @kmeirlaen in #1674
- Move Input Settings into Preferences by @MrNeRF in #1692
- (#1693) Fix focused input fields not becoming unfocused when clicking outside… by @thomas-koch-core11 in #1694
- Save projects only with the user's consent by @MrNeRF in #1696
- Keep .licht project saves working past 2 GiB checkpoints on Windows by @MrNeRF in #1697
- Suppress the stale Training Stopped popup when loading a new dataset by @MrNeRF in #1698
- Add persistent spatial scene reconstruction for the viewport by @francescofugazzi in #1672
- Fix Save As over an existing project failing on Windows by @MrNeRF in #1701
- Disable Compact Project until a project file is bound by @MrNeRF in #1700
- Scene reconstruction follow-ups: fix the Preferences key-binding poll, preset persistence, and split-view captures by @MrNeRF in #1699
- Make checkpoint steps editable again (#1648) by @MrNeRF in #1702
- Fix training autosave failing while the training model is selected by @MrNeRF in #1704
- Revert invalid MSVC D9025 warning suppression by @francescofugazzi in #1705
- Make resumed training runs save their results by @MrNeRF in #1707
- Stop leaving lock files and stranded save temporaries behind by @MrNeRF in #1708
- Let users pick a different save location when starting training by @MrNeRF in #1709
- Fix Delete inside text fields deleting the selected model by @MrNeRF in #1710
- Clean up save temporaries left by a crash toward a new file by @MrNeRF in #1711
- Harden file I/O against the Windows 2GiB and text-mode bug classes by @MrNeRF in #1712
- Fix Save As over an existing project failing during paused training by @MrNeRF in #1718
- Ask to stop training when switching projects by @MrNeRF in #1719
- Keep autosave working after the first checkpoint save by @MrNeRF in #1722
- Keep loading and training when dataset images are missing by @MrNeRF in #1723
- Fix the histogram icon disappearing after project flows by @MrNeRF in #1724
- Ask to save before a new dataset replaces the open project by @MrNeRF in #1726
- Crash recovery for unsaved sessions, with a clearer dialog that remembers Skip by @MrNeRF in #1729
- Group File imports and surface rejected formats by @francescofugazzi in #1728
- Preserve calibrated camera frustums during training by @francescofugazzi in #1731
- Keep per-camera enabled and hidden state when reopening a project saved before training by @MrNeRF in #1732
- Fix Python UI callback teardown ordering by @francescofugazzi in #1735
- Stop the 'frame timeline waits must increase strictly' present storm by @MrNeRF in #1733
- One source of truth for what goes into a saved project by @MrNeRF in #1734
- Fix the error-debt CI gate by @MrNeRF in #1736
- Attach q16 bounds before the SH degree on every model rebuild by @MrNeRF in #1737
- Keep the viewport stable when toggling the UI by @francescofugazzi in #1727
- Let an explicit save refresh the preview after a recovery by @MrNeRF in #1740
- Make Recover consume the recovery offer by @MrNeRF in #1741
- Defer autosave until the scene goes quiet by @MrNeRF in #1743
- Recheck dataset images when reopening a project by @MrNeRF in #1744
- Fail loud when the writer lock cannot prove its identity by @MrNeRF in #1745
- Remove dead training-loop API and deduplicate save plumbing by @MrNeRF in #1746
- Match project-switch refusals by tag instead of message text by @MrNeRF in #1747
- Skip unchanged selection capture during automatic saves by @MrNeRF in #1748
- Associate the .licht format and manage file associations from Preferences by @MrNeRF in #1749
- Make the I/O discipline allowlist exact by @MrNeRF in #1751
- Close the tile-culling boundary so edge-exact splats are never dropped by @MrNeRF in #1755
- Tear down native panels and GUI globals when the GUI shuts down by @MrNeRF in #1754
- Trim IEEE divides in the fastgs preprocess kernels and align forward/backward numerics by @MrNeRF in #1757
- Trim the fastgs forward blend kernel by @MrNeRF in #1760
- Keep the Python test suite isolated and the startup chooser dismissing after open by @MrNeRF in #1759
- Marshal scene-mutating Python commands to the viewer thread by @MrNeRF in #1761
- Trim the fastgs backward blend kernel by @MrNeRF in #1762
- Refresh the error-debt baseline after the view-path refactor by @MrNeRF in #1764
- Trim backward blend dispatch to the cull modes that are actually used by @MrNeRF in #1765
- Use the same fast-math flags on every platform by @MrNeRF in #1766
- Reorder gaussians by Morton code during training by @MrNeRF in #1753
- Harden the Morton reorder tests by @MrNeRF in #1768
- Share one tile-row bound between instance counting and emission by @MrNeRF in #1769
- Configurable working folder, temp project instead of forced project creation, save prompts on every wipe by @MrNeRF in #1758
- Log when adding a keyframe replaces an existing one by @OmarFaig in #1772
- Keep Morton reorder in place for exportable splat storage by @MrNeRF in #1775
- Add measurement tool with translate gizmo to HTML viewer export by @jacobvanbeets in #1773
- Fix HTML viewer measurement tool input handling and resource lookup by @MrNeRF in #1778
- GUT training: all SH degrees, 25% faster by @MrNeRF in #1780
- Fix HTML export camera orbit for off-center models by @jacobvanbeets in #1782
- Seed PPISP exposure from EXIF and apply PPISP in evaluation by @MrNeRF in #1783
- Fix Python test collection on Windows: register the build root as a DLL directory by @alexmgee in #1787
- Guard plugin API version and feature contract against cross-language drift by @OmarFaig in #1789
- Polish Training panel and Scene Graph selection workflows by @francescofugazzi in #1730
- Normal loss: schedule parameters and automatic normal maps by @MrNeRF in #1784
- Native inference engine: drop ONNX Runtime, 34 ms normals in 1 GB VRAM by @MrNeRF in #1792
- Fix selection depth filter collapsing to a 1 cm slab (#1785) by @MrNeRF in #1794
- Make undo work for pasted splats (#1776) by @MrNeRF in #1795
- Fix camera spawn when opening a CLI-trained project by @MrNeRF in #1796
- Per-launch MCP port override (#1786) by @MrNeRF in #1797
- Keep the depth filter range intact when reopening a project saved with it enabled by @MrNeRF in #1798
- Explain and de-spam CODEC_UNSUPPORTED decode failures (#1791) by @MrNeRF in #1800
- Fix --save-project-at-iter when the target is the last iteration by @MrNeRF in #1799
- Big splat models no longer hit the 4 GB GPU memory wall by @MrNeRF in #1841
- Opening big PLY files needs much less GPU memory by @MrNeRF in #1842
- Add the far-field reconstruction option to mrnf by @MrNeRF in #1839
- Encode shN of viewer-built models into exportable q16 storage by @MrNeRF in #1844
- Normal loss defaults that improve the benchmark by @MrNeRF in #1793
- Saving a project with several loaded PLYs works again by @MrNeRF in #1846
- Make the Asset Manager native to .licht projects by @shadygm in #1770
- Asset Manager follow-up: thumbnails for every project, safer catalog, found-location relink by @MrNeRF in #1848
- Add Orthographic Mode toggle to the web viewer by @jacobvanbeets in #1856
- Create a new project UUID when using Save As by @shadygm in #1853
- Export of very large models no longer runs out of GPU memory by @MrNeRF in #1863
- Training started over MCP now uses the real default settings by @MrNeRF in #1865
- Opening .licht projects is 2-3x faster by @MrNeRF in #1866
- Save modified point clouds into the project, not over the source dataset by @MrNeRF in #1867
- Opening .licht projects is up to 5x faster by @MrNeRF in #1868
- Add overview video to README by @MrNeRF in #1869
- Faster tensor-core kernels and new NN ops by @MrNeRF in #1873
- Fix lichtfeld_tests not compiling on Windows by @thomas-koch-core11 in #1872
- Fix/python callback gil lifetime by @thomas-koch-core11 in #1871
- Fix GIL-safe ownership of Python animation callbacks by @MrNeRF in #1877
- Fix sequencer overlapping the asset manager and its own toolbar by @MrNeRF in #1878
- Fix training-time autosave failing after a training restart by @MrNeRF in #1881
- Make the sequencer timeline directly interactive across its full height by @MrNeRF in #1879
- Fix ruler tick drift after zoom and add Set Time to the keyframe menu by @MrNeRF in #1886
- Remaining sequencer fixes from #1133: preview updates, state reads, tooltips by @MrNeRF in #1891
- Exposure correction, a working bilateral grid, and cleaner skies by @MrNeRF in #1892
- Fix multi-model export and merge, and the Windows build by @MrNeRF in #1896
- Keep the undocked sequencer inside the viewport by @MrNeRF in #1901
- Optional Minecraft style for the training progress bar by @MrNeRF in #1902
- Keep the focal length when leaving orthographic mode by @MrNeRF in #1903
- Honor --mcp-port and --no-splash in view mode by @MrNeRF in #1904
- Keep the error-debt gate clean after the view-mode flag fix by @MrNeRF in #1907
- Let training start again after loading with an init PLY by @MrNeRF in #1905
- Save the final project into -o and run --export in the GUI flow by @MrNeRF in #1906
- A smoke break for the Minecraft progress bar by @MrNeRF in #1908
- Fix .licht resume anomalies: q16 pre-allocation, explicit -o, quiet shutdown by @MrNeRF in #1911
- Rename the Minecraft progress bar style to Miner by @MrNeRF in #1912
- Fix decoded image corruption during training by @shadygm in #1920
- Create training projects in the project location instead of hidden temp files by @MrNeRF in #1914
- Feat/project location creation by @MrNeRF in #1922
- Add an optional license to the .licht format by @MrNeRF in #1921
- Fix 16-bit color runs never hitting the compressed image cache by @MrNeRF in #1919
- Fix corrupted images on GPUs with hardware JPEG decoding by @MrNeRF in #1924
- Never drop the final project save under memory pressure, and warn the user by @MrNeRF in #1925
- Give the New Project name field a full-size input box by @MrNeRF in #1926
- Let explicit depth edits through the selection panel echo holdoff by @MrNeRF in #1927
- Repair stale test contracts and plugin test isolation by @MrNeRF in #1928
- Re-land the opt-in dataset embedding that missed master by @MrNeRF in #1929
- Commit the MoGe2 ONNX-reference fixture and its generator by @MrNeRF in #1931
- Cut training VRAM by 30% and speed up training by @MrNeRF in #1917
- Follow-ups: depth-edit mark expiry, typed autosave toast, honest restore-start message by @MrNeRF in #1933
- Marshal GUI-affine Python bindings to the viewer thread by @MrNeRF in #1934
- Remove the benchmark target pointing at a developer-local path by @MrNeRF in #1935
- Autosave no longer rewrites unchanged projects in a loop by @MrNeRF in #1938
- SPZ export is 2.6x faster by @MrNeRF in #1937
- SOG export is 1.9x faster and no longer drops colors of transparent splats by @MrNeRF in #1941
- Saving projects is 2.2x faster by @MrNeRF in #1940
- Training survives OOM, GUT gets edge scores, .licht keeps checkpoint history by @MrNeRF in #1943
- Remove the dead edge_compute backend by @MrNeRF in #1945
- Launching after a crash no longer takes seconds by @MrNeRF in #1944
- Fix normal/depth map generation aborting on mixed-orientation datasets by @MrNeRF in #1946
- Add a seperate .licht inspect and restore CLI Tool by @dreamTent in #1947
- Add an FOV slider with reset to the HTML viewer by @jacobvanbeets in #1951
- Fix Windows link failures for lfs_mcp and lfs_visualizer by @jacobvanbeets in #1957
- Replace OpenImageIO with direct image codecs by @MrNeRF in #1948
- SOG export is 10% smaller and 6% faster by @MrNeRF in #1949
- PLY export is 3.5x faster by @MrNeRF in #1952
- COLMAP dataset import is almost 5x faster by @MrNeRF in #1950
- SOG export is 2.9x faster: tiled k-means assignment by @MrNeRF in #1954
- Replace OpenUSD with vendored flat USD I/O by @MrNeRF in #1953
- fix: add missing include to tinyusdz integerCoding.h by @jacobvanbeets in #1958
- Fix GUI evaluation split initialization by @shadygm in #1923
- Fix stack overflow when embedding dataset into project (on Windows) by @thomas-koch-core11 in #1959
- Wrap long status text in viewport status overlays by @MrNeRF in #1960
- SPZ and SOG files open 2.5x faster, SPZ export 2.6x faster by @MrNeRF in #1961
- Loading splat files no longer freezes the window by @MrNeRF in #1962
- GT comparison: cheaper frames, cached depth/normal previews, no cross-thread syncs by @MrNeRF in #1963
- UI: no more idle CPU spin, display-rate animations, exact click replay by @MrNeRF in #1966
- Startup: window shown earlier, less work before the first frame by @MrNeRF in #1965
- Asset Manager: instant open, incremental rescans, thumbnails off the UI thread by @MrNeRF in #1964
- Histogram panel opens instantly: compute off the UI thread by @MrNeRF in #1969
- Modal dialogs no longer keep the frame loop awake by @MrNeRF in #1971
- PLY comparison renders each half at its own width by @MrNeRF in #1968
- Build the multi-node combined model off the main thread by @MrNeRF in #1972
- Compile the project lifecycle unit with /bigobj on MSVC by @MrNeRF in #1976
- Camera thumbnails: cheap decode, prioritised requests, no full re-renders by @MrNeRF in #1973
- Start training without blocking the window by @MrNeRF in #1974
- Autosave captures geometry off the viewer thread by @MrNeRF in #1970
- Cache the camera frustum overlay between frames by @MrNeRF in #1978
- Getting Started opens with the overview video by @MrNeRF in #1980
- Panels update on events, not on a timer by @MrNeRF in #1981
- Preferences opens without a first-use stall by @MrNeRF in #1982
- Camera thumbnails upload in batches by @MrNeRF in #1988
- Scene tree: lock before eye so eye and bin stay together by @MrNeRF in #1984
- Toolbar icons: one Tabler set, 40 px exports, clearer selection glyphs by @MrNeRF in #1985
- Bottom dock: tabs for sequencer and histogram, synced with the toolbar by @MrNeRF in #1983
- Selection: the cursor shows the armed set operation by @MrNeRF in #1987
- Panel layout test advances the scene generation before a poll flip by @MrNeRF in #1989
- Three main-thread waits removed by @MrNeRF in #1991
- Selection commits without host synchronisation by @MrNeRF in #1992
- Compile the gui manager unit with /bigobj on MSVC by @thomas-koch-core11 in #1990
- Scene graph drag and drop: correct, complete, animated by @MrNeRF in #1994
- Hidden panels no longer keep the frame loop awake by @MrNeRF in #1995
- Preferences: zoom speed and navigation speed sliders by @MrNeRF in #1997
- Windows: logger.cpp includes windows.h with NOMINMAX by @MrNeRF in #2000
- Floating panels: real soft shadow, no stretched edge by @MrNeRF in #1998
- Import dialogs open again after lazy panel registration by @MrNeRF in #1996
- Drops from Wayland-native apps arrive as files again by @MrNeRF in #2002
- Scene panel unregisters its tree element on destruction, keymap stubs refreshed by @MrNeRF in #2003
- Frame pacing: wait for the frame slot before reading input by @MrNeRF in #1993
- Selection: hardware brush ring, popup drags glued to the pointer by @MrNeRF in #2004
- Fix recent Windows compile and test-link regressions by @francescofugazzi in #2007
- Windows: selection pending-count struct destroys SceneSnapshot where it is complete by @MrNeRF in #2009
- Viewport rail follows the bottom dock and re-flows instead of scrolling by @MrNeRF in #2012
- Autosave no longer collides with its own geometry capture by @MrNeRF in #2013
- Deferred splat loads no longer collide with the async import slot by @MrNeRF in #2015
- New Project accepts a typed source path; stale tests repaired by @MrNeRF in #2016
- Plugin manager and marketplace robustness by @MrNeRF in #2017
- Fix USD splat CLI opening and preserve Windows Unicode paths by @francescofugazzi in #2020
- Non-ASCII paths, arguments and environment survive on Windows by @MrNeRF in #2021
- Vulkan: complete the 8-bit overlay flag transition on master (port of #2019) by @MrNeRF in #2023
- Honor transforms.json mask paths and preserve nested mask lookup by @francescofugazzi in #2022
- Fix MSVC preprocessing in Unicode path assertions by @francescofugazzi in #2027
- Add opt-in Release-only vcpkg presets for Windows and Linux by @francescofugazzi in #2028
- Avoid unnecessary CMake regeneration for core edits and runtime assets by @francescofugazzi in #2018
- Add fast source and MSVC preflight gates for Windows builds by @francescofugazzi in #2008
- Scene graph: fix undo for group/duplicate/paste, locked nodes, hidden-child merge by @MrNeRF in #2031
- Tests: skip missing local PLY fixture, isolate VRAM profiler order test by @MrNeRF in #2033
- Let headless training start from an untrained .licht with embedded dataset via --data-path by @thomas-koch-core11 in #2001
- Avoid waiting for training initialization on the viewer thread by @francescofugazzi in #2040
- Invalidate viewport state when training hands the same model to Edit Mode by @francescofugazzi in #2039
- Preserve Unicode in Windows console logs by @francescofugazzi in #2042
- Recover VkSplat shared scratch after training pause by @francescofugazzi in #2041
- Stream bridge test: enter through the public wait, pin the retired-handle contract by @MrNeRF in #2044
- Tensor: order synchronous host copies against the home stream by @MrNeRF in #2045
- Windows: per-request events for overlapped project file I/O (#2038) by @MrNeRF in #2049
- Add native LPIPS evaluation metric by @MrNeRF in #1977
- Fix camera coordinates in headless video export by @MrNeRF in #2051
- 3DGUT: honor prepared undistortion instead of applying distortion twice by @MrNeRF in #2054
- Fix upside-down Sequencer video export for point clouds by @MrNeRF in #2055
- Fix projects refusing to open when a camera or crop box was selected at save time by @MrNeRF in #2056
- Fix normal loss degrading large scenes late in training (wrong gradient index) by @MrNeRF in #2057
- Resuming a project with Undistort on no longer undistorts the cameras twice by @MrNeRF in #2059
- Headless runs redirected with -o keep the source project's embedded dataset by @MrNeRF in #2060
- Viewport never keeps showing a stale splat image while the camera moves during training by @MrNeRF in #2062
- FastGS: order the visible-count readback after the visibility scan by @MrNeRF in #2061
- Normal loss: apply user masks to the normal terms and gate the prior-depth term by @MrNeRF in #2064
- Adam: decode zero-variance joint moments as exactly zero by @MrNeRF in #2066
- MRNF: keep the far-field mask bound across reorders and carry it into FastGS by @MrNeRF in #2065
- Tests: normal-loss regression suite by @MrNeRF in #2067
- SSOG export and import by @MrNeRF in #2068
- MRNF: rebuild the far-field mask after hard compaction and ignore stale bindings by @MrNeRF in #2070
- Priors: accept depth and normal maps of any resolution, log the normal-estimation device by @MrNeRF in #2071
- Startup overlay: ignore clicks while a modal or context menu is open by @MrNeRF in #2073
- SSOG: export twice as fast by @MrNeRF in #2075
- MRNF: hand the far-field mask to Adam as a tensor, rebuild it on Background Improvement toggles by @MrNeRF in #2074
- SSOG: fix the error-debt gate and take export to 2.6x by @MrNeRF in #2076
- Selection: never draw the software brush ring while the cursor ring is showing by @MrNeRF in #2077
- Fix MRNF normal-loss pruning and checkpoint resume by @MrNeRF in #2078
- Fix viewport export use-after-free and device-loss handling by @MrNeRF in #2083
- Fix MRNF saturated opacity and PLY export by @MrNeRF in #2082
- Masks: compare segment_and_ignore bands on the normalized mask scale by @rkskmt in #2085
- Fix Windows test build errors in crash handler and Vulkan exports by @miriameng in #2088
- Fix firewall warning when running the application [Volinga] by @Ediolot in #2092
- fix: add Pascal viewer compatibility and avoid scratch cleanup deadlock by @parsamahdavi48 in #2090
- Fix duplicate selection brush on Wayland by @constantin906 in #2086
- Fix unclickable Training Complete dialog with File menu open by @MrNeRF in #2113
- Fix bilateral grid with disabled cameras by @MrNeRF in #2111
- Match SegmentAndIgnore evaluation to the training keep band by @MrNeRF in #2114
- Center the orbit pivot in comparison views by @MrNeRF in #2115
- Confirm overwrite when creating an existing project by @MrNeRF in #2116
- Keep training initialization on the scene owner thread by @MrNeRF in #2118
- Refresh cached panels after UI scale and visibility changes by @MrNeRF in #2119
- Keep polygon selection out of dock controls by @MrNeRF in #2120
- Avoid combined model copies in PLY comparison by @MrNeRF in #2121
- Keep GT Compare aligned during training and mouse movement by @MrNeRF in #2122
- Fix GPU video extraction frame synchronization by @MrNeRF in #2125
- Prevent training viewport flashes during arena contention by @MrNeRF in #2126
- Fix mask processing after image undistortion by @MrNeRF in #2129
- Fix Stop after reopening a project and Save during dataset embedding by @MrNeRF in #2130
- Keep the histogram visible above its controls by @MrNeRF in #2131
- Fix deleted-splat rendering after undo and redo by @MrNeRF in #2132
- Fix histogram loading without NumPy by @MrNeRF in #2133
- Fix randomly black GT previews during training by @MrNeRF in #2134
- Fix stale opacity frames after edits and undo by @MrNeRF in #2136
- Connect LichtFeld Studio to the portal and sync gallery files by @MrNeRF in #2137
- Fix Windows snapshot linkage and visualizer object size by @MrNeRF in #2139
- Preserve CropBox settings when training starts by @MrNeRF in #2140
- Match Rendering panel scrolling to Training by @MrNeRF in #2141
- Add label tool to HTML viewer export by @jacobvanbeets in #2124
- Fix black RAD viewports and holes during LOD navigation by @MrNeRF in #2142
- Preview and refine three-point alignment by @MrNeRF in #2145
- Export alignment snap resolver on Windows by @francescofugazzi in #2147
- Fix PLY comparison alignment, black panels and crash by @francescofugazzi in #2144
- Fix bright red/yellow pixels with GUT exposure correction by @MrNeRF in #2146
- Projects panel, Inspector Contents and Gallery publishing by @MrNeRF in #2148
- fix stack overflow in scene publication by @kmeirlaen in #2153
- Fix spacing in wayland and xkbcommon module versions by @Alatar98 in #2152
- Catch gallery export stack overflows in tests by @MrNeRF in #2154
- Show project filenames instead of parent folder names by @MrNeRF in #2155
- Include projects outside the library in Recent by @MrNeRF in #2156
- Keep context menus inside the window by @MrNeRF in #2157
- Show a project icon when a thumbnail is missing by @MrNeRF in #2158
- Refresh gallery workflow regression fixtures by @MrNeRF in #2159
- Publish saved projects from the File menu by @MrNeRF in #2160
- Decode thumbnail images and preserve the dialog on cancel by @MrNeRF in #2161
- Keep custom thumbnails when saving projects by @MrNeRF in #2163
- Offer only usable project thumbnail sources by @MrNeRF in #2162
- Fix Asset Manager theme coverage and stale status-bar tests by @MrNeRF in #2178
- Fix Windows window bounds and Asset Manager resize cursors by @francescofugazzi in #2164
- Improve Project Manager responsiveness, layout, and Gallery UX by @francescofugazzi in #2177
- Fix Project Manager Inspector access, reset height, and Gallery refresh by @MrNeRF in #2184
- Share published scenes by link instead of making them public by @MrNeRF in #2186
- Report an unsupported gsplat intersection count instead of aborting by @MrNeRF in #2185
- Render large frames by batching the tile grid by @MrNeRF in #2188
- Fix project list actions and gallery conflict tooltips by @francescofugazzi in #2181
- Show project details and actions for external recent files by @francescofugazzi in #2183
- Make the screen-share limit work on GUT without costing quality by @MrNeRF in #2194
- Fix restoring saves with retained project previews by @francescofugazzi in #2182
- Restore input handling in dirty-driven Python panels by @francescofugazzi in #2192
- Honor project locations in Windows save dialogs by @francescofugazzi in #2193
- Show the active project in the application title bar by @francescofugazzi in #2195
- Fix Unicode filenames across Windows UI boundaries by @francescofugazzi in #2198
- Preserve Unicode filenames in serialized error details by @francescofugazzi in #2199
- Return the default log file path as UTF-8 by @francescofugazzi in #2200
- Preserve Unicode project names in recovery path handling by @francescofugazzi in #2201
- Preserve Unicode filenames during drag and drop by @francescofugazzi in #2202
- Preserve Unicode paths in environment map diagnostics by @francescofugazzi in #2204
- Fix stale GUT state when switching to IGS+ by @francescofugazzi in #2197
- Allow MCP sequencer scrubs to update the viewport camera by @francescofugazzi in #2196
- Keep one dirty check for the title bar, and test the title properly by @MrNeRF in #2203
- Preserve Unicode filenames in preprocessing progress by @francescofugazzi in #2205
- Fix TinyUSDZ compilation with GCC 15 by @shadygm in #2221
- Protect active project write temps from recovery cleanup by @francescofugazzi in #2232
- Fix SOG publication after soft-deleting splats by @francescofugazzi in #2234
- Refresh project thumbnails immediately after updates by @francescofugazzi in #2230
- Fix Gallery state and publishing for external recent projects by @francescofugazzi in #2233
- windows: fix test compilation by @miriameng in #2236
- Preserve Unicode paths in weight file errors by @francescofugazzi in #2217
- Preserve thumbnail proportions and refine responsive Project Manager interactions by @francescofugazzi in #2231
- Preserve Unicode paths in crash diagnostics by @francescofugazzi in #2222
- Export menu bar test dependencies on Windows by @francescofugazzi in #2213
- Keep checkpoints in order after compacting a project by @MrNeRF in #2240
- Restore save points that contain deleted checkpoints by @MrNeRF in #2241
- Keep the New Project dialog closed when reopening projects by @MrNeRF in #2242
- Clear the unsaved marker after saving paused training by @MrNeRF in #2243
- Keep Gallery reviews visible and recover failed changes by @MrNeRF in #2244
- Persist project folder rescans and discard canceled changes by @MrNeRF in #2245
- Stop showing failed Gallery downloads as processing by @MrNeRF in #2246
- Choose the folder when creating a project by @MrNeRF in #2247
- Apply Gallery conflicts locally and keep unpublished changes by @MrNeRF in #2248
- Preserve Unicode filenames in converter overwrite prompts by @francescofugazzi in #2219
- more descriptive tooltips for training parameters by @kmeirlaen in #2149
- Preserve Unicode filenames in converter outputs by @francescofugazzi in #2227
- Build vulkan-loader with Wayland WSI support on Linux by @bmaltais in #2249
- Preserve Unicode paths throughout project save and recovery by @francescofugazzi in #2224
- Start new projects without creating a file by @MrNeRF in #2251
- Start training without processing the whole dataset first by @MrNeRF in #2253
- Fix thumbnail updates colliding with Save and Exit by @MrNeRF in #2254
- Clean old project saves while keeping the current state by @MrNeRF in #2252
- Allow republishing projects deleted from Gallery by @MrNeRF in #2256
- Explain Gallery changes before opening a project by @MrNeRF in #2257
- Keep project write polling on the viewer thread by @MrNeRF in #2258
- Fix local copies of newly uploaded Gallery scenes by @MrNeRF in #2259
- Persist Project Manager preferences and refine responsive startup UX by @francescofugazzi in #2255
- Keep training initialization aligned when centering datasets by @MrNeRF in #2260
- Fix project cleanup, histogram updates and ring dragging by @MrNeRF in #2270
- Remove the old v0.3 video from Getting Started by @MrNeRF in #2271
- Fix restoring older save points by @MrNeRF in #2272
- Keep the Project Manager close button visible at every width by @francescofugazzi in #2269
- Keep points outside the crop box when starting training by @MrNeRF in #2273
- Fix persistence of Project Manager folder scan depth by @francescofugazzi in #2263
- Fix build warnings across Debug and Release configurations by @MrNeRF in #2274
- Add Windows binary metadata to mitigate Defender false positives by @MrNeRF in #2275
- fix viewport export in high res by @MrNeRF in #2276
- Fix gallery recovery after oversized viewport thumbnails by @MrNeRF in #2283
- Fix high-resolution depth and orthographic viewport exports by @MrNeRF in #2278
- Fix autosave provenance after edits and wrap long modal paths by @MrNeRF in #2284
- Keep image-export overhead out of the interactive viewer by @MrNeRF in #2285
- Keep undistorted images within max width by @MrNeRF in #2286
- Fix crash when switching projects during training by @MrNeRF in #2287
- Show the splash as one card centered on the window by @MrNeRF in #2288
- Fix undefined banded export shader macro warning by @francescofugazzi in #2289
- Prevent Selection Groups from appearing after a layout reset by @francescofugazzi in #2290
- Fix Selection Groups registration after PR #2290 by @francescofugazzi in #2291
- Fix import dialog Advanced arrow not rotating on toggle by @jacobvanbeets in #2305
- Keep projects unlinked after Unlink by @MrNeRF in #2308
- Show the Copy link label in the Inspector by @MrNeRF in #2309
- Rename from the project card also updates the file title by @MrNeRF in #2310
- Wrap tooltips between words by @MrNeRF in #2312
- Keep the Transfers overlay visible with the Project Manager open by @MrNeRF in #2313
- Update the project thumbnail from the File menu by @MrNeRF in #2314
- Show Inspector only once in the project menu by @MrNeRF in #2315
- Apply gallery text without opening the project by @MrNeRF in #2317
- Keep the applied gallery view in sync by @MrNeRF in #2321
- Do not save the project when publishing by @MrNeRF in #2316
- Make the checkpoint and dataset filters work by @MrNeRF in #2318
- Update the gallery cover from the project thumbnail on publish by @MrNeRF in #2320
- Edit the gallery title and description before publishing by @MrNeRF in #2319
- Do not upload the scene again when only metadata changed by @MrNeRF in #2322
- Do not show a content conflict for a view-only save by @MrNeRF in #2323
- Keep empty local camera tracks out of published views by @MrNeRF in #2324
- Keep the viewport smooth while training runs by @MrNeRF in #2325
- Redraw the UI only for what changes during training by @MrNeRF in #2326
- Remove the gallery status label from the Projects panel by @MrNeRF in #2327
- Keep SOG license files through gallery downloads and imports by @MrNeRF in #2328
- Restore gallery upload retries by @MrNeRF in #2329
- Fix Windows format-test build after SOG license parsing changes by @francescofugazzi in #2341
- Run CPU Python tests in CI by @MrNeRF in #2331
- Add a gallery publishing sample corpus by @MrNeRF in #2330
- Fix Tools → Projects selecting the Projects view by @francescofugazzi in #2343
- Make the Gallery only filter show only gallery-only projects by @MrNeRF in #2345
- Call the filter reset option "No filter" by @MrNeRF in #2346
- Name the active filter in the Projects header by @MrNeRF in #2347
- Include gallery-only scenes in All projects, add Local projects by @MrNeRF in #2348
- Fix LichtFeld Studio quitting when opening a downloaded project on Windows by @MrNeRF in #2349
- Let Enter start a new line in the publish description by @MrNeRF in #2350
- Show and save Inspector descriptions and license text as typed by @MrNeRF in #2351
- Move gallery sync procedures out of the controller by @MrNeRF in #2332
- Remove temporary files after applying gallery changes by @MrNeRF in #2353
- Remove emptied groups when applying gallery content by @MrNeRF in #2354
- Show a cover upload failure as a warning, not a failed publish by @MrNeRF in #2355
- Ignore float noise when comparing gallery view settings by @MrNeRF in #2356
- Pick up a project save made while the Projects panel was hidden by @MrNeRF in #2357
- Validate MCP HTTP requests and require a token for network access by @MrNeRF in #2363
- Ask before starting training again after a finished run by @MrNeRF in #2364
- Open Selection Groups from the Select menu by @MrNeRF in #2365
- Publish a scene with or without saving it as a project by @MrNeRF in #2368
- Keep Python callbacks safe while I/O operations release the GIL by @MrNeRF in #2360
- Add Tersus as hardware sponsor to the README by @MrNeRF in #2369
- Projects panel without the left sidebar by @MrNeRF in #2362
- Fix the Needs attention project filter by @MrNeRF in #2370
- Add a single existing project without watching its folder by @MrNeRF in #2371
- Keep the Projects panel responsive with many projects by @MrNeRF in #2374
- Make dropdown lists as wide as their field and align form fields by @MrNeRF in #2375
- Choose where a gallery download is saved by @MrNeRF in #2376
- Let the Projects toolbar wrap instead of clipping or overlapping by @MrNeRF in #2377
- Escape the placeholder in the Scripts panel hint by @MrNeRF in #2379
- Show live keymap shortcuts in button tooltips by @MrNeRF in #2381
- Make panel resizing work from both sides and follow the cursor by @MrNeRF in #2383
- Make the account connection easier to find and act on by @MrNeRF in #2372
- glTF/glb splat IO support by @dozeri83 in #2344
- Expect the GLB format in the export panel test by @MrNeRF in #2384
- Expect the glTF format in the export panel test by @MrNeRF in #2385
- Hide tooltips when the pointer leaves their area by @MrNeRF in #2386
- Keep exposure correction grids in host memory by @MrNeRF in #2387
- Export the RmlUIManager methods used by the tooltip test by @MrNeRF in #2389
- Refresh Python stubs for the GLB export bindings by @MrNeRF in #2390
- Smooth viewport navigation while training by @MrNeRF in #2388
- Queue clearing finished transfers behind a gallery refresh by @MrNeRF in #2392
- Fix stale Projects workers and add missing input localization keys by @francescofugazzi in #2391
- Reuse nvJPEG encoder params across cache encodes by @MrNeRF in #2394
- Remove the viewport reprojection by @MrNeRF in #2397
- Fix UI glitches at narrow widths and large UI scales by @MrNeRF in #2398
- Fix empty-state hint overlapping import status by @francescofugazzi in #2405
- Prune stale image preview metadata by @francescofugazzi in #2406
- Stop tinyply at the end of a truncated PLY body by @MrNeRF in #2400
- Check MCP tool arguments against their declared types by @MrNeRF in #2401
- Keep setting fields readable and aligned on narrow panels by @MrNeRF in #2403
- Group digits in displayed counts by @MrNeRF in #2407
- Turn the viewport vignette off by default by @MrNeRF in #2411
- Fix stale Getting Started thumbnail callbacks after remount by @francescofugazzi in #2410
- Bring four stale tests back in line with the code by @MrNeRF in #2412
- Keep the image preview status strip on one line by @MrNeRF in #2413
- Restore Plugin Marketplace callbacks after remount by @francescofugazzi in #2409
- Rediscover plugins when the Marketplace reopens by @MrNeRF in #2414
- Give every copied project file its own Projects entry by @MrNeRF in #2415
- Refuse File > Publish for a copy of another project by @MrNeRF in #2417
- Render emoji in UI text with the system color emoji font by @MrNeRF in #2418
- Load the emoji font for emoji in text fields by @MrNeRF in #2421
- Fix NaN buffer rollback and Windows test linking by @francescofugazzi in #2426
- Pass FastGS Adam batch metadata by value by @francescofugazzi in #2428
- Keep FastGS Adam reset indices on GPU by @francescofugazzi in #2431
- Test that GPU Adam state resets match the host index path by @MrNeRF in #2432
- Avoid reserving unused PPISP controller CNN buffers by @francescofugazzi in #2433
- Avoid a duplicate image-directory scan during COLMAP loading by @francescofugazzi in #2435
- Write per-image evaluation results and add --eval-all by @MrNeRF in #2422
- Fix master CI: error-debt gate and x264 download by @MrNeRF in #2437
- Exercise the 16-bit JPEG 2000 cache path with a resized load by @MrNeRF in #2439
- Fetch x264 from its GitHub mirror by @MrNeRF in #2440
- Remove the disabled COLMAP scan benchmark by @francescofugazzi in #2451
- Reduce training VRAM and bound refine and Morton peaks by @MrNeRF in #2460
- Release cached images when host memory runs low by @MrNeRF in #2461
- Reduce viewer VRAM by @MrNeRF in #2463
- Show VRAM by owner over time and report GPU memory like the driver by @MrNeRF in #2466
- Keep the viewport at full resolution when training allocations retry by @MrNeRF in #2502
- Reject misshapen FastGS extra gradients in every build by @MrNeRF in #2486
- Apply node-parented crop boxes in single-model scenes by @MrNeRF in #2516
- Open the File > Export panel from the project manager by @MrNeRF in #2517
- Ask to stop training before compacting the project by @MrNeRF in #2518
- Open never-trained projects ready to train by @MrNeRF in #2521
- Resolve an images folder next to the dataset from the working directory by @MrNeRF in #2519
- Fix the stale binding count in the viewer overlay storage test by @MrNeRF in #2549
- Use the official Tersus logo files by @MrNeRF in #2550
- Adjust the sponsor wall by @MrNeRF in #2551
- Group the project context menu actions by @MrNeRF in #2553
- Keep the Performance window under the cursor next to the Project Manager by @MrNeRF in #2554
- Add screenshot JPG export with resolution presets to the HTML viewer by @jacobvanbeets in #2571
- Stop state replacement from writing through Tensor views by @MrNeRF in #2573
- Fix gsplat SH addressing, depth modes and two SSIM gradient bugs by @MrNeRF in #2574
- Make Tensor assignment always rebind by @MrNeRF in #2576
- Move training charts and status above the parameter search by @francescofugazzi in #2581
- Keep the screen-share hinge out of Adam's second moment by @MrNeRF in #2602
- Fix tensor edge cases on the CPU and CUDA by @MrNeRF in #2605
- Fix COLMAP export, undo history, project restore and SH model commands by @MrNeRF in #2606
- Harden MCP tools against malformed input, native dialogs and stale scene state by @MrNeRF in #2607
- Fix failed final exports, lazy shN gradient growth and NaN models in training by @MrNeRF in #2608
- Synchronize block reductions before their shared buffer is reused by @MrNeRF in #2611
- Load dropped models as queued batches by @MrNeRF in #2619
- Encode combined models in bounded bands by @MrNeRF in #2620
- Size banded q16 storage to the model capacity by @MrNeRF in #2621
- Keep the load confirmation callback compatible by @MrNeRF in #2622
- Fix Python editor editing and keyboard input routing by @MrNeRF in #2624
- Fix the Windows build and error-debt gate on master by @MrNeRF in #2626
- Measure compaction peak with process allocator accounting by @MrNeRF in #2629
- Stabilize large-image bilateral gradient comparisons by @MrNeRF in #2630
- Fix Windows build and test linker failures by @francescofugazzi in #2631
- Keep comparison captures upright and step through scene cameras by @MrNeRF in #2634
- HTML export: screenshot capture with overlay compositing and fullscreen-first framing by @jacobvanbeets in #2638
- Report VRAM without double counting shared allocations by @MrNeRF in #2636
- Catch missing Windows exports in the Linux build by @MrNeRF in #2643
- Fix optimizer capacity after uncapped compaction by @MrNeRF in #2641
- Gate colour gradients below the blend clamp toward the image by @MrNeRF in #2654
- Normalize the quaternion before placing split children by @MrNeRF in #2655
- Use exact neighbors for MRNF initialization by @MrNeRF in #2656
- Show the exact iteration in the Training panel after Pause and Stop by @MrNeRF in #2659
- Update the Volinga logo by @MrNeRF in #2660
- Let training and the viewport take turns on the GPU by @MrNeRF in #2662
- Keep typed step values exact and make the automatic stretch respect them by @MrNeRF in #2666
- Fix Ground Truth comparison dropdown alignment by @francescofugazzi in #2667
- Export and import all dataset and training settings in config files by @MrNeRF in #2669
- Stop redrawing the viewport while a camera drag is held still by @MrNeRF in #2670
- Return a typed error from config import by @MrNeRF in #2676
- Redraw the viewport only when something changes by @MrNeRF in #2675
- Show line breaks in runtime error dialogs by @MrNeRF in #2677
- Remove unused frame-scheduling code by @MrNeRF in #2678
- Allow resuming projects trained with added splats by @MrNeRF in #2680
- Avoid reprocessing immediate image cache hits by @MrNeRF in #2681
- Support six-term rational camera distortion by @MrNeRF in #2683
- Fix Ubuntu workflow validation blocking Release and Debug builds by @francescofugazzi in #2685
- Fix evaluation and training image quality with --undistort by @MrNeRF in #2686
- Fix the error-debt gate for evaluation view preparation by @MrNeRF in #2687
- Allow cleaning and compacting projects without opening them by @francescofugazzi in #2674
- Average masked LPIPS over the masked area by @MrNeRF in #2688
- Keep renders from changing training statistics and fix a hidden-model training stall by @MrNeRF in #2690
- Add eval_space to the parameter JSON test references by @MrNeRF in #2691
- Keep depth AbsRel available after resuming a project by @MrNeRF in #2684
- Leave frozen added splats out of the final export with --exclude-export by @MrNeRF in #2692
- Match thin-prism fisheye undistortion to the COLMAP camera model by @MrNeRF in #2693
- Scan multinomial weights once on CUDA by @MrNeRF in #2696
- Order legacy-stream work against non-blocking streams in the memory pool by @MrNeRF in #2699
- Order evaluation reads after render and sidecar loading streams by @MrNeRF in #2700
- Downscale CPU-decoded training images and evaluation references on the GPU by @MrNeRF in #2702
- Select evaluated pixels with a mesh by @MrNeRF in #2689
- Restrict optional GPU idle CI to the upstream repository by @francescofugazzi in #2704
- Fix Windows portal storage permissions and stale viewport rendering by @francescofugazzi in #2703
- Fix missing SfM chapter dependency in CPU format tests by @francescofugazzi in #2705
- Unify editable dataset configuration after #2669 by @francescofugazzi in #2671
- Request redraws where view inputs change by @MrNeRF in #2706
- Add the evaluation mask parameters to the parameter JSON references by @MrNeRF in #2708
- Measure this process's device memory in the FastGS VRAM release test by @MrNeRF in #2711
- Show UI and viewport frame rates separately and fix resize and scale redraws by @MrNeRF in #2712
- Composite RGBA targets over the training background by @MrNeRF in #2715
- Fix redraw and layout issues after the frame-rate update by @MrNeRF in #2716
- Decode and cache 16-bit RGBA images at full precision by @MrNeRF in #2717
- Order the immediate CPU image decode on the caller's stream by @MrNeRF in #2719
- Put the first alpha load on the 16-bit cache grid by @MrNeRF in #2721
- Pin the mask cache sample-width contract in the IO hygiene test by @MrNeRF in #2725
- Run deferred view materializers on their tensor's stream by @MrNeRF in #2728
- Order eager tensor ops after inputs from other streams by @MrNeRF in #2729
- Replace TinyEXR with OpenEXRCore for native DWA decoding by @francescofugazzi in #2710
- Skip pool rehoming when an empty tensor changes stream by @MrNeRF in #2732
- Keep nvImageCodec pinned buffers in the caching allocator by @MrNeRF in #2733
- Find the gallery test fixtures from the project root by @MrNeRF in #2734
- Annotate the EXR decoder's handled catches for the error-debt gate by @MrNeRF in #2731
- Pace frames without input to the display interval by @MrNeRF in #2736
- Offer Retry and Change Location when a project save runs out of disk space by @MrNeRF in #2737
- Add tooltips for splat exposure and tone mapping by @MrNeRF in #2745
- Recover the failed save destination and every full-volume write in the disk-space dialog by @MrNeRF in #2740
- Pace from the last presented frame's start and never block on queued viewer work by @MrNeRF in #2741
- Keep exposure correction's backward to one live image per stage by @MrNeRF in #2742
- Keep CUDA narrow-row reductions and broadcasts at full occupancy by @MrNeRF in #2743
- Keep panel tab labels in the current language by @MrNeRF in #2746
- Ignore focus without a context while panel documents reload by @MrNeRF in #2747
- Translate the UI strings that were still English in every locale by @MrNeRF in #2750
- Keep the thin-image SSIM gradient test off the L1 kink by @MrNeRF in #2751
- Keep CUDA where operands compact and skip per-element broadcast indexing by @MrNeRF in #2752
- Multiply narrow CUDA matrices one row per thread by @MrNeRF in #2755
- Start training without the setup stall by @MrNeRF in #2756
- HTML viewer: multiple measurements alongside labels in save/load by @jacobvanbeets in #2744
- Lower exposure correction VRAM with an in-place appearance backward by @MrNeRF in #2758
- Accelerate CPU image encoding with libjpeg-turbo and zlib-ng by @francescofugazzi in #2757
- Export the native scene panel from the visualizer library by @MrNeRF in #2760
- Find trimmed scene bounds by selection instead of sorting by @MrNeRF in #2761
- Follow up #2756: keep training project preparation responsive by @francescofugazzi in #2759
- Keep Linux Release CPU instructions portable across CI runners by @francescofugazzi in #2767
- Remove the training manager's event handlers when it is destroyed by @MrNeRF in #2769
- Gate training preparation animation on active state by @francescofugazzi in #2770
- Lower evaluation VRAM and remove hidden copies in lazy materialization by @MrNeRF in #2772
- Initialize the logger in the scene panel log demand test by @MrNeRF in #2773
- Remove the MRNF background improvements option by @MrNeRF in #2780
- Give the scene panel log demand test an RmlUIManager by @MrNeRF in #2784
- Order the copy in Tensor::reserve after writes on the tensor's stream by @MrNeRF in #2790
- Connect sequencer redraw demand, the Python selection submode and the gallery undo/recovery buttons by @MrNeRF in #2803
- Draw registered plugin gizmos and UIList rows by @MrNeRF in #2804
- Keep projects readable when their evaluation mask file is missing by @MrNeRF in #2805
- Fix --save-project-at-iter after an earlier project save by @MrNeRF in #2782
- Refresh scene-dependent operator polls and record benchmark PSNR by @MrNeRF in #2807
- Consistent training panel controls and one UI font by @MrNeRF in #2809
- Open projects whose parameter presets hold values this version rejects by @MrNeRF in #2818
- Publish projects with an HDR background, fix the publish dialog layout and keep entered details by @MrNeRF in #2817
- Remove missing projects from the Missing files view in one step by @MrNeRF in #2819
- Skip the preview warning for projects whose file is gone by @MrNeRF in #2825
- Keep every save until the user removes it by @MrNeRF in #2827
- Fix the localization contract for the sequencer frame demand by @MrNeRF in #2834
- Fix camera frustum occlusion against point-cloud NDC depth by @francescofugazzi in #2837
- HTML viewer: in-world VR annotations and locomotion for exported viewers by @jacobvanbeets in #2822
- Fix MCMC sampling with small weights, Float16 clamp and one-sided clamp infinities by @MrNeRF in #2840
- Keep added splats when training in the viewer by @MrNeRF in #2843
- Keep --eval-steps when training in the viewer by @MrNeRF in #2844
- Speed up saving and loading evaluation images by @MrNeRF in #2848
- Export Float16 tensors to NumPy without aborting by @MrNeRF in #2851
- Decode the next evaluation image while the current one is scored by @MrNeRF in #2856
- Keep the crop box when training starts from an init splat by @MrNeRF in #2857
- Validate frustum overlay push constants and clarify depth reconstruction by @francescofugazzi in #2841
- Fix block-shaped camera frustum occlusion in HiGS previews by @francescofugazzi in #2858
- Keep the mesh converter's Vulkan device until the process ends by @MrNeRF in #2861
- Select evaluated pixels with boxes, the crop box, mask folders, depth and points by @MrNeRF in #2860
- Compute exact HiGS depth only where viewport overlays read it; exact depth for meshes by @MrNeRF in #2863
- Parallelize MRNF's bounded median selection by @MrNeRF in #2868
- Release panel Python instances with the GIL and contain poll exceptions by @MrNeRF in #2873
- Repeat tensors by the exact count instead of the next power of two by @MrNeRF in #2869
- Fix locale markup and CPU Python test contracts by @francescofugazzi in #2870
- Assign through a boolean row mask to whole rows by @MrNeRF in #2871
- Keep dimensions in global tensor reductions when keepdim is set by @MrNeRF in #2872
- Keep every configured project save step while a writer is active by @MrNeRF in #2874
- Return NaN from tensor asin and acos outside their domain by @MrNeRF in #2875
- Finish editor scripts that call sys.exit and keep the editor usable by @MrNeRF in #2876
- Return NaN from tensor sign for NaN inputs by @MrNeRF in #2878
- Reject CUDA arrays in Python APIs that read their input on the host by @MrNeRF in #2879
- Mark the CUDA cases of the new tensor regression tests as GPU tests by @MrNeRF in #2880
- Release the GIL while starting splat simplification from Python by @MrNeRF in #2882
- Localize the editor SystemExit message by @MrNeRF in #2885
- Clear Python undo callbacks before interpreter shutdown by @MrNeRF in #2886
- Preserve the first NaN index in tensor argmin and argmax by @MrNeRF in #2887
- Allow empty tensor slices with valid view offsets by @MrNeRF in #2888
- Restore contiguous NumPy input validation by @MrNeRF in #2889
- Validate mesh handles and face indices by @MrNeRF in #2890
- Handle empty batched matmul outputs by @MrNeRF in #2891
- Support Float16 Python extraction by @MrNeRF in #2892
- Import NumPy Float16 arrays by @MrNeRF in #2893
- Expand scoped selection masks to scene indices by @MrNeRF in #2895
- Preserve project scenes during hydration imports by @MrNeRF in #2896
- Guard Gaussian deletion in selection tools by @MrNeRF in #2897
- Preserve RAD LOD data in identity exports by @MrNeRF in #2899
- Keep sibling dataset references portable by @MrNeRF in #2900
- Add eval_mask_opacity to the parameter JSON references by @MrNeRF in #2901
- Reset stale import completion state by @MrNeRF in #2902
- Reject unsafe export names and failed project saves by @MrNeRF in #2903
- Report empty evaluations and missing image backgrounds by @MrNeRF in #2904
- Validate numeric training options by @MrNeRF in #2905
- Reject unknown log levels by @MrNeRF in #2906
- Preserve scene bindings on headless resume by @MrNeRF in #2908
- Refresh generated Python stubs by @MrNeRF in #2909
- Reject stale SceneNode wrappers by @MrNeRF in #2910
- Keep dataset drops replacing during project hydration by @MrNeRF in #2911
- Preserve bool dtype in DLPack interchange by @MrNeRF in #2912
- Reject copy=False export of non-contiguous tensors by @MrNeRF in #2913
- Raise for non-finite and out-of-range integer conversions by @MrNeRF in #2914
- Reject converter output suffixes that contradict the format by @MrNeRF in #2915
- Validate MCP render scale values by @MrNeRF in #2916
- Reject --init when resuming by @MrNeRF in #2917
- Reject null optional MCP booleans by @MrNeRF in #2918
- Reject --init together with --random by @MrNeRF in #2919
- Validate optimization enums in user configuration by @MrNeRF in #2920
- Allow zero perf benchmark warmup by @MrNeRF in #2922
- Preserve fractional MCP request ids by @MrNeRF in #2923
- Carry stop approval through the project switch by @MrNeRF in #2924
- Support ellipsis and new-axis tensor indexing by @MrNeRF in #2925
- Support standalone camera image loading by @MrNeRF in #2926
- Reject wrong JSON types in user configuration by @MrNeRF in #2927
- Restore the error-debt gate after the training update by @MrNeRF in #2929
- Give OperatorFlags flag semantics in Python by @MrNeRF in #2930
- Validate colormap input rank by @MrNeRF in #2931
- Validate SplatData.set_colors_rgb input by @MrNeRF in #2932
- Honor dataset options when resuming a project by @MrNeRF in #2933
- Reject unknown MeshData.to devices by @MrNeRF in #2934
- Validate project preview PNG bytes by @MrNeRF in #2941
- Accept empty multidimensional NumPy arrays by @MrNeRF in #2935
- Validate MeshData tensor setters by @MrNeRF in #2936
- Reject negative tensor dimensions in factories by @MrNeRF in #2937
- Broadcast values in tensor slice assignment by @MrNeRF in #2939
- Cover invalid tuple index assignment by @MrNeRF in #2940
- Enforce the dataset resize factor minimum in Python by @MrNeRF in #2942
- Validate optimization parameters set from Python by @MrNeRF in #2943
- Support positive stepped tensor slices by @MrNeRF in #2944
- Reject nonpositive pipeline grow and shrink iterations by @MrNeRF in #2947
- Return an empty tensor when arange steps away from its end by @MrNeRF in #2948
- Reject non-finite splat simplification ratios by @MrNeRF in #2945
- Report empty pipelines as not ready by @MrNeRF in #2949
- Reject negative LOD hierarchy node ids by @MrNeRF in #2946
- Reject --mcp-port in headless mode by @MrNeRF in #2953
- Restore the outer context after nested lf.run by @MrNeRF in #2952
- Return Camera.K without a batch dimension by @MrNeRF in #2954
- Return an empty tensor for zero linspace samples by @MrNeRF in #2951
- Make the animation timeline constructible from Python by @MrNeRF in #2955
- Create arange tensors on the requested device by @MrNeRF in #2959
- Update Python tests for automatic MRNF values and the shared edge loss by @MrNeRF in #2958
- Evaluation: reference bit depth, FLIP and one image per view with masks by @MrNeRF in #2961
- Count the new evaluation property in the property inventory test by @MrNeRF in #2962
- Scope exposure correction defaults to MRNF by @MrNeRF in #2963
- Concatenate CUDA tensors of any element size along inner dimensions by @MrNeRF in #2964
- Fix compact performance HUD input and dragging by @MrNeRF in #2966
- Create a fresh project on training-start Save As by @MrNeRF in #2967
- Fix MSVC C2398 narrowing conversion in metrics eval expand() calls by @jacobvanbeets in #2965
- Define output_format_extension inline for the standalone unicode path test by @MrNeRF in #2969
- Skip disabled backward features in the fused rasterizer by @MrNeRF in #2970
- Add licht --embed to embed a dataset into a project by @MrNeRF in #2968
- fix compile error on windows by @kmeirlaen in #2972
- Compose multi-node numeric rotations as matrices by @MrNeRF in #2971
- Keep node origins in Individual mode numeric rotation and scale by @MrNeRF in #2974
- Apply transforms once when a node and its descendant are both selected by @MrNeRF in #2975
- Keep typed transform values while a field is being edited by @MrNeRF in #2976
- Cancel transform gizmo drags with Escape or right-click by @MrNeRF in #2978
- Refine COLMAP sparse point import by @MrNeRF in #2977
- Preserve sheared transforms when editing nodes under scaled parents by @MrNeRF in #2979
- Undo deleting all gaussians of a node in a multi-node scene by @MrNeRF in #2980
- Route the G key by scene content and keep GT comparison to datasets by @MrNeRF in #2981
- Reject parent transforms that cannot preserve a node's world transform by @MrNeRF in #2982
- Grow and shrink selections in world space across transformed nodes by @MrNeRF in #2983
- Prioritize gizmo axis hits over collapsed plane handles by @MrNeRF in #2984
- Keep the requested selection submode when activating Select through MCP by @MrNeRF in #2985
- Allow Save As after an autosave without touching the source project by @MrNeRF in #2987
- Refresh the Asset Manager entry after renaming an open project by @MrNeRF in #2989
- Search Asset Manager entries by their displayed title by @MrNeRF in #2990
- Keep the cached selection count in sync with the selection masks by @MrNeRF in #2986
- Warn about the removed oversize split setting only when it was changed by @MrNeRF in #2994
- Use an unconditional viewport shortcut in input dispatch tests by @MrNeRF in #2999
- Lay out streamed RAD exports the way Spark pages them by @MrNeRF in #3001
- Keep every selection tool within visible, unlocked nodes by @MrNeRF in #3006
- Keep the minimized performance HUD closed after a drag by @MrNeRF in #3009
- Show the selection only in select mode and switch out of crop mode with one click by @MrNeRF in #3008
- Add an eval command that scores a finished model by @MrNeRF in #3007
- Write final exports next to the resumed project when no output folder is given by @MrNeRF in #3011
- Restore native Wayland window handling and scaling by @shadygm in #2988
- Apply the final pointer position when a gizmo drag is released by @MrNeRF in #3012
- Fix top menu hover on scaled displays by @shadygm in #2991
- Make Getting Started videos easier to browse by @shadygm in #2993
- Resize tutorial thumbnails with the Getting Started popup by @shadygm in #2995
- Restore 3-point alignment for untrained point clouds by @shadygm in #2998
- Update and consolidate Python API documentation by @shadygm in #3000
- Improve Projects panel spacing and transfer progress layout by @shadygm in #3002
- Fix orbit after cropping, redraw after deleting, crop tool after undo, and the error-debt gate by @MrNeRF in #3014
- Move WASD at the same speed in every scene by @MrNeRF in #2996
- Make UI visibility toggles respond without the fullscreen cooldown by @shadygm in #3004
- Select every model with Ctrl+A outside the Select tool by @MrNeRF in #3015
- Keep orthographic zoom synchronized with scene overlays by @shadygm in #3005
- Use the panel's orthographic zoom for align markers and run UI visibility tests on Linux by @MrNeRF in #3016
- Show the portal's reason when a gallery request is rejected or the session is revoked by @MrNeRF in #3019
- Keep Gaussian render inputs resident during node transforms by @MrNeRF in #3020
- Keep published split-view output images alive until they are replaced by @MrNeRF in #3021
- Refresh the Scene panel immediately after Duplicate and other context-menu changes by @MrNeRF in #3023
- Check the consolidated plugin reference in the docs tests by @MrNeRF in #3024
- Keep project opening responsive while the project catalog is scanned by @MrNeRF in #3025
- Show selection volume guides when the selected model has a hidden crop helper by @MrNeRF in #3027
- Keep the active transform tool and its toolbar when a model is deleted by @MrNeRF in #3026
- Suggest SSOG as the default gallery upload format by @MrNeRF in #3028
- Start camera navigation on the first press after a gizmo drag by @MrNeRF in #3029
- Stop the brush hover cursor from leaving a selection tint on splats by @MrNeRF in #3030
- Remove the node selection flash by @MrNeRF in #3031
- Fix the Windows link of the CPU-only visualizer tests by @MrNeRF in #3033
- Keep the selection depth box in the split panel the user selects in by @MrNeRF in #3034
- Keep other models in place while a hidden model's scene rebuild runs by @MrNeRF in #3035
- Keep unselected models dimmed while another model is hidden by @MrNeRF in #3036
- Make mirror edits undoable by @MrNeRF in #3039
- Select the same Gaussians for a shape through the UI and through commands by @MrNeRF in #3041
- Keep repeated mirrors from drifting by computing the pivot in double precision by @MrNeRF in #3042
- Block transforms of every node inside a locked group by @MrNeRF in #3040
- Make depth and normal loss unavailable with GUT by @MrNeRF in #3043
- Record a numeric transform edit as one undo step by @MrNeRF in #3044
- Restore the exact sibling order when redoing a Scene panel reorder by @MrNeRF in #3045
- Duplicate point-cloud nodes by @MrNeRF in #3046
- Skip the frustum zoom test on machines without a GPU by @MrNeRF in #3048
- Fixes Windows portable-build compilation failure by @kmeirlaen in #3047
- Duplicate every render-content child of a group and skip training data with a notice by @MrNeRF in #3051
- Fix video extractor panel layout and state display by @MrNeRF in #3050
- Keep the merged output visible after Merge to Single PLY, undo and reopen by @MrNeRF in #3052
- Give API-created cameras a valid distortion schema and validate camera inputs by @MrNeRF in #3054
- Keep the camera constructor accepting every loader input and validate only add_camera by @MrNeRF in #3056
- Do not append a second extension in save dialogs by @MrNeRF in #3057
- Write the canonical suffix when a save dialog path differs only in case by @MrNeRF in #3058
- Report live Gaussian counts in scene node summaries by @MrNeRF in #3060
- Offer Merge to Single PLY only for groups that contain splats by @MrNeRF in #3061
- Publish large scenes to the gallery as streamable SSOG by @MrNeRF in #3049
- Remove the unused committed selection color setting by @MrNeRF in #3055
- Show selection groups in the Selection & Overlays section by @MrNeRF in #3059
- Keep locked selection groups on Deselect All by @MrNeRF in #3062
- Finish collapse animations in the collapsed section state by @MrNeRF in #3063
- Apply RmlUi scissor regions in window coordinates by @MrNeRF in #3064
- Size the color picker popup to the picker by @MrNeRF in #3065
- Find the Python module from test binaries and drop pytest from the embedded test by @MrNeRF in #3066
- Keep valid leading statements when formatting Python by @MrNeRF in #3069
- Use the panel scrollbar size for every scroll area by @MrNeRF in #3071
- Respect node locks when applying crops and deleting selected Gaussians by @MrNeRF in #3070
- Keep reopened untrained projects clean until edited by @MrNeRF in #3074
- Keep non-splat nodes when merging a group to a single PLY by @MrNeRF in #3075
- Reject point cloud colors the project format cannot store by @MrNeRF in #3076
- Reject mesh colors that are not one RGBA value per vertex by @MrNeRF in #3080
- Keep projects created now readable by earlier builds by @MrNeRF in #3081
- Wrap the HUD tabs and console toolbar when space is short by @MrNeRF in #3079
- Fix inconsistencies and a stuck rebind in Preferences by @MrNeRF in #3083
- Keep the command-line MCP port when MCP preferences change by @MrNeRF in #3084
- Center message and confirmation dialogs on the window by @MrNeRF in #3085
- Offer camera menu actions only when they have a target by @MrNeRF in #3086
- Keep the copied selection aligned when duplicating a splat with deleted rows by @MrNeRF in #3087
- Keep interactive ellipsoid radii positive for flat or single-point splats by @MrNeRF in #3088
- Fix the camera schema tests to pass loader-shaped translations by @MrNeRF in #3090
- Recognize SOG and SSOG files regardless of suffix case by @MrNeRF in #3091
- Export the real splats of a loaded RAD file by @MrNeRF in #3092
- Keep every splat when merging a group with an unapplied crop by @MrNeRF in #3093
- Fix a crash when opening videos that need stream probing by @MrNeRF in #3094
- Clamp crop box scale drags to the minimum extent under scaled parents by @MrNeRF in #3097
- Extract the auto-detected trim range to the end of the video by @MrNeRF in #3095
- Keep the input-dispatch test overlay alive through GUI teardown by @MrNeRF in #3096
- Keep pixels outside the training mask out of MRNF edge guidance by @MrNeRF in #3098
- Stop the font warnings when a panel section collapses by @MrNeRF in #3099
- Show the crop tool gizmo in both split panels and clip gizmos to their panel by @MrNeRF in #3100
- Cut routine INFO lines that flood the log by @MrNeRF in #3101
- Show the number of splats the export writes in the Export dialog by @MrNeRF in #3102
- End long model names in the Export dialog with an ellipsis by @MrNeRF in #3103
- Keep timed and explicit video extraction bounds after the trim range fix by @MrNeRF in #3104
- Keep locked selection groups when using the selection toolbar by @MrNeRF in #3105
- Let the Python console terminals follow the theme by @MrNeRF in #3106
- Render RAD files without a glow next to other models and in exports by @MrNeRF in #3107
- Keep viewport image export VRAM flat at large sizes by @MrNeRF in #3108
- Write large PNG images on all cores by @MrNeRF in #3109
- Export the current scene right after showing or hiding a model by @MrNeRF in #3110
- Include visible meshes in viewport image exports by @MrNeRF in #3111
- Test that the Python console terminals follow the theme by @MrNeRF in #3112
- Make the Adam precision control numerically stable by @MrNeRF in #3113
- Select nodes before numeric history runtime checks by @MrNeRF in #3114
- Generate the RAD leaf regression fixture by @MrNeRF in #3115
- Retire test CUDA streams before destroying them by @MrNeRF in #3116
- Generate the SH workspace test model by @MrNeRF in #3117
- Synchronize Python panel replacement and removal on the viewer thread by @MrNeRF in #3118
- Count every finite effective rank in automatic histogram ranges by @MrNeRF in #3119
- Keep the Histogram range fields in sync with the displayed metric by @MrNeRF in #3120
- Count every finite sample in the automatic Opacity and Anisotropy histogram ranges by @MrNeRF in #3121
- Keep clicks on floating panels from reaching docked panels beneath them by @MrNeRF in #3122
- Apply active crop volumes to Histogram samples by @MrNeRF in #3123
- Turn off the MRNF opacity regularizer by @MrNeRF in #3124
- Keep Histogram range controls legible in narrow panels by @MrNeRF in #3125
- Synchronize Vulkan device idle with queue access by @MrNeRF in #3126
- Reset Histogram zoom on double-click by @MrNeRF in #3127
- Extend the clip when a keyframe is added just past its end by @MrNeRF in #3129
- Grow the Vulkan UI geometry pool instead of drawing past it by @MrNeRF in #3130
- Record sequencer keyframe additions in the shared undo history by @MrNeRF in #3128
- Give every exported video frame a duration by @MrNeRF in #3131
- Report PLY sequence load failures from the MCP sequencer tool by @MrNeRF in #3132
- Reject non-MP4 filenames for video export by @MrNeRF in #3133
- Trim info logs to what users act on by @MrNeRF in #3134
- Keep the running time when training is stopped by @MrNeRF in #3135
- Check snapshot gate flags against their inputs in tests by @MrNeRF in #3136
- Reject out-of-range PLY sequence frame rates in the MCP sequencer tool by @MrNeRF in #3137
- Reject out-of-range easing values in the MCP sequencer tool by @MrNeRF in #3138
- Regenerate the error-debt baseline after the log trim by @MrNeRF in #3139
- Make sequencer keyframe deletion undoable by @MrNeRF in #3140
- Make sequencer keyframe time edits undoable by @MrNeRF in #3141
- Keep the PLY sequence when clearing sequencer keyframes by @MrNeRF in #3145
- Hide single-model datasets in Vulkan renders and exports when hidden in the scene by @MrNeRF in #3155
- Reject degenerate camera up vectors in the MCP sequencer tools by @MrNeRF in #3156
- Allow Save As to long project filenames by @MrNeRF in #3159
- Keep sequencer helper nodes out of scoped scene undo by @MrNeRF in #3160
- Do not resurrect removed camera-path keys when saving projects by @MrNeRF in #3161
- Sequencer fixes: clear, PLY scrub/export, timeline layout, MCP validation, idle, Ping-Pong by @MrNeRF in #3162
- Export the full sequencer clip in Once mode by @MrNeRF in #3164
- Keep the order of camera keys that share a time by @MrNeRF in #3165
- Fix short igs+ and sparsity runs and dataset-camera captures over MCP by @MrNeRF in #3167
- Support camera-aware depth and normal supervision in GUT by @MrNeRF in #2138
- fix(io): support long Windows project paths and bound replacement filenames by @francescofugazzi in #3169
- Fix the long-name Save As overwrite test build by @MrNeRF in #3170
- Name the project file after --output-name and keep its extension single by @MrNeRF in #3171
- Keep the dataset image thumbnail of a project after a library refresh by @MrNeRF in #3172
- Speed up Histogram drag, zoom and bin changes; select bins like the selection tools by @MrNeRF in #3173
- Add the 0.5.4 release video to Getting Started and open it from the startup overlay by @MrNeRF in #3174
- Refresh the project library without reopening unchanged projects by @MrNeRF in #3175
- fix: preserve edited PLY sequence frames during cache eviction by @francescofugazzi in #3179
- Fit depth anchors on the SfM points each camera observed by @MrNeRF in #3180
- Publish gallery SSOG in 64k units by @MrNeRF in #3182
- fix: preserve active PLY sequence when import discovery fails by @francescofugazzi in #3181
- Keep the histogram highlight in sync with every selection change by @MrNeRF in #3184
- fix: retain combined splat aggregates for render snapshots by @francescofugazzi in #3183
- Show the version on the startup screen by @MrNeRF in #3185
New Contributors
- @tritolol made their first contribution in #1332
- @LeoYiMon made their first contribution in #1357
- @AlbertoValenzuelaRedondo made their first contribution in #1335
- @xiaobiaodu made their first contribution in #1389
- @ColumbusLabs made their first contribution in #1502
- @noor-ahmadi made their first contribution in #1550
- @dusancubik made their first contribution in #1553
- @thomas-koch-core11 made their first contribution in #1694
- @OmarFaig made their first contribution in #1772
- @dreamTent made their first contribution in #1947
- @rkskmt made their first contribution in #2085
- @parsamahdavi48 made their first contribution in #2090
- @constantin906 made their first contribution in #2086
- @Alatar98 made their first contribution in #2152
- @bmaltais made their first contribution in #2249
Full Changelog: v0.5.3...v0.5.4