Langelaw's picture
Upload folder using huggingface_hub
e8ed588 verified
"""gr.Model4DGS() component."""
from __future__ import annotations
from pathlib import Path
from typing import Callable, List
from gradio_client.documentation import document, set_documentation_group
from gradio.components.base import Component
from gradio.data_classes import FileData, GradioModel
from gradio.events import Events
set_documentation_group("component")
class Model4DGSData(GradioModel):
files: List[FileData]
@document()
class Model4DGS(Component):
"""
Component allows users to upload or view 4D Gaussian Splatting files (.splat).
Preprocessing: This component passes the uploaded file as a {str}filepath.
Postprocessing: expects function to return a {str} or {pathlib.Path} filepath of type (.splat)
"""
EVENTS = [Events.change, Events.upload, Events.edit, Events.clear]
data_model = Model4DGSData
def __init__(
self,
value: str | Callable | None = None,
*,
fps: float = 8,
height: int | None = None,
label: str | None = None,
show_label: bool | None = None,
every: float | None = None,
container: bool = True,
scale: int | None = None,
min_width: int = 160,
interactive: bool | None = None,
visible: bool = True,
elem_id: str | None = None,
elem_classes: list[str] | str | None = None,
render: bool = True,
):
"""
Parameters:
value: path to (.splat) file to show in model4DGS viewer. If callable, the function will be called whenever the app loads to set the initial value of the component.
height: height of the model4DGS component, in pixels.
"""
self.height = height
self.fps=fps
super().__init__(
label=label,
every=every,
show_label=show_label,
container=container,
scale=scale,
min_width=min_width,
interactive=interactive,
visible=visible,
elem_id=elem_id,
elem_classes=elem_classes,
render=render,
value=value,
)
def preprocess(self, payload: Model4DGSData | None) -> List[str] | None:
return [file.path for file in payload.files]
def postprocess(self, value: List[str] | str | None) -> Model4DGSData | None:
if value is None:
return value
if isinstance(value, list):
return Model4DGSData(files=[FileData(path=file) for file in value])
return Model4DGSData(files=[])
#example display name
def as_example(self, input_data: List[str] | str | None) -> str:
return Path(input_data).name if input_data else ""
def example_inputs(self):
return [
"assets/tiger_4d_model_0.ply",
"assets/tiger_4d_model_1.ply",
"assets/tiger_4d_model_2.ply",
"assets/tiger_4d_model_3.ply",
"assets/tiger_4d_model_4.ply",
"assets/tiger_4d_model_5.ply",
"assets/tiger_4d_model_6.ply",
"assets/tiger_4d_model_7.ply",
"assets/tiger_4d_model_8.ply",
"assets/tiger_4d_model_9.ply",
"assets/tiger_4d_model_10.ply",
"assets/tiger_4d_model_11.ply",
"assets/tiger_4d_model_12.ply",
"assets/tiger_4d_model_13.ply"
];