Get renders

Capture rendered images from client viewports for processing or saving.

Features:

  • viser.ClientHandle.get_render() for viewport image capture

  • Automatic image saving with imageio

  • GUI controls for triggering captures

  • Real-time viewport-to-image conversion

Source: examples/03_interaction/02_get_renders.py

Get renders

Code

 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    # Shared across all clients.
13    server.scene.add_spline_catmull_rom(
14        "/catmull_initial",
15        np.random.normal(size=(30, 3)),
16        tension=0.5,
17        line_width=3.0,
18        color=np.random.uniform(size=3),
19    )
20
21    button = server.gui.add_button("Render a GIF")
22
23    @button.on_click
24    def _(event: viser.GuiEvent) -> None:
25        client = event.client
26        assert client is not None
27
28        client.scene.reset()
29
30        images = []
31
32        for i in range(20):
33            # Add spline to just this client.
34            client.scene.add_spline_catmull_rom(
35                f"/catmull_{i}",
36                np.random.normal(size=(30, 3)),
37                tension=0.5,
38                line_width=3.0,
39                color=np.random.uniform(size=3),
40            )
41            images.append(client.get_render(height=720, width=1280))
42            print("Got image with shape", images[-1].shape)
43
44        print("Generating and sending GIF...")
45        client.send_file_download(
46            "image.gif", iio.imwrite("<bytes>", images, extension=".gif", loop=0)
47        )
48        print("Done!")
49
50    while True:
51        time.sleep(10.0)
52
53
54if __name__ == "__main__":
55    main()