Pleochroma GitHub

Pleochroma Gem Design Suite

Spectral path tracer and faceting-design CAD for cut gemstones

Download for Windows or Linux Read the user manual

Pleochroma is a spectral path tracer for cut gemstones. It traces light through the stone with hero-wavelength sampling, polarization and birefringence, and evaluates the refractive index per wavelength from Sellmeier and Cauchy data instead of a fixed RGB approximation. The physics runs on the CPU and, optionally, as a GPU kernel that is checked against the CPU reference.

Use it to preview faceting designs before cutting, to compare how different gem materials render the same cut, and to produce reference-quality still renders. Designs come from GemCAD-style .asc cutting instructions or from Pleochroma's own faceting editor. Besides the desktop studio there is a web app for the browser and an Android app for phones and tablets (not in an app store yet; built from source for now).

Pleochroma is MIT licensed.

Rendered tanzanite gemstone
Fig. 1 — Tanzanite, 1920 × 1080, 32 768 samples per pixel. Rendered with Pleochroma.

1What it does

Physics and rendering

Spectral path tracing with polarization and birefringence, on the CPU or a GPU kernel checked against it.

Studio and CAD

A design library, a live render with optional optical-effect overlays, and a faceting editor that solves, optimizes and retargets cutting instructions.

Rough planner

Plan as many stones as fit a block, pebble or scanned rough, or at most as many as you choose, mixing up to 99 designs, and compare the best ten layouts.

Materials

38 built-in gem materials with dispersion data, one of them color zoned, plus custom materials and custom colors.

Distributed rendering

Hand a render to a coordinator and any workers that join it, locally or in the cloud.

Web app

Open, edit and render a design in the browser with nothing to install. It renders on the CPU, and on the GPU for isotropic stones in Chrome and Edge.

Mobile app

A touch-first Android app for phones and tablets that can also render on a coordinator. Not in an app store yet; build it and try it today.

Rough color and zoning

Take the color of a piece of rough, and its color zones, from backlit photos, and carry it into the planner and the render.

Crystal axis

Set the direction of the crystal in a stone, or tell the planner how it runs in the rough, and the color, doubling and cutting sheet follow it.

Surface finish, silk and play-of-color

Polish quality and scratches from your own faceting machine, ground facets, silk inside a sapphire, the flashes of opal and labradorite, and a refractive-index curve for each ray.

Cutting mode and tutorials

The cutting instructions one step per page for the bench, and 90 short tutorials, one for each CAD function, plus video tutorials on YouTube.

2Renders

Every image on this site was rendered with Pleochroma. The first two show dispersion fringes and absorption; the six tiles show one design in six materials, cut and lit identically, so only the optics differ.

The renderer is also in use outside this project: the renewed facetdiagrams.org, released in October 2026, renders all of its static design images with Pleochroma.

Rendered sapphire gemstone
Fig. 2 — Sapphire, 3840 × 2160, 8 192 samples per pixel. Rendered with Pleochroma.
Rendered emerald gemstone
Fig. 3 — Emerald, 1920 × 1080, 16 384 samples per pixel. Rendered with Pleochroma.
41.029B FVS-65 (Long Octagon) rendered as diamond The same design rendered as sapphire The same design rendered as emerald The same design rendered as tanzanite The same design rendered as rutile The same design rendered as alexandrite in daylight
Fig. 4 — One design, 41.029B FVS-65 (Long Octagon), in six materials, in reading order: diamond, sapphire, emerald, tanzanite, rutile and alexandrite in daylight. 1920 × 1080 renders on the grey backdrop card at 32 768 samples per pixel (rutile 16 384), each cropped around its own stone.

Each tile is cropped around its own stone, so sizes are not comparable from tile to tile. Diamond and rutile differ mainly in dispersion (0.0256 against 0.164 for rutile’s ordinary ray and 0.207 for its extraordinary ray). The alexandrite is shown again in a warmer light on the materials page.

All figures, with sample counts and settings · Alexandrite in two lights

3What is modelled and how it is checked

Each ray carries eight wavelengths at once (one hero wavelength and seven companions), a Stokes vector that is rotated through a Mueller matrix at every facet, and a dispersion curve per material. Uniaxial and biaxial crystals split into ordinary and extraordinary rays, pleochroic stones absorb differently along each direction, and the stone itself is a set of planes (plus subtracted tools for concave facets), not a triangle mesh. The result is integrated against the CIE 1931 color-matching functions and tone mapped.

