About this drop
Everything that moves runs on the UI thread. One Reanimated shared value drives the whole screen: a single Gesture.Pan writes an offset where negative opens the lens and positive scrolls the album, with rubber banding and withDecay momentum, so there is no ScrollView. The screen is two @shopify/react-native-skia canvases, so hit testing is arithmetic in a worklet. The camera body starts as a rounded rect that matches the Dynamic Island cutout (125.33 x 36.67 pt) and grows into a 243 pt lens barrel with the react-native-vision-camera v5 preview inside it. While the print feeds out it is mapped onto a projected quad with a homography, then two critically damped springs drop it flat onto the album. One SkSL runtime effect grades every photo and doubles as development: a pale ghost that gains contrast, then colour, over 60 seconds, with noise so it comes up unevenly. useAnimatedSensor feeds the accelerometer into a useFrameCallback worklet, so shaking speeds development and swings the print like loose paper. It needs a development build, since VisionCamera v5 and Nitro modules do not run in Expo Go, and was built on Expo SDK 56 with Reanimated 4.3. The layout is designed around the iPhone Dynamic Island; on phones without one, including Android, the pill is drawn with no cutout behind it. In the iOS Simulator, which has no camera, the lens plays a looping demo reel.