Get renders¶
Capture rendered images from client viewports for processing or saving.
Features:
viser.ClientHandle.get_render()
for viewport image captureAutomatic image saving with imageio
GUI controls for triggering captures
Real-time viewport-to-image conversion
Source: examples/03_interaction/02_get_renders.py

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()