MyGo 云音乐
用 Go 与 MyGo 写成的第三方网易云音乐桌面客户端。原生界面,没有 WebView;边下边播,无损与 Hi-Res,逐字歌词与「律动」,刘海播放器。
Translation pending
Discover monuments, fountains, and artworks in public spaces — in 3D.
Translation pending
MediaJavaScript · AstroGitHub @nuit-dhiverOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Open Museum is a project dedicated to capturing and maintaining 3D models of monuments, public art and cultural heritage globally using 3D reconstruction.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Open Museum is a bilingual (English/German) static website for exploring 3D reconstructions of monuments, fountains, and public art. The project documents cultural heritage through interactive 3D presentation at openmuseum.io.
Working on the code? AGENTS.md is the orientation guide — architecture, the build's Firestore dependency, and the gotchas that are not visible from the tree. Written for coding agents, but the same ground a new contributor needs.Read the full README ↗Open Museum is a bilingual (English/German) static website for exploring 3D reconstructions of monuments, fountains, and public art. The project documents cultural heritage through interactive 3D presentation at openmuseum.io.
Working on the code?
AGENTS.mdis the orientation guide — architecture, the build's Firestore dependency, and the gotchas that are not visible from the tree. Written for coding agents, but the same ground a new contributor needs.
The primary aim is to document and preserve 3D models of cultural and artistic heritage in public spaces. By leveraging modern photogrammetry and 3D reconstruction, we make these works accessible for online viewing and cultural documentation.
All works are available on the website for interactive viewing in the browser:
.glb (web) and .usdz (Apple AR) where availableEach work page shows its IP status (public domain, freedom of panorama, or authorized use) and whether downloads are available.
| Layer | Choice |
|---|---|
| Framework | Astro v7 (static output) |
| Styling | Tailwind CSS v4 |
| 3D viewer | <model-viewer> v4 |
| Content | Cloud Firestore (content / works) loaded at build time |
| i18n | Astro built-in routing — English at /, German under /de/ |
| Deployment | GitHub Pages via GitHub Actions |
pnpm install
pnpm dev
Content is fetched from Firestore during astro dev and astro build. Authenticate with Application Default Credentials first:
# Option A: gcloud ADC
gcloud auth application-default login
# Option B: point at a credentials file
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/adc.json
export GOOGLE_CLOUD_PROJECT=open-museum-885a1
Create a .env file in the project root for optional configuration (see Asset Storage).
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:
# .env
PUBLIC_ASSETS_BASE_URL=https://open-museum-885a1.firebasestorage.app
Asset paths in Firestore documents are resolved at build/runtime via src/utils/assets.ts.
PUBLIC_ASSETS_BASE_URL in .env and assets load from Firebase (or another compatible host)PUBLIC_ASSETS_BASE_URL empty and place asset files in public/models/ and public/images/works/ (these directories are gitignored)getAssetUrl()When Firebase is configured, model files can be loaded through authenticated requests. Set these in .env (or as GitHub Actions variables for deployment):
PUBLIC_FIREBASE_API_KEYPUBLIC_FIREBASE_AUTH_DOMAINPUBLIC_FIREBASE_PROJECT_IDPUBLIC_FIREBASE_STORAGE_BUCKETPUBLIC_FIREBASE_APP_IDWorks are stored in Firestore (project open-museum-885a1, database content, collection works). Each document ID is the work slug (for example berlinstein). Astro loads the collection only at build/dev time via a custom content loader — visitors receive static HTML and never talk to Firestore.
Edit documents in the Firebase Console or via the Firebase/Admin CLI. Security rules allow public reads (the work data is public website content) and deny client writes except for the content-admin allowlist in isContentAdmin(), which exists so the work creator below can publish new works. Console/CLI updates use IAM and are not blocked by those rules.
Key fields:
title, description — bilingual (de / en)category — brunnen, denkmal, or kunstwerkmodel.glb, model.usdz — asset pathsphotos, poster — gallery and preview imageslocation — coordinates, address, optional Google My Maps embed URLcity, country, artist, modelCreator, year, material — metadataipStatus — public-domain, freedom-of-panorama, or authorized-usedownloadAllowed — whether GLB/USDZ download is offered on the work pagetour — optional guided camera tour stepsSee src/content/work-schema.ts for the full schema.
pnpm work:create
This serves the work creator at
http://localhost:5174/tools/work-creator/: a local page that uploads the
GLB/USDZ/poster/photos to Firebase Storage and writes the works/<slug>
document, validated against the same rules the build enforces. It needs a
one-time setup (an admin user plus a config file) — see
tools/work-creator/README.md.
Gallery thumbnails need no action: prebuild regenerates missing .webp files
from Storage during the build, so nothing has to be committed for a new work.
Validation is shared between the tool and the CLI in
scripts/lib/work-shape.mjs; keep it in sync with
src/content/work-schema.ts when fields change.
Firestore edits do not auto-publish. After updating works:
main, orworkflow_dispatch)If you still have local JSON under src/content/works/:
pnpm works:migrate:dry # validate + print plan
pnpm works:migrate # upsert into Firestore
pnpm works:verify # read back / validate remote documents
In addition to the existing PUBLIC_* variables, set:
| Variable | Example |
|---|---|
GCP_WORKLOAD_IDENTITY_PROVIDER | projects/717967107645/locations/global/workloadIdentityPools/github-actions/providers/github-oidc |
GCP_SERVICE_ACCOUNT | [email protected] |
These enable keyless Workload Identity Federation so CI/deploy can read Firestore at build time.
Work-page gallery images use generated .webp thumbnails for initial render and load the full-size photo only when the user opens the lightbox.
pnpm thumbs:generatescripts/generate-work-photo-thumbnails.mjsprebuild runs the generator automaticallypublic/images/thumbnails/works/The generator reads all photos arrays from Firestore works (gallery photos only), then:
PUBLIC_ASSETS_BASE_URL when set (Firebase-compatible URL handling), orpublic/ 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:
pnpm test:assets:changedscripts/ci/asset-health-check.mjs<model-viewer poster> and og:image)<img src>)<model-viewer src> and ios-src)If validation fails, the workflow:
asset-health-report.md as a workflow artifact,Feel free to contribute in any way you can — capturing new models, improving existing ones, or sharing feedback.
If you have questions or suggestions, don't hesitate to get in touch.
Your support means a lot:
All source code (Astro/TypeScript/CSS/JavaScript) in this repository is licensed under the MIT License. See LICENSE.
Not all assets share the same license. Rights vary by work:
Check the IP status badge and download controls on each work page at openmuseum.io before reusing any asset. For rights questions or takedown requests, see the About page or contact [email protected].
Thank you for your interest in Open Museum!