Changelog
All notable changes to Mirror will be documented in this file.
This project adheres to the Keep a Changelog format.
[3.0.0] — 2025-05-23
Hybrid Native + WebView architecture (Current)
Everything in Kotlin, with 3D rendering handled via local WebView + React overlay served from NanoHTTPD.
Added
- Two-face landscape mode: snapshot and try-on experience for 2 people simultaneously.
- Auto-carousel for landscape glasses → rotates every 10 seconds if idle.
- Snapshot feature:
- QR code generation & overlay on snapshot images.
- Upload snapshot to Firebase.
- Local saving and sharing.
- Advanced filters:
- Gender, brand, frame type filtering in portrait journey.
- Landscape-specific filters (if available).
- UI Enhancements:
- Carousel for portrait try-on.
- Side menu with multi-language support.
- Terms & Conditions dialog with QR code for privacy policy.
- New pager view for selecting glasses.
- Stability filters:
- One Euro Filter → reduce jittering with multiple faces.
- Kalman Filter → stabilize landmark tracking & depth correction.
- Video player integration for idle state with fallback to looping brand video.
- Local WebView for model viewer with transparent overlay above camera stream.
Changed
- Replaced SceneView rendering (v2) with React-based GLB renderer in WebView to fix transparency & sheenColor issues.
- Refactored model viewer to split fragments for portrait and landscape modes.
- Improved UI for brand/frame/gender selectors with detailed animations and progress indicators.
- Language selector improved; Android < 13 supported with new logic.
- Enhanced inactivity handling: auto return to video if no interaction.
- Updated filter logic in VTO activity to handle multiple variants and publications.
- Improved QR snapshot preview and model countdown animations.
Fixed
- Fixed glass rendering issues for transparent models (previously problematic in SceneView).
- Fixed crash with sheenColorIndex in Filament.
- Fixed depth estimation at rotated face edges.
- Fixed multiple duplicate tags and duplicate type conflicts.
- Fixed disappearing GLB models by ensuring all assets stored locally.
- Fixed alignment issues in portrait vs landscape layouts.
- Fixed snapshot UI bugs inside Dialog and countdown race conditions.
- Fixed auto-terminate of VTO if no faces detected after 3 minutes.
- Fixed bugs with brand image display in selection screens.
- Fixed crash when less than 6 glasses were available in selector.
[2.0.0] — 2025-02-01
Full Kotlin + SceneView version
Jetpack Compose + SceneView rendering with Filament.
Added
- Full Kotlin rewrite (removed web stack).
- Face tracking with MediaPipe Face Landmarker.
- Two-face detection (landscape mode) for shared try-on experience.
- Session management via Realm.
- Automatic session video fallback.
Known Issues
- Rendering crashes with
sheenColorIndexmaterials. - Poor transparency rendering for clear/optical frames.
- Stability problems with Filament under load.
[1.0.0] — 2024-02-01
Web-based version (React packaged as WebApp)
Added
- Initial version built in React, shipped as a packaged web app on device.
- First demo at MIDO 2024.
- Supported offline asset loading.
Known Issues
- Poor video quality from camera inside web container.
- Limited performance with real-time AR.