diff --git a/.github/workflows/viewer_build_deploy.yml b/.github/workflows/viewer_build_deploy.yml index ebae32df2..da65c20ea 100644 --- a/.github/workflows/viewer_build_deploy.yml +++ b/.github/workflows/viewer_build_deploy.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest defaults: run: - working-directory: ./nerfstudio/viewer/app + working-directory: ./nerfstudio/viewer_legacy/app steps: - name: Checkout code uses: actions/checkout@master @@ -22,7 +22,7 @@ jobs: with: node-version: 17.8.0 cache: 'yarn' - cache-dependency-path: ./nerfstudio/viewer/app/yarn.lock + cache-dependency-path: ./nerfstudio/viewer_legacy/app/yarn.lock - name: Install packages run: yarn install @@ -34,7 +34,7 @@ jobs: uses: actions/upload-artifact@v2 with: name: production-files - path: ./nerfstudio/viewer/app/build + path: ./nerfstudio/viewer_legacy/app/build deploy: name: Deploy @@ -53,13 +53,13 @@ jobs: - name: Install dependencies run: | - pip install -r ./nerfstudio/viewer/app/requirements.txt + pip install -r ./nerfstudio/viewer_legacy/app/requirements.txt - name: Download artifact uses: actions/download-artifact@v2 with: name: production-files - path: ./nerfstudio/viewer/app/build + path: ./nerfstudio/viewer_legacy/app/build - name: Get branch name (merge) if: github.event_name != 'pull_request' @@ -71,7 +71,7 @@ jobs: shell: bash run: echo "BRANCH_NAME=$(echo ${GITHUB_HEAD_REF} | tr / -)" >> $GITHUB_ENV - # TODO: detect file or scheme changes of the viewer and only + # TODO: detect file or scheme changes of the viewer_legacy and only # increment the version.txt file when there is a change. # Update the version.txt code and push to master when things change. # https://github.com/marketplace/actions/changed-files @@ -79,7 +79,7 @@ jobs: # id: changed-files-for-dir1 # uses: tj-actions/changed-files@v29.0.3 # with: - # path: nerfstudio/viewer/app + # path: nerfstudio/viewer_legacy/app # - name: List all added files in dir1 # run: | @@ -88,10 +88,10 @@ jobs: # done - run: | - python ./nerfstudio/viewer/app/run_deploy.py \ + python ./nerfstudio/viewer_legacy/app/run_deploy.py \ --branch-name ${{ env.BRANCH_NAME }} \ --ssh-key-string "$SSH_KEY" \ - --local-folder ./nerfstudio/viewer/app/build \ - --package-json-filename ./nerfstudio/viewer/app/package.json \ + --local-folder ./nerfstudio/viewer_legacy/app/build \ + --package-json-filename ./nerfstudio/viewer_legacy/app/package.json \ --increment-version "False" - run: cat ~/.ssh/config diff --git a/docs/developer_guides/viewer/custom_gui.md b/docs/developer_guides/viewer/custom_gui.md index 2ae41fa6a..0fd600732 100644 --- a/docs/developer_guides/viewer/custom_gui.md +++ b/docs/developer_guides/viewer/custom_gui.md @@ -9,10 +9,10 @@ We provide support for custom viewer GUI elements that can be defined in any `nn ## Adding an Element -To define a custom element, create an instance of one of the provided classes in `nerfstudio.viewer.server.viewer_elements`, and assign it as a class variable in your `nn.Module`. +To define a custom element, create an instance of one of the provided classes in `nerfstudio.viewer.viewer_elements`, and assign it as a class variable in your `nn.Module`. ```python -from nerfstudio.viewer.server.viewer_elements import ViewerNumber +from nerfstudio.viewer.viewer_elements import ViewerNumber class MyClass(nn.Module):#must inherit from nn.Module def __init__(self): @@ -20,7 +20,7 @@ class MyClass(nn.Module):#must inherit from nn.Module self.custom_value = ViewerNumber(name="My Value", default_value=1.0) ``` **Element Hierarchy** -The viewer recursively searches all `nn.Module` children of the base `Pipeline` object, and arranges parameters into folders based on their variable names. +The viewer recursively searches all `nn.Module` children of the base `Pipeline` object, and arranges parameters into folders based on their variable names. For example, a `ViewerElement` defined in `pipeline.model.field` will be in the "Custom/model/field" folder in the GUI. **Reading the value** @@ -81,7 +81,7 @@ Updating module state while training can have unexpected side effects. It is up This was created with the following elements: ```python -from nerfstudio.viewer.server.viewer_elements import * +from nerfstudio.viewer.viewer_elements import * class MyModel(Model): def __init__(self): diff --git a/docs/developer_guides/viewer/viewer_control.md b/docs/developer_guides/viewer/viewer_control.md index 0bb33294c..7490a3f67 100644 --- a/docs/developer_guides/viewer/viewer_control.md +++ b/docs/developer_guides/viewer/viewer_control.md @@ -14,7 +14,7 @@ Just like `ViewerElements`, you can create an instance inside any class which in and is contained within the `Pipeline` object (for example the `Model`) ```python -from nerfstudio.viewer.server.viewer_elements import ViewerControl +from nerfstudio.viewer.viewer_elements import ViewerControl class MyModel(nn.Module): # Must inherit from nn.Module def __init__(self): @@ -25,7 +25,7 @@ class MyModel(nn.Module): # Must inherit from nn.Module To get the current camera intrinsics and extrinsics, use the `get_camera` function. This returns a `nerfstudio.cameras.cameras.Cameras` object. This object can be used to generate `RayBundles`, retrieve intrinsics and extrinsics, and more. ```python -from nerfstudio.viewer.server.viewer_elements import ViewerControl, ViewerButton +from nerfstudio.viewer.viewer_elements import ViewerControl, ViewerButton class MyModel(nn.Module): # Must inherit from nn.Module def __init__(self): @@ -47,10 +47,10 @@ class MyModel(nn.Module): # Must inherit from nn.Module ``` ## Set Camera Properties -You can set the viewer camera position and FOV from python. +You can set the viewer camera position and FOV from python. To set position, you must define a new camera position as well as a 3D "look at" point which the camera aims towards. ```python -from nerfstudio.viewer.server.viewer_elements import ViewerControl,ViewerButton +from nerfstudio.viewer.viewer_elements import ViewerControl,ViewerButton class MyModel(nn.Module): # Must inherit from nn.Module def __init__(self): @@ -66,7 +66,7 @@ class MyModel(nn.Module): # Must inherit from nn.Module We forward *single* clicks inside the viewer to the ViewerControl object, which you can use to interact with the scene. To do this, register a callback using `register_click_cb()`. The click is defined to be a ray that starts at the camera origin and passes through the click point on the screen, in world coordinates. ```python -from nerfstudio.viewer.server.viewer_elements import ViewerControl,ViewerClick +from nerfstudio.viewer.viewer_elements import ViewerControl,ViewerClick class MyModel(nn.Module): # must inherit from nn.Module def __init__(self): @@ -89,4 +89,3 @@ You can also use `unregister_click_cb()` to remove callbacks that are no longer ### Thread safety Just like `ViewerElement` callbacks, click callbacks are asynchronous to training and can potentially interrupt a call to `get_outputs()`. - diff --git a/docs/index.md b/docs/index.md index 3815860a8..bc3a9ef1b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -161,7 +161,6 @@ This documentation is organized into 3 parts: | ---------------------------------------------------------- | ---------------------- | | [Github](https://github.com/nerfstudio-project/nerfstudio) | Official Github Repo | | [Discord](https://discord.gg/RyVk6w5WWP) | Join Discord Community | -| [Viewer](https://viewer.nerf.studio/) | Web-based Nerf Viewer | | [Feedback Form](https://forms.gle/sqN5phJN7LfQVwnP9) | Provide Nerfstudio Feedback | ## Sponsors diff --git a/docs/reference/api/viewer.rst b/docs/reference/api/viewer.rst index 4be105c86..06166246e 100644 --- a/docs/reference/api/viewer.rst +++ b/docs/reference/api/viewer.rst @@ -3,6 +3,6 @@ Viewer ============ -.. automodule:: nerfstudio.viewer.server.viewer_elements +.. automodule:: nerfstudio.viewer.viewer_elements :members: :show-inheritance: diff --git a/nerfstudio/cameras/camera_paths.py b/nerfstudio/cameras/camera_paths.py index fef982ae1..f0c5f0a1d 100644 --- a/nerfstudio/cameras/camera_paths.py +++ b/nerfstudio/cameras/camera_paths.py @@ -24,7 +24,7 @@ import nerfstudio.utils.poses as pose_utils from nerfstudio.cameras import camera_utils from nerfstudio.cameras.camera_utils import get_interpolated_poses_many from nerfstudio.cameras.cameras import Cameras, CameraType -from nerfstudio.viewer.server.utils import three_js_perspective_camera_focal_length +from nerfstudio.viewer_legacy.server.utils import three_js_perspective_camera_focal_length def get_interpolated_camera_path(cameras: Cameras, steps: int, order_poses: bool) -> Cameras: diff --git a/nerfstudio/configs/experiment_config.py b/nerfstudio/configs/experiment_config.py index 5686898b7..cd431dca2 100644 --- a/nerfstudio/configs/experiment_config.py +++ b/nerfstudio/configs/experiment_config.py @@ -69,7 +69,7 @@ class ExperimentConfig(InstantiateConfig): ) """Dictionary of optimizer groups and their schedulers""" vis: Literal[ - "viewer", "wandb", "tensorboard", "comet", "viewer+wandb", "viewer+tensorboard", "viewer+comet", "viewer_beta" + "viewer", "wandb", "tensorboard", "comet", "viewer+wandb", "viewer+tensorboard", "viewer+comet", "viewer_legacy" ] = "wandb" """Which visualizer to use.""" data: Optional[Path] = None @@ -81,13 +81,13 @@ class ExperimentConfig(InstantiateConfig): load_scheduler: bool = True """Whether to load the scheduler state_dict to resume training, if it exists.""" - def is_viewer_enabled(self) -> bool: - """Checks if a viewer is enabled.""" - return self.vis in ("viewer", "viewer+wandb", "viewer+tensorboard", "viewer+comet") + def is_viewer_legacy_enabled(self) -> bool: + """Checks if the legacy viewer is enabled.""" + return "viewer_legacy" == self.vis - def is_viewer_beta_enabled(self) -> bool: - """Checks if a viewer beta is enabled.""" - return "viewer_beta" == self.vis + def is_viewer_enabled(self) -> bool: + """Checks if the viewer is enabled.""" + return self.vis in ("viewer", "viewer+wandb", "viewer+tensorboard", "viewer+comet") def is_wandb_enabled(self) -> bool: """Checks if wandb is enabled.""" diff --git a/nerfstudio/configs/method_configs.py b/nerfstudio/configs/method_configs.py index 504b1c898..1f1a09edb 100644 --- a/nerfstudio/configs/method_configs.py +++ b/nerfstudio/configs/method_configs.py @@ -644,7 +644,7 @@ method_configs["gaussian-splatting"] = TrainerConfig( }, }, viewer=ViewerConfig(num_rays_per_chunk=1 << 15), - vis="viewer_beta", + vis="viewer", ) diff --git a/nerfstudio/engine/trainer.py b/nerfstudio/engine/trainer.py index c262887d8..b51f5b556 100644 --- a/nerfstudio/engine/trainer.py +++ b/nerfstudio/engine/trainer.py @@ -36,8 +36,8 @@ from nerfstudio.utils.decorators import check_eval_enabled, check_main_thread, c from nerfstudio.utils.misc import step_check from nerfstudio.utils.rich_utils import CONSOLE from nerfstudio.utils.writer import EventName, TimeWriter -from nerfstudio.viewer.server.viewer_state import ViewerState -from nerfstudio.viewer_beta.viewer import Viewer as ViewerBetaState +from nerfstudio.viewer_legacy.server.viewer_state import ViewerLegacyState +from nerfstudio.viewer.viewer import Viewer as ViewerState from rich import box, style from rich.panel import Panel from rich.table import Table @@ -156,6 +156,19 @@ class Trainer: # set up viewer if enabled viewer_log_path = self.base_dir / self.config.viewer.relative_log_filename self.viewer_state, banner_messages = None, None + if self.config.is_viewer_legacy_enabled() and self.local_rank == 0: + datapath = self.config.data + if datapath is None: + datapath = self.base_dir + self.viewer_state = ViewerLegacyState( + self.config.viewer, + log_filename=viewer_log_path, + datapath=datapath, + pipeline=self.pipeline, + trainer=self, + train_lock=self.train_lock, + ) + banner_messages = [f"Legacy viewer at: {self.viewer_state.viewer_url}"] if self.config.is_viewer_enabled() and self.local_rank == 0: datapath = self.config.data if datapath is None: @@ -167,22 +180,9 @@ class Trainer: pipeline=self.pipeline, trainer=self, train_lock=self.train_lock, - ) - banner_messages = [f"Viewer at: {self.viewer_state.viewer_url}"] - if self.config.is_viewer_beta_enabled() and self.local_rank == 0: - datapath = self.config.data - if datapath is None: - datapath = self.base_dir - self.viewer_state = ViewerBetaState( - self.config.viewer, - log_filename=viewer_log_path, - datapath=datapath, - pipeline=self.pipeline, - trainer=self, - train_lock=self.train_lock, share=self.config.viewer.make_share_url, ) - banner_messages = [f"Viewer Beta at: {self.viewer_state.viewer_url}"] + banner_messages = [f"Viewer at: {self.viewer_state.viewer_url}"] self._check_viewer_warnings() self._load_checkpoint() @@ -318,7 +318,7 @@ class Trainer: def _check_viewer_warnings(self) -> None: """Helper to print out any warnings regarding the way the viewer/loggers are enabled""" if ( - (self.config.is_viewer_enabled() or self.config.is_viewer_beta_enabled()) + (self.config.is_viewer_legacy_enabled() or self.config.is_viewer_enabled()) and not self.config.is_tensorboard_enabled() and not self.config.is_wandb_enabled() and not self.config.is_comet_enabled() diff --git a/nerfstudio/scripts/viewer/run_viewer.py b/nerfstudio/scripts/viewer/run_viewer.py index b1b87c42c..8d679fb22 100644 --- a/nerfstudio/scripts/viewer/run_viewer.py +++ b/nerfstudio/scripts/viewer/run_viewer.py @@ -30,8 +30,8 @@ from nerfstudio.engine.trainer import TrainerConfig from nerfstudio.pipelines.base_pipeline import Pipeline from nerfstudio.utils import writer from nerfstudio.utils.eval_utils import eval_setup -from nerfstudio.viewer.server.viewer_state import ViewerState -from nerfstudio.viewer_beta.viewer import Viewer as ViewerBetaState +from nerfstudio.viewer_legacy.server.viewer_state import ViewerLegacyState +from nerfstudio.viewer.viewer import Viewer as ViewerState @dataclass @@ -53,10 +53,10 @@ class RunViewer: """Path to config YAML file.""" viewer: ViewerConfigWithoutNumRays = field(default_factory=ViewerConfigWithoutNumRays) """Viewer configuration""" - vis: Literal["viewer", "viewer_beta"] = "viewer" + vis: Literal["viewer", "viewer_legacy"] = "viewer" """Type of viewer""" - make_share_url: bool = False - """Viewer beta feature: print a shareable URL. `vis` must be set to viewer_beta; this flag is otherwise ignored.""" + make_share_url: bool = True + """Print a shareable URL""" def main(self) -> None: """Main function.""" @@ -92,23 +92,23 @@ def _start_viewer(config: TrainerConfig, pipeline: Pipeline, step: int): viewer_log_path = base_dir / config.viewer.relative_log_filename banner_messages = None viewer_state = None + if config.vis == "viewer_legacy": + viewer_state = ViewerLegacyState( + config.viewer, + log_filename=viewer_log_path, + datapath=pipeline.datamanager.get_datapath(), + pipeline=pipeline, + ) + banner_messages = [f"Legaccy viewer at: {viewer_state.viewer_url}"] if config.vis == "viewer": viewer_state = ViewerState( config.viewer, log_filename=viewer_log_path, datapath=pipeline.datamanager.get_datapath(), pipeline=pipeline, - ) - banner_messages = [f"Viewer at: {viewer_state.viewer_url}"] - if config.vis == "viewer_beta": - viewer_state = ViewerBetaState( - config.viewer, - log_filename=viewer_log_path, - datapath=pipeline.datamanager.get_datapath(), - pipeline=pipeline, share=config.viewer.make_share_url, ) - banner_messages = [f"Viewer Beta at: {viewer_state.viewer_url}"] + banner_messages = [f"Viewer at: {viewer_state.viewer_url}"] # We don't need logging, but writer.GLOBAL_BUFFER needs to be populated config.logging.local_writer.enable = False @@ -120,7 +120,7 @@ def _start_viewer(config: TrainerConfig, pipeline: Pipeline, step: int): train_state="completed", eval_dataset=pipeline.datamanager.eval_dataset, ) - if isinstance(viewer_state, ViewerState): + if isinstance(viewer_state, ViewerLegacyState): viewer_state.viser_server.set_training_state("completed") viewer_state.update_scene(step=step) while True: diff --git a/nerfstudio/scripts/viewer/sync_viser_message_defs.py b/nerfstudio/scripts/viewer/sync_viser_message_defs.py index 5053a82ea..a178aae4c 100644 --- a/nerfstudio/scripts/viewer/sync_viser_message_defs.py +++ b/nerfstudio/scripts/viewer/sync_viser_message_defs.py @@ -20,7 +20,7 @@ from datetime import datetime import tyro from viser.infra import generate_typescript_interfaces -from nerfstudio.viewer.viser import NerfstudioMessage +from nerfstudio.viewer_legacy.viser import NerfstudioMessage def main() -> None: diff --git a/nerfstudio/utils/decorators.py b/nerfstudio/utils/decorators.py index d6fd3f417..cc78be8a5 100644 --- a/nerfstudio/utils/decorators.py +++ b/nerfstudio/utils/decorators.py @@ -50,11 +50,11 @@ def check_profiler_enabled(func: Callable) -> Callable: def check_viewer_enabled(func: Callable) -> Callable: - """Decorator: check if the viewer or beta viewer is enabled and only run on main process""" + """Decorator: check if the viewer or legacy viewer is enabled and only run on main process""" def wrapper(self, *args, **kwargs): ret = None - if (self.config.is_viewer_enabled() or self.config.is_viewer_beta_enabled()) and comms.is_main_process(): + if (self.config.is_viewer_enabled() or self.config.is_viewer_legacy_enabled()) and comms.is_main_process(): ret = func(self, *args, **kwargs) return ret diff --git a/nerfstudio/viewer_beta/control_panel.py b/nerfstudio/viewer/control_panel.py similarity index 99% rename from nerfstudio/viewer_beta/control_panel.py rename to nerfstudio/viewer/control_panel.py index a937edce1..7eba58f9e 100644 --- a/nerfstudio/viewer_beta/control_panel.py +++ b/nerfstudio/viewer/control_panel.py @@ -22,7 +22,7 @@ import viser import viser.transforms as vtf from nerfstudio.data.scene_box import OrientedBox from nerfstudio.utils.colormaps import ColormapOptions, Colormaps -from nerfstudio.viewer_beta.viewer_elements import ( # ViewerButtonGroup, +from nerfstudio.viewer.viewer_elements import ( # ViewerButtonGroup, ViewerButtonGroup, ViewerCheckbox, ViewerDropdown, diff --git a/nerfstudio/viewer_beta/export_panel.py b/nerfstudio/viewer/export_panel.py similarity index 96% rename from nerfstudio/viewer_beta/export_panel.py rename to nerfstudio/viewer/export_panel.py index a5564327a..ceff4e41f 100644 --- a/nerfstudio/viewer_beta/export_panel.py +++ b/nerfstudio/viewer/export_panel.py @@ -19,7 +19,7 @@ from pathlib import Path import viser import viser.transforms as vtf from nerfstudio.data.scene_box import OrientedBox -from nerfstudio.viewer_beta.control_panel import ControlPanel +from nerfstudio.viewer.control_panel import ControlPanel from typing_extensions import Literal @@ -68,9 +68,9 @@ def get_crop_string(obb: OrientedBox): rpy = vtf.SO3.from_matrix(obb.R.numpy(force=True)).as_rpy_radians() pos = obb.T.squeeze().tolist() scale = obb.S.squeeze().tolist() - rpystring = " ".join([str(x) for x in rpy]) - posstring = " ".join([str(x) for x in pos]) - scalestring = " ".join([str(x) for x in scale]) + rpystring = " ".join([f"{x:.10f}" for x in rpy]) + posstring = " ".join([f"{x:.10f}" for x in pos]) + scalestring = " ".join([f"{x:.10f}" for x in scale]) return f"--obb_center {posstring} --obb_rotation {rpystring} --obb_scale {scalestring}" diff --git a/nerfstudio/viewer_beta/render_panel.py b/nerfstudio/viewer/render_panel.py similarity index 99% rename from nerfstudio/viewer_beta/render_panel.py rename to nerfstudio/viewer/render_panel.py index 6c31447bf..735499bd1 100644 --- a/nerfstudio/viewer_beta/render_panel.py +++ b/nerfstudio/viewer/render_panel.py @@ -20,16 +20,15 @@ import datetime import json import threading import time +from typing import Dict, List, Optional, Tuple, Literal from pathlib import Path -from typing import Dict, List, Literal, Optional, Tuple - -import numpy as np -import scipy.interpolate +from nerfstudio.viewer.control_panel import ControlPanel import splines import splines.quaternion import viser import viser.transforms as tf -from nerfstudio.viewer_beta.control_panel import ControlPanel +import numpy as np +import scipy @dataclasses.dataclass @@ -465,7 +464,7 @@ def populate_render_tab( datapath: Path, control_panel: Optional[ControlPanel] = None, ) -> RenderTabState: - from nerfstudio.viewer_beta.viewer import VISER_NERFSTUDIO_SCALE_RATIO + from nerfstudio.viewer.viewer import VISER_NERFSTUDIO_SCALE_RATIO render_tab_state = RenderTabState( preview_render=False, @@ -668,7 +667,7 @@ def populate_render_tab( min=0.001, max=30.0, step=0.001, - initial_value=0.5, + initial_value=2.0, hint="Time in seconds between each keyframe, which can also be overridden on a per-transition basis.", ) framerate_number = server.add_gui_number("FPS", min=0.1, max=240.0, step=1e-2, initial_value=30.0) diff --git a/nerfstudio/viewer_beta/render_state_machine.py b/nerfstudio/viewer/render_state_machine.py similarity index 98% rename from nerfstudio/viewer_beta/render_state_machine.py rename to nerfstudio/viewer/render_state_machine.py index 54f8e69ae..b9d43a782 100644 --- a/nerfstudio/viewer_beta/render_state_machine.py +++ b/nerfstudio/viewer/render_state_machine.py @@ -27,12 +27,12 @@ from nerfstudio.model_components.renderers import background_color_override_cont from nerfstudio.models.gaussian_splatting import GaussianSplattingModel from nerfstudio.utils import colormaps, writer from nerfstudio.utils.writer import GLOBAL_BUFFER, EventName, TimeWriter -from nerfstudio.viewer.server import viewer_utils -from nerfstudio.viewer_beta.utils import CameraState, get_camera +from nerfstudio.viewer_legacy.server import viewer_utils +from nerfstudio.viewer.utils import CameraState, get_camera from viser import ClientHandle if TYPE_CHECKING: - from nerfstudio.viewer_beta.viewer import Viewer + from nerfstudio.viewer.viewer import Viewer RenderStates = Literal["low_move", "low_static", "high"] RenderActions = Literal["rerender", "move", "static", "step"] diff --git a/nerfstudio/viewer_beta/utils.py b/nerfstudio/viewer/utils.py similarity index 100% rename from nerfstudio/viewer_beta/utils.py rename to nerfstudio/viewer/utils.py diff --git a/nerfstudio/viewer_beta/viewer.py b/nerfstudio/viewer/viewer.py similarity index 97% rename from nerfstudio/viewer_beta/viewer.py rename to nerfstudio/viewer/viewer.py index 0c560f9d8..d17b93e06 100644 --- a/nerfstudio/viewer_beta/viewer.py +++ b/nerfstudio/viewer/viewer.py @@ -34,13 +34,13 @@ from nerfstudio.models.base_model import Model from nerfstudio.pipelines.base_pipeline import Pipeline from nerfstudio.utils.decorators import check_main_thread, decorate_all from nerfstudio.utils.writer import GLOBAL_BUFFER, EventName -from nerfstudio.viewer.server import viewer_utils -from nerfstudio.viewer_beta.control_panel import ControlPanel -from nerfstudio.viewer_beta.export_panel import populate_export_tab -from nerfstudio.viewer_beta.render_panel import populate_render_tab -from nerfstudio.viewer_beta.render_state_machine import RenderAction, RenderStateMachine -from nerfstudio.viewer_beta.utils import CameraState, parse_object -from nerfstudio.viewer_beta.viewer_elements import ViewerControl, ViewerElement +from nerfstudio.viewer_legacy.server import viewer_utils +from nerfstudio.viewer.control_panel import ControlPanel +from nerfstudio.viewer.export_panel import populate_export_tab +from nerfstudio.viewer.render_panel import populate_render_tab +from nerfstudio.viewer.render_state_machine import RenderAction, RenderStateMachine +from nerfstudio.viewer.utils import CameraState, parse_object +from nerfstudio.viewer.viewer_elements import ViewerControl, ViewerElement from typing_extensions import assert_never if TYPE_CHECKING: diff --git a/nerfstudio/viewer_beta/viewer_elements.py b/nerfstudio/viewer/viewer_elements.py similarity index 98% rename from nerfstudio/viewer_beta/viewer_elements.py rename to nerfstudio/viewer/viewer_elements.py index 70e2c274f..2a8b64efe 100644 --- a/nerfstudio/viewer_beta/viewer_elements.py +++ b/nerfstudio/viewer/viewer_elements.py @@ -35,11 +35,11 @@ from viser import ( ViserServer, ) +from nerfstudio.viewer.utils import CameraState, get_camera from nerfstudio.cameras.cameras import Cameras, CameraType -from nerfstudio.viewer_beta.utils import CameraState, get_camera if TYPE_CHECKING: - from nerfstudio.viewer_beta.viewer import Viewer + from nerfstudio.viewer.viewer import Viewer TValue = TypeVar("TValue") TString = TypeVar("TString", default=str, bound=str) @@ -133,7 +133,7 @@ class ViewerControl: if not client_id: client_id = list(clients.keys())[0] - from nerfstudio.viewer_beta.viewer import VISER_NERFSTUDIO_SCALE_RATIO + from nerfstudio.viewer.viewer import VISER_NERFSTUDIO_SCALE_RATIO client = clients[client_id] R = vtf.SO3(wxyz=client.camera.wxyz) @@ -154,7 +154,7 @@ class ViewerControl: cb: The callback to call when a click is detected. The callback should take a ViewerClick object as an argument """ - from nerfstudio.viewer_beta.viewer import VISER_NERFSTUDIO_SCALE_RATIO + from nerfstudio.viewer.viewer import VISER_NERFSTUDIO_SCALE_RATIO def wrapped_cb(scene_pointer_msg: ScenePointerEvent): # only call the callback if the event is a click diff --git a/nerfstudio/viewer/server/__init__.py b/nerfstudio/viewer_legacy/__init__.py similarity index 100% rename from nerfstudio/viewer/server/__init__.py rename to nerfstudio/viewer_legacy/__init__.py diff --git a/nerfstudio/viewer/app/.env.development b/nerfstudio/viewer_legacy/app/.env.development similarity index 67% rename from nerfstudio/viewer/app/.env.development rename to nerfstudio/viewer_legacy/app/.env.development index 106b7ee75..d67e92938 100644 --- a/nerfstudio/viewer/app/.env.development +++ b/nerfstudio/viewer_legacy/app/.env.development @@ -2,4 +2,4 @@ BROWSER=none FAST_REFRESH=false HOST=0.0.0.0 PORT=4000 -ESLINT_NO_DEV_ERRORS=true \ No newline at end of file +ESLINT_NO_DEV_ERRORS=true diff --git a/nerfstudio/viewer/app/.eslintrc.json b/nerfstudio/viewer_legacy/app/.eslintrc.json similarity index 100% rename from nerfstudio/viewer/app/.eslintrc.json rename to nerfstudio/viewer_legacy/app/.eslintrc.json diff --git a/nerfstudio/viewer/app/.gitignore b/nerfstudio/viewer_legacy/app/.gitignore similarity index 96% rename from nerfstudio/viewer/app/.gitignore rename to nerfstudio/viewer_legacy/app/.gitignore index 2deb81763..3ae88f84d 100644 --- a/nerfstudio/viewer/app/.gitignore +++ b/nerfstudio/viewer_legacy/app/.gitignore @@ -11,4 +11,4 @@ npm-debug.log* yarn-debug.log* yarn-error.log* /.changelog -.npm/ \ No newline at end of file +.npm/ diff --git a/nerfstudio/viewer/app/package.json b/nerfstudio/viewer_legacy/app/package.json similarity index 99% rename from nerfstudio/viewer/app/package.json rename to nerfstudio/viewer_legacy/app/package.json index 136739355..7dfcb3b45 100644 --- a/nerfstudio/viewer/app/package.json +++ b/nerfstudio/viewer_legacy/app/package.json @@ -93,4 +93,4 @@ "resolve-url-loader": "^5.0.0", "yaml": "^2.2.2" } -} \ No newline at end of file +} diff --git a/nerfstudio/viewer/app/public/electron.js b/nerfstudio/viewer_legacy/app/public/electron.js similarity index 100% rename from nerfstudio/viewer/app/public/electron.js rename to nerfstudio/viewer_legacy/app/public/electron.js diff --git a/nerfstudio/viewer/app/public/favicon.png b/nerfstudio/viewer_legacy/app/public/favicon.png similarity index 100% rename from nerfstudio/viewer/app/public/favicon.png rename to nerfstudio/viewer_legacy/app/public/favicon.png diff --git a/nerfstudio/viewer/app/public/index.html b/nerfstudio/viewer_legacy/app/public/index.html similarity index 100% rename from nerfstudio/viewer/app/public/index.html rename to nerfstudio/viewer_legacy/app/public/index.html diff --git a/nerfstudio/viewer/app/public/manifest.json b/nerfstudio/viewer_legacy/app/public/manifest.json similarity index 100% rename from nerfstudio/viewer/app/public/manifest.json rename to nerfstudio/viewer_legacy/app/public/manifest.json diff --git a/nerfstudio/viewer/app/public/robots.txt b/nerfstudio/viewer_legacy/app/public/robots.txt similarity index 100% rename from nerfstudio/viewer/app/public/robots.txt rename to nerfstudio/viewer_legacy/app/public/robots.txt diff --git a/nerfstudio/viewer/app/requirements.txt b/nerfstudio/viewer_legacy/app/requirements.txt similarity index 100% rename from nerfstudio/viewer/app/requirements.txt rename to nerfstudio/viewer_legacy/app/requirements.txt diff --git a/nerfstudio/viewer/app/run_deploy.py b/nerfstudio/viewer_legacy/app/run_deploy.py similarity index 100% rename from nerfstudio/viewer/app/run_deploy.py rename to nerfstudio/viewer_legacy/app/run_deploy.py diff --git a/nerfstudio/viewer/app/src/App.jsx b/nerfstudio/viewer_legacy/app/src/App.jsx similarity index 100% rename from nerfstudio/viewer/app/src/App.jsx rename to nerfstudio/viewer_legacy/app/src/App.jsx diff --git a/nerfstudio/viewer/app/src/SceneNode.js b/nerfstudio/viewer_legacy/app/src/SceneNode.js similarity index 100% rename from nerfstudio/viewer/app/src/SceneNode.js rename to nerfstudio/viewer_legacy/app/src/SceneNode.js diff --git a/nerfstudio/viewer/app/src/index.jsx b/nerfstudio/viewer_legacy/app/src/index.jsx similarity index 100% rename from nerfstudio/viewer/app/src/index.jsx rename to nerfstudio/viewer_legacy/app/src/index.jsx diff --git a/nerfstudio/viewer/app/src/index.scss b/nerfstudio/viewer_legacy/app/src/index.scss similarity index 100% rename from nerfstudio/viewer/app/src/index.scss rename to nerfstudio/viewer_legacy/app/src/index.scss diff --git a/nerfstudio/viewer/app/src/modules/Banner/Banner.jsx b/nerfstudio/viewer_legacy/app/src/modules/Banner/Banner.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/Banner/Banner.jsx rename to nerfstudio/viewer_legacy/app/src/modules/Banner/Banner.jsx diff --git a/nerfstudio/viewer/app/src/modules/Banner/index.jsx b/nerfstudio/viewer_legacy/app/src/modules/Banner/index.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/Banner/index.jsx rename to nerfstudio/viewer_legacy/app/src/modules/Banner/index.jsx diff --git a/nerfstudio/viewer/app/src/modules/ConfigPanel/ConfigPanel.jsx b/nerfstudio/viewer_legacy/app/src/modules/ConfigPanel/ConfigPanel.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/ConfigPanel/ConfigPanel.jsx rename to nerfstudio/viewer_legacy/app/src/modules/ConfigPanel/ConfigPanel.jsx diff --git a/nerfstudio/viewer/app/src/modules/LandingModal/LandingModal.jsx b/nerfstudio/viewer_legacy/app/src/modules/LandingModal/LandingModal.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/LandingModal/LandingModal.jsx rename to nerfstudio/viewer_legacy/app/src/modules/LandingModal/LandingModal.jsx diff --git a/nerfstudio/viewer/app/src/modules/LandingModal/index.jsx b/nerfstudio/viewer_legacy/app/src/modules/LandingModal/index.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/LandingModal/index.jsx rename to nerfstudio/viewer_legacy/app/src/modules/LandingModal/index.jsx diff --git a/nerfstudio/viewer/app/src/modules/LoadPathModal/LoadPathModal.jsx b/nerfstudio/viewer_legacy/app/src/modules/LoadPathModal/LoadPathModal.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/LoadPathModal/LoadPathModal.jsx rename to nerfstudio/viewer_legacy/app/src/modules/LoadPathModal/LoadPathModal.jsx diff --git a/nerfstudio/viewer/app/src/modules/LoadPathModal/index.jsx b/nerfstudio/viewer_legacy/app/src/modules/LoadPathModal/index.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/LoadPathModal/index.jsx rename to nerfstudio/viewer_legacy/app/src/modules/LoadPathModal/index.jsx diff --git a/nerfstudio/viewer/app/src/modules/RenderModal/RenderModal.jsx b/nerfstudio/viewer_legacy/app/src/modules/RenderModal/RenderModal.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/RenderModal/RenderModal.jsx rename to nerfstudio/viewer_legacy/app/src/modules/RenderModal/RenderModal.jsx diff --git a/nerfstudio/viewer/app/src/modules/RenderModal/index.jsx b/nerfstudio/viewer_legacy/app/src/modules/RenderModal/index.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/RenderModal/index.jsx rename to nerfstudio/viewer_legacy/app/src/modules/RenderModal/index.jsx diff --git a/nerfstudio/viewer/app/src/modules/Scene/Scene.jsx b/nerfstudio/viewer_legacy/app/src/modules/Scene/Scene.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/Scene/Scene.jsx rename to nerfstudio/viewer_legacy/app/src/modules/Scene/Scene.jsx diff --git a/nerfstudio/viewer/app/src/modules/Scene/drawing.js b/nerfstudio/viewer_legacy/app/src/modules/Scene/drawing.js similarity index 99% rename from nerfstudio/viewer/app/src/modules/Scene/drawing.js rename to nerfstudio/viewer_legacy/app/src/modules/Scene/drawing.js index e64f3214b..9de449a5e 100644 --- a/nerfstudio/viewer/app/src/modules/Scene/drawing.js +++ b/nerfstudio/viewer_legacy/app/src/modules/Scene/drawing.js @@ -162,4 +162,4 @@ export function drawCameras(cameras): Record { cameraObjects[key] = drawCamera(camera); } return cameraObjects; -} \ No newline at end of file +} diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/CameraPanel/CameraHelper.js b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/CameraPanel/CameraHelper.js similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/CameraPanel/CameraHelper.js rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/CameraPanel/CameraHelper.js diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/CameraPanel/CameraPanel.jsx b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/CameraPanel/CameraPanel.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/CameraPanel/CameraPanel.jsx rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/CameraPanel/CameraPanel.jsx diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/CameraPanel/CameraPropPanel.jsx b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/CameraPanel/CameraPropPanel.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/CameraPanel/CameraPropPanel.jsx rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/CameraPanel/CameraPropPanel.jsx diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/CameraPanel/curve.js b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/CameraPanel/curve.js similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/CameraPanel/curve.js rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/CameraPanel/curve.js diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/CameraPanel/index.jsx b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/CameraPanel/index.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/CameraPanel/index.jsx rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/CameraPanel/index.jsx diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/ExportPanel/ExportPanel.jsx b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/ExportPanel/ExportPanel.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/ExportPanel/ExportPanel.jsx rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/ExportPanel/ExportPanel.jsx diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/ExportPanel/MeshSubPanel.jsx b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/ExportPanel/MeshSubPanel.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/ExportPanel/MeshSubPanel.jsx rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/ExportPanel/MeshSubPanel.jsx diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/ExportPanel/PointcloudSubPanel.jsx b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/ExportPanel/PointcloudSubPanel.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/ExportPanel/PointcloudSubPanel.jsx rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/ExportPanel/PointcloudSubPanel.jsx diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/ExportPanel/index.jsx b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/ExportPanel/index.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/ExportPanel/index.jsx rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/ExportPanel/index.jsx diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/ScenePanel/ScenePanel.jsx b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/ScenePanel/ScenePanel.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/ScenePanel/ScenePanel.jsx rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/ScenePanel/ScenePanel.jsx diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/ScenePanel/index.jsx b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/ScenePanel/index.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/ScenePanel/index.jsx rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/ScenePanel/index.jsx diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/SidePanel.jsx b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/SidePanel.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/SidePanel.jsx rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/SidePanel.jsx diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/StatusPanel/StatusPanel.jsx b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/StatusPanel/StatusPanel.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/StatusPanel/StatusPanel.jsx rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/StatusPanel/StatusPanel.jsx diff --git a/nerfstudio/viewer/app/src/modules/SidePanel/StatusPanel/index.jsx b/nerfstudio/viewer_legacy/app/src/modules/SidePanel/StatusPanel/index.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/SidePanel/StatusPanel/index.jsx rename to nerfstudio/viewer_legacy/app/src/modules/SidePanel/StatusPanel/index.jsx diff --git a/nerfstudio/viewer/app/src/modules/ViewerWindow/ViewerWindow.jsx b/nerfstudio/viewer_legacy/app/src/modules/ViewerWindow/ViewerWindow.jsx similarity index 98% rename from nerfstudio/viewer/app/src/modules/ViewerWindow/ViewerWindow.jsx rename to nerfstudio/viewer_legacy/app/src/modules/ViewerWindow/ViewerWindow.jsx index a8a596c33..e6daf60ad 100644 --- a/nerfstudio/viewer/app/src/modules/ViewerWindow/ViewerWindow.jsx +++ b/nerfstudio/viewer_legacy/app/src/modules/ViewerWindow/ViewerWindow.jsx @@ -333,7 +333,7 @@ export default function ViewerWindow(props) { mouseVector.y > 1 || mouseVector.y < -1 ); - if (!mouse_in_scene) { return; } + if (!mouse_in_scene) { return; } const raycaster = new THREE.Raycaster(); raycaster.setFromCamera(mouseVector, sceneTree.metadata.camera); @@ -341,13 +341,13 @@ export default function ViewerWindow(props) { throttledClickSender({ type: 'ClickMessage', origin: [ - raycaster.ray.origin.x, - raycaster.ray.origin.y, + raycaster.ray.origin.x, + raycaster.ray.origin.y, raycaster.ray.origin.z ], direction: [ - raycaster.ray.direction.x, - raycaster.ray.direction.y, + raycaster.ray.direction.x, + raycaster.ray.direction.y, raycaster.ray.direction.z ], }); diff --git a/nerfstudio/viewer/app/src/modules/ViewerWindow/ViewerWindowSlice.js b/nerfstudio/viewer_legacy/app/src/modules/ViewerWindow/ViewerWindowSlice.js similarity index 100% rename from nerfstudio/viewer/app/src/modules/ViewerWindow/ViewerWindowSlice.js rename to nerfstudio/viewer_legacy/app/src/modules/ViewerWindow/ViewerWindowSlice.js diff --git a/nerfstudio/viewer/app/src/modules/ViewportControlsModal/ViewportControlsModal.jsx b/nerfstudio/viewer_legacy/app/src/modules/ViewportControlsModal/ViewportControlsModal.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/ViewportControlsModal/ViewportControlsModal.jsx rename to nerfstudio/viewer_legacy/app/src/modules/ViewportControlsModal/ViewportControlsModal.jsx diff --git a/nerfstudio/viewer/app/src/modules/ViewportControlsModal/index.jsx b/nerfstudio/viewer_legacy/app/src/modules/ViewportControlsModal/index.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/ViewportControlsModal/index.jsx rename to nerfstudio/viewer_legacy/app/src/modules/ViewportControlsModal/index.jsx diff --git a/nerfstudio/viewer/app/src/modules/WebSocket/ViserMessages.tsx b/nerfstudio/viewer_legacy/app/src/modules/WebSocket/ViserMessages.tsx similarity index 99% rename from nerfstudio/viewer/app/src/modules/WebSocket/ViserMessages.tsx rename to nerfstudio/viewer_legacy/app/src/modules/WebSocket/ViserMessages.tsx index 405442e86..1840629d1 100644 --- a/nerfstudio/viewer/app/src/modules/WebSocket/ViserMessages.tsx +++ b/nerfstudio/viewer_legacy/app/src/modules/WebSocket/ViserMessages.tsx @@ -116,7 +116,7 @@ interface OutputOptionsMessage { options: any; } -export type Message = +export type Message = | BackgroundImageMessage | GuiAddMessage | GuiRemoveMessage diff --git a/nerfstudio/viewer/app/src/modules/WebSocket/ViserWebSocket.tsx b/nerfstudio/viewer_legacy/app/src/modules/WebSocket/ViserWebSocket.tsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/WebSocket/ViserWebSocket.tsx rename to nerfstudio/viewer_legacy/app/src/modules/WebSocket/ViserWebSocket.tsx diff --git a/nerfstudio/viewer/app/src/modules/WebSocketUrlField.jsx b/nerfstudio/viewer_legacy/app/src/modules/WebSocketUrlField.jsx similarity index 100% rename from nerfstudio/viewer/app/src/modules/WebSocketUrlField.jsx rename to nerfstudio/viewer_legacy/app/src/modules/WebSocketUrlField.jsx diff --git a/nerfstudio/viewer/app/src/reducer.js b/nerfstudio/viewer_legacy/app/src/reducer.js similarity index 100% rename from nerfstudio/viewer/app/src/reducer.js rename to nerfstudio/viewer_legacy/app/src/reducer.js diff --git a/nerfstudio/viewer/app/src/setupTests.js b/nerfstudio/viewer_legacy/app/src/setupTests.js similarity index 100% rename from nerfstudio/viewer/app/src/setupTests.js rename to nerfstudio/viewer_legacy/app/src/setupTests.js diff --git a/nerfstudio/viewer/app/src/store.js b/nerfstudio/viewer_legacy/app/src/store.js similarity index 100% rename from nerfstudio/viewer/app/src/store.js rename to nerfstudio/viewer_legacy/app/src/store.js diff --git a/nerfstudio/viewer/app/src/subscriber.js b/nerfstudio/viewer_legacy/app/src/subscriber.js similarity index 100% rename from nerfstudio/viewer/app/src/subscriber.js rename to nerfstudio/viewer_legacy/app/src/subscriber.js diff --git a/nerfstudio/viewer/app/src/themes/leva_theme.json b/nerfstudio/viewer_legacy/app/src/themes/leva_theme.json similarity index 100% rename from nerfstudio/viewer/app/src/themes/leva_theme.json rename to nerfstudio/viewer_legacy/app/src/themes/leva_theme.json diff --git a/nerfstudio/viewer/app/src/themes/theme.ts b/nerfstudio/viewer_legacy/app/src/themes/theme.ts similarity index 100% rename from nerfstudio/viewer/app/src/themes/theme.ts rename to nerfstudio/viewer_legacy/app/src/themes/theme.ts diff --git a/nerfstudio/viewer/app/src/utils.js b/nerfstudio/viewer_legacy/app/src/utils.js similarity index 100% rename from nerfstudio/viewer/app/src/utils.js rename to nerfstudio/viewer_legacy/app/src/utils.js diff --git a/nerfstudio/viewer/app/tsconfig.json b/nerfstudio/viewer_legacy/app/tsconfig.json similarity index 100% rename from nerfstudio/viewer/app/tsconfig.json rename to nerfstudio/viewer_legacy/app/tsconfig.json diff --git a/nerfstudio/viewer/app/yarn.lock b/nerfstudio/viewer_legacy/app/yarn.lock similarity index 100% rename from nerfstudio/viewer/app/yarn.lock rename to nerfstudio/viewer_legacy/app/yarn.lock diff --git a/nerfstudio/viewer_beta/__init__.py b/nerfstudio/viewer_legacy/server/__init__.py similarity index 100% rename from nerfstudio/viewer_beta/__init__.py rename to nerfstudio/viewer_legacy/server/__init__.py diff --git a/nerfstudio/viewer/server/control_panel.py b/nerfstudio/viewer_legacy/server/control_panel.py similarity index 99% rename from nerfstudio/viewer/server/control_panel.py rename to nerfstudio/viewer_legacy/server/control_panel.py index 0f789a8ae..43fb51b46 100644 --- a/nerfstudio/viewer/server/control_panel.py +++ b/nerfstudio/viewer_legacy/server/control_panel.py @@ -19,7 +19,7 @@ from typing import Callable, DefaultDict, List, Tuple, get_args import torch from nerfstudio.utils.colormaps import ColormapOptions, Colormaps -from nerfstudio.viewer.server.viewer_elements import ( +from nerfstudio.viewer_legacy.server.viewer_elements import ( ViewerButtonGroup, ViewerCheckbox, ViewerDropdown, @@ -29,7 +29,7 @@ from nerfstudio.viewer.server.viewer_elements import ( ViewerSlider, ViewerVec3, ) -from nerfstudio.viewer.viser import ViserServer +from nerfstudio.viewer_legacy.viser import ViserServer class ControlPanel: diff --git a/nerfstudio/viewer/server/gui_utils.py b/nerfstudio/viewer_legacy/server/gui_utils.py similarity index 100% rename from nerfstudio/viewer/server/gui_utils.py rename to nerfstudio/viewer_legacy/server/gui_utils.py diff --git a/nerfstudio/viewer/server/path.py b/nerfstudio/viewer_legacy/server/path.py similarity index 100% rename from nerfstudio/viewer/server/path.py rename to nerfstudio/viewer_legacy/server/path.py diff --git a/nerfstudio/viewer/server/render_state_machine.py b/nerfstudio/viewer_legacy/server/render_state_machine.py similarity index 98% rename from nerfstudio/viewer/server/render_state_machine.py rename to nerfstudio/viewer_legacy/server/render_state_machine.py index 753300521..d842598d1 100644 --- a/nerfstudio/viewer/server/render_state_machine.py +++ b/nerfstudio/viewer_legacy/server/render_state_machine.py @@ -27,11 +27,11 @@ from nerfstudio.model_components.renderers import background_color_override_cont from nerfstudio.models.gaussian_splatting import GaussianSplattingModel from nerfstudio.utils import colormaps, writer from nerfstudio.utils.writer import GLOBAL_BUFFER, EventName, TimeWriter -from nerfstudio.viewer.server import viewer_utils -from nerfstudio.viewer.viser.messages import CameraMessage +from nerfstudio.viewer_legacy.server import viewer_utils +from nerfstudio.viewer_legacy.viser.messages import CameraMessage if TYPE_CHECKING: - from nerfstudio.viewer.server.viewer_state import ViewerState + from nerfstudio.viewer_legacy.server.viewer_state import ViewerLegacyState RenderStates = Literal["low_move", "low_static", "high"] RenderActions = Literal["rerender", "move", "static", "step"] @@ -55,7 +55,7 @@ class RenderStateMachine(threading.Thread): viewer: the viewer state """ - def __init__(self, viewer: ViewerState): + def __init__(self, viewer: ViewerLegacyState): threading.Thread.__init__(self) self.transitions: Dict[RenderStates, Dict[RenderActions, RenderStates]] = { s: {} for s in get_args(RenderStates) diff --git a/nerfstudio/viewer/server/state/node.py b/nerfstudio/viewer_legacy/server/state/node.py similarity index 100% rename from nerfstudio/viewer/server/state/node.py rename to nerfstudio/viewer_legacy/server/state/node.py diff --git a/nerfstudio/viewer/server/state/state_node.py b/nerfstudio/viewer_legacy/server/state/state_node.py similarity index 93% rename from nerfstudio/viewer/server/state/state_node.py rename to nerfstudio/viewer_legacy/server/state/state_node.py index 3aebfeff2..f7330a3ca 100644 --- a/nerfstudio/viewer/server/state/state_node.py +++ b/nerfstudio/viewer_legacy/server/state/state_node.py @@ -13,7 +13,7 @@ # limitations under the License. -from nerfstudio.viewer.server.state.node import Node +from nerfstudio.viewer_legacy.server.state.node import Node class StateNode(Node): diff --git a/nerfstudio/viewer/server/utils.py b/nerfstudio/viewer_legacy/server/utils.py similarity index 98% rename from nerfstudio/viewer/server/utils.py rename to nerfstudio/viewer_legacy/server/utils.py index 0c9d894ab..0b26741db 100644 --- a/nerfstudio/viewer/server/utils.py +++ b/nerfstudio/viewer_legacy/server/utils.py @@ -21,7 +21,7 @@ import numpy as np import torch from typing_extensions import assert_never -from nerfstudio.viewer.viser.messages import CameraMessage +from nerfstudio.viewer_legacy.viser.messages import CameraMessage def get_chunks( diff --git a/nerfstudio/viewer/server/viewer_elements.py b/nerfstudio/viewer_legacy/server/viewer_elements.py similarity index 95% rename from nerfstudio/viewer/server/viewer_elements.py rename to nerfstudio/viewer_legacy/server/viewer_elements.py index 802e0d2eb..b8065f886 100644 --- a/nerfstudio/viewer/server/viewer_elements.py +++ b/nerfstudio/viewer_legacy/server/viewer_elements.py @@ -25,12 +25,12 @@ from typing import TYPE_CHECKING, Any, Callable, Generic, List, Optional, Tuple from typing_extensions import TypeVar from nerfstudio.cameras.cameras import Cameras -from nerfstudio.viewer.viser import GuiHandle, GuiSelectHandle, ViserServer -from nerfstudio.viewer.viser.messages import ClickMessage +from nerfstudio.viewer_legacy.viser import GuiHandle, GuiSelectHandle, ViserServer +from nerfstudio.viewer_legacy.viser.messages import ClickMessage if TYPE_CHECKING: - from nerfstudio.viewer.server.control_panel import ControlPanel - from nerfstudio.viewer.server.viewer_state import ViewerState + from nerfstudio.viewer_legacy.server.control_panel import ControlPanel + from nerfstudio.viewer_legacy.server.viewer_state import ViewerLegacyState TValue = TypeVar("TValue") @@ -61,8 +61,14 @@ class ViewerControl: def __init__(self): # this should be a user-facing constructor, since it will be used inside the model/pipeline class self.click_cbs = [] + from nerfstudio.utils.rich_utils import CONSOLE - def _setup(self, viewer_state: ViewerState): + CONSOLE.print( + "WARNING: viewer_legacy.server.viewer_elements is deprecated and will be removed in the future. Use the new nerfstudio.viewer instead", + style="bold yellow", + ) + + def _setup(self, viewer_state: ViewerLegacyState): """ Internal use only, setup the viewer control with the viewer state object @@ -162,6 +168,12 @@ class ViewerElement(Generic[TValue]): self.gui_handle: Optional[GuiHandle[TValue]] = None self.disabled = disabled self.cb_hook = cb_hook + from nerfstudio.utils.rich_utils import CONSOLE + + CONSOLE.print( + "WARNING: viewer_legacy.server.viewer_elements is deprecated and will be removed in the future. Use the new nerfstudio.viewer instead", + style="bold yellow", + ) @abstractmethod def _create_gui_handle(self, viser_server: ViserServer) -> None: diff --git a/nerfstudio/viewer/server/viewer_state.py b/nerfstudio/viewer_legacy/server/viewer_state.py similarity index 96% rename from nerfstudio/viewer/server/viewer_state.py rename to nerfstudio/viewer_legacy/server/viewer_state.py index 3bbce5e2d..ee02d2a4b 100644 --- a/nerfstudio/viewer/server/viewer_state.py +++ b/nerfstudio/viewer_legacy/server/viewer_state.py @@ -35,14 +35,14 @@ from nerfstudio.utils.decorators import check_main_thread, decorate_all from nerfstudio.utils.io import load_from_json, write_to_json from nerfstudio.utils.rich_utils import CONSOLE from nerfstudio.utils.writer import GLOBAL_BUFFER, EventName -from nerfstudio.viewer.server import viewer_utils -from nerfstudio.viewer.server.control_panel import ControlPanel -from nerfstudio.viewer.server.gui_utils import parse_object -from nerfstudio.viewer.server.render_state_machine import RenderAction, RenderStateMachine -from nerfstudio.viewer.server.utils import get_intrinsics_matrix_and_camera_to_world_h -from nerfstudio.viewer.server.viewer_elements import ViewerControl, ViewerElement -from nerfstudio.viewer.viser import ViserServer -from nerfstudio.viewer.viser.messages import ( +from nerfstudio.viewer_legacy.server import viewer_utils +from nerfstudio.viewer_legacy.server.control_panel import ControlPanel +from nerfstudio.viewer_legacy.server.gui_utils import parse_object +from nerfstudio.viewer_legacy.server.render_state_machine import RenderAction, RenderStateMachine +from nerfstudio.viewer_legacy.server.utils import get_intrinsics_matrix_and_camera_to_world_h +from nerfstudio.viewer_legacy.server.viewer_elements import ViewerControl, ViewerElement +from nerfstudio.viewer_legacy.viser import ViserServer +from nerfstudio.viewer_legacy.viser.messages import ( CameraMessage, CameraPathOptionsRequest, CameraPathPayloadMessage, @@ -59,7 +59,7 @@ if TYPE_CHECKING: @decorate_all([check_main_thread]) -class ViewerState: +class ViewerLegacyState: """Class to hold state for viewer variables Args: diff --git a/nerfstudio/viewer/server/viewer_utils.py b/nerfstudio/viewer_legacy/server/viewer_utils.py similarity index 100% rename from nerfstudio/viewer/server/viewer_utils.py rename to nerfstudio/viewer_legacy/server/viewer_utils.py diff --git a/nerfstudio/viewer/viser/__init__.py b/nerfstudio/viewer_legacy/viser/__init__.py similarity index 100% rename from nerfstudio/viewer/viser/__init__.py rename to nerfstudio/viewer_legacy/viser/__init__.py diff --git a/nerfstudio/viewer/viser/gui.py b/nerfstudio/viewer_legacy/viser/gui.py similarity index 100% rename from nerfstudio/viewer/viser/gui.py rename to nerfstudio/viewer_legacy/viser/gui.py diff --git a/nerfstudio/viewer/viser/message_api.py b/nerfstudio/viewer_legacy/viser/message_api.py similarity index 100% rename from nerfstudio/viewer/viser/message_api.py rename to nerfstudio/viewer_legacy/viser/message_api.py diff --git a/nerfstudio/viewer/viser/messages.py b/nerfstudio/viewer_legacy/viser/messages.py similarity index 100% rename from nerfstudio/viewer/viser/messages.py rename to nerfstudio/viewer_legacy/viser/messages.py diff --git a/nerfstudio/viewer/viser/server.py b/nerfstudio/viewer_legacy/viser/server.py similarity index 100% rename from nerfstudio/viewer/viser/server.py rename to nerfstudio/viewer_legacy/viser/server.py