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. 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. 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. 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
    RTSP camerafront-door OAK-D stereodepth + IMU CSI cameraJetson / Pi bubbaloop one binary on the device sensor-rt · drivers vision-rt · inference kornia-slam · pose zero-copy pub/sub · MCP server AI agent"what do you see?" Dashboardlocalhost:8080
    # 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?"