The current implementation of espXYToRgbColor() divides the already-normalized XYZ values by 100.0f before the XYZ→sRGB matrix multiplication.
This scales X, Y, Z down by a factor 100 and therefore makes all RGB output ≈100× too dark.
// current code (snippet)
X = X / 100.0f;   // <-- should be removed
Y = Y / 100.0f;   // <-- should be removed
Z = Z / 100.0f;   // <-- should be removed
r = (X * 3.2406f) - (Y * 1.5372f) - (Z * 0.4986f);
...