Skip to main content

kalast

Kalast is a thermophysical model (TPM) for binary asteroids; it applies to other airless bodies as well. Kalast is also an image simulator for spacecraft cameras, in the visible and in the infrared. Its renderer serves several other uses — viewing and interacting with meshes, generating lightcurves — see the examples/ folder.

TPM

Several solvers of the heat conduction equation are implemented, all on a variable-spacing depth grid:

  • explicit: forward Euler, plus Runge–Kutta–Chebyshev super-time-stepping for problems where the depth system is no longer tridiagonal — lateral conduction, FEM, or a GPU port
  • implicit: backward Euler, Crank–Nicolson, BDF2

Validated against analytical solutions (damped thermal wave, slab relaxation) in examples/analytical/, and pinned by tests: error budgets, amplitude decay and phase lag, and the observed order of accuracy — 1 for backward Euler, 2 for Crank–Nicolson and BDF2.

The surface boundary condition includes:

  • solar radiation
  • self- and mutual heating (thermal re-emission and reflected sunlight)

Depth BC:

  • adiabatic
  • internal flux for larger bodies

Shadows, eclipses and occultations are computed by shadow mapping on the GPU (a CPU ray-tracing path exists, and is slower).

View factors for self- and mutual heating are computed by the hemicube method on the GPU: occlusion comes free from the depth test, one render yields a whole row, and the result is stored sparse (0.3 % dense on the Didymos pair). Radiosity is first order by default, with more bounces on request. Validated to 0.07 % against the closed form for perpendicular squares.

Once surface temperatures are known, the infrared image is rendered from the observer: emitted plus reflected flux, through a camera's resolution, field of view, filters and spectral response function.

Surface roughness is treated twice, once per wavelength range. In the infrared, the Kuehrt spherical-crater model corrects the emitted flux — beaming, which makes a rough surface read hotter and flatter at low phase — with multiple scattering after Lagerros (1996) and Mueller (2007). In the visible, Hapke's macroscopic roughness (θ̄, 1984) enters the photometry and the lightcurves.

Renderer

Kalast's renderer was first written to watch TPM results — surface temperatures evolving as the bodies spin. Matplotlib and MATLAB had served before, and both slowed the CPU simulation down.

The renderer runs on the GPU through wgpu, a pure-Rust implementation of the WebGPU standard, natively on every platform.

Shadow mapping uses PCF and fits its light frustum to the bounding boxes of the bodies in the scene automatically.

Kalast is also a UI app for editing scripts and interacting with the rendered scene, in the spirit of Blender or Unity.

Shape models

Shape models represent a body's surface as triangular facets. Of the many formats, kalast reads Wavefront .obj only.

Getting started

Grab a release from https://github.com/GregoireHENRY/kalast/releases, unpack it, and run it from inside the folder.

./kalast                                       # starts the kalast UI app
./kalast examples/two_spheres/main.py          # loads a Python example
./kalast examples/crater_self_shadow/step.rs   # a Rust one
./kalast some/shape.obj                        # a mesh

There is nothing to install and nothing is written outside the folder. The archive carries its own Python, with kalast and its dependencies already in it, and the .rs examples come pre-compiled. Editing one, or opening a .rs of your own, means compiling it: if the machine has no cargo the kalast UI app fetches a minimal toolchain into toolchain/ beside the executable and reuses it afterwards. On macOS that also wants Apple's command line tools for the linker (xcode-select --install).

Packages

You can also install kalast as a package, in a Python virtual environment or a Rust project:

pip install kalast          # Python
cargo add kalast            # Rust

Code signing policy

Free code signing provided by SignPath.io, certificate by SignPath Foundation.

The project has applied to the SignPath Foundation and the application is pending. Bundles are unsigned until the first release after it is approved, and Windows warns about an unsigned bundle once, at its first launch.

Team. Committers and reviewers: Grégoire Henry (@GregoireHENRY). Approvers: Grégoire Henry.

Privacy. When the kalast UI app opens it asks GitHub's API once whether a newer release exists; the request carries nothing about you or your machine, and app.config.check_updates = False turns it off. Compiling a .rs example on a machine without cargo fetches a Rust toolchain, when you ask for it. Beyond these, this program will not transfer any information to other networked systems unless specifically requested by the user or the person installing or operating it.

Repo structure

  • src/: Rust core. Written to be usable standalone by Rust users, independent of Python — the Python wrapper must not compromise its speed.
  • kalast/: Python wrapper. Provides Pythonic usage of Kalast (e.g. object references) for users less familiar with Rust. Built with maturin.
  • shaders/: wgpu shaders (.wgsl) used by the rendering pipeline.
  • examples/: Examples of usage of Kalast. Scripts under examples/old/ are earlier/superseded versions kept for reference, not maintained as user-facing examples.
  • res/: resources folder.
  • out/: default output directory for simulation results.