The GPU kernel is a hand-written port, so it is verified in tiers against the CPU: bit-exact random state, per-function ULP budgets, statistical comparison of whole images, and a white-furnace test against an analytic answer.

The full model table and every equation · The GPU equivalence harness

4The studio

pleochroma-cut is the desktop application: a design library on the left and a live 3D viewport on the right. The library is a local database with no account, searchable by shape, index gear, facet count and length/width ratio, and it can also browse a remote coordinator's catalogue. The viewport offers a fast solid preview, a lightweight Ray-Traced view, or the full spectral Path-Traced engine, with lighting presets from a light tent to a grading tray and daylight, custom HDR environments, live brilliance, windowing and extinction readouts, an optional Optical Diagnostics layer that marks windowing, extinction, brilliance and fire on the stone, and tilt sweeps that show how a design behaves in the hand and not only face-up. Stills export up to 8192 × 8192 pixels, and a queue renders stills and tilt videos overnight.

One Simple / Advanced switch hides or shows controls without touching any design. The user manual is built into the program (Help → User Manual, or F1 for the page about whatever is on screen), and Ctrl+K opens a command palette that reaches most actions by name.

Pleochroma studio main window: design library and the live Solid view of the stone
Fig. 5 — The studio: design library and live spectral viewport.

More on the studio · Render jobs and the command line

5Faceting CAD

The editor treats the cutting instructions as a constraint graph, not a list of numbers. A solver resolves every facet's cutting depth from its meet constraints, a tier's angle can follow other tiers through a relation such as =P1 - 2, and concave facets cut with a cylinder, cone, circle, disc or sphere tool are part of the design. Optimize, and Retarget for another material, check every candidate against the meets of the original design and offer only results that keep them. For a design with concave tiers they and the angle sweep score the stone with its tools, the library previews draw it with them, and the GPU traces up to 128 tool placements, every one a design can hold. Angle sweeps, history and variants, a step-by-step cutting mode for the bench and 90 short tutorials are built around it. Whole tiers or single facets can be frosted: the renders show them matte, the tilt curves follow them, the cutting sheet marks them and .psdd and .gcs files keep them, while the live Checks numbers, the optimizer, Retarget and Compare still score every facet as polished. The printable cutting sheet lists the facets in cutting order with positive angles, and a design can be exchanged as GemCAD .asc, Pleochroma's own .psdd, and .gem or .gcs files from GemCAD and Gem Cut Studio. The solver, optimizer, Retarget and angle sweep also run without a window in pleochroma-cli, which takes several design files per command.

The Rough planner (Library → Plan Rough...) takes a block, cylinder, pebble or scanned mesh of rough and ranks up to 10 ways of cutting it into as many stones as fit, or at most as many as you choose, mixing up to 99 designs from your library.

Edit mode: solid view with a selected facet, tier table and tier inspector
Fig. 6 — Editing tier angles and constraints in the cutting instructions.

More on the faceting CAD · The Rough planner

6Materials

38 built-in gem materials, each with a dispersion fit either taken from the optics literature or derived from corroborating gemological references. One of them, Ametrine, is color zoned: an amethyst half and a citrine half in one stone. The colors of Ruby, Sapphire, Emerald, Peridot, Spessartine, Tsavorite, Demantoid, Aquamarine and the heat-treated, violet-blue Tanzanite are fitted to published measured absorption spectra. You can add your own, with Sellmeier or Cauchy coefficients that are validated before use, and give any stone a custom color by tone, saturation and hue. The same list is offered by the renderer and the CAD editor.

The dispersion chart, the full table and custom materials

7Distributed rendering

Preview-then-handoff: the desktop renders a local preview while the camera moves, then hands sample tracing to a coordinator, which traces sample-index ranges itself (with --render) and across the render workers that have joined it; every range is summed into the desktop's one accumulator. DESKTOP · pleochroma-cut camera moving local CPU / GPU preview, few samples, immediate camera settled hand sample tracing off to the coordinator COORDINATOR · worker serve splits the image into sample-index ranges, not screen tiles own lane with --render a lost worker's ranges go to the other lanes WORKERS · worker join (×N) GPU / CPU path tracer claims chunks sized to its measured rate dials out to coordinator no inbound port needed, works behind NAT scene samples chunks ranges :7878 · mTLS 1.3 :7880 · worker dials in ACCUMULATOR · ON THE DESKTOP local and remote samples are summed per pixel; the ranges are disjoint, so arrival order never matters
Fig. 7 — Preview-then-handoff: local preview while the camera moves; once it settles, the coordinator traces sample-index ranges itself and across its joined workers, and every range lands in the desktop's one accumulator.

