BeEvent is an iOS camera app that converts ordinary iPhone camera frames into simulated event-camera style photos and videos.
It does not capture real hardware event-camera data. It simulates event output from conventional camera frames on device.
Positive events render red, negative events render blue, and no-event pixels render black.
- macOS with Xcode installed
- iOS 17+
- XcodeGen
- Real iPhone for final camera verification
./scripts/bootstrap.sh
open BeEvent.xcodeproj./scripts/test.shBeEvent/: iOS app source.BeEvent/Features/Camera: SwiftUI camera UI, preview, controls, and Docs.BeEvent/Features/Capture: AVFoundation session and frame pipeline.BeEvent/Infrastructure/Permissions: camera, microphone, and photo-library permissions.BeEvent/Infrastructure/Export: event photo/video export and Photos saving.EventCore/: event simulation, rendering, and Metal processing.EventCore/Tests: deterministic EventCore tests.Icons/: source assets for generated app icon.scripts/: bootstrap, test, and asset-generation scripts.
- On-device media processing only.
- No accounts.
- No analytics.
- No ads.
- No tracking.
- No uploads.
- No network access.
- No location permission.
- Do not store, save, export, or transmit raw RGB camera frames.
- Normal user saves go to Photos as simulated event photos/videos.
- Temporary save-staging files are deleted after successful Photos insertion.
- Event polarity is always red for positive, blue for negative, and black for none.
Selectable modes:
- Basic Frame Difference
- Log Intensity DVS
- Accumulated DVS
- v2e Inspired
- Stylized Event
Basic Frame Difference is the default mode at app launch and after non-persistent state reset.
Every selectable mode must use the optimized Metal/Core Video path for live preview, photo capture, video recording, and export. CPU simulation may exist only as deterministic test/reference code that the app runtime cannot call.
The main screen is a real camera UI, not a mock:
- Full-screen event preview
- Photo/Video toggle
- Centered shutter
- Lower-right front/back camera switch
- Zoom slider
- Simulation mode picker
- Mode-specific
Parametersdropdown for controls such as thresholds, intensity, accumulation, and v2e-inspired settings - Preview resolution picker
- Background RGB camera FPS picker when supported
- Lower-left Photos affordance
- Permission fallback UI
- Centered recording timer in video mode
- Bilingual English/Japanese in-app Docs
During active video recording, configuration-changing controls are hidden and disabled. Zoom and the front/back camera switch remain available unless a platform limitation requires truthful disabling.
The app icon is generated from Icons/BeEvent_icon_gray.png by scripts/generate_app_icon.py.
The generator creates a 1024 x 1024 opaque PNG in the app icon asset catalog using Basic Frame Difference, a 4.8 px subpixel shift per copy, an 11/255 luminance threshold, and black/red/blue quantization.
Primary implementation documents:
AGENTS.mdPRODUCT_REQUIREMENTS.mdTECHNICAL_SPEC.mdTASKS.mdPRIVACY.md
These files are the source of truth for implementing the production app.