rillfacet
A fast 3D viewer for simulations. Feed it plain arrays; get an interactive scene in a native window or in your browser.
- 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.
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()
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.
Requirements
- Linux x86-64 and Python 3.10 or newer.
- A Vulkan driver (your GPU's, or Mesa's software one).
- Optional:
ffmpegto record.mp4video.
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)
| File | Reset | |||
|---|---|---|---|---|
| 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logSecurity 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.
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 logA 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.