Materializr
오픈소스 파라메트릭 3D CAD로 제약 스케치·솔리드 모델·나사·SVG·텍스트 조각·STL/STEP 내보내기를 지원합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Open source editor for composing app screens inside interactive 3D device mockups.
Built with Next.js, React, Three.js and React Three Fiber to compose marketing shots, product screens and device scenes with per-object controls, layered editing and PNG export with an optional canvas background.README 전문 보기 ↗Built with Next.js, React, Three.js and React Three Fiber to compose marketing shots, product screens and device scenes with per-object controls, layered editing and PNG export with an optional canvas background.
1080p, 1440p or 4K — transparent, or with the canvas background and floor gridpt-BR and en-US UI modessmartphone, smartphone2, smartphone3, smartwatch, notebook and tabletImage / Video control in the Screen section, with model-specific placeholders generated at runtimeMotion, where they follow the playhead and the recording is a clip on its own track under the object — drag it to set when it starts, drag its edges to trim the start or the end, and outside the clip the screen shows only its background; Static is a still image, so its Screen section goes straight to the image upload, with no Image | Video choiceFit and Crop, since cropped bands show it tooScreen section shrinks to a single row — type icon, file name and a ⋮ menu — and the menu opens a floating panel beside the Inspector with Replace, the Fit | Crop options and RemoveExport dialog in the middle of the screen, behind a dimmed backdrop: choose everything first — format, size, background — then export once; Cancel, Escape or a click outside closes it1920 × 1080, 2560 × 1440 and 3840 × 2160, remembered between exportslocalStorage: composition, background color and camera pose — plus every keyframe when saved in Motion — saved from the Templates section or along with an export (the Save as template checkbox in the Export dialog, checked by default)Static and Motion are separate environments: each keeps its own scene and its own template list, and the first visit to Motion starts from a copy of the static sceneRestore framing, which returns the camera to the pose saved with that template without touching the objectsStatic / Motion switch on the canvas and a timeline with one track per visible object — create a keyframe at the playhead with the track's ◆+ button, drag keyframes in time or shift a whole track, right-click between two keyframes to pick the transition (presets or a cubic-bezier curve editor with overshoot), edit the selected keyframe's pose in the Inspector, and press Space to playFit scene in the toolbar, Frame object in each object's menuAlignment at the top of Transform: left, center or right and top, middle or bottom, one axis per click, with a small margin — against the video frame in Motion, against the part of the canvas visible between the panels in Static; the object keeps its distance to the cameraReset as a single icon, dimmed when there is nothing to reset− / + in its header or a trackpad pinch inside it, anchored on the playhead or under the fingers, with a ruler that refines to tenths of a secondMotion: drag its top edge (or use the arrow keys on it), double-click to reset; the height is rememberedTransform and, in Motion, animate it per keyframe to fade an object in or outMotion an animated object enters the scene at its first keyframe — drag its track forward and it isn't there before — and stays on its final pose after the last oneMotion (1920 × 1080 by default), set from the timeline header with 16:9, 1:1, 4:5 and 9:16 presets or width and height in pixels, with an optional aspect-ratio lock; the canvas takes that shape, and Motion templates store itMotion, where the Export dialog opens on Video: background (MP4 with it, transparent WebM without), frame rate (30 or 60 fps) and resolution (1× or 2×), with a one-line summary; while it renders, a centered progress dialog covers the whole editor with a bar, the current frame, an estimate of the time left and Cancel. In Safari, which doesn't show transparent video yet, choosing a transparent video shows a note suggesting Chrome, Edge or Firefox, with a Copy project link buttonHide UI mode with a toggle you can drag to any canvas corner, animating between the toolbar and the corner it snaps topt-BR and en-US UI supportNext.js 16React 19Three.js@react-three/fiber@react-three/dreiTailwind CSS 4Jest + Testing LibraryVercel Web AnalyticsMicrosoft Clarity (with consent)npm install
npm run dev
Production build:
npm run build
Quality checks:
npx tsc --noEmit
npm run lint
npm test -- --runInBand
This project includes the minimal Vercel Web Analytics integration through @vercel/analytics.
To see traffic data in production:
Web Analytics in the Vercel dashboard.It also uses Microsoft Clarity (@microsoft/clarity) for heatmaps and session recordings, only with consent:
NEXT_PUBLIC_VERCEL_ENV, set by Vercel); localhost and previews record nothingdata-clarity-mask on <body>), the 3D canvas isn't captured, and a project link's #scene= is removed from the URL before Clarity startsapp/lib/analytics.ts| Model | GLB file | modelScale | baseRotation | pivotOffset | Recommended upload | Notes |
|---|---|---|---|---|---|---|
| smartphone | apple_iphone_14_pro_orange.glb | [122.9, 122.9, 122.9] | [0, 90.5°, 0] | [-1.5, -2.5, 1.0] | 1290x2748 | default model, notch removed (clean full screen) |
| smartphone2 | apple_iphone_14_pro_orange.glb | [122.9, 122.9, 122.9] | [0, 90.5°, 0] | [-1.5, -2.5, 1.0] | 1290x2748 | same GLB, keeps the notch |
| smartphone3 | smartphone.glb | [1, 1, 1] | [0, 0, 0] | [125.09, -314.71, 180.11] | 1290x2755 | generic phone |
| smartwatch | smartwatch.glb | [19.44, 19.44, 19.44] | [0, -π/2, 0] | [-7.3, -14.48, 0.08] | 1290x1452 | |
| notebook | notebook.glb | [2311, 2311, 2311] | [0, π, 0] | [0, -0.0964, 0.0397] | 2755x1684 | |
| tablet | — (procedural) | [1, 1, 1] | [0, π, 0] | [0, 0, 0] | 1668x2388 | fully code-drawn, no GLB asset |
Every model's pivotOffset (GLTF units, applied inside the scaled group) centers its visible geometry on the group origin, so Inspector rotations pivot around the visual center and all models align with each other by construction — modelSpawnOffset is now [0, 0, 0] everywhere and reserved for intentional offsets.
The smartphone (default) and smartphone2 share the same iPhone GLB. smartphone hides the notched screen mesh and covers the molded notch with a generated clean rounded-rectangle screen plane pushed slightly in front; smartphone2 keeps the original notch.
The tablet has no GLB: its body is an extruded rounded rectangle with beveled edges, and the bezel and screen are generated rounded planes in front of it — the same clean-screen technique used by the smartphones. Toggling off the device body leaves just the floating screen, and a dedicated Screen bezel toggle removes the black frame around the screen.
Export, the export progress and the AlertDialog confirmationslocalStorage persistenceChecklist:
.glb file to public/models/app/components/app/lib/3d-tokens/app/models/device-models.tsDeviceModelId uniondebugPartColors and debugModecustomizableColorKeys, and add their display labels to colorPartLabels in app/lib/i18n.ts for both locales (labels live in i18n, not in the model definition)MODEL_PLACEHOLDER_SIZES (the image is generated at runtime) and define the final themespivotOffset to the negative of the visible bounding-box center (GLTF units) so the model is centered on its pivot — rotation then happens around the visual center and alignment with the other models is automaticHow it works under the hood, and the lessons learned building it, are in docs/technical-notes.md. Working rules for contributors and coding agents are in AGENTS.md.
tmp/These scripts are development utilities for asset preparation and are not part of the normal app runtime.
Code in this repository is licensed under GNU AGPL-3.0-only. See LICENSE.
Project identity, branding and third-party assets may have separate attribution or usage requirements. Check the in-app Credits modal and asset source licenses before redistributing assets.
getScreenLayoutpt-BR and en-US