[2.0.0] - 2026-09-23
First stable release of v2. Between rc1 and this version, the whole
application went through a structured "stable version" audit
(docs/AUDIT_STABLE.md, one report per lot in docs/audit-stable/): every
GUI panel option, every CLI argument and every automation scenario was
checked for being wired and functional, then exercised on real data (28 e2e
runs with the real COLMAP, Brush, Sharp, upscayl and SuperSplat). 78 defects
were found, 54 fixed with regression tests. The default suite now holds
1023 tests.
🐛 Fixed — blocking
- COLMAP resume never wired. The "Resume" folder of the Reconstruction panel was displayed but never reached the engine; it now switches the worker to resume mode after validating the folder.
- COLMAP sub-models. The mapper sometimes left a draft in
sparse/0and the real model insparse/1; Brush then trained on the draft. The largest model is now promoted tosparse/0(newapp/core/sparse_models.py, main pipeline and 4DGS). - Sharp output not isolated per project. The pipeline's Sharp step wrote next to the source; it now writes under
<output>/<project>like COLMAP. - PLY not found without a Brush step. Nettoyage/Export/Visualiser only ever looked for Brush's output; in Sharp mode or with Brush unticked they failed with "Chemins manquants". They now follow whichever step actually produced the PLY, and name the missing producer.
- FFmpeg 9 refused
-vsync;-fps_modeis used. - 4DGS single camera was impossible; the camera options now reach COLMAP.
- Upscale
jpegformat andextract360 --layoutdefault were refused by the CLI.
🐛 Fixed — GUI
- Notifications setting persisted. "Notifications de fin d'exécution" is stored in
config.jsonand pre-ticked on the next launch (it used to reset to off every time). - Post-step checkboxes on the TOOLS pages. "Nettoyage/Exporter/SuperSplat après" on the Sharp and SplatTransform pages, "SuperSplat après" on Brush/Training and "Lancer Brush" on Reconstruction now apply to those pages' own "Lancer" button, through the same chain mechanism as the main Launch. The earlier standalone Reconstruction hook, which added a second slot on the worker's finished signal, is gone.
- Reconstruction, post-step and Brush checkboxes are greyed out in modes where they have no effect (Sharp, 4DGS); blur strength, OBJ scale, ALIKED-only options and video-only fields are greyed out when they do not apply.
- Source type forced by the user is validated against the folder's real content; a video source is rejected in Sharp mode with a clear message.
- Cleaner: mode/path mismatch flagged; new "Récursif" option reaches the worker.
- Sharp: new
skip_framesspinner (video mode); upscale settings of the Upscale panel are forwarded. - Brush: device
autoby default; densification/checkpoint groups only send their values when ticked; New/Refine mode andply_nameround-trip through saved configurations. - 4DGS: upscale settings and the video trim window are forwarded to the worker.
- Tool "Lancer" buttons are greyed out while a run is active; closing the window force-stops a worker that does not exit within 5 s.
- Chaining flags (Brush/Nettoyage/Export/SuperSplat "après") are restored with the last project.
- Logs window bounded in size; missing i18n keys added in the 9 locales, dead keys removed.
🐛 Fixed — CLI
--guicombined with a subcommand is rejected instead of silently ignoring one of them.exportscans sub-folders; the PLY rename is applied after the post-steps;--formatrestricted to jpg/png/tiff;4dgs --inputoptional in "COLMAP only" mode.- Boolean flags accept
--no-<flag>where a default of true made them impossible to turn off.
✨ Added
sharp --upscalereally upscales the images before inference (sharedrun_upscayl).brush --refine_modereally resumes from the latest checkpoint (newapp/core/brush_refine.py, shared by GUI and CLI).- Video trim window for 4DGS in the GUI.
- SuperSplat launch reuses an instance already listening on the port and reports a bind failure instead of trusting the spawn.
📝 Documentation
docs/AUDIT_STABLE.mdanddocs/audit-stable/lot-1.md … lot-6.mddocument the audit, defect by defect, with the decision taken for each.