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.

Download the latest version of kalast here. You can directly run the executable and open an example script from the UI.

Kalast focus is doing sciences with highest performance possible (core written in Rust + GPU/shaders) while being accessible by everyone (wrapper written in Python + UI).

The kalast UI app

Four Mars Express HRSC SRC images of Phobos, drawn by kalast and through the camera's response

Four Mars Express HRSC SRC images of Phobos (top), drawn by kalast with the light of Mars and a bounce (middle), and as the camera would record kalast's (bottom): examples/phobos_shadows_fit.

You can also run it in your terminal:

./kalast                                        # starts the kalast UI app
./kalast examples/crater_self_shadow/main.py    # load a Python example
./kalast examples/crater_self_shadow/main.rs    # load a Rust example
./kalast res/plane_crater_1024-5000_h=0.437.obj # load a mesh

More info on Running kalast for the first time. There are also additional resources to read, here or in the documentation tab of the UI app:

You can also write me an email at gregoireh@pm.me if you have any question or want any feature added.

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.

Running kalast for the first time

Kalast carries its own Python. Rust examples .rs 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/ next to the executable.

The bundles are not code-signed, so Windows warns once at the first launch of kalast.exe: More info, then Run anyway.

macOS refuses to run a bundle downloaded with a browser until it is flagged cleared, use:

xattr -cr /path/to/kalast-v*-*

Then double-click kalast.app in that folder to open the UI app; ./kalast runs it from a terminal.

Write your own scripts in scripts/. examples/ holds kalast's examples, which each update replaces: an example you changed or added there is first moved, whole, to scripts/backup/before-v<version>/.

Kalast is also available as a PyPI package and as a crate.

pip install kalast          # Python -- do this in a venv, you can use astral uv
pip install "kalast[editor]"  # the same, with ty for the UI app's script editor
cargo add kalast            # Rust

Linux requirements

  • glibc >= 2.35

If you want to clone and compile it yourself

  • 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. examples/old/ are earlier/superseded versions kept for reference, not maintained
  • res/: resources folder.
  • out/: default output directory for simulation results.

Create a virtual environment for the dependencies and the build. I recommend Astral's uv. Then, from within your venv, run the following to build kalast DLL for python kalast/_rs.abi3.so (its name on macOS):

maturin develop

Build in debug (the default) while implementing features or fixing bugs. But 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.

The UI app can also be started from the kalast python module:

python -m kalast examples/two_spheres/main.py

Credits

The UI app's icons are VS Code's Codicons (CC BY 4.0) and Catppuccin's icons for VS Code (MIT); their licences are in src/app/gui/assets/.

Metadata

Release files for kalast 0.5.14

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.14
File Size Uploaded
kalast-0.5.14.tar.gz 3.5 MB Details

Built distributions (wheels)

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

Total release size: 88.7 MB

Release files / kalast-0.5.14.tar.gz

Download URL kalast-0.5.14.tar.gz
Size 3.5 MB
Tags Source
SHA-256 checksum
How to use checksums
37291c884769fb3fdd07388e8646011c9a867245f6dac5e38b53bea16bd7f82f
BLAKE2b-256 checksum
How to use checksums
245b483dd3360f5849f550845b2dc63ec8fccbabc28993804889623e073ca2ca
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 / kalast-0.5.14-cp314-abi3-win_amd64.whl

Download URL kalast-0.5.14-cp314-abi3-win_amd64.whl
Size 20.5 MB
Tags CPython 3.14 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
3acb40b2b635e89e52f3b5c3542ec7ee8cde576062e421beac7d746206e942cc
BLAKE2b-256 checksum
How to use checksums
6658ae79b172c8dbd3fc4d2b64df8514f161e6416c7eb4457624dff2f1cd247f
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 / kalast-0.5.14-cp314-abi3-manylinux_2_35_x86_64.whl

Download URL kalast-0.5.14-cp314-abi3-manylinux_2_35_x86_64.whl
Size 23.9 MB
Tags CPython 3.14 Linux glibc 2.35+ x86-64 abi3
SHA-256 checksum
How to use checksums
c2b10aa756d05338c623879e26823302e0334d93e5a355ecebf5a60857d0a1b5
BLAKE2b-256 checksum
How to use checksums
5447992de1f26dd4ce41cb8653c2f58ced5490266edb0d7ff73b88c58cb8a3be
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 / kalast-0.5.14-cp314-abi3-macosx_11_0_arm64.whl

Download URL kalast-0.5.14-cp314-abi3-macosx_11_0_arm64.whl
Size 20.2 MB
Tags CPython 3.14 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d33ee331e7628e440ab206d0dbe4b43b4731e24cf67f76336a871576d907dd80
BLAKE2b-256 checksum
How to use checksums
721b1ec2d568db499d508edb0c7a148610c640535dced72f729fd8d261504c98
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 / kalast-0.5.14-cp314-abi3-macosx_10_12_x86_64.whl

Download URL kalast-0.5.14-cp314-abi3-macosx_10_12_x86_64.whl
Size 20.6 MB
Tags CPython 3.14 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
e219f077bde431f5835cc8ae39def8f0669d0a33629e1190a122aa9217b7db22
BLAKE2b-256 checksum
How to use checksums
1ccd25705745e6b4be663fcd21cb8d610dc2ae9e0eca249ec7bb79ed9dad19b1
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 history Release notifications | RSS feed

This release

0.5.14 This release

5 release files

0.5.12

5 release files

0.5.11

5 release files

0.5.10

5 release files

0.5.9

5 release files

0.5.8

5 release files

0.5.7

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