Metadata-Version: 2.4
Name: olfarve
Version: 1.0.0
Summary: sRGB color rendering of SRM/EBC beer color values
Project-URL: Homepage, https://github.com/aschet/pyolfarve
Project-URL: Documentation, https://github.com/aschet/pyolfarve#readme
Project-URL: Source, https://github.com/aschet/pyolfarve
Project-URL: Issues, https://github.com/aschet/pyolfarve/issues
Project-URL: Changelog, https://github.com/aschet/pyolfarve/releases
Author-email: Thomas Ascher <thomas.ascher@gmx.at>
License-Expression: MIT
License-File: LICENSE
Keywords: beer,brewing,color,colorimetry,colour,ebc,srgb,srm
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Multimedia :: Graphics
Classifier: Topic :: Scientific/Engineering :: Visualization
Classifier: Typing :: Typed
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# pyolfarve

*Øl farve* ("beer color") renders SRM and EBC beer color values as sRGB
colors, following the spectral model described by A. J. de Lange, "Color," in
*Brewing Materials and Processes*, Elsevier, 2016, pp. 199-249.

Given a color value and an optical path length (the width of the glass the
beer is viewed through), the sample's spectral transmittance is derived from
its absorption coefficient at 430 nm via the Beer-Lambert law, integrated
against the CIE 1931 color matching functions of the 2 degree standard
colorimetric observer under illuminant D65, and the resulting XYZ tristimulus
values are transformed to sRGB.

## Installation

```bash
pip install olfarve
```

The package requires Python 3.10 or newer and has no runtime dependencies.

## Usage

```python
import olfarve

olfarve.srm_to_srgb(10).to_hex()
olfarve.ebc_to_srgb(20).to_hex()

# The default path length is 5 cm, the width of a typical sample glass
olfarve.srm_to_srgb(10, path_length_cm=1.0).to_hex()

# Results are SRGBColor named tuples of gamma encoded components in [0, 1]
color = olfarve.srm_to_srgb(10)
color.r, color.g, color.b
color.to_rgb8()

# Or start from an absorbance measured at 430 nm
olfarve.absorption_to_srgb(0.7874)
```

## Command line

Installing the package provides an `olfarve` command. It takes one or more
color values and prints them as CSV:

```bash
olfarve 1 2 10
```

```
1,#fae8b6
2,#f4d180
10,#ba5b00
```

Pick a scale and a path length:

```bash
olfarve --scale ebc --path-length 1.0 8 20 40
```

Run `olfarve --help` for the full list of options. The module is also
executable via `python -m olfarve`.

## Development

```bash
python -m venv .venv && . .venv/bin/activate
pip install -e . --group dev
pytest
ruff check .
mypy
```
