app: adding unit testing for the non-legacy layer modes too.

There were just too many possible cases, so I created a script
tools/compute-layer-mode-digests.py which I am going to commit in the
`gimp-2-10` branch.

These are the digests generated this way with GIMP 2.10 with SSE2.
"Color Erase" testing is disabled currently because it is very broken
(digests are different at each export!).

Some modes (Anti Erase and Replace) are not introspected, therefore they
cannot be tested. Pass-through is not tested right now because it
requires special-casing and a little more thought.

"Behind" is not in the list of layer modes in the Layers dockable, and
it could not be set in GIMP 2.10 API, but it could be set in GIMP 3.0
API. So I don't have GIMP 2.10 data. Let's use GIMP 3 data as our
baseline for this blending mode testing, from now on.
This commit is contained in:
Jehan 2024-09-17 22:36:30 +02:00
parent c2a6797c54
commit 4575aaaed5
5 changed files with 648 additions and 21 deletions

View File

@ -1,7 +1,9 @@
# We do not test algorithm correctness but algorithm stability: an old # We do not test algorithm correctness but algorithm stability: an old
# XCF should look the same when loaded with a newer GIMP. # XCF should look the same when loaded with a newer GIMP.
# #
# Current hashes were made based on renders in GIMP 2.10. # Current hashes were made based on renders in GIMP 2.10. To check how
# they were made, look at the script tools/compute-layer-mode-digests.py
# in `gimp-2-10` branch.
# #
# In other words: DO NOT just change a hash to make the test pass. If # In other words: DO NOT just change a hash to make the test pass. If
# one of the test starts failing, this is very bad as it will break # one of the test starts failing, this is very bad as it will break
@ -32,8 +34,8 @@
# 3. Export as data in "Contiguous" configuration. # 3. Export as data in "Contiguous" configuration.
# 4. Call sha256sum on the data file. # 4. Call sha256sum on the data file.
# 5. The returned checksum is your reference. # 5. The returned checksum is your reference.
layer_modes = { legacy_layer_modes = {
'addition-legacy' : { 'addition-legacy': {
'auto:auto:auto': [ '5294fa2036be51d218a6c980cb9cff149c9b3f6934d1de1fcc2cd0785ce29a05' ] 'auto:auto:auto': [ '5294fa2036be51d218a6c980cb9cff149c9b3f6934d1de1fcc2cd0785ce29a05' ]
}, },
'burn-legacy': { 'burn-legacy': {
@ -99,7 +101,7 @@ layer_modes = {
} }
libapplayermodeslegacy_sources = [] libapplayermodeslegacy_sources = []
foreach mode, _ : layer_modes foreach mode, _ : legacy_layer_modes
libapplayermodeslegacy_sources += [ 'gimpoperation' + mode.replace('-', '') + '.c' ] libapplayermodeslegacy_sources += [ 'gimpoperation' + mode.replace('-', '') + '.c' ]
endforeach endforeach
@ -111,3 +113,17 @@ libapplayermodeslegacy = static_library('applayermodeslegacy',
cairo, gegl, gdk_pixbuf, cairo, gegl, gdk_pixbuf,
], ],
) )
# These modes do not make additional source includes and are only listed
# for unit testing.
dup_legacy_layer_modes = {
# "Normal (legacy)" is in fact the same as "Normal" in "auto:union:perceptual".
# I still test it separately in order not to miss any bug.
'normal-legacy': {
'auto:auto:auto': [ '298ded67bad7508caf29eb2718712ecbfece87592e6e4b006e460a03070a0ebf' ]
},
# A.k.a. "Old broken Overlay": this is the same as softlight-legacy and is not visible in the GUI.
'overlay-legacy': {
'auto:auto:auto': [ '0e2dd784a05cfe23bfcb01098d9a1145ec2163a36b1435bddc58e04a071e3c51' ]
},
}

View File

@ -4,7 +4,7 @@ if not meson.can_run_host_binaries()
endif endif
pycode = '' pycode = ''
foreach mode, submodes : layer_modes foreach mode, submodes : legacy_layer_modes + dup_legacy_layer_modes
op_name = 'gimp:' + mode op_name = 'gimp:' + mode
op_enum = 'Gimp.LayerMode.' + mode.replace('-', '_').to_upper() op_enum = 'Gimp.LayerMode.' + mode.replace('-', '_').to_upper()
pycode += ' "@0@": {\n'.format(op_name) +\ pycode += ' "@0@": {\n'.format(op_name) +\

View File

