Open Museum is a project dedicated to capturing and maintaining 3D models of monuments and public art using 3D reconstruction.
The primary aim of this project is to document and preserve 3D models of world's cultural and artistic heritage. By leveraging modern photogrammetry techniques, we hope to make high-quality 3D models of monuments and public art widely accessible.
All 3D models are available on the website. You can browse and interact with them directly:
- Browse & download models: Visit openmuseum.io
- Models are available in .GLB and .USDZ for different Web, Apple Ecosystem and Android
Large files (3D models and images) are hosted on external storage to keep the repository lightweight.
The storage URL is configured via the PUBLIC_ASSETS_BASE_URL environment variable:
# Copy the example env file
cp .env.example .env
# Set the storage URL (current: Firebase Storage)
PUBLIC_ASSETS_BASE_URL=https://open-museum-885a1.firebasestorage.app- With remote assets: Set
PUBLIC_ASSETS_BASE_URLin.envand assets load from Firebase - With local assets: Leave
PUBLIC_ASSETS_BASE_URLempty and place asset files inpublic/models/andpublic/images/works/(these directories are gitignored) - Switching providers: Just change the URL — file paths are resolved at build time via
src/utils/assets.ts
Work-page gallery images now use generated .webp thumbnails for initial render and only load the full-size photo when the user opens the lightbox.
- Generator script:
pnpm thumbs:generate - Script source:
scripts/generate-work-photo-thumbnails.mjs - Auto-run before build:
prebuildruns the generator automatically - Output directory:
public/images/thumbnails/works/
The generator reads all photos arrays from src/content/works/*.json (gallery photos only), then:
- fetches originals from
PUBLIC_ASSETS_BASE_URLwhen set (Firebase-compatible URL handling), or - reads originals from local
public/when external storage is not configured.
Optional tuning via environment variables:
WORK_THUMBNAIL_WIDTH(default:900)WORK_THUMBNAIL_QUALITY(default:72)WORK_THUMBNAIL_CONCURRENCY(default:4)
The deployment workflow includes an automated changed-page asset validation step:
- Command:
pnpm test:assets:changed - Script:
scripts/ci/asset-health-check.mjs - Scope: validates only pages affected by changed content/routes in the current deployment diff
- Checks:
- poster assets (e.g.
<model-viewer poster>andog:image) - photo assets (
<img src>) - 3D model sources (
<model-viewer src>andios-src)
- poster assets (e.g.
If validation fails, the workflow:
- fails the build before deployment,
- emits GitHub Actions error annotations per failed asset,
- uploads
asset-health-report.mdas a workflow artifact, - writes the same report to the workflow step summary for quick triage.
Feel free to contribute to this project in any way you can. Whether it's capturing new models, improving existing ones, or sharing feedback, your help is greatly appreciated!
If you have any questions or suggestions, don’t hesitate to contact me.
Your support means a lot! Here’s how you can help:
- Make a donation.
- Star this repository ⭐
- Make a donation.
- Share the project with others
- Make a donation.
All source code (Astro/TypeScript/CSS/JavaScript) in this repository is licensed under the MIT License. See LICENSE.
All 3D models, scans, textures, and other non-code assets in this project are licensed under Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0).
Thank you for your interest in Open Museum!