Work

Scan3D Mods · iOS, Android

A phone, a car and ninety frames.

Scan3D Mods 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

Capture positions · 90 frames · one orbit

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.

  1. 01

    Upload

    The video lands through the async FastAPI layer and a job is queued on Redis.

  2. 02

    Frame extraction

    FFmpeg samples the walkaround into up to about ninety evenly spaced frames.

  3. 03

    Photogrammetry

    KIRI Engine reconstructs geometry and texture from the frame set.

  4. 04

    Mesh processing

    trimesh cleans the result: stray geometry removed, mesh tidied, exported as GLB.

  5. 05

    Thumbnail

    A preview render is produced for the library.

  6. 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

OnTheTab

Keep tabs, not grudges.