If you want to clone and compile it yourself

Create a virtual environment for the dependencies and the build — I recommend Astral's uv for Python. Then, from within your venv, run the following.

Build the kalast Rust extension, kalast/_rs.abi3.so (its name on macOS):

maturin develop

Build in debug (the default) while implementing features or fixing bugs. Use --release for benchmarks, and once a feature works.

maturin develop --release

Beyond the default opt-level = 3 there is nothing worth adding: lto = "fat" + codegen-units = 1 were measured on this project and gave no improvement. Recorded in Cargo.toml so it is not retried blindly.

The UI app can also be started from the Python module, here loading an example:

python -m kalast examples/two_spheres/main.py

Then import kalast from Python (or add the crate from Rust) and write your own scripts.

import kalast

Release files for kalast 0.5.7

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

Source distribution (sdist)

Source distribution for kalast 0.5.7
File Size Uploaded
kalast-0.5.7.tar.gz 969.4 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for kalast 0.5.7
File
kalast-0.5.7-cp314-abi3-win_amd64.whl CPython 3.14 abi3 Windows x86-64 Details
kalast-0.5.7-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 abi3 Linux glibc 2.17+ x86-64 Details
kalast-0.5.7-cp314-abi3-macosx_11_0_arm64.whl CPython 3.14 abi3 macOS 11.0+ ARM64 Details
kalast-0.5.7-cp314-abi3-macosx_10_12_x86_64.whl CPython 3.14 abi3 macOS 10.12+ x86-64 Details

Total release size: 40.1 MB

Release files / kalast-0.5.7.tar.gz

Download URL kalast-0.5.7.tar.gz
Size 969.4 kB
Tags Source
SHA-256 checksum
How to use checksums
de515a16f58ebecaa115dabb566920800394f40aa97b0e3eb7c9f7797b13d034
BLAKE2b-256 checksum
How to use checksums
7368fe9a91ec6ef98768fcfe53b60f1358809110ccb6c4b8ecc45fdb9e3c7d7e
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 Sep 23, 2026.

Transparency log

Release files / kalast-0.5.7-cp314-abi3-win_amd64.whl

Download URL kalast-0.5.7-cp314-abi3-win_amd64.whl
Size 9.1 MB
Tags CPython 3.14 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
fbfdc2a88dd38e775125454eb93611fd6eb3c0d982c2a64cf33b8faf0593eb9e
BLAKE2b-256 checksum
How to use checksums
e27f7c10190c348dfeed86547fbe12ce46ca086b261232d26436a0496fea833d
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 Sep 23, 2026.

Transparency log

Release files / kalast-0.5.7-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL kalast-0.5.7-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 12.5 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
43edded547859e6844462e12cd86cb65afb326b804e1cf7daf37f3a6565fea0d
BLAKE2b-256 checksum
How to use checksums
df0050018ecd2b5b10bd02e9ce67dc668844c6c73f581f11237e462bfe3961b4
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 Sep 23, 2026.

Transparency log

Release files / kalast-0.5.7-cp314-abi3-macosx_11_0_arm64.whl

Download URL kalast-0.5.7-cp314-abi3-macosx_11_0_arm64.whl
Size 8.5 MB
Tags CPython 3.14 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b1582d8fe76b5506f68413358f9dc3580182f6444453051a836e38018cc2ba08
BLAKE2b-256 checksum
How to use checksums
4114c73e696a336ef5ef50b8c65c367b3d9bb3c12aa11c5a4dda2cf5be6b26e8
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 Sep 23, 2026.

Transparency log

Release files / kalast-0.5.7-cp314-abi3-macosx_10_12_x86_64.whl

Download URL kalast-0.5.7-cp314-abi3-macosx_10_12_x86_64.whl
Size 8.9 MB
Tags CPython 3.14 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
9b521acb5938af7b06ab285de026ca5fb91edd079538ed7a194c7ea61113a597
BLAKE2b-256 checksum
How to use checksums
cdbdafaa9b8f0356e9ead038ab78cdec381e1fbdcb70df42c4e1225aa5749a79
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 Sep 23, 2026.

Transparency log

Release history Release notifications | RSS feed

0.5.9

5 release files

0.5.8

5 release files

This release

0.5.7 This release

5 release files

0.5.6

5 release files

0.5.5

5 release files

0.5.4

5 release files

0.5.3

5 release files

0.5.2

5 release files

0.5.1

5 release files

0.5.0

5 release files

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