Skip to content

Repository files navigation

movescan

Film a narrated walkthrough of your home → get a mover-ready inventory ("cube sheet").

Live demo: https://move-scan.vercel.app

How it works

  1. Customer uploads a walkthrough video (browser → Vercel Blob direct upload, up to 2 GB).
  2. /api/analyze creates a load record, returns instantly, and runs analysis via after().
  3. The video is streamed Blob → GCS staging bucket (never buffered in the function), then passed to Gemini 2.5 Pro on Vertex AI as a gs:// URI with a structured-output schema.
  4. Gemini watches the video AND listens to the narration. Spoken statements override visuals ("this dresser stays" → marked not-going with an ✗). Unmentioned visible furniture is included as assumed — movers over-count rather than miss.
  5. Items come back grouped by room with quantity, size, per-item cubic feet (standard cube-sheet reference values), a note for the mover, and a video timestamp. Totals derive cubic feet → estimated weight (7 lbs/cu ft) → suggested truck size.
  6. Results page: video + inventory side by side, tap a timestamp to seek, toggle ✓/✗ to correct the list (persists). /loads lists every past survey.

Stack

  • Next.js (App Router) + Tailwind v4, deployed on Vercel
  • Vercel Blob — video storage + load records (JSON)
  • Vertex AI Gemini 2.5 Pro (@google/genai, service-account auth)
  • GCS staging bucket xmatch-move-scan-staging (us-east1, 7-day auto-delete lifecycle)

Env vars

Var Purpose
BLOB_READ_WRITE_TOKEN Vercel Blob (auto-added by the linked store)
GCP_SERVICE_ACCOUNT_KEY service-account JSON (Vertex + GCS)
VERTEX_PROJECT GCP project id (falls back to the SA's project)
GCS_STAGING_BUCKET staging bucket name (default xmatch-move-scan-staging)
GEMINI_MODEL optional override (default gemini-2.5-pro)
VERTEX_LOCATION optional override (default us-east1)

Dev

npm install
vercel env pull .env.local   # then add GCP_SERVICE_ACCOUNT_KEY + VERTEX_PROJECT
npm run dev

Pipeline smoke test without the UI: npx tsx scripts/test-pipeline.ts <video file> (uploads to Blob, runs the real analysis, prints the inventory JSON + totals).

Notes

  • Boxes and closet/cabinet contents are deliberately excluded (not visible on video); the UI says so. Fixtures/built-ins are excluded.
  • Vertex's HTTPS-URL media fetch caps near 20 MB — that's why the GCS staging hop exists. Verified working with a 108 MB video (analyzed in ~86s).
  • Demo has no auth by design (shareable with the moving company). Don't put anything sensitive in front of it without adding access control.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages