// perception stack · PyTorch + Rust
Computer vision for
robotics & spatial AI.
Perception that runs from the notebook to the robot.
News Releases, talks and milestones across the projectsOne stack, research to product
Research
Product: Jetson, Raspberry Pi, any Linux
Kornia is a non-profit building the stack for spatial AI — from differentiable vision for research to real-time perception on robots — maintained by a small team and funded by the people who use it.
From a notebook to a robot, without a rewrite
Most vision projects die between the prototype and the device. This is the path the stack is built for: write the perception once, then carry it down to the hardware.
-
1
Prototype the perception
Start where research starts: in PyTorch, with operators and models that gradients flow through. On the right, three of them run on a clip in your browser: YuNet finding a face, a random affine augmentation held fixed for the whole pass, and Sobel edges. Try the rest in the playground before writing a line.
-
2
Carry it to the device, unchanged
The prototype does not get rewritten under deadline. The same operators exist in Rust under the same names, so the port is a translation, not a redesign. Trained models and whole pipelines leave PyTorch as ONNX; the pipeline builder does that export in the browser.
Prototype, Python
import kornia as K blurred = K.filters.gaussian_blur2d( x, (9, 9), (2.0, 2.0)) edges = K.filters.sobel(blurred)Device, Rust
use kornia_imgproc::filter::*; gaussian_blur(&img, &mut blurred, (9, 9), (2.0, 2.0))?; sobel(&blurred, &mut edges, 3)?; -
3
Run it on a robot
Bubbaloop is the runtime that puts all of it on the machine: one 13 MB Rust binary on a Jetson, a Raspberry Pi or any Linux box. It drives cameras and sensors through sensor-rt, runs models through vision-rt, keeps pose with kornia-slam, and exposes the whole device to an AI agent you can talk to. Four commands from an empty board to asking your camera what it sees.
- Cameras, stereo and IMU as self-describing sensor nodes over zero-copy pub/sub
- A web dashboard and a chat with tool-call traces, images included
- Works with Gemini, Claude or a fully local Ollama model
- Fleets: the same agent across many devices, with telemetry
# 1. install (Linux x86_64 / ARM64): binary, pub/sub router, # web dashboard, all as user services curl -sSL https://github.com/kornia/bubbaloop/releases/latest/download/install.sh | bash source ~/.bashrc # 2. describe a camera: RTSP, or CSI/USB on a Jetson or Pi cat > ~/.bubbaloop/skills/front-door.yaml <<'YAML' name: front-door driver: rtsp config: url: rtsp://192.168.1.100/stream YAML # 3. start; the driver node is installed and streams bubbaloop up # 4. talk to the hardware (dashboard: http://localhost:8080) bubbaloop agent chat "what does the front-door camera see?"