I built it with the Rive CLI and a coding agent. The parlor, the ghost and the whole interface are written as RML and checked with headless renders, which is honestly a wild way to make art. The camera look is a single GPU Canvas shader: the old lens blur, the rippling developer tray, the finished print, and the glass cracking at the end. A Luau script draws the ghost between the layers of the room, so she only ever shows up on the developed plate but never in the live view. Data binding and a state machine run the focus dial, the timer, the captions and the sound.