A premium React Native mobile app that faithfully emulates the shooting experience of a Pentax 17 half-frame film camera. Capture the nostalgic aesthetic of analog photography with authentic film stock simulations and a beautifully crafted retro UI.
Click the image above to watch the demo video
- Half-Frame Format - Authentic 2:3 vertical aspect ratio (17×24mm)
- 6 Film Stock Simulations - Kodak Gold 200, Portra 400, Ektar 100, Fuji Superia 400, CineStill 800T, Ilford HP5
- Flash Control - Off / Auto / On modes
- Front/Back Camera - Switch between cameras
- Frame Counter - 36-exposure roll simulation with progress bar
- Date Stamp - Optional retro date stamp on photos
- Live Preview Filter - See film effect before shooting
- Viewfinder Grid - Rule of thirds composition aid
- Grid View - 3-column layout with half-frame thumbnails
- Photo Stats - Total photos and rolls counter
- Pull to Refresh - Refresh photo list
- Empty State - Beautiful film roll illustration
- Film Indicator - Color dot shows film stock used
- Full Screen View - Tap to toggle controls
- Share - Native sharing with film stock credit
- Edit - Reprocess with different film stock
- Delete - With confirmation
- Photo Info - Date, frame number, film details, dimensions
| Film | Description |
|---|---|
| Kodak Gold 200 | Warm golden tones, nostalgic feel |
| Kodak Portra 400 | Natural skin tones, creamy pastels |
| Kodak Ektar 100 | Ultra-vivid colors, fine grain |
| Fujifilm Superia 400 | Punchy greens, cool shadows |
| CineStill 800T | Cinematic tungsten, teal/orange |
| Ilford HP5 Plus | Classic black & white, rich contrast |
- Framework: React Native CLI
- Language: TypeScript
- Camera:
react-native-vision-camera - Image Processing:
@shopify/react-native-skia - Navigation: React Navigation 7
- Storage:
react-native-fs,@react-native-async-storage/async-storage - Gallery:
@react-native-camera-roll/camera-roll
- Node.js 18+
- Watchman
- Xcode 15+ (iOS)
- Android Studio (Android)
- CocoaPods
# Install dependencies
npm install
# iOS setup
cd ios && pod install && cd ..# iOS Simulator
npx react-native run-ios
# iOS Physical Device (connect via USB)
RCT_NEW_ARCH_ENABLED=0 npx react-native run-ios --device
# Android
npx react-native run-androidIf you need to do a clean rebuild (e.g., after pulling changes or fixing build issues):
# 1. Clean iOS build artifacts
cd ios && rm -rf Pods Podfile.lock build && cd ..
# 2. Reinstall pods with old architecture
RCT_NEW_ARCH_ENABLED=0 pod install --project-directory=ios
# 3. Build and install on device
RCT_NEW_ARCH_ENABLED=0 npx react-native run-ios --deviceNote: The app currently requires RCT_NEW_ARCH_ENABLED=0 for physical device builds due to react-native-screens compatibility.
src/
├── screens/
│ ├── CameraScreen.tsx # Main camera with controls
│ ├── GalleryScreen.tsx # Photo grid view
│ └── PhotoViewerScreen.tsx # Full photo view + edit
├── services/
│ ├── filters.ts # Film stock definitions
│ ├── processor.ts # Skia image processing
│ └── storage.ts # Photo & settings storage
└── types/
└── index.ts # TypeScript interfaces
- Capture photo via Vision Camera
- Crop to half-frame aspect ratio (2:3 vertical)
- Apply film stock color matrix
- Add vignette effect
- Add film grain (optional)
- Add date stamp (optional)
- Encode to JPEG (92% quality)
- Save to Camera Roll + internal storage
- Theme: Dark mode with gold accent (#FFD700)
- Typography: System fonts with mechanical styling
- UI: Retro camera-inspired controls
MIT
