.aep import: EXtractoR (copy) reads the effect input, not the EXR plane of that name

After Effects' Channel Info kind 2 "(copy)" was imported as R, G, B or A.
EffectCraft's EXtractoR resolves those names through the footage's aux planes
first, and an OpenEXR keeps its own R/G/B/A planes, so "(copy)" read the
original file plane and dropped what an earlier effect did to the channel.

"(copy)" is now a reserved EXtractoR channel name (EXTRACTOR_COPY) that the
CPU and GPU renderers never look up in the aux planes: it is the input's own
channel of the same position. The importer writes it for kind 2.

Render regression: a modified input buffer with same-named R/G/B/A aux planes
of other values; GPU parity case with (copy) on an aux scene with R/G/B.
This commit is contained in:
vangel76
2026-11-08 02:32:11 +01:00
parent 8af16ac7a4
commit 67a39d9a2b
9 changed files with 99 additions and 35 deletions
+3 -1
View File
@@ -571,7 +571,9 @@ data layouts, read from default instances only):**
EXtractoR's Channel Info is the plug-in's own **little-endian** layout: `u32` 1 and 28 bytes, then
four 164-byte records (Red, Green, Blue, Alpha), each a kind in byte 0 (1 a channel of the footage by
name: `R`, `G`, `B` by default; 2 the input's own channel, named `(copy)`: Alpha by default) and the
channel name NUL-terminated from record byte 35. The rest is not read: it differs between instances
channel name NUL-terminated from record byte 35. EffectCraft imports kind 2 as its EXtractoR's `(copy)`,
the effect input's channel of the same position as earlier effects left it, not as `A` (which names
an OpenEXR footage's own alpha plane). The rest is not read: it differs between instances
with the same channels (uninitialised-looking values, also in bytes 1..4 of a record: `02 00 00 32`
on Alpha in one definition's default, which is why only byte 0 is the kind). **A chosen channel**
(`extractor-07-preset-channel-z`, a preset of our own that reads `Z` into Red, Green and Blue) is kind