Get renders

Example for getting renders from a client’s viewport to the Python API.

 1import time
 2
 3import imageio.v3 as iio
 4import numpy as np
 5
 6import viser
 7
 8
 9def main():
10    server = viser.ViserServer()
11
12    button = server.gui.add_button("Render a GIF")
13
14    @button.on_click
15    def _(event: viser.GuiEvent) -> None:
16        client = event.client
17        assert client is not None
18
19        client.scene.reset()
20
21        images = []
22
23        for i in range(20):
24            positions = np.random.normal(size=(30, 3)) * 3.0
25            client.scene.add_spline_catmull_rom(
26                f"/catmull_{i}",
27                positions,
28                tension=0.5,
29                line_width=3.0,
30                color=np.random.uniform(size=3),
31            )
32            images.append(client.camera.get_render(height=720, width=1280))
33
34        print("Generating and sending GIF...")
35        client.send_file_download(
36            "image.gif", iio.imwrite("<bytes>", images, extension=".gif")
37        )
38        print("Done!")
39
40    while True:
41        time.sleep(10.0)
42
43
44if __name__ == "__main__":
45    main()