DCamProf news archive
Main DCamProf page.
Version 0.10.5, changes:
- Improved extreme colors handling, which should solve problems with artificial colored lights (disco lights etc), as usual in the blue/purple range.
-k parameter to make-profile command to control
compression of extreme range values.
- Added data file for CC24 produced after November
Version 0.10.4, changes:
- Added new command si-render, which is
used to render a normal RGB TIFF from a spectral image. This can be
used to test differences between observers and CATs, but also render
"virtual raws" (in TIFF format) if you have camera SSFs. Those files
can then be processed by test-profile.
- Added "KeepLightness" option to Curves look operator if you want
to avoid that a hue adjustment realized with curves affects
lightness as side effect.
- Fixed dual-illuminant rendering bug in test-profile.
- Don't test glare in make-profile when camera SSF is used.
Version 0.10.3, changes:
- Remade glare handling in testchart-ff code, works much better
now. The approach is different and more
robust, matching glare
in reference values instead of linearizing camera raw values.
- Now possible to do flatfield and glare matching directly in
the make-profile command using the
- Added target layout files for both CC24 and the ColorChecker SG
which are used with the new glare matching feature.
- Added reference files for the ColorChecker SG, two versions, one
for pre November 2014 and one for newer targets.
- Added a note that X-Rite changed their formulas (colors)
slightly for their ColorCheckers in November 2014. Be careful to
use a reference that matches your target!
Version 0.10.2, changes:
- A few improvements of the tone reproduction operator, including
one important (the shadow over-saturation fix):
- Fixed shadow over-saturation, mostly affecting dark blue
colors. The fix included adding a chroma rolloff to the shadow
saturation boost, so the tone reproduction configuration has
expanded with three more parameters.
- Limit high chroma desaturation to the inverse of the
contrast-related base chroma scaling (as it does not make sense
to reduce chroma from original).
- Special handling of the deep blue range: decrease chroma
scaling faster and more than other colors.
- Adjusted luminance weight tuning for high saturation
blues. Now it only affects blues (not reds) and with a stronger
- Test-profile can now process a provided
tiff image, which can be useful when designing a look.
- Test-profile's built-in test gradient is slightly different due
to a code cleanup / simplification.
- Included a
nil-profile.json in the data-examples
directory, useful when processing test images via test-profile when
Version 0.10.1: hotfix for a rolloff bug in the tone reproduction
operator causing oversaturated skies among other things.
Version 0.10.0, changes:
- Some rework to better handle extreme value range ("out of
gamut"). This makes profiles perform much better in scenes with
"extreme" colors such as narrow band artificial lights (typical in
- Out of gamut values in the colorimetric base profile are no
longer clipped, but instead compressed into gamut (some minor
residual clipping can be left).
- DNG profile specific LUT matrix to
avoid clipping in the DNG profile pipeline.
- Improved gamut compression algorithm in the tone
reproduction operator. This is still the only user-tunable
aspect of gamut compression.
- A whole new section in the documentation that describes
handling of extreme colors.
- As a side-effect of the extreme value handling, weighting
behavior unfortunately had to be changed so this version doesn't
just add features, it changes behavior too.
- No longer possible to affect L/C/h weighting for matrix
optimization, the reason being that it really did not have any
strong or predictable effect (eg best result is had with no
- Now possible to limit the matrix value range (
typically used to limit blue channel subtraction to minimize the
strength of gamut compression required. This can have a strong
effect, use with care. Still the default value is set to -0.2 to
avoid generating unstable matrices on problematic cameras. Those
cameras will then per default render blues too light, but it's a
tradeoff. Read more in deep
- Max acceptable L/C/h DE range can now be specified for the
LUT, which makes it easier than before to get desired relaxation
- The regularization parameter (
-l) is no longer what
it was, now it's used for LUT DE range specification. The old
behavior doesn't have any use as the thin plate splines are now
anchored to the gamut limit and regularization would relax
anchors too which would break gamut compression. Relaxation can
be achieved with the normal DE relax parameters.
- The weighting documentation has been
rewritten to match the new behavior.
- If no weighting parameters are specified to make-profile the new
default is now automatic "suitable" amount of relaxation. The
purpose being easier to use for beginners, and really the old
default with no relaxation at all only makes sense for testing, not
- Some adjustments to the neutral tone reproduction operator:
- Channel luminance is evened out a bit for ultra-high
saturation colors with low green content. This specifically
makes deep blues a bit lighter, can be observed in the CC24 C01
deep blue patch. This is a bit less accurate but improves
- Minimize "fried egg" effect on sunsets by sacrificing some
hue stability in red-orange-yellow rolloff (near-clipping reds
become a bit more orange than before).
- Perceptual RGB clipping to minimize color shifts while
retaining saturation. Previous version had some color shift
- Avoid over-saturating ultra-high saturation colors.
- Overall better gradient behavior on rolloff towards
whitepoint of high saturation colors.
- Now possible to adjust the reference values of a target using a
JSON configuration file (
-a to make-profile). This allows
for powerful color corrections or subjective adjustments on the
colorimetric base profile, as a complement to optimization weighting
and the look operators.
- Fixed various clipping bugs that could show as problems in
extreme color ranges.
- LUT table indexing/naming was broken in the native profile
format. I've fixed this now when format compatibility has been
broken anyway due to new weighting/compression.
- When outputting a DNG or ICC profile directly from make-profile
it's now possible to also provide a tone-curve using the
- The maximum chromaticity is now limited to the union between
locus and ProPhotoRGB. Gamut compression takes place in the
colorimetric stage to enforce this with as little clipping as
possible. This might seem as a limitation, but profile formats are
already a bit limited in this regard and cameras (and color models)
are not really up to the task of handling colors accurately
in that extreme range. Focus is instead to produce smooth gradients
etc to get "good looking" results in this range, rather than trying
to achieve accuracy which is a lost cause anyway.
-g parameter to make-dcp and make-icc. With that
you can choose a gamut compression configuration without having to
write one in the tone reproduction operator configuration file.
- Make-dcp will now per default embed the special LUT matrix to
avoid clipping issues, instead of the normal forward matrix (if it's
a LUT profile). If you want the normal forward matrix embedded
- The mild compression made in the colorimetric stage actually
makes the base LUT 3D. The difference from a 2.5D LUT is very tiny
though so make-dcp still makes 2.5D HueSatMap per default. A 3D LUT
can be enabled with the
- Added RGB channel limit configuration to gamut compression
algorithm for finer control of the result.
- Made it possible to provide custom matrices for gamut
compression (that is if you want to specify something else than
"sRGB", "AdobeRGB" or "ProPhotoRGB")
-m parameter of make-profile to import all
three matrices instead of just the color matrix. If you want to
import the color matrix only
-p is used instead.
- Make-profile now prints patch matching reports per class (if the
target is split into classes). This is useful when tuning weights
- Test-profile command will now auto-add (unless -T) Adobe's
default tone curve to DNG profiles lacking it, just like ACR does.
- Test-profile now prints clipping stats when test gradient is
- You can force-exclude the DNG profile LookTable in test-profile
- While the ICC LUT generator in itself hasn't changed much, the
improved extreme value handling means the ICC LUT generator
generally no longer needs to make up values and apply smoothing.
- Fixed JSON spectrum scale parameter parsing bug.
- A number of new gamut files can be generated for plotting
(showing LUT and matrix coverage in a chromaticity diagram).
Version 0.9.13, changes:
- Fixed clipping bug in tone reproduction operator.
- Reworked gamut compression, it works slightly differently now
and the configuration is moved away from look operators and instead
a global setting.
- Added plot data for matrix only
target-mtx*.dat. These can be useful when making
a matrix-only profile, or specifically targeting matrix optimization
with various weighting options.
- Made more elements of the native profile format optional, to
make hand-edits simpler.
- Now the
-m make-dcp parameter (copy illuminants to
avoid Adobe-style WB shift) will convert a single-illuminant profile
to dual-illuminant if the WB profile is dual-illuminant. This is
needed to make a perfect WB match.
Version 0.9.12, changes:
- Improved smoothing of out-of-gamut entries of ICC LUT profiles,
especially when a curve is embedded (it didn't work well before).
-x parameters to make-target
command for more flexible control of which patches to include and
exclude when merging patch sets.
Version 0.9.11, changes:
- Hopefully the bad stuff in the 0.9.8 - 0.9.10 releases should be
out of the way now.
- Extended gamut compression configuration with a limiter to make
smoother transitions into clipping. Vital to render good sunsets.
- Fixed tone reproduction operator clipping bug that was
introduced in 0.9.8.
- Replaced 90,30,15 DCP LUT division default with 90,30,30 as the
former was a bit too low density for the neutral tone reproduction
- DCamProf DNG profiles with the tone operator indeed becomes
quite large (about 1.5 megabytes), but this high resolution is
required to properly counter-act the negative effects of the DNG
curve over the whole range. If it was possible to apply a curve
in the LUT itself (like it is for ICC) it could be
smaller. Don't blame me.
Version 0.9.10, changes:
- Added gamut compression feature to look operators.
Known serious bug: I've become aware that there are some pretty
severe issues with the neutral tone reproduction operator and indeed
this new gamut compression feature around the sun in sunset
pictures, due to that the transition into clipping does not work
well. I'm looking into fixing this and will release a new version as
soon as possible. Linear profiles are unaffected.
This bug has been introduced sometime in the last versions, so until
I've fixed this I recommend using
version DCamProf v0.9.7.
DCamProf is new software and may contain serious bugs like this that I
have missed in my testing. If you discover a bug like this I'm very
grateful if it's reported back to me so I become aware of it and can
Version 0.9.9, changes:
- Refinement of the neutral tone reproduction operator adjustment
made in 0.9.8: now there is a mix between an RGB-HSV curve and pure
luminance curve for optimal perceptual look between low saturation
colors (RGB-HSV luminance) and high saturation colors (pure
- This mix can be adjusted in the via the tone reproduction
operator configuration. If you have a configuration file from
previous versions you need to add a "Curve" section, see the
example file to get the default values.
- Can now directly parse IT8.7/2 CGATS text format, which you can
get with Wolf Faust's IT8 targets for example.
Version 0.9.8, changes:
- Adjusted neutral tone reproduction operator to get better tone
separation of high saturation colors. Look change of normal
saturation colors is minimal.
- Fixed parallelism bug in ICC LUT code causing slightly varying
results from run to run. This is non-critical, no need to
- Abort instead of just warn if transfer function is missing when
it's expected to be there (minimizes risk of doing mistakes in
Capture One workflow).
Version 0.9.7, changes:
- Yet some reworking of the ICC LUT code to fix bad shadows.
- When extracting tone curves from transfer functions, tiff-tf
will now also compensate non-zero starting points (unless it's a big
offset, then it's considered a part of the curve design and not
compensated). This is only a "mathematical cleanup", won't have
visible effect on profiles so you don't need to re-generate.
- You can now run
dcamprof -v to get the version.
Version 0.9.6, changes:
- Fixed critical ICC LUT bug which caused bad shadows with the
neutral tone reproduction operator.
Version 0.9.5, changes:
- Smarter illuminant copying when using the
- Exclude lightness (or chromaticity) from CIEDE2000 comparison in
LUT generation when using
-l with negative parameters
(make-profile). This increases the relaxation effect a little.
-E flag to match-spectra to force spectra as
- I've now written a
article of how to make profiles using DCamProf. It's supposed to
complement the reference documentation found on this page.
Version 0.9.4, changes:
- Reworked ICC LUT rendering, especially considering out of gamut
values to minimize artifacts for extreme white balance settings.
- Fixed critical icc2json Lab LUT bug (didn't work at all in
- Fixed so make-dcp now embeds linear curve per default again, as
-m parameter to make-dcp which can be used to
avoid avoid white balance shift in Adobe
Lightroom when you change from an old to a new profile.
- Slight adjustment of test-profile illuminant handling and showed
- Updated broken SSF database link on this page.
Version 0.9.3, changes:
- The neutral tone reproduction operator highlight roll-off can now
be tuned differently per hue, which for example can be used to apply
a longer roll-off on skin-tones and shorter one landscape skies in
subjective profiles. The bundled look operators example has been
updated showing its use.
- Minor adjustment to the neutral tone reproduction highlight
- It's now possible to extract tone curves through transfer
function comparison using the tiff-tf command. This can for example
be used if you want to extract a tone curve in a Capture One
- Integer curves (as transfer functions are) now get their
truncated values reconstructed per default.
- Added another JSON format for tone curves, so you can specify
splines with any gamma. This can be useful when you design a curve
inside the raw converter using its curve tool. If you know what
gamma it's using and the coordinates are retrievable you can convert
it to a JSON format tone curve and use it in your DCamProf
- Now possible to cascade tone curves in make-icc and make-dcp
- Further updates to the ICC workflow
documentation, specifically for Capture One users showing how the
new features can be used to design a profile with the same
properties as native Capture One profiles.
- You can now skip applying the curve directly to the LUT in the
make-icc command, using the
-T flag. This would be used for
raw converters that apply the curve after the ICC profile. I don't
really know if there exists any, but anyway if you would need it you
can now do it.
Version 0.9.2, changes:
- Tested making an ICC profile for Capture One (was a while ago),
and made slight updates to the docs accordingly.
- Improved ICC LUT rendering, which now avoids a "black hole" in
the extreme blue area (caused by XYZ space clipping), which could
cause extreme blues become black.
- The black hole can still be observed in DNG profiles, but
due to the the different LUT design in DNG profiles the blues
are not pushed into that undefined area for real images so I
haven't yet found a reason to fix it there. The black hole is in
actuality no error, it's outside the human gamut and undefined
in XYZ space which then clips to zero.
- Updated basic workflow docs to show the use of the neutral tone
reproduction operator, and some basic LUT relaxation recipes.
- Fixed a minor blending bug in the look operators.
Version 0.9.1, changes:
- The target patch matching reports now also come as
16 bit ProPhoto TIFF images, so you can
by eye see how large the mismatch is. This makes it easier to get a
quick overview of matching performance than just reading pure text
- Now possible to run test-profile without a target (to just get
- Test-profile will in dump mode now output a gradient TIFF
processed through the profile, so you can diagnose LUT
smoothness. This is especially useful when designing a
subjective look to verify that your look operators don't mess with
the smoothness too much.
- The make-dcp command will now test
for hue shift
discontinuity, and will abort (per default) if it detects it.
- Extended look operators functionality with RGB-HSV and RGB-HSL
color spaces, which may work better in various clipping scenarios.
Version 0.9.0, changes:
- DCamProf now supports making DNG and ICC profiles with
subjective looks, as described in the look
design documentation for the make-dcp command.
- This feature is intended for subtle fine-tuning of the
accurate look rather than making "Instagram" type of filters.
- A new section about subjective
looks in the documentation.
Version 0.8.4, changes:
- Now possible to disable lightness (or chromaticity) part of the
LUT when making a profile, using negative relax parameters. This can
be useful when making robust profiles.
Version 0.8.3, changes:
- Reworked tone reproduction operator.
- While code changes are quite large, the principle is the
same as the old one and the result is very similar.
- Smoother transition into clipping, better curve analysis,
fixed "grayness" issue in the shadow areas.
- Some extra focus on tuning for skin tone rendering.
- It's based on the same code as for the upcoming "Perceptual"
curve in the RawTherapee project which I have contributed, with
the help of expert eyes from members of the RawTherapee team.
- Now possible to customize the neutral tone reproduction operator
via a JSON configuration file.
- The tone curve will be dumped to the report directory
Version 0.8.2, changes:
- Added tone reproduction operator support to ICC profiles, that
is same functionality as previously available only for DNG profiles.
- Added a small section in the documentation
about tone curves for matrix-only profiles.
Version 0.8.1, changes:
- Fixed fatal bug in neutral tone reproduction operator
- Added scaling roll-off to avoid over-saturated extreme highlights
in neutral tone reproduction operator.
Version 0.8.0, changes:
- Dropped the -k parameter and instead added a proper tone
reproduction operator to make-dcp command. Now you can
apply a subjective contrast curve without the color shift and
over-saturation of the standard RGB curves. I intend to add the
functionality to make-icc later, but it's not available in this
- The neutral tone reproduction operator provided in this
release is an early release, it's likely I will tune it further
in coming releases.
- Now possible to provide custom curves to make-dcp and make-icc.
- Added a new section on tone curves,
which I think is an important read as tone curves fundamentally
affect color reproduction. The section has several example pictures
that give insight into the effect of tone curves and profiles.
- Changed transfer function parameter -t to -f, as tone
reproduction took over -t (and added -T and -o).
- Common tags like copyright strings and description can now be
set directly from the command line for the make-dcp and make-icc
- Include DefaultBlackRender=none for DNG profiles, to avoid
automatic black-level adjustment in some converters. If you're a
Lightroom user you're probably used to automatic black level
adjustment and may want it, if so provide the -B parameter to
- Fixed bug that caused incorrect parsing of 3D DNG LUTs.
- DNG 3D LUTs can now be plotted.
- make-dcp command now takes three values for the -h parameter,
that is value divisions was added to support 3D LUTs.
- Improved scaling and normalization algorithm in match-spectra
command for better matching.
- Added standard illuminants D55 and D75 to the built-in spectral
- Transposed built-in CC24 data set so it's 4 rows with 6 columns
rather than the other way around (to match Argyll's CC24 layout).
Version 0.7.4, changes:
- Added possibility to adjust chroma of reference values (-k
parameter to make-target, make-profile and test-profile), useful to
compensate look for profiles intended for strong tone curves.
- Changed default: make-dcp now sets a linear curve per default.
Version 0.7.3, a quick update due to some bad bugs introduced in 0.7.2:
- Fixed bug in TIFF flatfield correction that could cause
- Fixed bug causing mix up of -C and -S flags in make-profile and
- Made it possible to totally exclude a class from matrix
optimization by assigning weight zero.
- Made it possible to address class name in exclude list, useful
when patches are named the same in different classes.
- The LUT now takes the CIEDE2000 kL/C/H weights into account.
Version 0.7.2, changes:
- I've added a fairly large section in the documentation which
describes chromatic adaptation
transforms. I think it's an important aspect of profiling if you
make a profile for some other illuminant than D50, so do read it.
- CAT is now enabled per default so the
-C option to
make-target, make-profile and test-profile has now inverted
-S parameter to make-target, make-profile and
test-profile which enables rendering of virtual spectra if spectra
is missing in the target, this generally improves the performance of
the relighting transform.
- For quick workflows you can now directly write .dcp and .icc
from the make-profile command. To support this the
option for camera name was renamed to
-n to work in all
- I've done a lot of testing concerning glare-related measurement
errors, resulting in some new recommendations in the documentation.
- Added linearization feature to testchart-ff, using
-L flag, which in some circumstances can reduce the
effect of glare.
- Added possibility to add a distributed step wedge to
self-generated targets, using the
Version 0.7.1, changes:
- Added new
command average-targets, useful if
you want to reduce noise in measurements.
- Added new
command match-spectra, useful for
comparing spectra of different targets.
- Added possibility to flatfield correct TIFF files directly with
the testchart-ff command, useful for targets that aren't speckled
with white patches.
- Now read spectra isn't resampled when written to .ti3 unless
-C option to make-target, make-profile and
test-profile which causes the XYZ D50 reference values to be
calculated via CAT02 from calibration illuminant values, rather than
recalculated directly for D50 from spectra, useful if you want to
the profile to model color appearance differences between illuminants.
- Replaced CAT02 with Bradford in cases CAT is used for
"relighting" rather than "perceptual" results, as Bradford generally
has better performance for this particular task while CAT02 is
better at perceptual modeling.
nve-lutd.dat, a higher density grid useful when
zooming in plots of the native LUT.
Version 0.7.0. Changes:
- Added -b and -B flags for white balancing control in
make-profile and test-profile.
- New default: now make-profile will per default re-balance the
target reference values so that the whitest patch is considered 100%
neutral even if it isn't. This is because most users will expect
color-picking the white patch will make up the perfect white balance.
- Added -x parameter to make-profile so you can provide a list of
patches to exclude from the target, intended to be used when you're
doing several re-generates testing to remove problematic patches.
- Added a new section "white balance and
camera profiles" which describes the relationship between your
raw converter's white balance and the camera profile, it's a good
- Added new command "make-testchart" that generates an Argyll .ti1
used to make a real test target chart using Argyll's printtarg and
an inkjet printer.
- Added new command "testchart-ff" which is used for compensate
uneven light in a test chart photo.
- Patch labels are now kept when processing .ti3 files, is shown
in patch matching reports and can also be plotted, like this in
'target-xyz.dat' pt 7 lc rgb var,
'target-xyz.dat' using 1:2:3:5 with labels offset
- For convenience make-target no longer requires assigning a
class name when reprocessing .ti3 files.
Patch release 0.6.4. Fixed overall stats bug. Added possibility to
show matrix result only on make-profile (-L), useful when doing
repeated runs tuning weights for a matrix-only profile. Minor
adjustment of matrix optimizer. Updated make-profile weighting
documentation with some more tips.
Patch release 0.6.3. Fixed a plot bug introduced in 0.6.2. I also
adjusted whitepoint preservation handling, now the LUT (per default)
excludes patches close to the whitepoint, as the matrix is
whitepoint-preserving (neutral patches already optimized for as good
as possible) it doesn't make sense to stretch there. Added sign to
error tables on lightness and chroma so one can see if the color is
too light or dark or too saturated or desaturated. Added two more
error vector plots.
Patch release 0.6.2. Added ICC support for test-profile, including
transfer function reversal, and also some ICC plots. Now ICC support
is as good as DCP support.
Patch release 0.6.1. Fixed various ICC bugs, added possibility to
provide transfer functions which means Capture One ICCs can now be
generated. It's now also possible to make LUT ICCs. Test-profile
for ICC is still missing, but otherwise ICC support should be
complete. To read transfer functions a new dependency was added,
libtiff. The native LUT now applies whitepoint preservation.
Here's 0.6.0. It's now possible to make ICC profiles
make-icc), matrix-only for linear pipelines only to start
-L flag must be enabled). Added possibility to add a
tone curve when making a DCP. Extended profile format (can't use old
profile.json files, sorry). Added
json2icc commands. Added -I parameter
make-target so you can separate RGB and XYZ illuminants
also in that command. Increased parsing flexibility for Argyll-like
files (various CGATS), should handle patchtool files better.
Patch release 0.5.4. Fixed bug in RGB/XYZ levels when merging several
targets, fixed a few Windows compile bugs. Now DCamProf supports
emissive spectra in the target files (added SAMPLE_TYPE column, "R" or
"E"). When merging targets the special patch "illuminant" and "white"
(new) is now always kept even if there are nearby patches.
Patch release 0.5.3. Added possibility to read Argyll SPECT files
(produced by Argyll's
illumread) as illuminants. Now it's
possible to make dual-illuminant DCPs directly with
make-dcp command. When running the command without
parameters there is now a full list of exif light sources and their
temperatures, a useful list when choosing a suitable calibration
illuminant. Added a new command
txt2ti3 to convert raw text
files with spectral data to .ti3 that
make-target can read,
useful when getting spectral data from various third-party sources.
Patch release 0.5.2. A slight adjustment of observer remapping in
make-dcp and some update of observer documentation.
New patch release 0.5.1. I hadn't tested on Lightroom properly. It was
shown that Lightroom cannot handle too high precision on matrix
rationals and it doesn't like if the standard observer WP is different
from 1931_2. I have now changed default observer to 1931_2 as it's an
easier to use default, and made an automatic remapping in the make-dcp
tool to handle the case when a different observer was used during
Here's the first release of DCamProf to the public (0.5.0). This is an
early one, and while you can make camera profiles with it it's still in a
"hackish" state, probably some bugs left and certainly slow. There's
lots of silly loops over loops here and there. My excuse is that I've
been focused to get things working first rather than get stuck
optimizing for speed. As usual with these kind of projects it has
taken far more time than I initially planned, but then it's far more
Copyright © 2015 – 2016 — Anders Torger