@ -21,24 +21,83 @@ libapplayermodes_normal = simd.check('gimpoperationnormal-simd',
], ],
) )
libapplayermodes_sources = files( # The layer modes with their own operations.
'gimp-layer-modes.c', layer_modes_own_ops = {
'gimpoperationantierase.c', # This mode could not be tested with GIMP 2.10. These are the digests
'gimpoperationbehind.c', # for GIMP 3.0.
'gimpoperationdissolve.c', 'behind': {
'gimpoperationerase.c', 'auto:union:linear': [ '99abf5f6be3dd50821928bb1a2231aeada73e2a62e8957430c1b5d64a9df313c' ],
'gimpoperationlayermode-blend.c', 'auto:union:perceptual': [ '399b9f5bd1fcd649c2adf2d28cb956b6004f7bbdaada2e7fab12e0d8eb6c956a' ],
'gimpoperationlayermode-composite.c', 'auto:clip-to-backdrop:linear': [ 'f27e055965b00bd0ed2b7ff741392a2bb0e5768fac7767305b5616641f78369f' ],
'gimpoperationlayermode.c', 'auto:clip-to-backdrop:perceptual': [ 'efd45a0ebd42e558a738219a071a533e74dc33daf590368a7e8304644af6f12a' ],
'gimpoperationmerge.c', 'auto:clip-to-layer:linear': [ '568abcc056b3d5144792aeabf3ec90640d496cebfb80aca613f132d7c2683606' ],
'gimpoperationnormal.c', 'auto:clip-to-layer:perceptual': [ 'b513f1a1082de8c044df87b5d5f7c34237a166baad9b5cadc9f3a3ea0ae78507' ],
'gimpoperationpassthrough.c', 'auto:intersection:linear': [ 'aa6c1a8a5c3aa97468d66a46c2b2abcc04515f45daab65248b13762c8759e74c' ],
'gimpoperationreplace.c', 'auto:intersection:perceptual': [ '2993e3c0fc6ae1045f34a187f00fbee02ef32352d88f5b2a2c22a0b1fcb76758' ]
'gimpoperationsplit.c', },
) 'dissolve': {
'auto:union:auto': [ 'f12d0b0c50804ec9fb109a96d40e68b4f9dba539744dda9c2a288d6579015b0f' ],
'auto:clip-to-backdrop:auto': [ 'b485d26b4733c3bf88bbfd3b57aece5a76d7b0c606e4fc884401bf63d88630dd' ],
'auto:clip-to-layer:auto': [ 'cc4ae651f96af9cfe8ed8e44aa412653e06aa4ac191f5b43909b9629125bce2b' ],
'auto:intersection:auto': [ 'ff90eab452e86b87f63e46b6812399ad3858530fdb84c38aea98b96fb34a0129' ]
},
'erase': {
'auto:union:linear': [ '64f9bd0c9a3262fac02a17b829b7d0d43c4c1d52421a8936590288160125b630' ],
'auto:union:perceptual': [ '007bf35c2507c81dfe66fbea6aabfcad1ae3bf3708588fca7bd95f2d58ef596a' ],
'auto:clip-to-backdrop:linear': [ '8453fd393160cb79f649a3af363cf844c2502ea080c4b2e836cd79830609c0bf' ],
'auto:clip-to-backdrop:perceptual': [ '8453fd393160cb79f649a3af363cf844c2502ea080c4b2e836cd79830609c0bf' ],
'auto:clip-to-layer:linear': [ 'bf0b5674596be2c231f54884b047e62d5fd97513b2b4ef5bd24d3470ed49c625' ],
'auto:clip-to-layer:perceptual': [ 'bf0b5674596be2c231f54884b047e62d5fd97513b2b4ef5bd24d3470ed49c625' ],
'auto:intersection:linear': [ '927369a9f1ba06dadd4a1a61a76e54d95f2c3943d74f93009da7486b4ad03e47' ],
'auto:intersection:perceptual': [ '927369a9f1ba06dadd4a1a61a76e54d95f2c3943d74f93009da7486b4ad03e47' ]
},
'merge': {
'auto:union:linear': [ 'd196d3110b9448ed466e91dda68b5b7869d90b6be7da03ddfeb05d5ec4479702' ],
'auto:union:perceptual': [ '0c95741a7c0841ebb9303ae54095c74e81d3a970db5790fccdcc95c2149e76d0' ],
'auto:clip-to-backdrop:linear': [ '312cf51c459b750fa3ae95b2ba0695e09bc443c1b99663921a34e0471b4c7135' ],
'auto:clip-to-backdrop:perceptual': [ 'fe7510bbe3f92b65884a3d47305308d6cf1dd281a6ca00cb0b2ce47356968442' ],
'auto:clip-to-layer:linear': [ 'bb914713756664493e944c536ed70d34dbff4be29574a9e2c6e09791e2255736' ],
'auto:clip-to-layer:perceptual': [ 'bb914713756664493e944c536ed70d34dbff4be29574a9e2c6e09791e2255736' ],
'auto:intersection:linear': [ 'cf85185590c211a57d78ac9fab60909e919ee37c094cf0c4590155fbbe332679' ],
'auto:intersection:perceptual': [ 'cf85185590c211a57d78ac9fab60909e919ee37c094cf0c4590155fbbe332679' ]
},
'normal': {
'auto:union:linear': [ '890159ff6ac92cac90b244ee21cb6765c0ff6a8a6a364f6e6f071f61702ef874' ],
'auto:union:perceptual': [ '298ded67bad7508caf29eb2718712ecbfece87592e6e4b006e460a03070a0ebf' ],
'auto:clip-to-backdrop:linear': [ 'db17777b641a8ec888adb31ac6d19e687dea9b993a524ffe4ec3367223ef9ad0' ],
'auto:clip-to-backdrop:perceptual': [ 'b1ebf537f21697cceb61ddca2e9f7072611de187392b6a4ebf82ad8d8d6d4e03' ],
'auto:clip-to-layer:linear': [ 'bb914713756664493e944c536ed70d34dbff4be29574a9e2c6e09791e2255736' ],
'auto:clip-to-layer:perceptual': [ 'bb914713756664493e944c536ed70d34dbff4be29574a9e2c6e09791e2255736' ],
'auto:intersection:linear': [ '3153c3dba57d3ea399e7d30e80152df275b6516abb5dfd7839d30fb631b08af7' ],
'auto:intersection:perceptual': [ '3153c3dba57d3ea399e7d30e80152df275b6516abb5dfd7839d30fb631b08af7' ]
},
'split': {
'auto:union:auto': [ '2cb8b9526d2a73d18d77b063e90e13d03d6668cdf0c10a797014f9596fdbf884' ],
'auto:clip-to-backdrop:auto': [ '9f5e737032ade4e044b91c491e49557111896bb89f4da26ca8a45c9c761a5f8d' ],
'auto:clip-to-layer:auto': [ '628577cf8f41bedd40a70886800d5364c928ace7cfee94e4f9c8e14e5e41cc18' ],
'auto:intersection:auto': [ '927369a9f1ba06dadd4a1a61a76e54d95f2c3943d74f93009da7486b4ad03e47' ]
},
}
libapplayermodes_sources = []
foreach mode, _ : layer_modes_own_ops
libapplayermodes_sources += [ 'gimpoperation' + mode.replace('-', '') + '.c' ]
endforeach
libapplayermodes = static_library('applayermodes', libapplayermodes = static_library('applayermodes',
libapplayermodes_sources, libapplayermodes_sources +
[ 'gimp-layer-modes.c',
# GIMP_LAYER_MODE_ANTI_ERASE and GIMP_LAYER_MODE_ANTI_ERASE are
# internal, not introspected and not available as actual layer modes.
'gimpoperationantierase.c',
'gimpoperationreplace.c',
# GIMP_LAYER_MODE_PASS_THROUGH is for group layers only. We'll need
# to special-case this test later.
'gimpoperationpassthrough.c',
'gimpoperationlayermode-blend.c',
'gimpoperationlayermode-composite.c',
'gimpoperationlayermode.c' ],
link_with: [ link_with: [
libapplayermodes_composite[0], libapplayermodes_composite[0],
libapplayermodes_normal[0], libapplayermodes_normal[0],
@ -51,3 +110,518 @@ libapplayermodes = static_library('applayermodes',
gdk_pixbuf, gdk_pixbuf,
], ],
) )
# All the other layer modes hidden behind the "gimp:layer-mode"
# operation.
layer_modes_shared_op = {
'addition': {
'linear:union:linear': [ '435897637dd7eb110b39f45fa5b2c21a7c8580bee815da6cc17d0a29d52b95d9' ],
'linear:union:perceptual': [ '6e2c4130e601d035c1cd51648f62a311a04ba97dd3158537fa3cf12807d81908' ],
'linear:clip-to-backdrop:linear': [ '8abf89a9a0a025e277ceed2c26dae9ae4dfc5967034d0af9eea31a5791e48566' ],
'linear:clip-to-backdrop:perceptual': [ 'ee246412d8f45339ce043993b22033bcd1be8b60da7cfab46c867d9524c21929' ],
'linear:clip-to-layer:linear': [ '53e1b2156d95a6f663205b67c441b6d402c7fb56c7e7d4886959a71ed96015f1' ],
'linear:clip-to-layer:perceptual': [ '8fd6f4fbc26a39d2365d41f52c6c7ee67915a609f854613f0b4e7d14d3e88e5a' ],
'linear:intersection:linear': [ 'e321e8b52f9a29513fb77ca39511c6ff694e3fe25bfabfa741885bdd6b547601' ],
'linear:intersection:perceptual': [ 'e321e8b52f9a29513fb77ca39511c6ff694e3fe25bfabfa741885bdd6b547601' ],
'perceptual:union:linear': [ '8aa19401c7a85397fa571bcab003ccc189d0faf3db04cc2487fcf2607235f1c5' ],
'perceptual:union:perceptual': [ '1b873331014dced89594ebea93416685991e7fece376f2d3ccabf51cc056f1da' ],
'perceptual:clip-to-backdrop:linear': [ 'fb3562b4aa8a6a3176ab67e9e8453fa58da3d99ee6f0ae7eadcb43b060434c66' ],
'perceptual:clip-to-backdrop:perceptual': [ '6c2525c833d8b97154b36699b296e4465f2bd75489678b18b2383870ed1ba545' ],
'perceptual:clip-to-layer:linear': [ '2c55d1f55610054e3dc4304e1af2b48444acc40003ee751151e59e0e4cf32d87' ],
'perceptual:clip-to-layer:perceptual': [ '47fa8065628088dfb3cf4c9e9d39eb0cd9009df4325238aaa8fdb0920ce2faa2' ],
'perceptual:intersection:linear': [ '65ade70a7179df95d853b861609ee807cda91ee12233e7c60e07c3b32ec61489' ],
'perceptual:intersection:perceptual': [ '65ade70a7179df95d853b861609ee807cda91ee12233e7c60e07c3b32ec61489' ]
},
'burn': {
'linear:union:linear': [ '2fdc815da222ac0ff34bf82477cf3e0c34648f148a0d19fe773db0125bb85301' ],
'linear:union:perceptual': [ '21d77c51f8ac0781455d11093a3d19a64b71d1239869c097c4f5418f5dcd5df5' ],
'linear:clip-to-backdrop:linear': [ '562ed7e68b3ab217858c966435f60a8b1aa526a845ba1c9707b7a6ef076bfd5f' ],
'linear:clip-to-backdrop:perceptual': [ '490e837cf4abdf76ed3449c0c90eba4f5d038bd22f89d54e6476d2cb2da53c44' ],
'linear:clip-to-layer:linear': [ 'abf05d4b84279c772a5b64faa0919833d53a972257cd9e61aac11e2c13b0ed4a' ],
'linear:clip-to-layer:perceptual': [ 'af4df044223f8ce9b17f45b50864fb858ba30227781d0d5f362c9a8b341d4429' ],
'linear:intersection:linear': [ '0b067a83fda65a3be65cc663fea6bbb7789896839fc5b6ec0dd762b98b283094' ],
'linear:intersection:perceptual': [ '0b067a83fda65a3be65cc663fea6bbb7789896839fc5b6ec0dd762b98b283094' ],
'perceptual:union:linear': [ '3f768e90e0e968e29a50a0650aa18a74e228923d15ec7e3671826e279ee1aa26' ],
'perceptual:union:perceptual': [ 'cde2a19501a3efb467b64628c63d3c1be31291010593e01d0baf887d2cfea293' ],
'perceptual:clip-to-backdrop:linear': [ 'f0ed2f2bb5f264e1aeaf8ba74a24fb7b9553366c5580f47638eaf4b970aeadf6' ],
'perceptual:clip-to-backdrop:perceptual': [ 'ffba37ec62aabf0635d100fe6493fc8e3d82cb622de7acb84d7361197626bf1a' ],
'perceptual:clip-to-layer:linear': [ 'fa0f74236e29e0dcecb86f7b7362efe551647135edcbabdb717fbeff38729fa4' ],
'perceptual:clip-to-layer:perceptual': [ '07c5cacde86079a98c112d24d9539305516a8841b4087c839e94694809356d1e' ],
'perceptual:intersection:linear': [ '60a5c89204018e2babf613e63291772a6292e98b69891d3f56e4655665180033' ],
'perceptual:intersection:perceptual': [ '7814522fa601932e6caca971801cfb1994da576843dd84831514c8cbf82ec453' ]
},
# 'color-erase': {
# 'linear:union:linear': [ '68d0dd2283cc48dac525c2af868d96f138cbf66c6c580cc26473d1398d32b201' ],
# 'linear:union:perceptual': [ '7c1defdc383de6ed2c930965071f9de24a449861c83624955dd42b32ed98f7f8' ],
# 'linear:clip-to-backdrop:linear': [ 'e1adc225888b3636981995fd55b1be29fb6be53acb57e507212e176783b927fd' ],
# 'linear:clip-to-backdrop:perceptual': [ '486057ff086201390c6639f3275f8b74e5094916308a59a47d5fffbdabdfc070' ],
# #'linear:clip-to-layer:linear': [ 'f46b4af489c429ebd9d5ae78b10389dd2554638d286c855565473014b8c8f9ef' ],
# 'linear:clip-to-layer:linear': [ '8d981b33fa7fc5e40801a2401febc5abc6f5c6ad2f269293f076d60193fe3e76' ],
# 'linear:clip-to-layer:perceptual': [ 'ab3f620146d5714393c9f22195cf1f37d9e2ec291bd8515c178a8d018139ea00' ],
# 'linear:intersection:linear': [ 'f06eb75ce01350a234837dd5eacbc660d62bc8977e399943afc68d8ee2c4c8b4' ],
# 'linear:intersection:perceptual': [ '37eb39ad5d10b01dc1e6164cc66bc79ddeee4dec410da71a9cc263173738b395' ],
# 'perceptual:union:linear': [ 'a4bae8ab48cab0be257c68216f88a152476012feddbc1c13c5312744dcc66995' ],
# 'perceptual:union:perceptual': [ 'd2672b8761bac4064916f6219eeb434c1bc4abe8dd23ac98912cfbbd061fd6f1' ],
# 'perceptual:clip-to-backdrop:linear': [ 'b5b1c824f8300644152e4398ad92138fd4a828c2e6d10a549b2de8085a734c77' ],
# 'perceptual:clip-to-backdrop:perceptual': [ 'd008ad97f2d774ed11f6f6d2750768bd3c9203d142d59d2c659d40147e5bfcaa' ],
# 'perceptual:clip-to-layer:linear': [ '4da54f669a1cc714ae68c833abc9663d3bd5ef2b45e5165ce98d60a452932309' ],
# #'perceptual:clip-to-layer:linear': [ 'e05493ff935468225cf0a8b442c34e66b1fd5dd4db6d1d28d9633464e1e8e72e' ],
# 'perceptual:clip-to-layer:perceptual': [ '833d559bda30761bffe8bbc26de23257ec74f390c092cd10afb8c463fcd3dd3a' ],
# 'perceptual:intersection:linear': [ 'a01bcb4a51078de82636fb32fd2d84f817795ac9207c6fd12b47b17e8ac73772' ],
# 'perceptual:intersection:perceptual': [ 'cf2b39fd17deef94f3c70a451925c3913e5662adaac9911e33dedf248dae0b30' ]
# },
'darken-only': {
'auto:union:linear': [ 'a8f4deea7406d00162eaf56bc94923a325345098f611321ca31a77e87a23b516' ],
'auto:union:perceptual': [ 'b8ef1a01bbbafd980c2cd1070dcd0382f6f7f2c4a5324d64ae28e00c356baa57' ],
'auto:clip-to-backdrop:linear': [ 'af606b3796c0493e9ec46d74f9f53ffd6a14726fd08dfc0a5f7dca938b2ac3c3' ],
'auto:clip-to-backdrop:perceptual': [ '5718031bb9111fe584ff04baa699edc8e6b1ea4044f362fe02784574ebb3e28e' ],
'auto:clip-to-layer:linear': [ '32ea45bc7c34d35b7083aeddf76b8ac5ba6aa0da4d27ffafc1ceb7c290fa8dfe' ],
'auto:clip-to-layer:perceptual': [ 'bd501c47d508e7796c84bf42cca01511decd1ec28d113b66dde4bf737ec0860b' ],
'auto:intersection:linear': [ '64033c5b99938528677500f44a6cbcfb05634f7f3d356c59b370b8383a8cdb7a' ],
'auto:intersection:perceptual': [ '64033c5b99938528677500f44a6cbcfb05634f7f3d356c59b370b8383a8cdb7a' ]
},
'difference': {
'linear:union:linear': [ '0b270b40793e1cbdd78c268122126af7aed4a41277f5d322c89762e1a26af19c' ],
'linear:union:perceptual': [ 'fb53ff7f86052b9b9ae60590c0bf3c720d6ba94dd15d6f768ec0afbd7372658b' ],
'linear:clip-to-backdrop:linear': [ '57386435f5df79c64a6c70a0b6d08bbdc00df9b388695d2257be6b38c83b5291' ],
'linear:clip-to-backdrop:perceptual': [ '9e1021dd5b4c08bee8fdc0477272d2be37efad22ff83bc571f1800894ad4071b' ],
'linear:clip-to-layer:linear': [ 'cd9cce8e6681381eb00d5f6033b7de064c99f4285432b4689fbc5ecc9d4d3c79' ],
'linear:clip-to-layer:perceptual': [ 'c54ece64a22e17ed3ed411d8210a714956021e64452274f11b64f37d612c13a8' ],
'linear:intersection:linear': [ 'b96174610d5dad47ed0af5fb0ddd3cf61e8f853dcb3f179090611c873e734a95' ],
'linear:intersection:perceptual': [ 'b96174610d5dad47ed0af5fb0ddd3cf61e8f853dcb3f179090611c873e734a95' ],
'perceptual:union:linear': [ '98080b8a7508c6b773856a459ed4c0e337df8a4d0442dff2ad1e5886b9666d6c' ],
'perceptual:union:perceptual': [ '84f9d07f4c7c05d5fdc2f0a978c211ad1c7fd9404098bb87bc6a5e84ddc3126c' ],
'perceptual:clip-to-backdrop:linear': [ '0165c715fb42f8a46a82894b454797163f9b79904acdd71323e1d34e06f85a52' ],
'perceptual:clip-to-backdrop:perceptual': [ '53ec08bc08efd619f4777b7649c1699bc57ed7995720c73c6c6d7d02c8a9c561' ],
'perceptual:clip-to-layer:linear': [ 'c463e889a4290a81d64704b2b5e7bce2d8f6bb7f17bbd02e5c8dcca7f09921e1' ],
'perceptual:clip-to-layer:perceptual': [ '8d6694db440587ae7e6b114d320d6cc97be0437383979d02a523a000c6748f6d' ],
'perceptual:intersection:linear': [ '66119df983cd69a8544fdedefdf9e0e702d30c5201544de39fab0ed0e814c347' ],
'perceptual:intersection:perceptual': [ '66119df983cd69a8544fdedefdf9e0e702d30c5201544de39fab0ed0e814c347' ]
},
'divide': {
'linear:union:linear': [ '55d7a65d31575696d5250fc76f56478d9e27cd539d78674e50b6c815b82effa6' ],
'linear:union:perceptual': [ '09b0d15d6e365e696e26350e3634ac5a15c2de24aa08b8878e143117a4c0dee1' ],
'linear:clip-to-backdrop:linear': [ '6e26794b74d0c76b83bf981e72e318049e3d439c80a98e217eb1f4ce0d077b8a' ],
'linear:clip-to-backdrop:perceptual': [ 'cc9954c781418d8026c65f0952a9e0749748ba981e6ea22d974d66f4b3474761' ],
'linear:clip-to-layer:linear': [ 'a0fba8f9c4daacf4013ab209bcf75a93e20eb6525d26014ef7ab730303522f2a' ],
'linear:clip-to-layer:perceptual': [ '7d170e5f01c6122e7ec8cef6669bfab645b2e739167e581366572152ec5e5465' ],
'linear:intersection:linear': [ 'b98ec0c8995dca9b9653893ab886231db8a8c95f841d627445eb6db5048a6496' ],
'linear:intersection:perceptual': [ 'b98ec0c8995dca9b9653893ab886231db8a8c95f841d627445eb6db5048a6496' ],
'perceptual:union:linear': [ 'e93231a9f00dfcaee855cd9a7bb37269b4addbae7042c04ec66f2a1991f12d58' ],
'perceptual:union:perceptual': [ '672e9091e41d767bdb839e48ecc731b9bf0e07bebfb8e87744fdd2b328cfeeb6' ],
'perceptual:clip-to-backdrop:linear': [ '3c2102b55412db0e9a389e1464ed5abed04770c163a1c68eb8dcb8d51620ec69' ],
'perceptual:clip-to-backdrop:perceptual': [ '5560a4e8e199d391aef07a0aea1c530926dd984c464d809d6d9ddf7163ccf6b9' ],
'perceptual:clip-to-layer:linear': [ 'a9e1486ae7ea10714684b2e9a35b3a7b4ae38788583a2a04b085f969fbc5e6e9' ],
'perceptual:clip-to-layer:perceptual': [ 'e68a67a8dc17c7c8b434d995fbdd5c785e0a8708bef0cb002872cc1405471758' ],
'perceptual:intersection:linear': [ '53126818fa16b14bb3ec89477109b944276524a0f92fbce2dba92cc2e43b08e1' ],
'perceptual:intersection:perceptual': [ '3650323abca0a9b43b2b4503297fc6a9e05ea4455e4e76279833c8b3632bba2f' ]
},
'dodge': {
'linear:union:linear': [ 'f0762f4bcb445fbba78dd4d45d8f8ed436521c772fa52b0b9afdd3d907c1c1c7' ],
'linear:union:perceptual': [ '2c3e88bdd8e42e670c794fa422a0730d3ffa7dffa26c1e118c55e0cafecea347' ],
'linear:clip-to-backdrop:linear': [ 'cdc6c74834c45f47f245bf5ebe339c71c383d88b5cc6e173d0d3c4fe21421592' ],
'linear:clip-to-backdrop:perceptual': [ '7a7456ab61085f6ecc02dd74279bbdf99e670f71d5cbb34c414e00695c7b13ae' ],
'linear:clip-to-layer:linear': [ '9bc157e8969460a3432d76a1fdbc1f943f22dc4a40e32aefcaafb699a1435427' ],
'linear:clip-to-layer:perceptual': [ '14559a4212fe657e8471682199a419fffe404241a2e16e66dd76c62add3c2f7d' ],
'linear:intersection:linear': [ '24135e3fdb93dce3b15a4721be03f025101f48f57fc4233952086eeb5eb35ce7' ],
'linear:intersection:perceptual': [ '24135e3fdb93dce3b15a4721be03f025101f48f57fc4233952086eeb5eb35ce7' ],
'perceptual:union:linear': [ '4823db8cbcde714ada5a27232d41354d5b1f54c8a4cd5304a230e3f1152eb9ae' ],
'perceptual:union:perceptual': [ '018e944f5a7a20a09ab3c178e1ab8c04ce9f586b6dc8c13c68d033900f61023e' ],
'perceptual:clip-to-backdrop:linear': [ 'f2c7c09dff9ceae198583088ba8c9a5ac75c35a0137863ffa82fd79841a04258' ],
'perceptual:clip-to-backdrop:perceptual': [ 'c8b0dfa7c8b61cf0005507cc68d99bf099cd6a3ca7171751441743057c889042' ],
'perceptual:clip-to-layer:linear': [ 'c2fd737b27a5e544d827af122aa4c4a9760de70b56359b3ce6f108d8afb79e2d' ],
'perceptual:clip-to-layer:perceptual': [ '73f5e040b684389a5ea2c645c5823db722c3dcbb344250e0a099eff973f08b0c' ],
'perceptual:intersection:linear': [ '72c1af1658fd3769a80aba51844f775f273f49242950a0ec1cc1f6ab8191b7e4' ],
'perceptual:intersection:perceptual': [ '003edfd61bb8bd93df3183e8decc7f01ad3eaa2485cb11d83624e2790bfc58ae' ]
},
'exclusion': {
'linear:union:linear': [ '67433f1067559f806736c3dc8cacb5e0c936069e229ec621384291d602f8ab99' ],
'linear:union:perceptual': [ '82753b5cfe422aabd6a75c7612fd072ea9bbb92cdd90d1021c621895bcad27ef' ],
'linear:clip-to-backdrop:linear': [ '13fc3fb83e3a21f2028f2f1f9675ce915d960256d2d91f01a1564fdcd493bda9' ],
'linear:clip-to-backdrop:perceptual': [ 'df43e2b32bf525058bf49c745d07f5b9b120f7761b230f5cd141ab66ef499036' ],
'linear:clip-to-layer:linear': [ '00522bdc843d54ad99136582bfa8ffe73c778dc5c86601834a8fde271a83138f' ],
'linear:clip-to-layer:perceptual': [ '755a353b949afaeccf647fa768eea35f85a3762fbd17ed6ed269084c3d9c6dcc' ],
'linear:intersection:linear': [ 'beac9decd163abd8e6acb2a86979dc6dcb78d097ed2281ef349cd529c3caa915' ],
'linear:intersection:perceptual': [ 'beac9decd163abd8e6acb2a86979dc6dcb78d097ed2281ef349cd529c3caa915' ],
'perceptual:union:linear': [ 'd9353d88f46b00292373cf15d65b14317df03b60f820e5338a9758a7323277a6' ],
'perceptual:union:perceptual': [ '4e0717eed1bce1d866b3497c222c3098b01f585bcabee27b7dadae5c8d33c283' ],
'perceptual:clip-to-backdrop:linear': [ '218c793e22a1669217ca0cabd8a153d044b1a48919f47458eba66f3276005e69' ],
'perceptual:clip-to-backdrop:perceptual': [ '7d4903ac1521816e199d4af3a5d9c51831e9bd93ea6502d2dbb92ad45e4f6d6d' ],
'perceptual:clip-to-layer:linear': [ '7e36ad9738acce6ad8a0b795aa9e704e7d35a32ea655affdc5c764b4631de9ef' ],
'perceptual:clip-to-layer:perceptual': [ '1e1972dc353932202123f342a3121888ab9e40f98e37f21a5f2a892285cd281e' ],
'perceptual:intersection:linear': [ 'a326e6d3d8f2a0250825e255e9ad23435e9fec22ff50d4eeb61517a3df4ac320' ],
'perceptual:intersection:perceptual': [ 'a326e6d3d8f2a0250825e255e9ad23435e9fec22ff50d4eeb61517a3df4ac320' ]
},
'grain-extract': {
'linear:union:linear': [ 'e8b97c57cdb92594de0f1eb631a4efce91711c77aa608f53edf5e9e33e416d39' ],
'linear:union:perceptual': [ 'a603657ea1010eba79f7ee97c2b95dba1b0dd62e4078ca7be549dc59810639ef' ],
'linear:clip-to-backdrop:linear': [ '63eb55baef157ec4f8b2fa06da467ead2007b38b30c450f305f3f660a1bb5e1c' ],
'linear:clip-to-backdrop:perceptual': [ '809ed1f935ef04ca1208025fa12cc29d4c688cdce4a8e88e81dfde917f891ed9' ],
'linear:clip-to-layer:linear': [ '71926b8acade447f0be77bec29a57cc792523bc48db6825cfa2e531180a6966f' ],
'linear:clip-to-layer:perceptual': [ '14f41df7f980b2a679fe8e4f285f62a56746b146da3c5ad71d26d679838910df' ],
'linear:intersection:linear': [ 'ac6188e8b7ef332f351519f74310a9345e5bf891ed21018f67d5654f8c2c2705' ],
'linear:intersection:perceptual': [ 'ac6188e8b7ef332f351519f74310a9345e5bf891ed21018f67d5654f8c2c2705' ],
'perceptual:union:linear': [ '3807ccb0745cca67d162a2eb28b7bbc6f90fa1f523ad76d12da81c577de2abd8' ],
'perceptual:union:perceptual': [ 'fdd888b6abb5b5536945ac5a4bd7f3e218fde2452c1eaec98b7a7c96373d0175' ],
'perceptual:clip-to-backdrop:linear': [ '93ee9196450bab4796d64b5156a6aca688d30d5b4a73de42af5729f691b69a3e' ],
'perceptual:clip-to-backdrop:perceptual': [ 'bc674500f5452e2047a41198ad62dd5e59b6a899c6ac511d581abf1fef38ded3' ],
'perceptual:clip-to-layer:linear': [ 'ece5bce20702e3662e8a8ddc2978a6a043983b1d9725f88dd051b64db5c88849' ],
'perceptual:clip-to-layer:perceptual': [ 'debb6d9a53924f86dfaf96be2b50443fe20f8dbc98b9bcc90d30b875197b20b2' ],
'perceptual:intersection:linear': [ 'bd23b4aab0172b59bf29a9d0c126f3e80cc8d68900b7a8f9265781ebe7b685d8' ],
'perceptual:intersection:perceptual': [ '721971c54cbe337105ed21d3158ae94a491370adee20029a7a0127834778bec3' ]
},
'grain-merge': {
'linear:union:linear': [ '362ae437af5f039e762df2bf87a7c864745e78152ca97c533175d60c4d530d53' ],
'linear:union:perceptual': [ 'f4e4536d177c1629a3a6e1e57af1662a86fc7350b02382585e511a94980084c3' ],
'linear:clip-to-backdrop:linear': [ 'f513ae55b970107f96922ab7d973bbd897ffba92ef87f4992779bc43afc5a59d' ],
'linear:clip-to-backdrop:perceptual': [ '4df82c7e951e6c1faa58ea9cb717e745951402e5b4bfa599890d93c6ff936f0a' ],
'linear:clip-to-layer:linear': [ '61fe7e1b8f29efbf1ee562ea7315ce821f8cf0b37057e319b769d6b4b73d00fc' ],
'linear:clip-to-layer:perceptual': [ '66234dd0ec07df99b093c63cdfadb284dda0396e7cecc1e37919056335ea714a' ],
'linear:intersection:linear': [ 'ad275ca2c11f5ce3703acb40dda330975d3c7fa0b6eb4cd73c8f693bcb839254' ],
'linear:intersection:perceptual': [ 'ad275ca2c11f5ce3703acb40dda330975d3c7fa0b6eb4cd73c8f693bcb839254' ],
'perceptual:union:linear': [ '7a7bbc9eb2d02d8dd8f10893a1b14b97f7f14b961e8e59c5f572f57078ad53cd' ],
'perceptual:union:perceptual': [ '7c79c6c6df3dcee8b684bffe38e20ed6a544bd7512995a93bfc55fc666cd9234' ],
'perceptual:clip-to-backdrop:linear': [ '3fadad316b79bbe059ba3835822cf5462ce1226fc4143b6278a753dbc43ad5a7' ],
'perceptual:clip-to-backdrop:perceptual': [ 'b82be17183c0ed60ca6a7b2b277322c2cb9efae2cb655cdd1da2ddc7b1c1d4b6' ],
'perceptual:clip-to-layer:linear': [ 'e8df57a5b3a75a8cde39ead6b797f240260eaa9e0c6a427beb7f5e87b46695ad' ],
'perceptual:clip-to-layer:perceptual': [ 'f0509c500c400840cd4b365bb11bdde71dfe82234adb3d0e171b42bc47c69069' ],
'perceptual:intersection:linear': [ '9bd4cff3f4dc404df56b00b467d6630a4730a6785138e97ace149ee99bd20eda' ],
'perceptual:intersection:perceptual': [ 'ae7ec7e0fa9daa7c98792b81364acc56dd8b473de5c7244201001e5bde163fa5' ]
},
'hard-mix': {
'linear:union:linear': [ '3b2a75b370dc72cf13193b6e7470635eab891c6466eed528b6460946358a053c' ],
'linear:union:perceptual': [ 'bb57472a8d14e2226a8b8efdaaf841bc57032c480264fd88513b0c9ea47df032' ],
'linear:clip-to-backdrop:linear': [ 'a90e44affa6ef28a9b769ba094395cf9a4ca369554f0cd76fe35badfab006c51' ],
'linear:clip-to-backdrop:perceptual': [ 'cbd79ed6ccd8daf66b590e809d990d6515fce7c1b712fe4b2a41ba0f2317acf2' ],
'linear:clip-to-layer:linear': [ 'c68fcc0614f6f4ff1330e3315e8fb640c7889c0346a53aec4a2eba729660d047' ],
'linear:clip-to-layer:perceptual': [ '1322c07116461501a22cafc2b3ff53f54e95256f8b4f9bef5f529a3984e82783' ],
'linear:intersection:linear': [ 'efa04f9890d81d58513507859a7a6728ca8ab52abf4388b810f12f56b169cb8e' ],
'linear:intersection:perceptual': [ 'efa04f9890d81d58513507859a7a6728ca8ab52abf4388b810f12f56b169cb8e' ],
'perceptual:union:linear': [ '02c91de615e62fcef0a5999ab4e4d960ebd8156511f99dba40bb9483f50e7db8' ],
'perceptual:union:perceptual': [ '927be5df63d57ec9efe943b2f5c8ee80cc0e1a8d60634c5456fbc1fd8ee74d8b' ],
'perceptual:clip-to-backdrop:linear': [ '7e1c58cc15c23ed0203ac019e3bbc84026d49ce7530fa570e11c5064134f3dde' ],
'perceptual:clip-to-backdrop:perceptual': [ 'a2834523f31b93b9c35d56da4605661ba56a5a2a1f2a5ced79f646a7aa65d3be' ],
'perceptual:clip-to-layer:linear': [ '97ce4337b96dbdd470f14d7fb127447e74c9a9debf8e117f361f4f5cf3674d70' ],
'perceptual:clip-to-layer:perceptual': [ '7763f4e62ed488befe348f0197414fc794f5756055c90f9155e058cbb7138f38' ],
'perceptual:intersection:linear': [ '9f2833cc611f302891cfac169c1e44b6aa479c7299f2250db944d7508e52898e' ],
'perceptual:intersection:perceptual': [ '9f2833cc611f302891cfac169c1e44b6aa479c7299f2250db944d7508e52898e' ]
},
'hardlight': {
'linear:union:linear': [ '5d3124da803b96e656e01349f178ace5391677726676352557a4ed6752b8c23e' ],
'linear:union:perceptual': [ 'c0723394a27cec8aeda43c2748a1bdef32fdcb191db11f639b3ecc86c5b80fcb' ],
'linear:clip-to-backdrop:linear': [ '1fb88058b8b312c5e21fb6db8f7dd948bafcf3f1e269096a5dd84f96753b9cfd' ],
'linear:clip-to-backdrop:perceptual': [ '93c931d35169e0a38240d8a9c2b779f89f767fab971fd3846ed0a2ffff9a4a95' ],
'linear:clip-to-layer:linear': [ 'd57134279ba24ca50af6faf39aeb38ad295e2f22a87f679a4aa1ab1432dd6597' ],
'linear:clip-to-layer:perceptual': [ 'e62ba4ef8347ec175d478f365be227c531ecb2ffc400e7631ced1077e59e14a0' ],
'linear:intersection:linear': [ 'ae18760809c762a958a7750cffe0790ee5a5d7fee476df2867eb6873495ed693' ],
'linear:intersection:perceptual': [ 'ae18760809c762a958a7750cffe0790ee5a5d7fee476df2867eb6873495ed693' ],
'perceptual:union:linear': [ 'a086f3e0ede8c4cfa7d063ffb32cc4ebb612c900639784feb1ccaae59f8cdaef' ],
'perceptual:union:perceptual': [ '3264a3deb11a471b2293cb9246bf78f4cc7d78fc6fb29bf1fe0f8fa24d1ebce2' ],
'perceptual:clip-to-backdrop:linear': [ '226bf333e4759671901fa656d09531ba8da46309c7fbd9a7444128518375376a' ],
'perceptual:clip-to-backdrop:perceptual': [ '5a175db8036bcb244effd713153478e0572af755546fdcc4d3bed7db63a95fe5' ],
'perceptual:clip-to-layer:linear': [ 'cbed77c0e78e89f7ef7231c1cb1ce345ee28fd322bd7af1b9ee6fb02a09c3a2b' ],
'perceptual:clip-to-layer:perceptual': [ 'd3beaa2990642164f2631f183d910e3acb41624e68aa2771a4605a9664ebb372' ],
'perceptual:intersection:linear': [ '5d1789406f6ebb9ef9c3d1dbddc988dba7b45bef033d11c46a4cc11bef2702fb' ],
'perceptual:intersection:perceptual': [ '5d1789406f6ebb9ef9c3d1dbddc988dba7b45bef033d11c46a4cc11bef2702fb' ]
},
'hsl-color': {
'auto:union:linear': [ 'dc4b469481e7f2a13b28c79c665ff2cf6327582b6c4036ed7a0b627e86f09d2b' ],
'auto:union:perceptual': [ 'e82f46d57193ab82ceb243df3783e589939a1d57bb31de9639eed9068e61adea' ],
'auto:clip-to-backdrop:linear': [ '95d4f7474308197b9a6979225163cc0f0f90e29f2cc931e06803f908626119e7' ],
'auto:clip-to-backdrop:perceptual': [ '103ed86dedc5992c33fc689e3c9d1c944ec35136b19d0c8b61338ae61d3750a2' ],
'auto:clip-to-layer:linear': [ 'a877fc334daa9e93f3acd4423b99252922d11b98d029a62bcad82fa7ebc90c5f' ],
'auto:clip-to-layer:perceptual': [ 'dc5eef64de3555a543c0b7bbe98a1d195ceada726ee8f45423d86fb262ded6a4' ],
'auto:intersection:linear': [ '19c2f679832d61ce33d1d33780d0dae30d7592f52cfd493a449e35b1dbb5a07b' ],
'auto:intersection:perceptual': [ '2c365b0a8c69a4924a782684cdc4c783a237df88cc34be028c3456b0c926d1cc' ]
},
'hsv-hue': {
'auto:union:linear': [ '10dbb0751dbedfe6a5c9ba9c15282373da9be5db3091985ddf97158ff8dd2e73' ],
'auto:union:perceptual': [ 'c372878221e3b992c58914d55f9953235c8c32af942f009ca24295eb0aae861b' ],
'auto:clip-to-backdrop:linear': [ 'ddd0759c73ab8a3a6943e248a6cb3cd35c518a2b112fe265967997ac5b100658' ],
'auto:clip-to-backdrop:perceptual': [ 'b4d38f8e83487279b7376fea823be6a132ae5a575a70c4c9ddd11a96a3cc060e' ],
'auto:clip-to-layer:linear': [ '4126dcae9ba4c6938bed1a5f7b633349e4c428091b842cae9257941c38ade457' ],
'auto:clip-to-layer:perceptual': [ '04598ed8c875c41ba259095103ff9f078468b0ca7977ca094a46ff416a093046' ],
'auto:intersection:linear': [ '7c702b7fc9085b83cf0d04d5ed0b6f33f65bfa8f760d49cb0c9f63e78d9ef439' ],
'auto:intersection:perceptual': [ 'e97ab4ab6344fdb776a463a52f067a4a0f1a0b8f164c044aee1897b205384a73' ]
},
'hsv-saturation': {
'auto:union:linear': [ 'e694947cccf3836d488d336c94d7cfb41b6cc671b4a1884609ecdd374c280266' ],
'auto:union:perceptual': [ 'f6d9d77739a595a8a99b2160a42586e24505d1bda52e48b8aec70e9075531e67' ],
'auto:clip-to-backdrop:linear': [ '3d5202114900bc3ef9b79cd3ff0fbf656a471c4ff14ec4734d5cd3086fe52d86' ],
'auto:clip-to-backdrop:perceptual': [ '2d61acd031742fad429441ebf4c904305a8e991091c9752d437a410d4507f174' ],
'auto:clip-to-layer:linear': [ 'be995fe50809c950fe87649f2911151219b46381be0df089b56cc1782fd80987' ],
'auto:clip-to-layer:perceptual': [ '35c5131cf284c1589639e32858c2f389d1f1667aceec4a10c9aaf450155d9270' ],
'auto:intersection:linear': [ '3d4e25be2ebcafcc8fd1a30f8e5d77424f828f998b8bc3cfa5c93e1fd19d9f43' ],
'auto:intersection:perceptual': [ 'cfdd4702ea02c79ff560816afc0820a39cb8818e3ff020aa89f47ebcc41594d6' ]
},
'hsv-value': {
'auto:union:linear': [ '99abf5f6be3dd50821928bb1a2231aeada73e2a62e8957430c1b5d64a9df313c' ],
'auto:union:perceptual': [ '399b9f5bd1fcd649c2adf2d28cb956b6004f7bbdaada2e7fab12e0d8eb6c956a' ],
'auto:clip-to-backdrop:linear': [ 'f27e055965b00bd0ed2b7ff741392a2bb0e5768fac7767305b5616641f78369f' ],
'auto:clip-to-backdrop:perceptual': [ 'efd45a0ebd42e558a738219a071a533e74dc33daf590368a7e8304644af6f12a' ],
'auto:clip-to-layer:linear': [ '568abcc056b3d5144792aeabf3ec90640d496cebfb80aca613f132d7c2683606' ],
'auto:clip-to-layer:perceptual': [ 'b513f1a1082de8c044df87b5d5f7c34237a166baad9b5cadc9f3a3ea0ae78507' ],
'auto:intersection:linear': [ 'aa6c1a8a5c3aa97468d66a46c2b2abcc04515f45daab65248b13762c8759e74c' ],
'auto:intersection:perceptual': [ '2993e3c0fc6ae1045f34a187f00fbee02ef32352d88f5b2a2c22a0b1fcb76758' ]
},
'lch-chroma': {
'auto:union:linear': [ 'e264c514956119cd46825a470c6a7365af1c8a23b107f665c113872eb51480b7' ],
'auto:union:perceptual': [ '3c7b7d780c671c0ffb768d22e47b904a601f6ccf139807976217f410a40d0d13' ],
'auto:clip-to-backdrop:linear': [ '65a75daad3689e53a7a61535c025aeed546f117a20901e58b439247c7bf7cdc0' ],
'auto:clip-to-backdrop:perceptual': [ 'fb0000a80c0bd871c14222dd99b6fe993ed449633a2883694f28765cc32a7fa5' ],
'auto:clip-to-layer:linear': [ '11e65e38240e1ba40d689d5665043dcb95d416201e17af60cb24574011e834be' ],
'auto:clip-to-layer:perceptual': [ '0a12b36abedd2114de44dc40ce7290bca011509ce8c1bb86c3a5c33713ce1552' ],
'auto:intersection:linear': [ '7240d3c3614b64a6d80e18a4309c398b75e7e91655c0cb3a65c326d54bc2187d' ],
'auto:intersection:perceptual': [ 'dbb8801625212c6bc40de88bfff1cbb06cac3bce9566b49e4db5fd985f86f177' ]
},
'lch-color': {
'auto:union:linear': [ 'a9b6a939ce0aa02b42428f3e9ada9cadf0dbbaf3adf65226a999f1e1129c9020' ],
'auto:union:perceptual': [ 'b21471fa3e0143e930b3a20b794dcd38c069a5217b779998e1c15b41cc651e40' ],
'auto:clip-to-backdrop:linear': [ '3aafa9604358a6edeb0c913fb87e8a4a944b9b31647c1b3734657c75b8b627d8' ],
'auto:clip-to-backdrop:perceptual': [ 'a8a741b9e6f924b5140f5194158c7b79115b1d1f35cc8f815599edb409d3e2e2' ],
'auto:clip-to-layer:linear': [ '74f1939137c90cff1f3060828cc2fed64dcbcaa72a3a53133f48bbf43f6915d6' ],
'auto:clip-to-layer:perceptual': [ '202b98a2b6c9172af1a57aec47e20ae0d49958f7dba7051829de47404f2fe03e' ],
'auto:intersection:linear': [ '808bad3f6c98d7873fef9f94ea7674c88a1d7dddc7e2df61ae7b21192256651e' ],
'auto:intersection:perceptual': [ 'e783556d60128d09f17e06c89f0ebab8e6d452c8065a4927b8eed3f79d837926' ]
},
'lch-hue': {
'auto:union:linear': [ 'bde1e02d9389345f20eb36111bde5ee974105a3ebf182567197cd9e7d6a0d61c' ],
'auto:union:perceptual': [ '9008bca1babf8cbe42388470a80dc9247905170a58f482e95af17e0bc706a094' ],
'auto:clip-to-backdrop:linear': [ '113111624751e164e7f1194830629609eb94fa28747f265e1db0e9bb0d61f03f' ],
'auto:clip-to-backdrop:perceptual': [ 'dcae48c98cdb69a5125ebb53c3a4b5ebd7dfa3d59ed67f88af2f12f3c21353a9' ],
'auto:clip-to-layer:linear': [ '6db014aa57a7e754541149fcefc77dc8105d25f25077ed3f72b12d872c40169c' ],
'auto:clip-to-layer:perceptual': [ '33971acf071e5e6d777a48b1a1a3e8a0de573c4c985a82b727eb2507ba560880' ],
'auto:intersection:linear': [ 'f7dfeb2624dc8a6894525d17d017e6e0bf11598545e132fcc0cab06be94af85a' ],
'auto:intersection:perceptual': [ '103db86e1442d659424ff1b13d2fd8a36e7b99481fc5470aa2218b4bcc8c638e' ]
},
'lch-lightness': {
'auto:union:linear': [ 'e689b1d2f207067151282a3b9b19d1822aa5def8c25e1705e33ef3e03bfeec49' ],
'auto:union:perceptual': [ '6e0578f3c33574428f261d7d2545296ecb2df981a8f1a67b6a1075bf3d4536a2' ],
'auto:clip-to-backdrop:linear': [ '87be28379f221ec96a3953bbcc8a03d5e0fa2b517754b3012fe3bf9c624b9ddf' ],
'auto:clip-to-backdrop:perceptual': [ 'cd3dccab084822353fc58793eb83e04c7c1c98d3d9dc8486e29ead9b978a0935' ],
'auto:clip-to-layer:linear': [ '6de97b167687c502ab126a6a4c34f19a12680dbdd9eabfc98357b901f00ba52a' ],
'auto:clip-to-layer:perceptual': [ 'ab13aa1b5a0513cd334bfc64e09d3e144cb2526f49d099046432865e57dd92bf' ],
'auto:intersection:linear': [ '8500f93966da5370b943fae0dc7434231ae15943599f7f3bb103554e8127abb1' ],
'auto:intersection:perceptual': [ 'dc723c285b7caf3fcf4640de7baf6c86756b097a301e2596123c4c4a3cd847c8' ]
},
'lighten-only': {
'auto:union:linear': [ 'de4edbd8761838e5e3663eaed4b197956e28dc63eaf9e40b1abd2ceaf8a88bdc' ],
'auto:union:perceptual': [ '1f5370fc2ecda5d047e105d537d47a144b8437463681ab630f07ca7d008c3db0' ],
'auto:clip-to-backdrop:linear': [ 'c419b5062fec64185804c339b4d121cea470454ac2f318b4d09d3ce461fbbc14' ],
'auto:clip-to-backdrop:perceptual': [ '86fcdea8c5d2d6b6b1ec3da20c565840a7039c280d368e75c04d181f53f8306d' ],
'auto:clip-to-layer:linear': [ 'fd084acacec91a33aaaa1ec160355ea8c79067cab5b5a879947a2da65c34f683' ],
'auto:clip-to-layer:perceptual': [ 'a7b97a035014e263166f5c43a05f47adf173c5c8ee0760e1218c9c3d05f1ecbf' ],
'auto:intersection:linear': [ 'ba75d698971e6239f2ce0b214b5ee480357bb84c4ead64424d37d4f44d077ec9' ],
'auto:intersection:perceptual': [ 'ba75d698971e6239f2ce0b214b5ee480357bb84c4ead64424d37d4f44d077ec9' ]
},
'linear-burn': {
'linear:union:linear': [ 'ed2c3e2f684dbb64f3becb83cb28b216b7425d1723f589c24e8d231e0bed0284' ],
'linear:union:perceptual': [ 'c8ddd617c52291b6e22f3ec54c8d9ef78322e3dfb8ee63a58e5e64ff8843a2f4' ],
'linear:clip-to-backdrop:linear': [ '5d8c25911b9fa6b2675a3c40d88b800e9ca36a26d405a3bb8ead327eae2cfb84' ],
'linear:clip-to-backdrop:perceptual': [ '78766ce875460cd0950f12fcac549216f33789b1a6f2ab92c8da0b394ff78895' ],
'linear:clip-to-layer:linear': [ '3b7a63e2f9bb683b2f1c66da05d6ef1d13e05190af7fa4a944055496ac666c5b' ],
'linear:clip-to-layer:perceptual': [ '9486161f0cb391fa845f96616c6da015089505ed2317842b886c98f115127419' ],
'linear:intersection:linear': [ 'c9ca3ba5f9b79ffa0d09f7d8700067856bcdfca3f63a8ccc09c1ef143c0e6f39' ],
'linear:intersection:perceptual': [ 'c9ca3ba5f9b79ffa0d09f7d8700067856bcdfca3f63a8ccc09c1ef143c0e6f39' ],
'perceptual:union:linear': [ '62af40ee48bb3ae696104471be759d0be69763df4bee2aa74eb01836245434f8' ],
'perceptual:union:perceptual': [ 'bbf0c464f0304dd86bc707303ed4ff015d5596dce76ff176785cfd7b2926fa7a' ],
'perceptual:clip-to-backdrop:linear': [ '4aaef30b9d47d607247c107eb64e49f3527732a95d6a62650290e2be61a25a4d' ],
'perceptual:clip-to-backdrop:perceptual': [ '507809808e6d96fdde70d18fe2ecdab3aaf0752341308af69522888b61d639f8' ],
'perceptual:clip-to-layer:linear': [ '2246474d37f8693479295ffded18578fa3fd2073c88a8a56438035f02a99eb39' ],
'perceptual:clip-to-layer:perceptual': [ 'b8311ef75fe6e8d1fb7adb29cb0b8dfa34074c3834e9cae258400158ce9a3c9a' ],
'perceptual:intersection:linear': [ 'b246dffe46e608a2c2825f38246b69e8d3387129b63d88005e774e69971ed4d7' ],
'perceptual:intersection:perceptual': [ 'b246dffe46e608a2c2825f38246b69e8d3387129b63d88005e774e69971ed4d7' ]
},
'linear-light': {
'linear:union:linear': [ 'b51200b2068e33bc3ce1af22f1194f5ffccb9e5bc7bd01604d1d1b5a2818e20c' ],
'linear:union:perceptual': [ 'e6c8f8b043eea2f45b508ec59e1657b7b7da2e78e14d7b2581c9c172420436f9' ],
'linear:clip-to-backdrop:linear': [ '57bde6e5fdf8f382a76fb23397c7bda49a1cc04ea3bebc0fac4d6d92280ed9ba' ],
'linear:clip-to-backdrop:perceptual': [ '42cd5005db66857e9b44fd35ea249a39183bd2d01a16c209fc5bb7e260f10b5a' ],
'linear:clip-to-layer:linear': [ 'd1efbc186b7f94637e37cf74c93ac416baa68faa9efcdb859d35e0104ef6882e' ],
'linear:clip-to-layer:perceptual': [ 'ed67c1106e0c0743f4f3c9149d81e39aec9ceaa722d7ae3c1b40966fec133cbc' ],
'linear:intersection:linear': [ '7abdbce554f57833284ba1b785ba95b0858e9167e4b540c39bafd9a341dd9a10' ],
'linear:intersection:perceptual': [ '7abdbce554f57833284ba1b785ba95b0858e9167e4b540c39bafd9a341dd9a10' ],
'perceptual:union:linear': [ '09c2f60836969c26430b9ae69d168d38a8da0c7cf4ed06c02122a6827bf7abac' ],
'perceptual:union:perceptual': [ 'ea92504043c38615aec087dd62593f9c656123425d2ca5f4a4cd1352bd5cc5f3' ],
'perceptual:clip-to-backdrop:linear': [ '837fe9bf7f08a50908c219c09bc48fd376bc40656ffa75b4e78c605e18eefa55' ],
'perceptual:clip-to-backdrop:perceptual': [ '6da7c6c2ca5146424430ab5ff3632042a06c0f8c7eb3102d3f7fd387e2c30abe' ],
'perceptual:clip-to-layer:linear': [ 'f1c89c9268089e1d59f1108c23b046f7b812609bae7128f34f43c17d60f58312' ],
'perceptual:clip-to-layer:perceptual': [ 'ca66a6db17bff47bfdc14f83ee3548773273b81a8ff8c93b13ff358d4d9cb1da' ],
'perceptual:intersection:linear': [ '8f33304da2c218f6826f3d42252536dc84bce93265796950b049077206d7bbec' ],
'perceptual:intersection:perceptual': [ '8f33304da2c218f6826f3d42252536dc84bce93265796950b049077206d7bbec' ]
},
'luma-darken-only': {
'linear:union:linear': [ 'b6ba8de9924b753b3c1984165fbabb2c2963c9a1636d5506e71a45fa1cd262a4' ],
'linear:union:perceptual': [ '97a8b3ebbd8f767a42c91b6c51bf2e8b4c8f654785cd4d068eb89304b5a11bb9' ],
'linear:clip-to-backdrop:linear': [ '7e814e849ebb3bc6d12fcebce603a85171e9582bdcc9415b3e2dc79309545242' ],
'linear:clip-to-backdrop:perceptual': [ '20d51133d7308a665276e7e88f6fd8cd000828e769f428ade4880743fb30a389' ],
'linear:clip-to-layer:linear': [ '41d9c880e860c990e1423cef64e2aa572be7608aabcc0927a4051bcda2ab8a89' ],
'linear:clip-to-layer:perceptual': [ '8bee2c0e1d3fcaed97eddafdcb51551b79bd76e11bc49c9e5fc0d38602a1b0da' ],
'linear:intersection:linear': [ 'fe7f74802badbbb075b8090853d3b496a533ec0caf941f10af84918ab76adf6c' ],
'linear:intersection:perceptual': [ 'fe7f74802badbbb075b8090853d3b496a533ec0caf941f10af84918ab76adf6c' ],
'perceptual:union:linear': [ '8fc756574d39ccf64266420d15b2eababb22a0f6c0539f93009250fd8ac4a909' ],
'perceptual:union:perceptual': [ '22b4ceb2dbc2e36ef3f0b32c637f150fd799c570cb547d29e6a7729b8d3c59ce' ],
'perceptual:clip-to-backdrop:linear': [ 'd9be04571671350d00196b8f768104aec21f7d253743b848c2eb2ca05dac4491' ],
'perceptual:clip-to-backdrop:perceptual': [ '2a1e245bb6b296f4cef9d99caa393b0c2afd288035c169ca368f07cb2a665e3a' ],
'perceptual:clip-to-layer:linear': [ '28861f6e9dd4021ddb3380b449bca24e1d21f2b3951d9954d457d1e861c98483' ],
'perceptual:clip-to-layer:perceptual': [ '84ed581dff02e730470d9aff7b00496b7671b36700bb79d76b607b266ef8ae0d' ],
'perceptual:intersection:linear': [ '41942864c2c0e9f5f23324f84ccadfdd1af97bc7bf25f6c19cf48ad71567d560' ],
'perceptual:intersection:perceptual': [ '41942864c2c0e9f5f23324f84ccadfdd1af97bc7bf25f6c19cf48ad71567d560' ]
},
'luma-lighten-only': {
'linear:union:linear': [ '1467987f5728fa5b6142b67dc481d2a6dc55bab4c007dd8b401b40066b9153a9' ],
'linear:union:perceptual': [ '15e258ff19eea7474a1dba5df688ade20bb72a3cc646b5a020679ff578455d80' ],
'linear:clip-to-backdrop:linear': [ 'b104732deb02808ff7050f6678eb7ca168e6c26263808beabb7a6894985ffc0a' ],
'linear:clip-to-backdrop:perceptual': [ '31fb2ad839276f4d76c170ca64754877c424d6300a6d9a7de7718ba66347439e' ],
'linear:clip-to-layer:linear': [ '879b2c3e22dd5b15e8484f714bcbd86b5b898abf472bf1292bda50dd9d97b66d' ],
'linear:clip-to-layer:perceptual': [ '6d5f242bc4bb02bc8a20153ae1df141c88e18247fb44054432e4976a7bfa0bb5' ],
'linear:intersection:linear': [ '8c6454283bd5b1d162f6708bf9b3a40ad60ff2944e9a1accb257d7da8d6f39a9' ],
'linear:intersection:perceptual': [ '8c6454283bd5b1d162f6708bf9b3a40ad60ff2944e9a1accb257d7da8d6f39a9' ],
'perceptual:union:linear': [ 'b494f65356baf266d6967cda30dbbc1f97c9728b1f318090389a0695c0105321' ],
'perceptual:union:perceptual': [ '96f5b7aba4d31ead80d251a10206d6001c3a9814c42dde493f8bbc6d30f15309' ],
'perceptual:clip-to-backdrop:linear': [ 'b28e6325a6c1c80799bc8b9c144570fb0b29f968694de6d01238ea1ca6aaad15' ],
'perceptual:clip-to-backdrop:perceptual': [ 'ab700b8005e1977554441ec9f09c78c48b2e32307f57c652e786691ce8081e81' ],
'perceptual:clip-to-layer:linear': [ 'a09bfeef9f9202a7022e38880ee18ac18905d4f39637115a5e0a6831173db08c' ],
'perceptual:clip-to-layer:perceptual': [ 'dfa44bdb2a87231dd98afaeeab3ef17f6654a08f3b629868f36534c8e5029f86' ],
'perceptual:intersection:linear': [ '83fc3db22dd3398f76a8fbbadd5bff9f8ca1143aefaeb16ae55ef0163ec00b28' ],
'perceptual:intersection:perceptual': [ '83fc3db22dd3398f76a8fbbadd5bff9f8ca1143aefaeb16ae55ef0163ec00b28' ]
},
'luminance': {
'auto:union:linear': [ '2f2ad9a0472f3db755fd4aff7dad8bbfd36cc4dbf65b71e3c1c7c50e088e36dd' ],
'auto:union:perceptual': [ '73c63c8489f657113003edbcde98b4838ea1e0048b07cdfb0de21aa7ce4338c1' ],
'auto:clip-to-backdrop:linear': [ '9f6f19ceb5d2a56202a9c2a99262e7a437677b37d3e46dbf409d275d3fac6fca' ],
'auto:clip-to-backdrop:perceptual': [ '8df997a5646670e2ab8da40413e72262125d0aa2031bf1b96f03142ff49d1c34' ],
'auto:clip-to-layer:linear': [ '4170c59e790babf7f3925d2390ef5a250cc6c5cb3e1d6de027f3dafe5c30a9c5' ],
'auto:clip-to-layer:perceptual': [ '584ecbd6a740258bbe2f741be4169c7ce809f4de72f02538868b2a6a16da67ab' ],
'auto:intersection:linear': [ '2743c459cf357bb1f4bb2371c30ea82c4dca382b75f5cf07a0d3dbc71c51a2f3' ],
'auto:intersection:perceptual': [ '474e2da5f2e2c5d26c5a167db7141f74ad511c3b939494529e76863fcd110f78' ]
},
'multiply': {
'linear:union:linear': [ '4a9b964c4f1dbde6ddce2524d83b7095f292fe6cb0afc18b6f750bc44a9b2657' ],
'linear:union:perceptual': [ '7b568de38896b48b22811434b5aa16f7dc625edbc4451391aa84adf56551c54a' ],
'linear:clip-to-backdrop:linear': [ 'ac6089b7dbf719059730ed548b873978289fa096bf6c0a288c59f1c743d6b19e' ],
'linear:clip-to-backdrop:perceptual': [ '34d0ab24031ee571598d41b89d60dff580f50e456ad3e4feb0d9052a3d8cfb07' ],
'linear:clip-to-layer:linear': [ '766cee039258431489ad0f9c701aefbdf71209e1678ef8d5584ec09deac825d8' ],
'linear:clip-to-layer:perceptual': [ '4e51175a22fbf4f2ff04691908bff2ae1d66633d0ed777d9d18ee721ea6fd42b' ],
'linear:intersection:linear': [ 'a82aafff16670720bf7feac02476e70ae5120ec84f99bde6e8be64371320b411' ],
'linear:intersection:perceptual': [ 'a82aafff16670720bf7feac02476e70ae5120ec84f99bde6e8be64371320b411' ],
'perceptual:union:linear': [ '5e331fc8f44f4b0595e4476b7fcf225dcd57b002cbdc9cca0db42bfb5fbcd816' ],
'perceptual:union:perceptual': [ 'f779e92ef00411a7b8858e2c782b18274cbece3f25163d230aa65d7da417efdd' ],
'perceptual:clip-to-backdrop:linear': [ 'b115e84e0ce6458b20b4909310622f092dc6652a4c82b6776f7a54f1b5cd4a6f' ],
'perceptual:clip-to-backdrop:perceptual': [ 'ce971c6a7b9e3adc29a257b2fa950f63829fdc71ca383e2754d43540e3d0d8a9' ],
'perceptual:clip-to-layer:linear': [ '02f4f153f1b1cac4f09694c43cae368d161ddebb2985064939f098f54f6e410f' ],
'perceptual:clip-to-layer:perceptual': [ 'ea9d5b25a126d24ef29267729d94a97bc1756d562cc727cd9fb05a348b4dcbda' ],
'perceptual:intersection:linear': [ 'f872f2a51bf893ae3270b29b952d0f5803b6256b96e74342e44262fb3595a9a5' ],
'perceptual:intersection:perceptual': [ 'f872f2a51bf893ae3270b29b952d0f5803b6256b96e74342e44262fb3595a9a5' ]
},
'overlay': {
'linear:union:linear': [ '4daab160ed0ea3d80a6e0c0853ce11efa6ca09fe364164fcaf946cfb8191afd6' ],
'linear:union:perceptual': [ '94fa7e93b048a15f98d5138deaebf09d8c12a914b0ba17173418ab46cd3e347e' ],
'linear:clip-to-backdrop:linear': [ '1ced7626495b52b93e447e483cd8a9fc9ee644ddb3e9a518ae6f8ddb12e3d257' ],
'linear:clip-to-backdrop:perceptual': [ '596d35be74a31ef78af4453fe094d411f794692ca451d8304e9c893341feb453' ],
'linear:clip-to-layer:linear': [ '6d884886a0f98174a691bfafdba94040e35753cb3d4e4966b2643efc233b84c6' ],
'linear:clip-to-layer:perceptual': [ '344b439a251335a28aba5034edfc774047bfbccc7f265221cc7eb6c7a33945c7' ],
'linear:intersection:linear': [ 'cb277c8aaad1925316bf7a94462248824cb543a836b635c4364d1039dc2ebd4a' ],
'linear:intersection:perceptual': [ 'cb277c8aaad1925316bf7a94462248824cb543a836b635c4364d1039dc2ebd4a' ],
'perceptual:union:linear': [ '4a3a5e70c42ba4d467920470657b4390a70673c1b2a802aad3a186bb4e85061f' ],
'perceptual:union:perceptual': [ '70b15a04701991a0b9498e9361dce19f41a41447896c0c8d619cb4b5dd9a8341' ],
'perceptual:clip-to-backdrop:linear': [ 'cae6174d92f3439c962e9367fb562faa160c19bf39b5341e94023f4be4e92d4b' ],
'perceptual:clip-to-backdrop:perceptual': [ 'f8ccff7d692629496c6b7a8e1f98fde0fac06593635c656d9ce1fda11732dc99' ],
'perceptual:clip-to-layer:linear': [ 'd4d5cae05f57649da5b425314215670d4ef6caa479f7d676afbe449faadfabd1' ],
'perceptual:clip-to-layer:perceptual': [ '1c92ae84066352b2d545420ee9666d2493120aeaed18853c57302a32dbf61ff5' ],
'perceptual:intersection:linear': [ '2b182c96a2cb6c7bdeb5d6a04295af3f5dc5480072a481c79a27b7649301553c' ],
'perceptual:intersection:perceptual': [ '2b182c96a2cb6c7bdeb5d6a04295af3f5dc5480072a481c79a27b7649301553c' ]
},
'pin-light': {
'linear:union:linear': [ 'f3f2e314b1fa1e0f5f24cd91fd3ff60fb1d2ffb542a8fe74fb09da2e16a3dce0' ],
'linear:union:perceptual': [ 'aa2bc0173cd0da8e349b0047aaf6e2daeedec4662175d5c2599036a1e142f68a' ],
'linear:clip-to-backdrop:linear': [ '86f71811ce23501080f8072b7744832a0956c38c74c6349251b89f2c735db70d' ],
'linear:clip-to-backdrop:perceptual': [ 'ae18d156b424177ae8e1898224fed97d7cf2d358b1be3e4bc1f389139bc3d240' ],
'linear:clip-to-layer:linear': [ 'a10add4c5addffe9b6939a64e63d93e1b4b68b652e184382b10d6b99867d6e76' ],
'linear:clip-to-layer:perceptual': [ 'deaded5c044a69f5ab50fd8ed90fce10173be45a9f979277cd291a56a4daae1d' ],
'linear:intersection:linear': [ 'ffb062096a3041bc497e0015078663a8436e1e8b47ea1deee8c4b2650e9f3d64' ],
'linear:intersection:perceptual': [ 'ffb062096a3041bc497e0015078663a8436e1e8b47ea1deee8c4b2650e9f3d64' ],
'perceptual:union:linear': [ '20d7880ebd58cd0d1c5b39e1b26e9120b6f0b88ef4b543d638aeac6c533982f1' ],
'perceptual:union:perceptual': [ '519ff62a73f319d2761c1e6bfb507f88f6802aa9044d3a91fc950214fd0cae62' ],
'perceptual:clip-to-backdrop:linear': [ '806ddcf07edd8a4cba4850a1697dd13cc6a05ce82eae320158fef3d9d9f22794' ],
'perceptual:clip-to-backdrop:perceptual': [ 'b5c08cb252a1945ef6668b14e65a271a89cfbfa9a3134bcc8fe379a8f457f40a' ],
'perceptual:clip-to-layer:linear': [ '56cf9342bcf381ec434ee6dacce7c2488e7262b0c793e81a7d1190b91ab57bb8' ],
'perceptual:clip-to-layer:perceptual': [ '3ef6fb5d379e2d37b94ddcc171a8850273c293a468395a6e7c6c416c7f46faf6' ],
'perceptual:intersection:linear': [ '51c0454eede7fa854af23955c6210ce5ca123171edfeb9f7f5a9d5ec926c34cf' ],
'perceptual:intersection:perceptual': [ '51c0454eede7fa854af23955c6210ce5ca123171edfeb9f7f5a9d5ec926c34cf' ]
},
'screen': {
'linear:union:linear': [ 'caeebd8b2d402a78bfc54d87592d07dd92a233b9327ec7f1f29558346ff2d247' ],
'linear:union:perceptual': [ 'bdfd1d0ab325fce61fc988fc50dc17dd2fbdb9a3f55fc198ba152e27d085567e' ],
'linear:clip-to-backdrop:linear': [ '1e3ffe6365879d697a82dd93a00c1bd57be49042fbff1e8c178dcae2831d4f07' ],
'linear:clip-to-backdrop:perceptual': [ 'ec2afa93292cd105971bfc0c63834d296e79444d2a9ee4757d75e762b61217af' ],
'linear:clip-to-layer:linear': [ 'fdba96e6257fe23f11b5d3eaa03e60285a2f1e002493501240d733763e886ff8' ],
'linear:clip-to-layer:perceptual': [ '59abc43a02c29de4e715f1d14ceb7e898f65f4e95a9e49bd2d9fd4fa52652f31' ],
'linear:intersection:linear': [ '7fce1cf27b5866e41fe44eed2509ddb54925347c7a50e79b1a142678bb363516' ],
'linear:intersection:perceptual': [ '7fce1cf27b5866e41fe44eed2509ddb54925347c7a50e79b1a142678bb363516' ],
'perceptual:union:linear': [ 'aaefe8c90bc9e87a7292e20da2d442816aaf76ff9fbf3b9dd36535a592f75191' ],
#'perceptual:union:linear': [ '5e331fc8f44f4b0595e4476b7fcf225dcd57b002cbdc9cca0db42bfb5fbcd816' ],
#'perceptual:union:perceptual': [ 'f779e92ef00411a7b8858e2c782b18274cbece3f25163d230aa65d7da417efdd' ],
'perceptual:union:perceptual': [ 'd01826d7b6d0ac1c2cc57adbf1517d721c8aa092e1043c770ebdb6727ae149cd' ],
'perceptual:clip-to-backdrop:linear': [ '907bb765b2ca1d0440e57ebcd20b54d017e202032a4b2ba66324b439c570202d' ],
'perceptual:clip-to-backdrop:perceptual': [ '42d2a2f103f24e4f6966a8ef134994cce932120d275daedd07b9ca4bff40f707' ],
'perceptual:clip-to-layer:linear': [ '0f6d297cde5714833fb373b6f16b531ec03746478916ffa7ff3eeacf9f39cdc4' ],
'perceptual:clip-to-layer:perceptual': [ '7f4606639fbb945b57c61df31d0b9236c347beb19f454f8547894b5f296fc292' ],
'perceptual:intersection:linear': [ 'ab1b9f2d5f84ea648e513ddd3a8a72bed65233b35334029996dfd24bb882588f' ],
'perceptual:intersection:perceptual': [ 'ab1b9f2d5f84ea648e513ddd3a8a72bed65233b35334029996dfd24bb882588f' ]
},
'softlight': {
'linear:union:linear': [ 'a4bcaa4a1b9792183dcfbb54fae2a4404072cffec54c44ed80165cb7f801f325' ],
'linear:union:perceptual': [ '71814581cb2008f233bcf871d1ba900cfcb87b363fc773095171788069cc5bc4' ],
'linear:clip-to-backdrop:linear': [ '7cc7d919564ed5f95dcbf8015163f4d543dd1d859f89078627670b989194f14d' ],
'linear:clip-to-backdrop:perceptual': [ 'c2831ca304b45a8b33265be6ff9acd6b4b93dd7894d443e9b85dcf83b4bdc7dc' ],
'linear:clip-to-layer:linear': [ '3c3aa48461e2780310842c9bfb383c87de7d3fa00b4d366de7f1f167adc1fda4' ],
'linear:clip-to-layer:perceptual': [ '54738b72f976797834dfc7fe4b2dbce3626eb98940a9325ebfd050303bd9fdb8' ],
'linear:intersection:linear': [ '135162ac987e3532f98647e9a144c1fbe7f7aadb8d5b8c34e3ced65c9c020c10' ],
'linear:intersection:perceptual': [ '135162ac987e3532f98647e9a144c1fbe7f7aadb8d5b8c34e3ced65c9c020c10' ],
'perceptual:union:linear': [ 'a879d733d10ff932ca8721f0de0b27478cf2f2925a99c965e44ee22018ca0b62' ],
'perceptual:union:perceptual': [ '33bce07481189020c3b9d68ee19267974f42977e3e1dd0b02b030e7c8ba88719' ],
'perceptual:clip-to-backdrop:linear': [ '7cab3239d38ae183b4a8f4e287046f988e5eeb56a7ab06bb92195ef0e549a59b' ],
'perceptual:clip-to-backdrop:perceptual': [ '542f0b4bd1c5a9eb83610b8c2d3575e1c02ddb83d7032b3a4f720ad6a1fd125b' ],
'perceptual:clip-to-layer:linear': [ '952ad321d00b58a7b8b7389b6fbcd8a143f1f31d2b274ae0b199faab930eb7a1' ],
'perceptual:clip-to-layer:perceptual': [ '472fbccc6bfc0f25969405106ea1d4be6b25e4fcb5ecef654f19ac70b03538ac' ],
'perceptual:intersection:linear': [ '537630f9fa83db4adac30d311d9281044e15c5161ab21b741be3de3719d02312' ],
'perceptual:intersection:perceptual': [ '537630f9fa83db4adac30d311d9281044e15c5161ab21b741be3de3719d02312' ]
},
'subtract': {
'linear:union:linear': [ '2769912ce750f1bba8d2d1cdf5e3b88297e2cf464aac136ab89ec495d8ce2ab2' ],
'linear:union:perceptual': [ 'a48aee59d32ad0aea2fdddba3332e99cca276ee36e35263aeda6a7c14d8a7cb4' ],
'linear:clip-to-backdrop:linear': [ '0a8521c0ec78fd0c06bade3882d2120dd7e95f82fbacdde48055d8a96288d308' ],
'linear:clip-to-backdrop:perceptual': [ 'd8111e97361d209c55c92546f1611958dcc0877c9bbe601f973f2141031d6367' ],
'linear:clip-to-layer:linear': [ '5bf2cedd9df68dceb0950b6ddd7a88662f340c55bc13a020153f4a992c00d449' ],
'linear:clip-to-layer:perceptual': [ '414cab557a9ba318bc3c7dc1d78412dba14e50e070097761ae2949941039f523' ],
'linear:intersection:linear': [ 'f018d79a7c0b1239725336ac0275a0da3d10ef78ca510d6aa010419798ae03aa' ],
'linear:intersection:perceptual': [ 'f018d79a7c0b1239725336ac0275a0da3d10ef78ca510d6aa010419798ae03aa' ],
'perceptual:union:linear': [ '1ba9a935dcce42e53ad2740dd9e9e51f10e1ffd99e468c4e05fabd87798fa349' ],
'perceptual:union:perceptual': [ 'cf7fab835b0d99ce7c9c8a5e53176a3a08149c61686fea8a0416ae03e5c97fe1' ],
'perceptual:clip-to-backdrop:linear': [ '7df56f7c9b5c3af823d3d50990694b333453c6f8989648692b70029fc4bc78d6' ],
'perceptual:clip-to-backdrop:perceptual': [ 'f44467112b62c58e77c3ffa9664c694f6661c23284cd5026c84869c02fea16be' ],
'perceptual:clip-to-layer:linear': [ '460052b7c5aed56f4c31367a27ad32bf8a5449e2814413d0f29644bce7adba52' ],
'perceptual:clip-to-layer:perceptual': [ '4dabe2d260e7da99e6c8ffab850a6314451664108bfde3e85ea3812e181c5063' ],
'perceptual:intersection:linear': [ '29a562eb9d1971cf5d6999baec5979580a48c75d1c0844d588ccf04b9e5905ae' ],
'perceptual:intersection:perceptual': [ '29a562eb9d1971cf5d6999baec5979580a48c75d1c0844d588ccf04b9e5905ae' ]
},
'vivid-light': {
'linear:union:linear': [ 'dac333038e93abdc2e35a4f56afbcade82ea8d7c11b0aee3c62718af3df8fc7b' ],
'linear:union:perceptual': [ '61ff19daddd147201534bbcbf8d5a19e1f65d30e0060541f76d89127e503f924' ],
'linear:clip-to-backdrop:linear': [ '6c229bd9a4fc188b3209a55ac6ccc1881a9f89bddb0bceb8050b18f97798f7a7' ],
'linear:clip-to-backdrop:perceptual': [ '0ad76183d5dcab2034bd102785c0681ba20c00f4fba81be8c1de1387a4ca1333' ],
'linear:clip-to-layer:linear': [ '9800b8905a5c4246694c1fb6a21aaf84e518539585d232a888836e809262d230' ],
'linear:clip-to-layer:perceptual': [ 'b4f97ffcdd856f95b9ff87fd6c5b0715f234c0ca82f1729b84656fcdbd2f3cf7' ],
'linear:intersection:linear': [ 'aff9137b2e6e268090597779ffce993894dba1b04f2f6e606b3e8ed3cf639ef7' ],
'linear:intersection:perceptual': [ 'aff9137b2e6e268090597779ffce993894dba1b04f2f6e606b3e8ed3cf639ef7' ],
'perceptual:union:linear': [ '996e5ea9223f5801484e7e30e63ba3f430a0848f3954ebe3175d321d72778021' ],
'perceptual:union:perceptual': [ 'fb97384c539bd4d3936f249e3ec11c182b13d0b158a91a2af9b2040ff6fa6266' ],
'perceptual:clip-to-backdrop:linear': [ 'b7aee5d4fda820c5c73ec55890d572fee2a8d050b474c78c6e69569cf9b1145b' ],
'perceptual:clip-to-backdrop:perceptual': [ '53afe7496c6ecb3ca8651a46deb2899c57ca674c79aabb0307ed5179af55fc4d' ],
'perceptual:clip-to-layer:linear': [ '74f8d553d429eb1544d3b4dd3c4a640a5b5610056bec75f8a5abbf0c67074ec7' ],
'perceptual:clip-to-layer:perceptual': [ '6d4eac0e393931751a68aea90acefd1378e183db5474691ca296e71ec3f96cdc' ],
'perceptual:intersection:linear': [ 'b1df3e91a2121dffaa4429e75b613227ebb3a50bdab06989d350413e7f8f8a1e' ],
'perceptual:intersection:perceptual': [ '1bef57cca5d42a53ea59f222ed8233abed30ab8fd174ff244a5095a78cafa320' ]
},
}

View File

@ -0,0 +1,36 @@
if not meson.can_run_host_binaries()
warning('Legacy layer mode unit testing disabled in cross-building or similar environments.')
subdir_done()
endif
pycode = ''
foreach mode, submodes : layer_modes_own_ops + layer_modes_shared_op
op_name = 'gimp:' + mode
op_enum = 'Gimp.LayerMode.' + mode.replace('-', '_').to_upper()
pycode += ' "@0@": {\n'.format(op_name) +\
' "enum": @0@,\n'.format(op_enum)
foreach spaces, sha256sums : submodes
pycode += ' "@0@": [\n'.format(spaces)
foreach sha256sum : sha256sums
pycode += ' "@0@",\n'.format(sha256sum)
endforeach
pycode += ' ],\n'
endforeach
pycode += ' },\n'
endforeach
test_ops_conf = configuration_data()
test_ops_conf.set('OPS', pycode)
test_ops_conf.set('OUTDIR', meson.project_build_root())
test_ops_py = configure_file(input : '../../layer-modes-legacy/tests/test-operations.py.in',
output : 'test-operations.py',
configuration : test_ops_conf)
test('layer-modes', run_python_test,
args: [ gimp_exe.full_path(), test_ops_py ],
env: test_env,
suite: ['operations/layer-modes', 'python3'],
timeout: 1000)

View File

@ -1978,6 +1978,7 @@ subdir('gimp-data/images/')
# Unit testing # Unit testing
subdir('libgimp/tests') subdir('libgimp/tests')
subdir('app/operations/layer-modes-legacy/tests') subdir('app/operations/layer-modes-legacy/tests')
subdir('app/operations/layer-modes/tests')
# Docs # Docs
subdir('docs') subdir('docs')