Skip to main content

rillfacet

A fast 3D viewer for simulations. Feed it plain arrays; get an interactive scene in a native window or in your browser.

rillfacet showcase scene

  • Simple. Meshes, points, curves, volumes and arrows, colored by any quantity you attach.
  • Fast. WebGPU rendering with soft shadows, ambient occlusion and transparency.
  • Everywhere. Python, C++, and a browser client that streams from a running process.
  • Independent. It never depends on a simulator. NumPy and torch tensors (CUDA too) just work.

The name: a rill is a small stream, like the stream of poses and meshes flowing from your simulator. A facet is one flat face of a mesh, or the flat near and far planes that bound what a camera sees.

Python

pip install rillfacet

Start with examples/hello.py: a rippling sheet colored by height, in about 50 lines with no simulator.

A rippling sheet colored by height

Plugging in your own simulator looks like this:

import rillfacet as viz

v = viz.Viewer()
cloth = v.scene.add_mesh("cloth")
cloth.set_geometry(verts, tris)
cloth.add_scalar("speed", viz.ElementKind.Vertex, speed)
cloth.color_source = viz.ColorSource.Quantity
cloth.color_quantity = "speed"
cloth.colormap = "viridis"

def callback():              # runs every frame
    sim.step()
    cloth.set_positions(sim.positions)

v.set_callback(callback)
v.run()

Cloth in the wind

Use Viewer(headless=True) to render offscreen, for screenshots and CI. Your own panels use the familiar imgui API.

Look closer

Switch styles and themes, see through to the wireframe, or slice a volume open to inspect what is inside.

Select vertices, edges, faces or bodies. Measure distances and angles. Drag objects with the mouse. Controls follow Blender.

C++

Link the static library and use the same scene API. The bundled demo needs no simulator:

./build/showcase

In the browser

Stream a live run, or replay saved ones, in any WebGPU browser. The browser renders the same shaders as the native window.

from rillfacet.scene_api import Scene
from rillfacet.web.server import StreamBackend, VizServer

server = VizServer("0.0.0.0", 8080)
backend = StreamBackend(server.stream("live"))
scene = Scene(backend)

if backend.wanted():             # a browser is watching
    backend.commit(scene, time=step)

Open http://<host>:8080/. It suits physical simulation and reinforcement learning alike; the clip below shows robots from a training run.

Robots from a training run in the browser

Requirements

  • Linux x86-64 and Python 3.10 or newer.
  • A Vulkan driver (your GPU's, or Mesa's software one).
  • Optional: ffmpeg to record .mp4 video.

Build from source

./scripts/build_dawn.sh                      # once, about 10 minutes
cmake -S . -B build -G Ninja && cmake --build build
pip install .                                # the Python wheel

You need GCC 13 or newer (or Clang), CMake 3.24 or newer, Ninja and git. Full details, the complete API notes and the controls table are in docs/REFERENCE.md.

License

MIT. Wheels also bundle Dawn, GLFW, Dear ImGui, ImPlot, pybind11 and fonts under their own licenses; see THIRD_PARTY_LICENSES.txt.

Metadata

Release files for rillfacet 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for rillfacet 0.1.1
File
rillfacet-0.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
rillfacet-0.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
rillfacet-0.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
rillfacet-0.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
rillfacet-0.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details

Total release size: 54.9 MB

Release files / rillfacet-0.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL rillfacet-0.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 11.0 MB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
cc9dca0ee52d8c2e3595a2fd942e7fade1789284b9a071324082534a2a30a8e5
BLAKE2b-256 checksum
How to use checksums
305fca4635baf57ae92f0f8c3128fd60009b6af5c20b6258d11712d62ac39450
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / rillfacet-0.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL rillfacet-0.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 11.0 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6e40ea354eb7d935549a7ac668ee86b49dcd136595e7cb0721fe0f873d31799f
BLAKE2b-256 checksum
How to use checksums
44f5fec725a02afe33f82ebe3c1388291f5796d7369ea608886937f3ddff61d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / rillfacet-0.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL rillfacet-0.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 11.0 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5f765e6756b83ec8faacdd4e318f011a040c9f01fefcd62a9d135f455a1d79b0
BLAKE2b-256 checksum
How to use checksums
00151c2d4784c2b2085b133652a4438a4f616b313ce509f3304accd3eadadb92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / rillfacet-0.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL rillfacet-0.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 11.0 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ed5117bfca0e3a180ec9b1d756610dcf6a911025b09e1807115b105743dde1bb
BLAKE2b-256 checksum
How to use checksums
7046125e8e2aa9e46f86d7b32828dd495b249a52cb9509f9857d7863c3ca1c6a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / rillfacet-0.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL rillfacet-0.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 11.0 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
30c260c5bc6487f91895d2a503b39e1994af2e274be1024388b07d2706d81480
BLAKE2b-256 checksum
How to use checksums
a338f777718dfb275bbb892caa829b18e4389ad343f1c97d36cf0fd40b8da15a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Security for rillfacet 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 5 files in this release have been uploaded with provenance metadata.

Select from 5 files

Attestation for rillfacet-0.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page