From e07ef4acaa15c22372422736c3bd780bfa8304f9 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Thu, 27 Aug 2026 08:59:35 +0800 Subject: [PATCH] Set layer flags bit3 (Photoshop 5.0+) so PS reads tagged blocks correctly PS-generated PSDs always set flags bit 3 (0x08) to signal Photoshop 5.0+ format where the layer extra data contains tagged blocks. Our layers had flags=0x00, so Photoshop treated them as pre-5.0 records and failed to read the extra data / layer pixels, showing every layer as transparent (only ape_2 happened to render). Verified against the reference PSD. --- ppl2psd.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ppl2psd.py b/ppl2psd.py index 699ebe0..1361ed7 100644 --- a/ppl2psd.py +++ b/ppl2psd.py @@ -472,7 +472,9 @@ def _layer_record(top, left, bottom, right, name, opacity, visible, channels) -> rec += b"8BIM" + b"norm" rec += struct.pack(">B", opacity) rec += struct.pack(">B", 0) # clipping - rec += struct.pack(">B", 0 if visible else 2) # flags: bit1 = hidden + # flags: bit3 = 1 for Photoshop 5.0+ (tells PS the extra data contains + # tagged blocks); bit1 = hidden + rec += struct.pack(">B", 0x08 | (0 if visible else 0x02)) rec += struct.pack(">B", 0) # filler # extra data extra = bytearray()