Materializr
開源參數式 3D CAD 給創客 — 受限草圖、實體建模、螺紋、SVG 與文字雕刻、STL/STEP 匯出。Android、iPad、Linux、Mac、Windows。Vibe 編碼。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Local browser for a 3D-print model library: orbitable thumbnail grid, semantic search, open-in-slicer. Bun · Hono · React · three.js
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A local browser for a 3D-print model library. Point it at a directory tree full of
STL/3MF/OBJ files (zips included) and it gives you a thumbnail grid you can orbit,
search, and send to your slicer.
Open http://localhost:5173 and type an absolute path to your model library in the
path bar. That's it — thumbnails render in the background and cache to
~/.cache/model-browser/.檢視完整 README ↗Live demo: models.masamaeda.com
A local browser for a 3D-print model library. Point it at a directory tree full of STL/3MF/OBJ files (zips included) and it gives you a thumbnail grid you can orbit, search, and send to your slicer.
bun install
bun run dev # server on 127.0.0.1:3177, UI on http://localhost:5173
Open http://localhost:5173 and type an absolute path to your model library in the
path bar. That's it — thumbnails render in the background and cache to
~/.cache/model-browser/.
pack.zip!/part.stl).The context menu offers "open in …" for every application your OS associates with the model's type (STL/3MF/OBJ), default first. It reads your desktop-entry registry — there is no in-app slicer configuration:
Pin a default: xdg-mime default lycheeslicer.desktop model/stl, or use any
"always open with" affordance your desktop has.
Slicer missing from the menu? Its desktop entry probably doesn't declare
model types. Drop a corrected entry in ~/.local/share/applications/ — a
ten-line file. Example (photon-workshop.desktop for a Wine-installed slicer):
[Desktop Entry]
Type=Application
Name=Photon Workshop
Exec=wine start /ProgIDOpen PhotonWorkShop %f
MimeType=model/stl;
"Open with…" hands the file to a chooser command of your choice (e.g. a
rofi picker). Configure it in ~/.config/model-browser/launch.json; the menu
item is hidden until you do:
{
"chooser": ["/home/you/bin/open-with", "{file}"]
}
The same file can override any launch operation with an argv template
({mime}, {appId}, {file} placeholders; no shell involved) — see
docs/platform-surface.md for the operations and their contracts. Linux is the
implemented platform; the doc sketches what Windows/macOS ports would swap in.
The server must run inside your graphical session (it launches GUI apps on your
display) — starting bun run dev from a normal terminal is exactly that.
A separate embedding service (SigLIP) answering on port 8077 adds three things, all from the same index — the UI calls it meaning search:
The service is mini-classify, started by hand:
cd mini-classify
.venv/bin/python serve_api.py <collection root> --cache-dir <embedding cache> --port 8077
The collection root must lie inside your model library — an index of models the
app can't reach covers nothing. The positional root overrides whichever root the
cache recorded when it was built, which is how one cache can serve a moved or
re-derived copy of its corpus. For a containerised setup, see deploy/demo/README.md.
MODEL_BROWSER_INDEX points the server at a different address; setting it to the
empty string turns the feature off outright.
The app runs fine: browsing, thumbnails and name search don't touch the index, and the meaning toggle simply doesn't appear. The states the UI reports are distinct and worth reading literally:
--cache-dir: a cache with no embeddings in it.The panel also states what the index covers for the folder you're in ("12 of 40 models here are indexed"), so a thin result set is legible rather than mysterious.
The Search tab exposes what the ranking does: read the phrase as written or through a template, pool a model's views by mean/max/softmax, and bound the results by a count (default 60), a score floor (default 0.10), or both — at least one is always in force, since an unbounded meaning search is the entire collection. Mode and tuning ride in the URL, so a meaning search is a link you can share.
Worth knowing before you read a flat result as a bug:
bun run test # vitest, both workspaces
bun run typecheck # tsc, both workspaces
cd client && bunx vitest run)
— not from the repo root.openspec/specs/, changes flow
through openspec/changes/. CLAUDE.md carries the working agreements
(architecture constraints, testing sharp edges) and is worth reading even if
you're human.server/ is Hono and must run on Node unchanged (Bun-only APIs are confined to
its entry point); client/ is React + Vite + three.js with a single shared
WebGL renderer.