chromabrew
v1.0.1
Published
Predict the color of a batch of beer, and convert between known color values and web-friendly hex.
Downloads
21
Maintainers
Readme
Chromabrew
Convert SRM, EBC, or a list of Lovibond values to another color scale, or to a hex color.
Color values are provided by Barley Dog Brewery here
Usage
Install the library:
npm install --save chromabrew
Require the module:
let chromabrew = require('chromabrew');
Pass options which describe a batch to the Batch
constructor, or directly to the required module. See the list of accepted options below. Call hex
on the returned object to get a color:
new chromabrew.Batch({ srm: 4 }).hex();
// => '#ECE61A'
chromabrew({ srm: 4 }).hex();
// => '#ECE61A'
chromabrew({ ebc: 4 }).hex();
// => '#F8F753'
Convert between color scales:
let batch = chromabrew({ srm: 4 });
batch.srm();
// => 4
batch.ebc();
// => 7.88
batch.mcu();
// => 4.210535199414287
batch.lovibond();
// => 3.407407407407407
Specify which calculation method was used to determine the provided srm
or ebc
, or which method to use when converting between scales:
let batch = chromabrew({ srm: 14, calculator: 'daniels' });
batch.srm('daniels');
// => 14
// defaults to 'morey'
batch.srm();
// => 14.670088349307665
batch.srm('mosher');
// => 13.099999999999998
// defaults to 'morey'
batch.ebc();
// => 28.9000740481361
batch.hex('daniels');
// => '#B26033'
// defaults to 'morey'
batch.hex();
// => '#A85C37'
Options
Primary Options
Any one of the following options must be passed to the module:
| option | description | type |
|-|-|-|
| srm
| the SRM of a batch | Number
|
| ebc
| the EBC of a batch | Number
|
| l
or lovibond
| the degrees Lovibond of a batch | Number
|
| batch
| options describing a batch in detail (see below) | Object
|
This option may be used in combination with a known color value (srm
, ebc
, or l
) to specify which calculation method was used:
| option | description | type |
|-|-|-|
| calculator
| the SRM calculation method used: 'morey'
(default), 'daniels'
, 'mosher'
, or 'barry'
† | String
|
† apparently they let anyone create a beer color scale
Batch Options
The following options define the batch
primary option:
| option | description | type |
|-|-|-|
| mcu
| the MCU of the batch, if it is already known | Number
|
| v
or volume
| the total liquid volume of the wort (required) | Number
|
| ingredients
| an Array
of ingredient options (see below; required) | Array[Object]
|
| litres
or liters
| whether volume
is expressed in litres | Boolean
|
| kilograms
or kilos
| whether weight
of each item in ingredients
is expressed in kilograms | Boolean
|
| metric
| shortcut to apply both litres
and kilograms
options | Boolean
|
Ingredient Options
The following options define each ingredient in the ingredients
batch option:
| option | description | type |
|-|-|-|
| l
or lovibond
| the value in degrees Lovibond of the ingredient (required) | Number
|
| w
or weight
| the weight of the ingredient used (required) | Number
|
Functional Domain
The domain of valid inputs is 0 through 40 SRM. Input values are rounded to the nearest 0.1 SRM within this domain:
chromabrew({ srm: -1 }).hex() === chromabrew({ srm: 0 }).hex();
// => true
chromabrew({ srm: Number.MAX_VALUE }).hex() === chromabrew({ srm: 40 }).hex();
// => true
chromabrew({ srm: Math.PI }).hex() === chromabrew({ srm: 3.1 }).hex();
// => true
The 'daniels'
and 'mosher'
SRM calculation scales have a minimum result of 8.4
and 4.7
, respectively. Where a provided srm
would result in a negative mcu
, the mcu
is set to 0:
let daniels = chromabrew({ srm: 4, calculator: 'daniels' });
daniels.mcu();
// => 0
daniels.srm();
// => 0
daniels.srm('daniels');
// => 8.4
let mosher = chromabrew({ srm: 4, calculator: 'mosher' });
mosher.mcu();
// => 0
mosher.srm();
// => 0
mosher.srm('mosher');
// => 4.7