Skip to content

Repository files navigation

maybe.camera

A small, native photo camera for iOS and Android. Take a photograph or choose one with the platform photo picker, apply one of three effects, preview it, and save the result to the system photo library.

The interface intentionally stays close to a physical camera: a live image, a quiet black control deck, plain filter labels, one shutter, and native system pickers. There is no cross-platform UI framework and no account, feed, cloud upload, tracking SDK, or private photo index.

A window and plants photographed with maybe.camera's Reframe E6 filter

Reframe E6, captured with maybe.camera.

Filters

  • Reframe E6 — orientation-preserving, center-cropped 3:2 output (600×400 landscape or 400×600 portrait) using reFrame's canonical Spectra 6 palette and processing defaults: brightness 1.1, color 1.4, palette saturation 0.6, and Floyd–Steinberg dithering.
  • Cyberpixel H — threshold-bounded horizontal luminance pixel sorting.
  • Cyberpixel V — the same process along vertical image columns.
  • Original is available as the non-destructive baseline in the editor.

All image effects live in one portable C++17 implementation under common/. Swift and Kotlin only convert their native image objects to the shared BGRA contract, so platform output cannot silently diverge.

Using the camera

The large white shutter is the capture control; there is no keyboard shortcut on the mobile apps. Tap a filter name before taking the photo, or change it again in the editor before saving:

  • Reframe E6 is the stippled six-colour camera treatment.
  • Cyberpixel H and Cyberpixel V are the brighter, colour-mixing pixel-sort treatment in horizontal and vertical directions.

The photo button at lower left opens the operating system's photo picker. After capturing or importing, use Save to export the current filtered image.

The camera viewfinder is the exact 2:3 portrait / 3:2 landscape crop used by Reframe: the filter center-crops into the sensor image and never stretches it. Hold the phone sideways for a 600×400 result or upright for 400×600. On Android, the controls remain portrait-stable while capture orientation follows the phone; and select the camera zoom before capture.

Repository

maybe.camera/
├── common/   C++ filter engine, CMake project, and reference tests
├── ios/      SwiftUI + AVFoundation + PhotosUI application
├── android/  Kotlin + Compose + CameraX application and JNI bridge
└── design/   the minimal shared launcher mark

iOS

The iOS target uses AVCaptureSession/AVCapturePhotoOutput for the camera, PhotosPicker for scoped gallery selection, and PhotoKit's add-only permission for export. This follows Apple's native camera and picker architecture: AVCam and PhotosPicker.

Requirements: Xcode 15 or newer and an iOS 17 device/simulator.

  1. Open ios/MaybeCamera.xcodeproj.
  2. Select the MaybeCamera target and your signing team.
  3. Run on a device for the real camera; the simulator can exercise Library import, filters, and saving.

ios/project.yml is the source specification. If project membership changes, regenerate the checked-in Xcode project with make ios-project after installing XcodeGen.

Android

The Android target uses CameraX Preview + ImageCapture, Android's system Photo Picker, MediaStore, Jetpack Compose, and a JNI bridge to common/. CameraX is the recommended Android camera abstraction; see the official CameraX documentation and Photo Picker documentation.

Requirements: JDK 17, Android SDK 35, CMake 3.22.1, and an Android 10+ device/emulator.

./gradlew :android:app:assembleDebug

The APK is written to android/app/build/outputs/apk/debug/app-debug.apk.

Test the shared output

make common-test

The suite verifies pass-through behavior, both Cyberpixel directions, the E6 palette, the fixed 600×400 result, and byte-exact Pillow 12.3.0 reference hashes for the canonical 1200×800 reduce path and an odd-sized crop/resample path.

References and attribution

About

A small native camera app for iOS and Android with a few simple film like filters, no accounts, no cloud, no tracking.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages