QMK Keymap Carpalx Analyser

This attempts to adapt Carpalx into a JS system that can analyse QMK keymaps in the form of configurator .json files. Some default keymaps are available here, which can be dropped any where on this page (drop multiple files for quick comparing). The textarea below is used as a corpus, and is populated by a section from a book on Project Gutenberg.

Adjust overall weights
\[e = {k_{base} \times b_{triad} + k_{penalty} \times p_{triad} + k_{stroke} \times s_{triad} }\] \[b_{triad} = {k_1 \times b_{key,1} \times ( 1 + k_1 \times b_{key,2} \times ( 1 + k_3 \times b_{key,3}))}\] \[b_{key} = \text{distance from closest homerow key in } \frac{1}{2} \text{ key units}\]
Effort Component Weights
Triad Interaction Weights
Adjust penalties
\[p_{triad} = {k_1 \times p_{key,1} \times ( 1 + k_1 \times p_{key,2} \times ( 1 + k_3 \times p_{key,3}))}\] \[p_{fingerkey} = {w_0 + w_{hand} \times p_{hand} + w_{finger} \times p_{finger} + w_{row} \times p_{row}}\] \[p_{thumbkey} = {w_0 + w_{hand} \times p_{hand} + w_{thumb}}\]
Penalty Weights
Hand Penalty \(p_{hand}\)
Finger Penalty \(p_{finger}\)
PinkyRingMiddlePointer PointerMiddleRingPinky
Row Penalty \(p_{row}\)
3 Above
2 Above
1 Above
1 Below
2 Below
3 Below
Adjust stroke path
\[s_{triad} = {f_{hand} \times s_{hand} + f_{row} \times s_{row} + f_{finger} \times s_{finger} }\]
Hand Combination Weight \(s_{hand}\)
Both used, not alternating
Row Combination Weight \(s_{row}\)
Downward progression, with repetition
Upward progression, with repetition
Some different, not monotonic, max row Δ 1
Downward progression
Some different, not monotonic, max row Δ downward >1
Upward progression
Some different, not monotonic, max row Δ upward >1
Finger Combination Weight \(s_{finger}\)
Double inner roll
Repeat one
Single inner roll
Single outer roll
Double outer roll
Same finger
Alt hands
Same key advantage

Keyboard Corpus \(e\) \(e_{finger}\) \(e_{thumb}\) \(b_{finger}\) \(b_{thumb}\) \(p_{finger}\) \(s\) ?