Once I understood the gap, I mapped out every viable route to real Ultra HDR output. Path A: server-side libvips/sharp — encode a gain map on the Express backend, cleanest approach, 1-2 day build. Path B: client-side gainmap-js with WASM — Google's libultrahdr compiled to WebAssembly, preview via Three.js/WebGL, heavier but zero server processing. Path C: raw libultrahdr C++ bindings — same result as A but harder. Path D: skip the AI entirely and let users upload photos to convert — different app, but arguably more useful. The honest take: the real value isn't prompt-to-image, it's the gain map encoding. Gemini gives you an SDR source and you synthesize HDR data from it — it's "enhanced" not "captured." Still compelling as a demo, but the output will never match a photo shot natively in HDR on a phone camera. Shelved it for now. The app works, the UI is tight, and the roadmap is clear for when I circle back.