The viewport renders locally while the camera moves, then hands sample tracing to a coordinator once it settles. Work is split by sample-index range, not by screen tile, so a stone's few expensive facets do not unbalance the machines. The coordinator can trace itself and also drives render workers that dial out to it, so machines behind NAT or in the cloud can join, and a worker that drops out mid-job loses nothing. Local and remote samples are summed, never duplicated; results travel losslessly compressed, or as a finished picture when bandwidth matters more. Every connection is mutual TLS 1.3 with one-time token enrolment. A coordinator that renders itself can also keep a still-picture job for a client that has gone offline, such as the Android app, which fetches the picture later.

Protocol, the pleochroma-worker CLI and cluster setup · A distributed export in flight

8Downloads

Pleochroma comes as ready-built programs for Windows and Linux. On Windows the easiest way to install it is the Microsoft Store: Pleochroma for Windows, which the Store keeps up to date. The tables below are the direct downloads from GitHub, for Windows and Linux. The GPU builds add the GPU path tracer; the CPU builds render on the processor only.

Windows

ProgramCPU onlyWith the GPU path tracer
pleochroma-cut: the desktop studio and faceting CAD pleochroma-cut-windows-scalar-cpu.exe pleochroma-cut-windows-scalar-gpu.exe
pleochroma-worker: the coordinator and render worker for distributed rendering, run from a terminal pleochroma-worker-windows-scalar-cpu.exe pleochroma-worker-windows-scalar-gpu.exe

Linux

ProgramCPU onlyWith the GPU path tracer
pleochroma-cut: the desktop studio and faceting CAD pleochroma-cut-linux-scalar-cpu pleochroma-cut-linux-scalar-gpu
pleochroma-worker: the coordinator and render worker for distributed rendering, run from a terminal pleochroma-worker-linux-scalar-cpu pleochroma-worker-linux-scalar-gpu

On Linux, mark the file as executable once before the first start, for example chmod +x pleochroma-cut-linux-scalar-gpu, then run ./pleochroma-cut-linux-scalar-gpu.

START HERE

The user manual is the documentation for the desktop application. Begin with Chapter 1, Getting Started, which walks through the main window; the manual has 24 chapters and three appendices. The same manual opens inside the program from Help → User Manual, and F1 opens the page for whatever is on screen.

There is no download for the Android app yet: it is not in an app store, and you build it from source and install it on your own device (or run it in a desktop window).

Every release, with its notes and all of its builds, is on the releases page. Go there to see what changed. There are no ready-built programs for macOS: on a Mac, or to install with Cargo or build from source on any system, see getting started.

9Getting started

Nothing to install: the browser version is at live.pleochroma.com (see the web app page for what it can do). For the design library, the GPU and remote rendering, download the desktop application from the downloads section (on Windows it is also in the Microsoft Store), or install it with Cargo. On an Android phone or tablet, the mobile app is built from source for now: the page lists the steps, and a one-line command runs the same interface in a desktop window.

terminal — install from crates.io
cargo install pleochroma-cut --features gpu
pleochroma-cut

Then open a design from the library, pick a material and a lighting, and the live render starts. A first render takes a few clicks and no settings. The user manual explains every window step by step, and it is also built into the program under Help → User Manual.

Video tutorials: video tutorials are on the Pleochroma YouTube channel. The program also has 90 short tutorials of its own (Help → Tutorials), one for each CAD function.

More on installing, building and the command line

10Workspace

Pleochroma is a Cargo workspace of libraries and applications, all MIT licensed. The renderer (pleochroma), the editor core, the file formats, the design library and the network protocol are published libraries on crates.io; the desktop studio, the coordinator and worker, the command-line tool, the browser build and the Android app are the applications on top.

Every crate, with its description and registry links

11Roadmap

Planned, not implemented, and with no dates:

The roadmap in full, with what each item builds on

12Status and limitations

The full list, with the limits and their reasons

Ray-Traced and Path-Traced

The viewport offers Solid, Ray-Traced and Path-Traced. Ray-Traced provides a fixed-tap preview, while Path-Traced accumulates spectral samples.

Ray-Traced is a deterministic approximation: one d-line index, or three fixed indices with Fire, RGB absorption tint and 1/4/8/16 AA taps. It finishes at the tap count without denoising. It omits polarization, birefringent doubling, scattering, zoning and edge rounding. Path-Traced retains the spectral model. Optical metrics, tilt sweeps and diagnostics keep their separate analytic tracer.