Skip to content

Releases: CagKebabi/TraceAR

v0.2.1 — exclusive mode & steadier multi-target cadence

Choose a tag to compare

@CagKebabi CagKebabi released this 29 Aug 17:12

Steadiness release driven by the first production integration (unicoar.com).

Added

  • maxTracked config option — cap on simultaneously tracked targets. maxTracked: 1 gives an exclusive session (MindAR's maxTrack: 1 equivalent): once a target is acquired, all other detection pauses until it is lost — exactly one anchor active at a time, tracked frames cost pure tracking (~2.5 ms), no scan spikes.

Fixed

  • Trembling during camera motion in multi-target sessions. Cold-marker scans every 3rd frame made the measurement cadence uneven (~3 ms tracking frames alternating with ~25 ms scan frames), which read as content trembling while the camera moved. Cold scans now back off to every 10th frame while anything is tracked; the acquire phase (nothing tracked) scans every frame — first detection is faster than 0.2.0. Steady 10-target cost: 13 → 6 ms/frame average (native).

Full changelog: https://github.com/CagKebabi/TraceAR/blob/main/CHANGELOG.md

v0.2.0 — multi-target sessions

Choose a tag to compare

@CagKebabi CagKebabi released this 29 Aug 08:04

Multi-target release: a session with many markers (an album of photos, a deck of cards) now costs roughly the same per frame as a session with one.

Added

  • Multi-marker pack files. One .tracear file can hold any number of markers. Packs are a pure container: each entry is an unmodified single-marker file, so bundling is byte concatenation — adding or removing one target never recompiles the others. Packs expand in place anywhere a target is accepted.
    • CLI: npx tracear compile a.png b.png c.png -o album.tracear and npx tracear pack a.tracear b.tracear -o album.tracear
    • Browser: packMarkers(markers) in @tracear/sdk/compiler

Changed

  • Detection cost is now flat in the number of targets. Frame features (pyramid + FAST + BRIEF) are extracted once per frame and shared by every marker's detection; lost markers are scheduled under a per-frame budget — recently-lost targets keep same-frame priority (re-acquire feel unchanged), long-idle targets take amortized round-robin turns. Measured with 10 targets, 1 visible (native, 640×480): 272 → 13 ms per frame average. Sessions with 1–2 targets behave exactly as before.
  • targetWidthsMeters aligns with expanded marker order (identical to before unless you use packs).
  • detectImage with many targets shares one feature extraction.

Docs: https://cagkebabi.github.io/TraceAR/docs/ · Full changelog: https://github.com/CagKebabi/TraceAR/blob/main/CHANGELOG.md

v0.1.2 — first public release

Choose a tag to compare

@CagKebabi CagKebabi released this 27 Aug 21:01

First public release of @tracear/sdk — high-performance, jitter-free image tracking for the mobile web. npm i @tracear/sdk

Highlights

  • Rust→WASM(+SIMD) engine: detection acquires the target (FAST + rotated BRIEF + RANSAC), then sub-pixel inverse-compositional patch tracking takes over — coarse-to-fine across a half-resolution level so fast handheld motion and motion blur survive.
  • Measured side by side with MindAR — the pioneering project in this space, built on different engineering trade-offs. Same phone, same marker, identical metric, reproducible on your own device with apps/compare: median jitter 1.90 px vs 5.47 px, p90 5.8 vs 8.3, CV ~2.5 ms/frame while tracking, marker compile 0.1 s / 169 KB vs 1.4 s / 418 KB.
  • 6DoF poses via homography decomposition + LM refinement with a rotation-ambiguity prior; online focal self-calibration (no user calibration step); One-Euro-on-SE(3) filtering with speed- and error-adaptive raw/filtered rendering blend: frozen when still, glued when moving, fast recovery after deviation.
  • Efficient frame paths: WebCodecs VideoFrame luma-plane ingestion where available, GPU ImageBitmap + zero-allocation WebGL readback otherwise, canvas fallback everywhere else.
  • three.js adapter (@tracear/sdk/three), browser marker compiler (@tracear/sdk/compiler) and a CLI (npx tracear compile poster.png).
  • ~95 KB gzipped including the WASM core. MIT.

Notes for 0.1.0 → 0.1.2

  • 0.1.1 fixed a packaging bug where a development exports condition pointed at files not shipped in the tarball, breaking consumer dev servers.
  • 0.1.2 added the error-adaptive catch-up, the WebCodecs/WebGL frame paths (with per-failure fallbacks and a sensor-orientation guard), and long-run Safari stability (allocation-free readback).

Vite users

// vite.config.ts
export default defineConfig({
  optimizeDeps: { exclude: ["@tracear/sdk"] },
});

v0.1.1 — packaging fix

Choose a tag to compare

@CagKebabi CagKebabi released this 27 Aug 21:01

Packaging fix release.

  • Removed the development exports condition that pointed at TypeScript sources excluded from the published tarball — it broke dependency scanning in every consumer's Vite dev server.
  • Documented the required optimizeDeps: { exclude: ["@tracear/sdk"] } for Vite (dev-server prebundling breaks the worker/WASM asset URLs; production builds are unaffected).