Skip to content

[players] Frame and annotation fixes, profile 2FA card, doc cleanup#2029

Merged
frankrousseau merged 5 commits into
cgwire:mainfrom
frankrousseau:main
May 29, 2026
Merged

[players] Frame and annotation fixes, profile 2FA card, doc cleanup#2029
frankrousseau merged 5 commits into
cgwire:mainfrom
frankrousseau:main

Conversation

@frankrousseau
Copy link
Copy Markdown
Contributor

Problems

  • Going to the previous/next annotation could jump to the wrong frame.
  • The preview player showed duplicated frames.
  • The 2FA setup was buried among other profile settings.
  • The Shift / Ctrl draw modifiers (straight line, constant-width stroke) were undocumented.
  • The translation docs still referenced POEditor, which is no longer used.

Solutions

  • Fix previous/next annotation navigation to land on the correct frame.
  • Fix duplicated-frame handling in the preview player.
  • Move the 2FA setup into its own card on the profile page.
  • Document the Shift- and Ctrl-while-drawing shortcuts in the shortcut modal's Annotations card.
  • Drop POEditor from the translation docs.

frankrousseau and others added 5 commits May 29, 2026 15:44
We no longer use POEditor. Point contributors at src/locales/ (en.js is
the source of truth; other locales are kept in sync from it) and update
the "add a language file" steps accordingly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Surface the fabricjs-psbrush modifiers in the Annotations card: Shift while
drawing for a straight line, Ctrl while drawing for a constant-width
(pressure-disabled) stroke.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Two root causes made the player render duplicate frames (e.g. frame 31 on
a 12fps shot) and report the wrong frame count (85 instead of 41):

- It built its frame model on the production fps, ignoring an entity's
  data.fps override. Resolve the effective fps (entity.data.fps from the
  matching store map by entity_type_name, falling back to production) in
  the task mixin and thread it as an fps prop through PreviewPlayer →
  PreviewViewer → VideoViewer.
- The seek targeted the frame boundary (frame * rounded-frameDuration plus
  a fixed nudge), whose drift tips past ~frame 30 into the previous frame.
  Seek to the middle of the frame at full fps precision instead.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The password card's save button rendered after the whole card body, so
placing the two-factor section inside it pushed "Change password" below
2FA. Split 2FA into a separate card so the button sits under the fields.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Stepping through annotations with , / . landed 1-2 frames off and then
lost the next step. The find keys off annotation.time but the jump used
annotation.frame - 1, and those disagree: frame is fps-dependent (it goes
stale when the fps changes) and is sometimes a zero-padded string. Derive
the target frame from the annotation's time instead, so navigation, the
landed frame and the displayed drawing all use the same anchor.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@frankrousseau frankrousseau merged commit 6772289 into cgwire:main May 29, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant