WeMod · iOS, Android
A phone, a car and ninety frames.
WeMod turns a 360° walkaround video of a vehicle into a 3D model. The Flutter app handles capture, upload and viewing. A Python backend does the heavy lifting in the background and tells the phone when the model is ready.
- Platforms
- iOS · Android
- Xeca built
- Flutter app · FastAPI backend · Photogrammetry pipeline · Background workers · Push notifications · Infrastructure



The app
Record. Upload. Wait for the push.
The mobile experience is deliberately short. Sign in, record a walkaround, upload, and get on with your day. The model arrives as a notification.
- Sign in
- Firebase Authentication.
- Capture
- In-app camera for a full walkaround of the vehicle.
- Upload & status
- Upload, then follow the processing status as the job moves.
- My Library
- Every scan, with thumbnails rendered by the pipeline.
- Viewer
- In-app GLB viewer for the finished model.
- Notification
- Firebase push when reconstruction completes.
Reconstruction
From video to mesh, asynchronously.
Reconstruction takes minutes, not milliseconds, so it never blocks the API. FastAPI accepts the upload and hands off to Celery workers; every step updates the database the app is polling.
- 01
Upload
The video lands through the async FastAPI layer and a job is queued on Redis.
- 02
Frame extraction
FFmpeg samples the walkaround into up to about ninety evenly spaced frames.
- 03
Photogrammetry
KIRI Engine reconstructs geometry and texture from the frame set.
- 04
Mesh processing
trimesh cleans the result: stray geometry removed, mesh tidied, exported as GLB.
- 05
Thumbnail
A preview render is produced for the library.
- 06
Publish
The database is updated and a Firebase push notification tells the user the model is ready.
Engineering
Designed to be tested without a GPU.
The pipeline has a mock processing mode that walks every state without running reconstruction, so the app, the API and the notifications can be developed and tested end to end anywhere.
- Async throughout
- FastAPI with async SQLAlchemy and Alembic migrations on PostgreSQL 16.
- Workers
- Celery on Redis for reconstruction jobs, isolated from request handling.
- Deployment
- Nginx in front, everything composed with Docker Compose.
- Storage
- Local disk today, with a storage layer designed to move to S3 without touching the pipeline.
Stack
What Xeca engineered.
Mobile
- Flutter
- Firebase Auth
- GLB viewer
Backend
- Python
- FastAPI
- Async SQLAlchemy
- Alembic
- PostgreSQL 16
Workers
- Celery
- Redis
- FFmpeg
- KIRI Engine
- trimesh
Infrastructure
- Nginx
- Docker Compose
- Local disk → S3
- Firebase push
Next
Quran
A complete Quran companion.