HDR brackets → OpenAI

Upload exposure-bracketed photos per property. We resize, fuse with Mertens (OpenCV WASM), then send the result to OpenAI gpt-image-2.