Skip to content

Latest commit

 

History

52 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Iris

Iris

Expo SDK 57 · Vision Camera v5 · iOS · Android · MIT

Website · Privacy


Iris screenshot Iris screenshot

Iris is a pro camera app for iOS. It features:

  • 📱 Multi-lens switching (0.5× / / tele) and smooth zoom
  • 📸 Photo & video capture → dedicated Iris album in Photos
  • 🎛️ Manual Pro controls (ISO, shutter, WB, focus, EV)
  • 🎨 Look presets with native bake into captures (iris-look-bake), including on-device Anime ML (AnimeGANv3 Shinkai / Hayao) for photos
  • 🧭 Assist overlays: grid, level, histogram, zebra, peaking, aspect crop
  • ⚡ Capture presets, scene chips, countdown, volume shutter
  • 🖼️ Gallery + last-shot review

Iris is a pro camera app for iOS and Android built with Expo Dev Client, Vision Camera, and a custom native look-bake module.

Primary day-to-day target is still iOS on a physical device; Android production builds (APK / AAB) are ready via EAS — see Play Store docs below.

Quick start

nvm use && npm install
npm run prebuild:ios && cd ios && pod install && cd ..
npm run ios

A physical iPhone is required for camera preview and capture (Simulator has no camera hardware).

Day to day after the first native build:

npm start              # expo start --dev-client
# open the Iris Dev Client on device

Links

Android / Google Play

npm run build:android:preview:local   # local APK for sideload (preferred)
npm run release:android:github        # upload newest preview APK to GitHub Releases
npm run build:android:local           # local AAB for Play Store
npm run screenshots:store             # iPhone marketing set (1290×2796)
npm run screenshots:play              # Play graphic + Android framed screenshots

GitHub Releases (sideload APK): https://github.com/dmitryshelomanov/iris/releases

Store release checklist

Item Android / Play iOS / App Store
App id / package in config Done (com.iris.camera) Done (com.iris.camera)
Icon + splash in binary Done Done
Privacy policy URL Done (live) Done (same URL; paste in ASC)
Phone listing screenshots Done (framed-*.png) Done (01–06.png)
Feature graphic / listing icon Done (play-store/) n/a (uses app icon)
Listing copy + compliance docs Done (LISTING, DATA-SAFETY) Todo (docs/app-store/ not started)
EAS production profile / scripts Done (build:android, upload keystore on EAS) Todo (no build:ios / submit yet)
Store-signed production binary Done (AAB via EAS) Todo (.ipa via EAS)
Developer account + store console app Todo (Play Console create + first AAB upload) Todo (Apple Developer + App Store Connect)
Automated submit credentials Todo (Google service account for eas submit) Todo (App Store Connect API key)
Internal test track Todo (Play Internal testing) Todo (TestFlight)
Tablet screenshots Optional Todo if supportsTablet stays true
Public production release Todo Todo

Full asset map: docs/STORE-ASSETS.md. Android upload steps: docs/play-store/PLAY-CONSOLE.md.

Requirements

  • Node 22.13+ (see .nvmrc)
  • Xcode + CocoaPods (pod on PATH)
  • Physical iPhone for camera preview and capture

Scripts

Script Purpose
npm start Metro + Dev Client
npm run ios Native Debug build and launch
npm run ios:prod Release build on a physical device (no Metro)
npm run build:android:preview:local Local EAS Android APK (sideload)
npm run release:android:github Upload preview APK to GitHub Releases
npm run build:android:local Local EAS Android AAB (Play Store)
npm run submit:android EAS submit to Play (internal track)
npm run screenshots:store iPhone App Store marketing screenshots
npm run screenshots:play Play feature graphic + Android screenshots
npm run lint Prettier check + typecheck
npm run lint:types Typecheck (tsc --noEmit)
npm run format Prettier write
npm run format:check Prettier check (CI)

Stack

Layer Choice
App Expo SDK 57 + Dev Client (not Expo Go)
Routing Expo Router (app/)
UI NativeWind + Reusables in src/shared/ui/
Camera react-native-vision-camera + Nitro modules
Looks Local Expo module modules/iris-look-bake
Icons lucide-react-native

Project structure

Feature-Sliced Design under src/, with thin Expo Router screens in app/:

app/                          Expo Router entry points
  (tabs)/index.tsx            Camera
  gallery.tsx                 Gallery
  settings.tsx                Capture defaults
  permissions.tsx             Permission help

src/
  pages/                      Screen compositions
  widgets/camera-screen/      Main camera widget
  features/camera/            Lenses, manual, looks, overlays
  features/media/             Recents, review UI
  features/onboarding/        Permission / onboarding gate
  entities/capture/           Library save + recents model
  shared/                     Theme, utils, UI primitives

modules/iris-look-bake/       Native look bake (photo / video)
assets/images/                App icon, splash, Android adaptive icons
docs/STORE-ASSETS.md          Store listing asset map
docs/store-screenshots/       App Store + Play marketing screenshots
docs/play-store/              Play listing copy, graphic, runbook
docs/images/                  README screenshots

Simulator vs device

Simulator Physical iPhone
UI / navigation Yes Yes
Camera preview No Yes
Lens switching N/A Yes (device-dependent)
Capture / bake No Yes

Icons and splash

Source assets live in assets/images/ and are wired in app.json. Native iOS copies live under ios/Iris/Images.xcassets/.

After changing icons or splash, rebuild the native app (npm run ios). If the home-screen icon does not update, delete the app from the device and reinstall.

About

Built by Dmitry Shelomanov — Senior Frontend / React Native developer.

Socials

License

MIT © Dmitry Shelomanov

About

Pro camera for iOS and Android — multi-lens, manuals, film looks baked into every shot.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages