Add first-class GTSFM Studio workflow - #1121
Conversation
Remove SPZ export dependency
|
@copilot summarize the changes to each file in this PR |
Here’s a per-file summary of what changed in this PR:
|
There was a problem hiding this comment.
could we add a readme in this folder that explains the different workflows? what is this one for?
There was a problem hiding this comment.
could we add a readme in this folder to explain how this dockerfile is meant to be used?
There was a problem hiding this comment.
I found that the Dockerfile duplicates the dependency setup already defined in modal_app.py. i removed the custom Dockerfile and its publishing path
| delayed(self._save_cached_result_outputs, pure=False)(cached_graph, context.output_paths.results) | ||
| ] | ||
| gaussian_optimizer = vars(self._optimizer).get("gaussian_splatting_optimizer") | ||
| if gaussian_optimizer is not None: | ||
| import gtsfm.splat.rendering as gtsfm_rendering | ||
|
|
||
| images_graph = context.get_delayed_image_map() | ||
| splats_graph, cfg_graph = gaussian_optimizer.create_computation_graph(images_graph, cached_graph) | ||
| io_tasks.extend( | ||
| [ | ||
| delayed(gtsfm_rendering.save_splats)(context.output_paths.results, splats_graph), | ||
| delayed(gtsfm_rendering.generate_interpolated_video)( | ||
| images_graph, | ||
| cached_graph, |
There was a problem hiding this comment.
did you test running gaussian splatting with the cluster optimizer cacher? this feels unrelated to this PR, not sure if its intentional?
| gtsfm_data = gtsfm_data.filter_landmark_measurements( | ||
| pre_ba_max_reproj_error, min_track_length | ||
| ) | ||
| gtsfm_data = gtsfm_data.filter_landmark_measurements(pre_ba_max_reproj_error, min_track_length) |
There was a problem hiding this comment.
are you sure the maximum line length setting in your IDE has been applied? the formatting seems off here.
There was a problem hiding this comment.
I’ll check my editor’s formatting settings and clean up the formatting here
| ) | ||
|
|
||
| if step == 0 or (step + 1) % 10 == 0 or (step + 1) == max_steps: | ||
| from gtsfm.splat.live import publish_training_update |
There was a problem hiding this comment.
is this file heavy to import? does it need some cuda kernels registered? normally we put all imports at the top unless we really want to avoid importing it for most use cases.
| from gtsfm.scene_optimizer import SceneOptimizer | ||
|
|
||
|
|
||
| def _scheduler_task_counts(dask_scheduler: Any) -> dict[str, int]: |
There was a problem hiding this comment.
to avoid bloating in this central and important file, can we move these functions to a separate file?
| OmegaConf.update( | ||
| main_cfg, | ||
| "cluster_optimizer.gaussian_splatting_optimizer", | ||
| snapshot_path, |
There was a problem hiding this comment.
"snapshot" is a bit cryptic. not obvious what this means, until someone reads and understands the code.
|
|
||
|
|
||
| class TestProcessGraphGenerator(unittest.TestCase): | ||
| @unittest.skipUnless(shutil.which("dot"), "Graphviz 'dot' is not installed") |
There was a problem hiding this comment.
is this not a dependency? why skip these tests?
addressing file removals docker/modal-runtime.Dockerfile .github/workflows/modal-runtime-image.yml
moved splat live import to top
snapshot_path → gs_optimizer_config_path
Refactor filter_landmark_measurements call for better readability.
Remove test for modal deployment preferring prebuilt runtime.
Removed redundant information about the prebuilt runtime and clarified the setup process for Modal workspace.
Removed redundant cancellation check for deployment.
Summary
Introduce a packaged, browser-based GTSFM Studio that launches with
gtsfm runand provides a FastAPI-backed React workspace for configuring, running, monitoring, and inspecting reconstructions.Why
The existing workflow requires users to know repository paths and command-line arguments. This creates a first-class package entry point and a discoverable UI while retaining the terminal execution path.
User impact
gtsfm runValidation
python -m pytest tests/visualization/test_runtime.py tests/ui/test_optional_process_graph.py -q(36 passed)pnpm buildReview notes
This is PR 1 of a stacked draft series. Later drafts isolate the reusable Modal runtime, workspace-control improvements, and live Gaussian visualization.