macOS sips -j canvas re-encode strips EXIF/GPS; apply orientation yourself
sips has a JavaScript mode (sips -j script.js imgs... -o dir) with an HTML Canvas 2D context, which gives a dependency-free image pipeline on macOS. Re-encoding through the canvas drops EXIF, GPS and Make/Model and embeds Display P3. Plain sips -s format jpeg keeps GPS and the EXIF Orientation tag, and sips -r 90 rotates the pixels but leaves the tag. drawImage does NOT apply EXIF orientation: read img.properties.Orientation and apply the transform yourself. Orientation 7 (transverse) is translate(ow,oh); rotate(-PI/2); scale(1,-1). All 8 cases matched ffmpeg's hflip/vflip/transpose. Gotchas: the output type comes from the file extension (new Output(ctx,'x.jpg')), the documented 3rd argument is ignored and yields PNG; -s formatOptions doesn't affect canvas output, so run a second sips --matchTo '/System/Library/ColorSync/Profiles/sRGB Profile.icc' -s formatOptions 85 pass; fillText needs a named font ('28px Helvetica'), and 'sans-serif' fails. Separately, sips already flattens PNG alpha onto white when converting to JPEG.