|
| 1 | +# Keyframes Bug Bash — 2026-06-09 |
| 2 | + |
| 3 | +Attendees: Executive Suite (SF Office), James Russo, Miguel Angel Simon Sierra, Terence Cho, Ular Kimsanov, Vance Ingalls, Xiaye Wang |
| 4 | + |
| 5 | +## Bugs |
| 6 | + |
| 7 | +### Keyframe editing |
| 8 | + |
| 9 | +- [x] **Editing a keyframe value creates a duplicate instead of updating** — Selecting a keyframe and adjusting a property (e.g., bumping scale to 9) adds a new keyframe in the same frame instead of modifying the existing one. Deleting one removes both. _Fix: `useAnimatedPropertyCommit` now checks for existing keyframe at the current percentage and dispatches `update-keyframe` instead of `add-keyframe`._ |
| 10 | + |
| 11 | +- [x] **Editing a keyframe in the last scene makes element visible in all prior scenes** — After editing a keyframe on the circle, it became visible throughout the entire composition instead of only its scene. _Fix: `stopRecording` now restores element `visibility` and `translate` to pre-recording values; `reapplyPathOffsets` passes `updateBase: false` to prevent corrupting the translate base._ |
| 12 | + |
| 13 | +- [x] **Moving element down causes it to go up** — Adjusting the Y position of the circle in the design panel caused it to move in the wrong direction. Multiple overlapping tweens (single-element + group selector) competed, and the wrong tween was being edited. _Fix: `pickBestAnimation` scores candidate tweens by selector specificity and time-range overlap to pick the correct one._ |
| 14 | + |
| 15 | +- [x] **Clicking elements repositions them randomly** — Just clicking on elements in the preview caused them to jump to a different position. Undo didn't help since it wasn't part of the edit stack. _Fix: `reapplyPathOffsets` no longer overwrites the original translate base during re-application (`updateBase: false`); `gsapAnimatesProperty` now handles array-form keyframes._ |
| 16 | + |
| 17 | +- [x] **Design panel shows stale position values during playback** — The X/Y/rotation fields in the layout panel didn't update when scrubbing or playing. _Fix: PropertyPanel now subscribes to `liveTime` (RAF-throttled) in addition to the store's `currentTime`._ |
| 18 | + |
| 19 | +- [ ] **Scale doesn't respect the keyframe property at the moment it was created** — When modifying scale at a keyframe position, the value doesn't stick correctly; it snaps back or applies globally instead of at that keyframe. |
| 20 | + |
| 21 | +- [ ] **Baked properties conflict with GSAP tween positions** — Manual dragging properties (path offsets) interfere with the animated position of GSAP elements. After editing, the animation doesn't play back correctly until the page is refreshed. |
| 22 | + |
| 23 | +### Gesture recording |
| 24 | + |
| 25 | +- [x] **Recorded gestures appear at wrong position** — Gesture recording produced keyframes with a significant offset from the pointer location, both during live preview and after commit. _Fix: CSS var offsets always read regardless of translate state; translate cleared to "none" after each seek during preview; offset subtracted from committed samples._ |
| 26 | + |
| 27 | +- [x] **Gesture recording not gated behind keyframes env flag** — The record gesture button and hotkey were available even when `VITE_STUDIO_ENABLE_KEYFRAMES` was not set. _Fix: Button and hotkey now gated behind `STUDIO_KEYFRAMES_ENABLED`._ |
| 28 | + |
| 29 | +- [ ] **Gesture recording sometimes works, sometimes doesn't** — Miguel noted it's intermittent: "sometimes it works and when it works is really good." Needs investigation of what conditions cause it to fail. |
| 30 | + |
| 31 | +### Keyframe conversion / creation |
| 32 | + |
| 33 | +- [ ] **Add-keyframe button does nothing on elements that already have keyframes** — Clicking the "add keyframe at playhead" button on an element that already has keyframes at other positions does nothing. Only moving the element auto-creates keyframes. The button should be disabled with a tooltip when keyframes already exist, or it should work correctly. |
| 34 | + |
| 35 | +- [ ] **GSAP import missing in non-GSAP scripts** — When trying to add keyframes to a composition that doesn't import GSAP, the script fails because it tries to call GSAP functions that don't exist in that context. Fix: ensure GSAP import is added to the script when creating keyframe tweens. |
| 36 | + |
| 37 | +### Timeline UX |
| 38 | + |
| 39 | +- [ ] **Timeline jumps around when clicking small keyframe diamonds** — When zoomed in and clicking a keyframe diamond that's too small, the timeline view scrolls/jumps erratically. |
| 40 | + |
| 41 | +- [ ] **Keyframe navigation arrows don't jump between keyframes** — The left/right arrows next to property fields in the design panel were expected to navigate to the previous/next keyframe, but they don't. |
| 42 | + |
| 43 | +- [ ] **No drag-to-reposition for keyframe diamonds** — Can't drag keyframe diamonds to move them to a different time position on the timeline. Would be a useful feature. |
| 44 | + |
| 45 | +### Animation section confusion |
| 46 | + |
| 47 | +- [ ] **Confusing distinction between keyframe values vs tween values** — When a keyframe is selected, the layout panel shows keyframe-scoped values, but the animation section shows tween-level values. Editing in the animation section modifies the tween directly (one line of code), while editing in the layout section modifies the keyframe. This distinction is unclear to users. |
| 48 | + |
| 49 | +- [ ] **Scale value resets to 1 after editing** — Setting scale to 4 in the animation section caused it to snap back to 1 (the CSS maximum). The value didn't persist correctly. |
| 50 | + |
| 51 | +## Summary |
| 52 | + |
| 53 | +- **Total bugs found**: 16 |
| 54 | +- **Fixed in PR #1312**: 7 |
| 55 | +- **Remaining**: 9 |
0 commit comments