Sharing nodes
One of PeppyOS’s key features is the ability to share nodes with other people.
As an example, we’ll try to pull the fake_uvc_camera node from this repo in a separate shell.
peppy node add https://github.com/Peppy-bot/example_nodes.git/python/fake_uvc_cameraor
peppy node add --ref main https://github.com/Peppy-bot/example_nodes.git/python/fake_uvc_camerapeppy node add https://github.com/Peppy-bot/example_nodes.git/rust/fake_uvc_cameraor
peppy node add --ref main https://github.com/Peppy-bot/example_nodes.git/rust/fake_uvc_cameraNow that this node is added, we can start it:
peppy node start fake_uvc_camera:0.1.0 device.physical="/dev/device1" device.sim="the_camera" device.priority="physical" video.encoding="rgb" video.frame_rate=30 video.resolution.width=1280 video.resolution.height=720and inspect its logs:
❯ tail /Users/tuatini/.peppy/logs/start/angry-ride-4256.log[2026-01-25T16:38:51.860] [stdout] [uvc_camera] Video params: 720x1280 @ 30 fps, encoding: rgb[2026-01-25T16:38:51.860] [stdout] [uvc_camera] Starting video loop...[2026-01-25T16:38:51.860] [stdout] [uvc_camera] Video file found: /Users/tuatini/.peppy/nodes/fake_uvc_camera_0.1.0_093fa9/assets/robot.mp4[2026-01-25T16:38:51.860] [stdout] [uvc_camera] Opening video file for playback...[2026-01-25T16:38:54.892] [stdout] [uvc_camera] Emitted frame 65[2026-01-25T16:38:57.913] [stdout] [uvc_camera] Emitted frame 129[2026-01-25T16:39:00.926] [stdout] [uvc_camera] Emitted frame 194We see that video frames are emitted from that node. We can pull a new node that depends on fake_uvc_camera to read those frames and reconstruct a short video.
Pull another node from the same repository:
peppy node add https://github.com/Peppy-bot/example_nodes.git/python/fake_video_reconstructionpeppy node add https://github.com/Peppy-bot/example_nodes.git/rust/fake_video_reconstructionStart the node:
peppy node start fake_video_reconstruction:0.1.0 video_duration_seconds=5If we look at the logs of the started fake_video_reconstruction node:
[2026-01-26T15:35:25.170] [stdout] Recording 250 frames (5 seconds at 50 fps)...[2026-01-26T15:35:27.408] [stdout] Recorded 50/250 frames (1 seconds)[2026-01-26T15:35:29.526] [stdout] Recorded 100/250 frames (2 seconds)[2026-01-26T15:35:31.811] [stdout] Recorded 150/250 frames (3 seconds)[2026-01-26T15:35:34.106] [stdout] Recorded 200/250 frames (4 seconds)[2026-01-26T15:35:36.423] [stdout] Recorded 250/250 frames (5 seconds)[2026-01-26T15:35:36.423] [stdout] Recording complete. Encoding video...[2026-01-26T15:35:37.222] [stdout] Video saved to: /var/folders/kb/36lp35_92z5_jg6gfqhvkm600000gn/T/.tmpCJoXVL/reconstructed_video.mp4We can see the video has been saved to a temporary folder. Go ahead and open it—you’ll find the reconstructed video of the robot.
In the same way, you can share your own nodes by hosting them in a Git repository and connect them to remote nodes.
A node can also be pulled in the same way if it’s in a .tar.zst archive.