Conversation
Adds a static-image AR example that feeds a fixed JPEG into the Teblid tracker instead of a webcam stream, enabling testing without camera access. - threejs_teblid_static_image_ES6_example.html: hidden <img> input, no initCamera - threejs_static_image_worker_ES6.js: full-resolution RGBA processing - data/pinball-demo.jpg: test image containing the marker Fixes needed to make tracking work (worker_threejs.js left unchanged): - decode the marker JPEG to RGBA pixels via a 2D canvas (initTrackerGray does not decode JPEG; raw file bytes produced a garbage reference marker) - process the frame at full resolution so it matches the tracker's frame buffer - send a blank warmup frame before the real image to avoid a first-frame perspectiveTransform crash in the tracker The marker tracks successfully; the 3D sphere is not yet visible due to a pre-existing pose-convention issue tracked separately in #31. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Static-image example now reads `matrixGL_RH` (the GL right-handed modelview the library computes after the CV->GL handedness flip) instead of `pose` (raw OpenCV camera pose), so the tracked object sits in front of the GL camera and renders on the marker instead of being frustum-clipped behind it. Library side (pulled in via the submodule bump to fix/pose-cv-to-gl): - WebARKitPattern::updateTrackable() no longer applies its partial rotation-column negation; `trans` / getPoseMatrix2() now carry the raw OpenCV pose, and downstream conversions (arglCameraViewRHf in JS for matrixGL_RH; WebARKitManager::getGLViewMatrix in C++) become clean diag(1, -1, -1, 1) * pose CV->GL conversions. Example side: - examples/worker_threejs.js: forward event.data.matrixGL_RH in the `found` message (additive; existing `pose` consumers unaffected). - examples/threejs_static_image_worker_ES6.js: parse msg.matrixGL_RH into the root matrix; wrap AR content in a `markerFrame` Object3D rotated 180 deg around Y so +Z faces the camera (corrects the marker's image-coordinate convention to a natural three.js placement). - examples/threejs_teblid_static_image_ES6_example.html: display the static <img> full-bleed under the canvas overlay (matches the webcam examples' #video layout) so the marker is visible behind the 3D content. Also rebuild dist/WebARKit.js and dist/* / build/* artifacts from the new WASM, and bump the npm tooling to current minor/patch (Babel 7.29.7, webpack 5.107.2, babel-loader 10.1.1, rimraf 6.1.3) plus webpack-cli to 7.0.3 (major) for build cleanliness. A remaining projection X-mirror in the library leaves the AR content's axes visibly tilted relative to the marker edges; this is tracked separately in webarkit/WebARKitLib#35 and cannot be fully corrected from the example side. Refs: #31, webarkit/WebARKitLib#34 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
webarkit/WebARKitLib#36 was squash-merged into upstream/dev as 3429eb3 (same content as the prior dab5073 SHA, different hash due to the squash). Re-pin the submodule pointer to the canonical commit so a fresh `git submodule update --init` against the .gitmodules URL (canonical webarkit/WebARKitLib) resolves successfully. Refs: #31, webarkit/WebARKitLib#34 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Investigation notes, decision log, and multi-agent design review for the AR overlay axis/position alignment work. Documents the ArtoolkitX pose convention comparison and the (parked) X-mirror localization anomaly: the tracker localizes the marker mirrored within its own correctly-oriented frame, with the projection/pose/feed-orientation hypotheses each eliminated. Companion to the full findings posted on webarkit/WebARKitLib#35. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bumps the WebARKitLib submodule to the canonical dev SHA after webarkit/WebARKitLib#38 (squash) merged the first-frame perspectiveTransform crash fix, and commits the rebuilt dist/WebARKit.js and build/ WASM artifacts. The static Teblid example no longer relies on the warmup frame to avoid the frame-0 crash (the library now guards it); the warmup is retained only to smooth the static-image detection->tracking handoff. Refs: webarkit/WebARKitLib#37, #30 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds to the WebARKitLib#35 design notes: - Root cause confirmed: GrayScale flips the image vertically, so teblid_example feeds bottom-up while the canvas static example feeds top-down; the pose chain was tuned for the bottom-up convention. - Working example-side fix: modelview Y-row + Z-column negation in found() (a proper rotation) for anchoring, plus a markerFrame 180-deg-about-X for the marker image convention. Library folding still undecided. - Next investigation: replace the synthetic 70-deg-FOV camera with real camera_para.dat (ARParamLT) loading. The loaders are already vendored (arParamLoadFromBuffer, arParamChangeSize, arParamLTCreate); proposed a WebARKitCamera::loadCameraParamFromBuffer + bindings + optional arglCameraFrustumRHf projection. Refs: webarkit/WebARKitLib#35 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Example-side correction so the static (canvas-2D, top-down) feed renders correctly without GrayScale, on a normal right-side-up display: - found(): negate the modelview Y row + Z column (a proper rotation, det +1) to correct the anchoring for top-down input — the library's pose is tuned for GrayScale's bottom-up convention (see docs + WebARKitLib#35). - markerFrame child rotated 180 deg about X: marker image convention (+Y toward the bottom of the reference image, +Z into the marker). - Standard projection, unflipped feed. WIP / still to finalize tomorrow: - Debug stand-ins present: a cube + AxesHelper on markerFrame; the real `sphere` mesh is currently unused. Swap back to the intended content and drop the debug axes before this is "done". - Decision pending: keep this as an example-side correction or fold the equivalent into the library (regression canary: teblid_example). Refs: webarkit/WebARKitLib#35 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Pick up the WebARKitLib fixes and rebuild the WASM/dist artifacts: scale-factor double-application (webarkit/WebARKitLib#43), projection X-sign and D*R*D marker-frame handedness (webarkit/WebARKitLib#35, webarkit/WebARKitLib#42). The static-image example now tracks the pinball marker with content correctly localized on the marker and right-side-up (X=right, Y=up, Z=toward viewer), no example-side pose correction. - bump emscripten/WebARKitLib submodule (9eb49d9, 3a9c58a) - rebuild build/webarkit_ES6_wasm.js, .simd.js, dist/WebARKit.js - examples/threejs_static_image_worker_ES6.js: drop debug scaffolding; attach cube + axes directly to the tracked root Refs #30 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rewrite the design doc's resolution: the static-image AR bug was three orthogonal issues, headlined by the keypoint scale-factor double-application (webarkit/WebARKitLib#43), plus the projection X-sign (#35) and D*R*D marker-frame handedness (#42). Documents the diagnostic method (MATCH-centroid log, getCorners debug overlay, pose-log NDC math) and the final verified state. Demotes the superseded hypotheses (projection-only #35 plan, GrayScale Y-flip theory, example-side correction) to a clearly-marked history section. Refs #30, webarkit/WebARKitLib#35, webarkit/WebARKitLib#42, webarkit/WebARKitLib#43 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Pick up webarkit/WebARKitLib refactor fb78f85 (remove vestigial downsample/scale machinery; no behavior change) and rebuild build/ + dist/. Refs #30, webarkit/WebARKitLib#43, webarkit/WebARKitLib#44 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
webarkit/WebARKitLib#45 merged into dev (rebased to 1021616, f448ef3, c1ae096). Re-point the submodule from the fork branch commit to the canonical dev tip. Source is identical, so build/ and dist/ are unchanged. Refs #30, webarkit/WebARKitLib#45 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New live-camera AR example using the Teblid tracker, built on the static example's conventions (consume matrixGL_RH directly, projection as-is, no pose correction) + a continuous bufferCopy main<->worker ping-pong loop + a getUserMedia feed. RGBA end-to-end (tracker converts internally). Cube + axes anchored at the marker origin, hidden when not found; on-screen Marker-tracked/Searching status (console logging kept). - examples/worker_teblid_webcam_threejs.js (dedicated bufferCopy worker, emits matrixGL_RH) - examples/threejs_teblid_webcam_worker_ES6.js (start() module / live loop) - examples/threejs_teblid_webcam_ES6_example.html (page + camera bootstrap) - examples/index.html (grouped landing page) - docs/design-webcam-teblid-example.md (design + decision log) No existing example modified or removed. No library changes / no rebuild. Known limitation (not this PR): tracking is not declared lost when the marker leaves frame -- see webarkit/WebARKitLib#46. Refs #36 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add an in-code comment by the tracking-status logic explaining that found/tracked reflects the library's isValid(), which does not reliably clear when the marker leaves frame (stale lock). Points readers to webarkit/WebARKitLib#46. Refs #36, webarkit/WebARKitLib#46 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Pick up the tracking-loss fix (webarkit/WebARKitLib#47, #46): the tracker now declares 'not found' when the marker leaves the frame instead of staying stuck on a stale pose. Rebuild build/ + dist/ and bump the submodule. Adds the design doc. Verified with the webcam Teblid example: removing the marker hides the AR content and shows 'Searching...'; no flicker while the marker is held. Refs #36, webarkit/WebARKitLib#46, webarkit/WebARKitLib#47 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
webarkit/WebARKitLib#47 merged into dev (rebased to 39183f0). Re-point the submodule from the fork-branch commit to the canonical dev tip; source is identical, build/ and dist/ unchanged. Refs #36, webarkit/WebARKitLib#46, webarkit/WebARKitLib#47 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Expose the library's new setOriginCentered option to JS and use it in the examples so AR content anchors at the marker CENTRE instead of the reference top-left corner. Opt-in; default off (ArtoolkitX parity). - emscripten/WebARKitJS.cpp/.h + bindings.cpp: bind setOriginCentered - src/WebARKitController.js: setOriginCentered(centered) - examples/worker_threejs.js + worker_teblid_webcam_threejs.js: call setOriginCentered(true) after init - rebuild build/ + dist/, bump WebARKitLib submodule (fe588e5) - docs/design-center-origin-option.md: design + decision log + ArtoolkitX investigation Verified on the static + webcam examples: true -> content centred; false/default -> corner (unchanged). Depends on webarkit/WebARKitLib#49. Closes #38 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
webarkit/WebARKitLib#49 merged into dev (rebased to 15dc93f). Re-point the submodule from the fork-branch commit to the canonical dev tip; source identical, build/ and dist/ unchanged. Refs #38, webarkit/WebARKitLib#49 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… examples
Consolidate teblid/akaze/orb/freak_example.html (which differed only by the hard-coded string in setTrackerType()) into a single feature_trackers_example.html with a <select> picker. The choice is persisted in the URL query string (?tracker=akaze) so it survives the reload that re-initialises the worker; getTrackerFromUrl() validates against a SUPPORTED_TRACKERS allow-list and falls back to Teblid. worker_setup.js is left untouched -- the new page just provides setTrackerType() that reads the URL param.
Remove the four originals and the six under-review examples (teblid_example_4_threejs, teblid_advanced, threejs_speedy, threejs_bufferCopy, threejs_ES6, threejs_ES6_jsfeatNext) plus their dedicated helper/worker JS, the vendored js/jsfeatNext.js, and the speedy footprint (src/speedy-vision-mod/, the speedy webpack target, the package.json dep, the regenerated lockfile, and dist/SpeedyVisionSinkImageData.js). 22 files removed in examples/, plus the speedy module and build artifact.
Strictly scoped: every removed JS is referenced only by removed HTML; reference graph traced via <script src>, <link href>, and the new Worker() / importScripts() chains. The three remaining examples (feature_trackers, threejs_teblid_static_image, threejs_teblid_webcam) and their shared deps (worker_setup.js -> worker.js, worker_threejs.js, worker_teblid_webcam_threejs.js, initCamera.js, css/{style,nft-style}.css, js/stats.min.js, js/three.min.js, data/{pinball,pinball-demo,aframe-k}) are unaffected.
Closes #36
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…xample Bump WebARKitLib to the part-A downsampling change (webarkit/WebARKitLib#52) and rebuild build/ + dist/. Feature detection now runs on a pyrDown'd copy of the live frame; matched keypoints are rescaled to full-frame coords. - examples: point the Teblid static-image example at a marker-fills-frame 1920x1440 demo image (pinball-demo-big.jpg) so HD downsampling is exercised (pyrLevel 1, scale 2.0) and the marker still acquires. The old pinball-demo.jpg (small marker in a large frame) falls below the detector threshold once downsampled. - docs: add docs/design-detection-downsampling.md (understanding, ArtoolkitX reference, decision log, the four edits, testing, risks, non-goals). Verified: Marker tracked, 1000 matches, content centered (#38) and right-handed (#42/#46), no #43-style doubling. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Re-point the submodule at the canonical webarkit/WebARKitLib dev tip after #52 (detection-side pyramid downsampling, part A) merged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bump WebARKitLib to the part-B detection guard (webarkit/WebARKitLib#54) and rebuild build/ + dist/. Feature detection is now skipped while optical flow holds a lock, so the steady tracking state is much cheaper. Measured on the Teblid webcam example (640x480): ~10-15 fps when detecting every frame -> ~45 fps while tracking. Static example (1920x1440, pyrLevel 1) still acquires and holds (no freeze). - docs: add docs/design-detection-guard.md (understanding, ArtoolkitX reference, why the guard is on _isTracking rather than the marker counter, state walk-through, testing, risks, non-goals). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Re-point the submodule at the canonical webarkit/WebARKitLib dev tip after #54 (skip detection while tracking, part B) merged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Manual cross-repo (C++ + JS/bindings) dead-code inventory for WebARKitLib#50, audited at submodule 28ff065. Inventory only -- no code removed. Key outcomes: - All seven named suspects resolved; matrix getters classified as intentional public API (keep), with getPoseMatrix/getPoseMatrix2 -> getPoseMatrixCV/ getPoseMatrixGL rename + the getPoseMatrix zero-matrix fix tracked in #55. - Confirmed-dead internal/redundant code enumerated per file with a master cleanup decision table (KEEP-API / KEEP-live / REMOVE-redundant / REMOVE-internal / FIX / DECIDE). - _trackVizActive / TrackerVisualization flagged DECIDE (unreachable, no setter). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Companion to webarkit/WebARKitLib#56. Bump the submodule to the rename+fix commit and rebuild build/ + dist/. - emscripten glue (bindings.cpp, WebARKitJS.{h,cpp}): rename the bound JS API getPoseMatrix -> getPoseMatrixCV, getPoseMatrix2 -> getPoseMatrixGL. - src/WebARKitController.js: getPoseMatrix() -> getPoseMatrixGL() (the GL pose the render path uses), add getPoseMatrixCV(); process_raw calls getPoseMatrixGL(). - examples/worker_threejs.js: drop a stray debug log. Verified: static + webcam examples track; getPoseMatrixCV() returns a real 4x4 pose (was zeros). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Re-point the submodule at the canonical webarkit/WebARKitLib dev tip after #56 (getPoseMatrix zero-matrix fix + getPoseMatrixCV/GL rename) merged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…isions Companion to webarkit/WebARKitLib#57. Bump the submodule to the cleanup commits (remove update() stub, im_gray(), commented _trackables/getPoseMatrix3) and rebuild build/ + dist/ (emscripten output is not byte-reproducible, so the artifacts change even for a behavior-neutral source edit). docs/audit-dead-code-issue50.md: add a "Decisions & status" section recording what was removed in #57 and what was deliberately KEPT (OCVT-derived symbols for ArtoolkitX parity, _trackVizActive scaffolding, and plausible WebARKit API / accessors / config constants), plus the one pending item (computePose cluster). Verified: static (pyrLevel 1) and webcam (pyrLevel 0) examples both track, 1000 matches. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Re-point the submodule at the canonical webarkit/WebARKitLib dev tip after #57 (dead-code cleanup: update() stub, im_gray(), commented scaffolding) merged. Build artifacts unchanged (source identical to the pre-merge branch SHA). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Companion to webarkit/WebARKitLib#58. Bump the submodule to the commit removing the superseded computePose/invertPose/computeGLviewMatrix()-noarg, and rebuild build/ + dist/ (emscripten output is not byte-reproducible). docs/audit-dead-code-issue50.md: move the computePose cluster from "pending" to "removed (#58)"; the #50 audit is now complete (everything else decided KEEP). Verified: static example tracks (pyrLevel 1, 1000 matches); live pose path unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Re-point the submodule at the canonical webarkit/WebARKitLib dev tip after #58 (Tier-3: remove superseded computePose/invertPose/computeGLviewMatrix()) merged. Completes the #50 dead-code cleanup. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
README: replace the stub with a developer-oriented guide -- what the superproject is, repo layout, prerequisites, the two-step build flow (setup-docker -> build-docker -> build-es6; OpenCV/opencv_contrib are vendored submodules, no separate download), running the examples, the cross-repo submodule/PR-pair flow, a design-docs index, and contributing. Version callout made version-agnostic. Bump the submodule to webarkit/WebARKitLib#59 (README + version 0.8.0) and rebuild build/ + dist/ -- the WASM now reports "Webarkit C++ lib v0.8.0". Refs #51. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Point at the WebARKitLib docs/readme-51 tip including the gtest version-assertion fix (0.8.0). Test-only change upstream; build/dist unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… note CONTRIBUTING.md: replace the emoji-commit guidance (Atom guide) with Conventional Commits, add signed-commits, the rebuild step for C++/submodule changes, and the cross-repo PR-pair flow. README: link to CONTRIBUTING.md + require Conventional Commits. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Re-point the submodule at the canonical dev tip after #59 (README rewrite + version 0.8.0 + CONTRIBUTING.md) merged. Docs/version only upstream; build/dist unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Point the submodule at WebARKitLib's master tip (the dev->master integration, webarkit/WebARKitLib#60) instead of dev, and rebuild build/ + dist/. master now contains the full OCVT tracker line (== dev) plus the vendored AR/NFT side. Verified: rebuilt cleanly; static + webcam Teblid examples track (v0.8.0). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…it docs) Remove the old gh-pages demo leftovers that no longer work: index.md (the landing page) and the per-detector examples it linked (akaze/freak/orb/teblid_example.html), worker.js, worker_setup.js, stats.min.js, and the css/ data/ dist/ asset dirs. docs/ now holds only the design docs + the #50 audit. No remaining file references the removed assets (checked). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
kalwalt
added a commit
that referenced
this pull request
Jun 21, 2026
Manual cross-repo (C++ + JS/bindings) dead-code inventory for WebARKitLib#50, audited at submodule 28ff065. Inventory only -- no code removed. Key outcomes: - All seven named suspects resolved; matrix getters classified as intentional public API (keep), with getPoseMatrix/getPoseMatrix2 -> getPoseMatrixCV/ getPoseMatrixGL rename + the getPoseMatrix zero-matrix fix tracked in #55. - Confirmed-dead internal/redundant code enumerated per file with a master cleanup decision table (KEEP-API / KEEP-live / REMOVE-redundant / REMOVE-internal / FIX / DECIDE). - _trackVizActive / TrackerVisualization flagged DECIDE (unreachable, no setter). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
kalwalt
added a commit
that referenced
this pull request
Jun 21, 2026
…isions Companion to webarkit/WebARKitLib#57. Bump the submodule to the cleanup commits (remove update() stub, im_gray(), commented _trackables/getPoseMatrix3) and rebuild build/ + dist/ (emscripten output is not byte-reproducible, so the artifacts change even for a behavior-neutral source edit). docs/audit-dead-code-issue50.md: add a "Decisions & status" section recording what was removed in #57 and what was deliberately KEPT (OCVT-derived symbols for ArtoolkitX parity, _trackVizActive scaffolding, and plausible WebARKit API / accessors / config constants), plus the one pending item (computePose cluster). Verified: static (pyrLevel 1) and webcam (pyrLevel 0) examples both track, 1000 matches. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
kalwalt
added a commit
that referenced
this pull request
Jun 21, 2026
Companion to webarkit/WebARKitLib#58. Bump the submodule to the commit removing the superseded computePose/invertPose/computeGLviewMatrix()-noarg, and rebuild build/ + dist/ (emscripten output is not byte-reproducible). docs/audit-dead-code-issue50.md: move the computePose cluster from "pending" to "removed (#58)"; the #50 audit is now complete (everything else decided KEEP). Verified: static example tracks (pyrLevel 1, 1000 matches); live pose path unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
kalwalt
added a commit
that referenced
this pull request
Jun 21, 2026
Re-point the submodule at the canonical webarkit/WebARKitLib dev tip after #58 (Tier-3: remove superseded computePose/invertPose/computeGLviewMatrix()) merged. Completes the #50 dead-code cleanup. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Integration of
devintomain(35 commits). Clean fast-forward —mainhas no commitsdevlacks, andmerge-treereports zero conflicts.This is the superproject side of the WebARKit improvements landed this cycle, each paired with a WebARKitLib submodule bump + rebuilt
build//dist/.What's included
Examples (#30, #36)
Pose / projection / handedness (#30, #35, #42, #55)
getPoseMatrixCV/getPoseMatrixGLrename + zero-matrix fix wired through the glue/controller.Tracking robustness & perf (#44, #46, #38)
setOriginCentered.Docs & housekeeping (#50, #51)
docs/audit-dead-code-issue50.md(dead-code inventory + decisions); README rewrite +CONTRIBUTING.md(Conventional Commits) + version0.8.0.master(ce5c280, post dev→master integration).docs/(live demos are hosted in webarkit/webarkit.github.io, not here).Notes
dist//build/reflect WebARKitLibmasteratv0.8.0; static + webcam examples verified tracking.🤖 Generated with Claude Code