mesh-avatar-studio
일러스트를 코딩 에이전트와 로컬 편집기로 2D 메쉬 애니메이션 아바타로 변환
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A privacy-first Rust/Tauri + WebAssembly experiment for reconstructing a 3D scene from ordinary video.README 전문 보기 ↗A privacy-first Rust/Tauri + WebAssembly experiment for reconstructing a 3D scene from ordinary video.
Documentation authority: The Decision Atlas owns product intent (stable IDs); acceptance specifications own observable release requirements; whole-scene and engine roadmaps own implementation sequencing. The implementation status below is not evidence that the Atlas's product gate (IDs 3.1, 3.6) has passed.
The current implementation has an integrated Slice 3 sparse-SfM pipeline and an advancing Slice 4 dense-reconstruction foundation. One or more videos can be selected and are decoded locally in the browser, then processed independently and sequentially. For each clip, Rust/WASM detects and matches features, chains adjacent matches into deterministic multi-frame tracks, screens keyframe candidates from overlap and residual parallax, links the actually triangulated landmarks from the strongest calibrated seed pair into other selected keyframes, and can register additional cameras with bounded deterministic robust PnP when their 3D↔2D evidence passes inlier and reprojection gates. A bounded set of selected non-adjacent keyframe pairs is also screened with mutual descriptor matches. Strong direct evidence back to the calibrated seed can recover an otherwise unregistered selected keyframe or propose a bounded correction for an already registered camera whose pose has drifted. Revisit corrections are retained only when the existing rollback-safe bundle-adjustment acceptance also holds. Once an additional view is accepted, non-seed tracks observed by registered cameras can be triangulated into new sparse landmarks when they pass positive-depth, multi-view support, reprojection, and triangulation-angle gates. After the final accepted sparse geometry is established, Rust can run a conservative coarse plane-sweep depth pass over textured reference-frame samples. A primary depth hypothesis is retained only after the existing photometric and ambiguity gates and a reciprocal source-view depth check derived from that source camera's own visible sparse-landmark envelope. Reciprocal source depths are converted back to world-space observations, spatial outliers are rejected, and the surviving multi-view observations are fused into one dense scene point. Accepted fused points can then be connected into a bounded reference-grid triangle surface only when neighboring samples pass explicit depth-continuity, 3D edge-length, and non-degenerate-area gates. Dense points and mesh topology remain separate from the sparse map. If evidence is weak, neither dense points nor surface triangles are invented. If no pair passes the calibrated geometry gates, the app explicitly falls back to the conservative slice-1 preview instead of fabricating a calibrated result.
Scale remains arbitrary because monocular video has no metric baseline. Additional registered cameras, sparse landmarks, and coarse dense samples share the seed pair's coordinate frame. The implemented loop closure is deliberately seed-anchored rather than a general pose graph: it can close bounded drift for a registered selected keyframe that directly revisits the calibrated seed, but it does not add arbitrary non-seed-to-non-seed constraints. The dense path is likewise deliberately incomplete: reciprocal source-view observations are fused into bounded scene points and can form a conservative reference-grid-local triangle surface, but watertight completion, texture projection, general multi-reference surface aggregation, and metric-scale recovery are not implemented yet. Each selected video also remains independent; cross-video reconstruction belongs to slice 6.
Use 5–20 second clips with a slowly translating camera, a static scene, visible texture, stable exposure, and no cuts. Walking sideways or around a small object is better than standing still and rotating in place. Pure camera rotation has no triangulation baseline and is rejected by the calibrated geometry gate. Dense depth additionally benefits from textured surfaces that remain visible from several registered viewpoints.
apps/web: Next.js static export used both by GitHub Pages and Tauri. It owns local decode/sampling and visualization, including rendering Rust-owned dense samples, mesh topology, and reconstruction diagnostics without recomputing geometry.apps/desktop: thin Tauri 2 shell around the exported web app.crates/video-to-3d-core: platform-neutral Rust reconstruction kernel, including deterministic feature tracking, keyframe screening, calibrated two-view geometry, seed-landmark track association, spatial and planar robust PnP camera registration, bounded non-adjacent revisit screening, failed-registration recovery, seed-anchored bounded loop closure, multi-view new-landmark triangulation, bounded block-coordinate bundle adjustment, geometry acceptance, conservative coarse registered-view depth estimation, reciprocal source-view depth consistency, bounded dense point fusion, and conservative reference-grid mesh topology. The classic pipeline runs as one call (reconstruct) or as three public stages (cameras → dense evidence → consolidated mesh) with versioned, hash-linked stage artifacts.crates/video-to-3d-wasm: wasm-bindgen adapter for the browser.ROADMAP.md: progression from sparse SfM through dense reconstruction to 3D Gaussian splatting.Uploaded video stays browser-local. The browser owns decoding, sampling, presentation, and transient per-video batch state; Rust owns reconstruction and dense-depth semantics and output. The static site has no upload API.
Requirements: Bun 1.4+, stable Rust with wasm32-unknown-unknown, and wasm-bindgen-cli 0.2.129.
bun install
cargo install wasm-bindgen-cli --version 0.2.129 --locked
bun run dev
For desktop:
bun run tauri:dev
Validation:
bun run check
The COLMAP golden lane additionally requires the Python packages from
tools/requirements-colmap.txt. Install them in a virtual environment and activate it
before running tools/run_colmap_golden.sh. One pinned PyCOLMAP runs every stage
(extraction, exact CPU matching, incremental mapping and text export, in
tools/colmap_golden.py), so the result does not depend on the runner's distribution
colmap package. Mixing the two aborted the mapper on Ubuntu 26.04. Exact matching is used
because approximate matching varies even with a fixed seed and one thread. CI compares
match and verified-geometry tables between independent quality and runtime runs, alongside
the existing camera, point, reprojection, and pose gates. This reference dependency is development-only.
See reconstruction provider adoption
for the separate status of the built-in Rust path, COLMAP reference execution, sparse
COLMAP import consumers, and possible future in-product providers.
The web app is a Next.js static export. With GITHUB_PAGES=true, it builds with the /video-to-3d base path, compiles the Rust adapter to browser WebAssembly, and emits the complete site into apps/web/out.
The Pages workflow builds the same export on pull requests and deploys main through GitHub Pages Actions. The resulting repository Pages URL is expected to be:
https://moritzbrantner.github.io/video-to-3d/
GitHub requires the repository's Pages source to be set to GitHub Actions once. After that one-time repository setting, pushes to main are deployed by the workflow without a separate server or upload backend.
extras.video_to_3d names its reference camera, camera authority and pose, supporting source frames, provenance classes, and an appearance key that changes only when that reference's camera, pixels, framing, or triangle footprints change. The bake never creates, moves, or repairs geometry.unsupported. Completion policies query confidence by region, point, or triangle; space without accepted points has no confidence. The technical evidence table shows region and triangle bands.collision scene with a coarse-collider node (extras.video_to_3d.role = "collision"); the default scene is unchanged.