Spaces:
Running
Running
Commit History
-
fix(audio): fetch companion sounds as .ogg after dataset migration from WAV
Co-authored-by: Cursor <cursoragent@cursor.com>2afdd7b
-
feat(emotions): return to safe-rest pose on stop and completion
Drive the robot back to the canonical INIT_POSE whenever an emotion is stopped manually or finishes naturally, instead of freezing on the last (often tilted/splayed) frame. - TrajectoryPlayer.returnToBase() delegates to the SDK's safelyReturnToPose (INIT_POSE + daemon-mirrored scaledDuration), avoiding the re-implemented pose/duration math anti-pattern (§14.6). Wired into the manual-stop and natural-completion paths in EmotionsView. - Pin reachy-mini-sdk to 1.8.0-main.8c428a1 for the /animation subpath (safelyReturnToPose/INIT_POSE/scaledDuration not yet in 1.8.0 stable). - Pre-decimate trajectories to 50 Hz before upload (emotionsLibrary.downsampleByHz) and match PLAY_FREQUENCY to the wireless control loop, halving the WebRTC upload with no motion fidelity loss (daemon re-interpolates between frames). Co-authored-by: Cursor <cursoragent@cursor.com>ade06b6
-
refactor(player): drive playback through daemon-side playMove
Switch the trajectory player from a client-side rAF stream of setTarget calls to robot.playMove. The daemon now consumes the trajectory on its hard real-time control loop (≥100 Hz), so jank in the browser tab, GC pauses, fluctuating WebRTC links, and sluggish phone CPUs can no longer drop motion frames or desync the companion audio. Key wins: * Smooth prelude before every emotion: initialGotoDuration is computed from the present robotState vs the first frame using the distance-scaled formula from RemiFabre/reachy-mini-js- practices (head magic-mm + antenna deg + body deg, slowest channel wins, clamped to [0.2 s, 1.5 s]). The daemon routes the prelude through the same gotoTarget that got the atomic-target-pin fix in pollen-robotics/reachy_mini#1138, so the "torque off -> move by hand -> play emotion" path can no longer produce a brutal snap. * Companion audio in sample-accurate lock-step: audio blobs are fetched alongside trajectories, cached in memory, and shipped …c37ea96 -
perf(emotions): kill first-open family panel flicker
The first time a user opened a family wedge, useFamilyDurations fired one fetch + setState per emotion in that family (up to 13 for Joy), each landing during the panel's 450ms mount animation and triggering a re-render with a fresh duration-badge fade-in. Combined with the wheel's min-height transition and the smooth scrollTo, the panel visibly flickered on first open and was clean on subsequent opens - because the in-memory trajectory cache was warm by then. Three changes that together flatten the first-open path to "single render with all badges in place": 1. emotionsLibrary: sidecar synchronous duration cache (durationsByIdSync) populated alongside trajectoryCache after a successful parse, plus a getCachedDurationSec(id) sync getter so render code can seed state from already-resolved trajectories. 2. EmotionsView: background preloader kicked off at view mount, walking every emotion through loadTrajectory with concurrency 4 and requestIdleCallback scheduling (setTim…b367818
-
feat: migrate to @reachy-mini/host iframe architecture
ThibaudThe app now boots through the shared host shell (sign-in, robot picker, WebRTC handshake) and runs inside an iframe with a postMessage bridge for live theme + config updates. What changed: - index.html: trimmed to a dispatcher that decides standalone vs embed based on `?embed=1`. Inline boot script sets the theme before the JS bundle loads to avoid a palette flash. - src/dispatch.ts (new): branches between `./embed` (the app) and `@reachy-mini/host/auto` (the host shell). Carries an inline TODO for the eventual CDN-import swap. - src/embed.tsx (new): replaces the old `main.tsx` + `App.tsx`. Calls `connectToHost()` to receive a live SDK instance, then mounts `<EmotionsView>` inside MUI's ThemeProvider. Reacts to `onThemeChange` and `onLeave` from the host. - src/sdk-types.ts: re-exports the canonical SDK types from `@reachy-mini/host` instead of duplicating them. - Deleted: every component that used to render the pre-session UI (SignInView, RobotPickerView, Conne…1d21c88
-
feat: bootstrap Reachy Mini Emotions Space
A mobile-only webapp that browses the Reachy Mini emotion library through a Plutchik-inspired wheel. - Eight coloured sectors (Joy / Trust / Fear / Surprise / Sadness / Disgust / Anger / Anticipation) drive a hand-curated mapping of the 79 emotions in pollen-robotics/reachy-mini-emotions-library. - Tap a sector → SwipeableDrawer drill-down with emoji + label + duration + description for every emotion in that family. - Centre dice spins to a random emotion with a GSAP-style flourish. - Trajectories stream straight from the HF dataset CDN: the player fetches the JSON, parses head (4x4 nested or flat 16) + antennas + body_yaw frames, then sends set_full_target via robot.setTarget at vsync cadence with client-side LERP between source samples. - Companion .wav (when present) plays via Web Audio in lock-step. - Sticky now-playing strip reflects status / progress / cancel, iOS safe-area aware. - Boots through the same useReachyMini lifecycle as telepresence: HF OAuth (or .env…87a0733