Materializr
오픈소스 파라메트릭 3D CAD로 제약 스케치·솔리드 모델·나사·SVG·텍스트 조각·STL/STEP 내보내기를 지원합니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기XR-native 3D printing slicer for Android XR, powered by the OrcaSlicer engine.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗OrcaXR is an XR-first 3D printing slicer, now reimagined entirely for the web.
Originally built as a native Android app, OrcaXR has been rewritten to be a fully web-native application. The native Android app is now deprecated.
OrcaXR is experimental software in an Alpha state. 3D printing involves high temperatures, moving parts, and potential fire hazards. Slicing errors or unexpected G-code generation may occur. Always verify generated G-code in a desktop viewer before printing, and never leave your printer unattended.
To launch OrcaXR, simply visit our hosted web application: Launch OrcaXR Web App
Note: You do not need to install an APK or compile any native code to run the slicer.
Chrome 142 and newer can grant the hosted HTTPS app Local Network Access to a printer's HTTP Moonraker endpoint:
[authorization] section, add the OrcaXR page's exact origin to cors_domains and restart Moonraker. For the hosted app, that origin is https://orcaxr.martinez.fyi.http://192.168.1.50 or http://printer.local:7125.HTTP leaves printer status, API keys, webcam frames, and uploaded G-code unencrypted, so only use it on a trusted LAN. Browsers without Local Network Access support—or users who deny permission—still need a trusted HTTPS endpoint or reverse proxy.
For the Snapmaker U1, the extended firmware can provide an HTTPS fallback through Tailscale. Join the browser or headset and printer to the same tailnet, enable Tailscale, then SSH into the printer as root and run:
tailscale serve --bg http://127.0.0.1:80
Enter the resulting address in OrcaXR, for example https://lava.taild5c213.ts.net.
The Device page can remember printer API keys and slicer tokens in this browser's local storage. This is optional (enabled by default), is not encrypted by OrcaXR, and is readable by scripts on the same origin or anyone with access to the browser profile. Turning remembrance off or choosing Forget Saved Credentials erases saved copies. AI keys stay in tab memory only.
Printer maintenance scripts require an explicit SSH host and account:
python3 fix-moonraker.py --host printer.local --username root
They use keys or your SSH agent and require an already verified known_hosts
entry. Verify the printer's host-key fingerprint through a trusted channel before
adding it with your normal SSH client. --known-hosts selects another verified
file; --identity selects a private key. If the printer requires a password, add
--password to use OpenSSH's hidden terminal prompt. The scripts never embed,
store, or log authentication credentials. The Moonraker service and webcam scripts
change configuration and restart/reload the relevant service when run.
Credentials formerly embedded in maintenance scripts and server tokens formerly printed in startup logs must be rotated if still active. Source cleanup does not revoke those credentials or remove copies from Git history. History rewriting is a separate coordinated operation; rotation and hardware qualification remain pending until recorded evidence exists.
OrcaXR can be self-hosted as an all-in-one container that packages the full Web UI, the native Snapmaker Orca CLI engine, the WASM engine, and optional Tailscale HTTPS support:
docker compose -f server/docker-compose.yml up -d
http://localhost:3000. The browser UI discovers and verifies the container’s native CLI slicer automatically. An explicitly disabled or forgotten connection stays off across reloads; use Connect to enable it again. If browser storage is unavailable, a verified connection works for the current tab and the settings show that it cannot be remembered.ORCAXR_SERVER_TOKEN_FILE or ORCAXR_SERVER_TOKEN. Loopback-only same-origin deployments can also generate a persistent token in ~/.orcaxr/server-token.Generated server tokens are stored with owner-only permissions. Startup logs name
the protected file only; they never print its value. Keep token files out of
shared diagnostics and use ORCAXR_SERVER_TOKEN_FILE for managed deployments.
To add HTTPS through the optional Tailscale sidecar, supply TS_AUTHKEY through
your process environment or secret manager, then enable its Compose profile:
docker compose -f server/docker-compose.yml --profile tailscale up -d --build
Enable HTTPS certificates in your tailnet and open the node's Serve URL from
another authenticated tailnet device. The sidecar uses userspace networking,
shares OrcaXR's network namespace, and forwards to 127.0.0.1:3000. Its whole
server/tailscale/ configuration directory is mounted so Serve detects updates,
as required by the Tailscale Docker configuration.
No host networking, TUN device, or added network capability is needed.
The Tailscale profile adds access; it does not remove LAN access. Base Compose
still publishes 0.0.0.0:3000, with its explicit LAN-exposure acknowledgment.
For a tailnet-only deployment, bind the published port to 127.0.0.1:3000:3000
and keep the container's listener reachable by its loopback proxy. LAN mode
requires a trusted local network; HTTPS is required for WebXR and service workers.
ORCAXR_TRUSTED_PROXY=loopback accepts forwarded protocol and Tailscale identity
only from the actual loopback socket peer, never from X-Forwarded-For or a
client-supplied IP. A trusted proxy must overwrite those headers and supply one
exact http or https protocol. Same-origin authentication, CORS, and rate-limit
identity use this same boundary. Embedded Tailscale startup (when explicitly
passing TS_AUTHKEY into the application container) uses the same userspace
networking and loopback trust; the Compose profile is the normal deployment.
Application assets and HTML navigations bypass the API request allowance. Hashed assets cache immutably; entry points revalidate. API routes retain their authentication, CORS, request/upload limits, and bounded slicing admission. Unknown API routes return JSON errors, never the application shell.
Every required or present deployment copy must contain both engine files and
its adjacent artifact-provenance.json. Verification checks schema, pinned
source, build-input identity, expected filenames, and actual SHA-256 hashes.
Missing files, stale manifests, and partial optional copies fail verification.
npm --prefix wasm run verify:artifacts
npm --prefix wasm run publish:server
The publisher copies and verifies a complete immutable version under
server/wasm-artifacts/sets/, then atomically switches current. Existing workers
keep their resolved version. Old sets remain for active readers and rollback;
remove them only with the service stopped. Do not update active engine files in
place. Docker assembly uses the same publisher and verifier for the runtime set
and the built browser copy. Server /engine reports a specific reasonCode
when attestation fails; changing an environment path cannot make a partial set
fall back silently to another engine.
Run npm --prefix server run test:deployment after building the web app to test
cold HTTP LAN and local HTTPS proxy loads, complete precaching, simulated slicing,
and API limits through Express. After building the image, run
npm --prefix server run test:deployment:container for the same checks against
its packaged UI and server. These tests use a deterministic test runner and local
certificates, and never contact printer hardware or join a tailnet. Native builds
default to two top-level jobs; use --build-arg ORCA_BUILD_JOBS=1 on a busy host.
Some upstream dependency subbuilds choose their own worker counts.
POST /slice?async=1 returns a job ID. GET /jobs/:id reports status and,
after completion, completedAt and expiresAt timestamps. Completed G-code can
be downloaded repeatedly from GET /jobs/:id/gcode for ten minutes by default
(ORCAXR_JOB_TTL_MS). Interrupted downloads do not delete the result. Synchronous
POST /slice responses also expose the ID through X-OrcaXR-Job-Id for retries.
DELETE /jobs/:id cancels active work or releases a terminal result, returning
its terminal status before release. Repeated release is idempotent. Downloads
already in progress retain their files until all readers finish. New work gets
a retryable 503 when retained results fill the configured capacity. Browser
clients verify the job ID, SHA-256, and artifact byte count before releasing a
completed result; unsupported or failed releases fall back to TTL cleanup.
Only successful native process completion can publish G-code. Cancellation
terminates the owned process group before releasing the worker slot, including
descendants that outlive their parent or ignore SIGTERM. This guarantee is
qualified on Linux with a reaping init process: keep Compose's init: true
(or use docker run --init). Other hosts do not have equivalent qualified
process-tree behavior. A task stuck in kernel I/O remains owned until it exits;
the browser reports an unconfirmed cancellation if its cleanup deadline expires.
The audit evidence records the tested image and the outstanding credential, supervised hardware and independent review gates. A passing automated suite does not complete those release gates.
Deploy the additive server API before publishing the browser update. Retain the
previous verified web bundle during the backend stage; an all-in-one rollout
must preserve that bundle at /app/public rather than expose both updates in
one step. Confirm the existing client's slice, download and cancellation paths
against the updated service before publishing the new web bundle. Keep engine
files and their adjacent provenance manifest together throughout both stages.
Publish the browser update only after the backend stage is accepted. Installed service workers activate through Help → Check for Update and the unsaved-work decision; never force a reload over an editing session. A browser rollback must retain IndexedDB and leave unfamiliar recovery records intact. Restore the previous web bundle without clearing site data, preserve a compatible server, and let a supporting browser version validate or download the recovery archives. See project recovery for operator recovery choices.
Contributions are always welcome. Feel free to open issues or pull requests to improve the web experience.
OrcaXR is licensed under the GNU Affero General Public License v3.0. See NOTICE.md for source and third-party attributions.
Built with ❤️ for the future of spatial making.