mesh-avatar-studio
일러스트를 코딩 에이전트와 로컬 편집기로 2D 메쉬 애니메이션 아바타로 변환
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Sketch usability work (September 2026): current implementation status and 42-issue queue. Earlier parity notes contain historical defaults; both annotation visibility switches currently default off (selection-based).
An open-source direct-modeling CAD app for iPad and iPhone,
built with SwiftUI, a custom Metal renderer, and a dual geometry kernel:
OpenCASCADE (OCCT) for exact B-rep
solids, with the MIT-licensed
Euclid mesh-CSG library alongside it.
See Geometry kernels.
Sketch on a plane or a body face, pull the profile into a solid, then blend the
edges — every operation undoable.README 전문 보기 ↗Sketch usability work (September 2026): current implementation status and 42-issue queue. Earlier parity notes contain historical defaults; both annotation visibility switches currently default off (selection-based).
An open-source direct-modeling CAD app for iPad and iPhone, built with SwiftUI, a custom Metal renderer, and a dual geometry kernel: OpenCASCADE (OCCT) for exact B-rep solids, with the MIT-licensed Euclid mesh-CSG library alongside it. See Geometry kernels.
Sketch on a plane or a body face, pull the profile into a solid, then blend the edges — every operation undoable.
| Pick a sketch plane | Push/pull to a solid | Fillet the edges |
|---|---|---|
The same tools on iPhone — the contextual bars adapt to compact width.
On the Mac, you can describe a part in plain English and have Claude model it in OpenShape 3D, check that it will print, and save the STL to Downloads — no CAD experience, no terminal. Switch it on in Settings ▸ AI Assistant and click Add to Claude Desktop…. Step-by-step with screenshots: docs/CLAUDE_DESKTOP_TUTORIAL.md (developers and other assistants: docs/AI_MODELING_SETUP.md).
First launch opens a welcome screen; Add Sample Designs puts four editable examples (a motorcycle wheel, a mounting plate, a glass bottle and a plate cam) into a Demos folder in the gallery. It is always available again from the gallery's … menu.
Install Git LFS before cloning. The prebuilt
ThirdParty/OCCT.xcframework (the OCCT static libs, ~280 MB) is stored via Git
LFS, so the app builds straight after a clone — no local OCCT build needed.
brew install git-lfs # once per machine
git lfs install
git clone [email protected]:laanlabs/openshape3d.git
If you cloned without LFS and the build fails with "There is no XCFramework
found at …/ThirdParty/OCCT.xcframework" (or the .a files are tiny pointer
text), run git lfs install && git lfs pull to fetch the real libraries. To
rebuild the framework from OCCT source instead, see scripts/build_occt_ios.sh.
ConstraintSolver facade — no C++ dependency.
An adaptive Constrain menu applies geometric relations (coincident,
horizontal/vertical, parallel, perpendicular, equal length/radius,
concentric, midpoint, symmetric, tangent, colinear, and Lock); driving
dimensions (length, radius, diameter, angle — with inline arithmetic like
25.4/2) pull the geometry to value. Constraints show as tap-selectable
glyphs on the canvas and, with dimensions, list under Constraints
in the Items panel — Delete removes either (undoable, re-solves). A
conflicting constraint/dimension is refused with a non-blocking message
rather than corrupting the sketch. The sketch pill reports its state —
green fully defined (0 DOF) or blue under-defined (N DOF) — and
dragging an under-defined point solves live as the rest follows.
Constraints/dimensions persist with the sketch and survive extrude.Kernel/ Geometry: profiles, extrude, booleans, STL, feature-edge
extraction, behind the `KernelOps` facade. Double precision,
nonisolated (runs off the main actor), fully unit-tested.
Kernel/OCCT/ The B-rep kernel seam: `OCCTBridge` (Obj-C++, the ONLY place
OCCT's C++ headers are included) and `OCCTKernel` (the Swift
API the rest of the app calls). See Geometry kernels below.
Model/ DesignDocument (value type), undoable commands, SwiftData
persistence with a compact binary mesh format ("OS3D").
Rendering/ Custom Metal renderer: MTKView (on-demand drawing), Blinn-Phong
"CAD look" shading with per-body material factors, procedural
anti-aliased grid, feature edges with vertex-shader depth bias,
MSAA 4x, display-mode pipelines (wireframe/x-ray/hidden edges),
section clip plane, textured image quads, ground blob shadows,
gizmo overlay pass, turntable camera + animator, offscreen
thumbnail capture.
Interaction/ Gesture arbitration, CPU ray-cast picking (AABB + Möller–
Trumbore), gizmo drag math.
Editor/ EditorViewModel — the mode state machine tying UI, kernel, and
viewport together. The viewport never mutates the model.
UI/ SwiftUI chrome: gallery, tool palette, numeric input, overlays.
Shaders/ Single Shaders.metal + ShaderTypes.h shared with Swift via
bridging header (one source of truth for uniform layouts).
Rendering conventions: kernel/model math is Double, GPU buffers are
Float32. Meshes are welded by (position, normal) so hard edges survive;
feature edges come from a 20° dihedral-angle threshold.
Commercial direct-modeling CAD apps generally pair a licensed proprietary
kernel — Siemens Parasolid, say — with a renderer written in-house. A licensed
kernel isn't an option for an open-source app, so openshape3d started on an open
mesh library (Euclid) behind a kernel facade (KernelOps) that a stronger
kernel could replace later. That replacement is now underway: OCCT, the
same open-source B-rep kernel several commercial CAD products shipped their
early versions on.
Euclid is a polygon-mesh CSG library: it has no analytic surfaces. A sketched
circle is tessellated to a fixed segment count (ProfileDetector.circleSegments = 48) before any solid exists, so "extrude a circle" produced a 48-sided
prism, not a cylinder — visibly faceted, and impossible to fillet properly.
There is no mesh-side fix; the representation itself has to become exact. That
means a B-rep kernel, and the open option is OpenCASCADE (LGPL 2.1 + OCC
exception).
Euclid is not being deleted. It stays as the mesh path for ops not yet ported and as the fallback when OCCT can't build or boolean a shape.
Body.brep holds an optional OCCT solid (TopoDS_Shape). When present it is the
source of truth: Body.adoptBRep(_:) derives both the render mesh and the
CSG (euclid) mesh from the same OCCT tessellation, so what you see and what
booleans actually cut can never disagree.
| Op | Kernel |
|---|---|
| Extrude (all profiles; circle → analytic cylinder) | OCCT |
| Primitives (box / cylinder / sphere) | OCCT |
| Boolean between two B-rep bodies | OCCT |
| Revolve, sweep, loft, shell, chamfer/fillet, push-pull, pattern, mirror, split | Euclid |
| Extrude-into-target boolean; multi-profile extrudes | Euclid |
| STL import; live drag previews | Euclid |
Smooth shading comes from normals evaluated on the analytic surface
(BRepAdaptor_Surface D1 → dU×dV), not per-facet — that, plus a size-independent
angular deflection, is what makes a cylinder read as round.
BRepFilletAPI) is the next milestone..os3d archive doesn't carry the brep, so export/import degrades to
Euclid-only. In-app SwiftData persistence does round-trip it.ios-arm64 + ios-arm64-simulator;
macOS/visionOS builds would need slices added.DataExchange + XDE roughly double the static library
(18 → 47 toolkits, ~74 → ~140 MB/arch), so they're disabled until a feature
needs them — a one-line flip in scripts/build_occt_ios.sh.Everything B-rep sits behind OCCTKernel.useOCCTAsSourceOfTruth; set it to
false to fall back to the pure-Euclid kernel everywhere.
OCCT is LGPL 2.1 with the Open CASCADE exception. The app's own code is MIT;
OCCT keeps its own license. Shipping requires the usual LGPL obligations —
prominent notice, license text, and a route for users to relink the library
(the checked-in scripts/build_occt_ios.sh reproduces the exact binary).
First build only — OCCT must be built once. The app links
ThirdParty/OCCT.xcframework, which is not checked in (~190 MB build
artifact). Build it with the checked-in recipe:
brew install cmake # if you don't have it
# OCCT source + an iOS CMake toolchain file, then:
OCCT_SRC=/path/to/OCCT-7_8_1 \
IOS_TOOLCHAIN=/path/to/ios.toolchain.cmake \
scripts/build_occt_ios.sh
It cross-compiles a minimal headless OCCT (modeling only — no visualization, no third-party deps) for device + simulator and assembles the xcframework. Takes a few minutes; you only do it once.
Then open openshape3d.xcodeproj in Xcode 26+ and run the openshape3d scheme
on an iPad (or iPhone) simulator or device. The Euclid package resolves
automatically.
Sanity-check the kernel on a booted simulator any time with
scripts/run_occt_spike.sh (builds a box and an extruded circle, and asserts
the circle yields exactly one analytic cylindrical face).
Tests: ⌘U, or
xcodebuild test -project openshape3d.xcodeproj -scheme openshape3d \
-destination 'platform=iOS Simulator,name=iPad Pro 13-inch (M5)'
Unit tests cover the geometry kernel (bridge/weld, blob serialization, profiles, extrusion conventions, booleans, STL layout) and the OCCT seam (analytic face types, smooth-normal tessellation, B-rep serialization round-trip, transform baking); XCUITests drive the real flows (place → edit → move → sketch → extrude → subtract).
BRepFilletAPI, then shell, revolve/sweep/loft,
and STEP/IGESSee docs/MODELING_PARITY_GOALS.md for the ordered sketch + solid modeling
roadmap (fillet, shell, splines, STEP — with acceptance criteria),
docs/PARITY_SPEC.md for the feature-by-feature status audit, and
docs/IMPLEMENTATION_PLAN.md for phase sequencing.
MIT. openshape3d is an independent project: it is not affiliated with, endorsed by, or derived from any other CAD application. Product names mentioned anywhere in this repository are trademarks of their respective owners and are used only for factual comparison.
/v1/accuracy, the accuracy
MCP op). docs/SCAN_TO_CAD.md walks a phone scan to a CAD model over MCP.