Skip to content

MediaSyncView v3.0

Latest

Choose a tag to compare

@Rogala Rogala released this 11 May 15:41
· 1 commit to main since this release

MediaSyncView v2.1 — Bug Fixes & Improvements

Bug Fixes

  • isSeeking deadlock — isSeeking now resets on seek slider mouseup when masterVideo is absent or has NaN duration; added 2–3s timeout fallback in stepFrame and doSeek so the flag never gets stuck permanently
  • drawSplitLabel argument mutation — function no longer modifies the passed name string in-place
  • bestGrid on empty state — drawGrid now returns early when there are no media elements, preventing a redundant render call
  • Blob URL leak — URL.revokeObjectURL is now called on remove and clearAll for all media types (video and image); blob URLs from drag-and-drop are also detected and tracked via file.data prefix check
  • isSeeking stuck on seek error — both stepFrame and doSeek now have a timeout fallback that releases isSeeking if onseeked never fires (e.g. corrupt file)
  • Loupe stays active after second media added — loupeActive is now forcefully reset alongside the button state when updateControls disables the loupe button
  • Annotation cleared on auto-deactivation — toggleAnnot now accepts a keepDrawing flag; automatic deactivations (play, split, diff, tile, loupe) pass true so the drawing is preserved; only explicit user action or Escape clears it
  • syncAnnotCanvas race condition — skips resize if wrap has no size yet; validates imgData before putImageData; logs warnings instead of silently swallowing errors
  • Tile checkerboard pattern — fixed from column-based ti%2 to true chess pattern (row+col)%2
  • Keyboard shortcuts not working without mouse click — canvas now gets tabIndex=0 and focus() on load; focus is restored automatically after panel interactions

Localization

  • Portuguese (pt) — fixed t_export which was incorrectly set to Spanish 'Guardar pantalla (S)'; corrected to 'Salvar tela (S)'

New Features

  • Mobile layout — responsive CSS breakpoints at 640px and 400px: smaller buttons, flex-wrap panel, bottom-anchored popup menus
  • Touch support — annotation canvas and split divider now respond to touch events; empty canvas tap opens file picker on mobile

Performance

  • buildHelp — HTML string now built in a single pass and assigned once instead of repeated innerHTML += in a loop
  • Annotation canvas — all getContext('2d') calls on the annotation canvas now pass {willReadFrequently: true}

Other

  • MAX_MEDIA enforced on file input — loop breaks early when the limit is reached, consistent with drag-and-drop behavior
  • p5.js loading — clarified that the ERR_FILE_NOT_FOUND console error for p5.min.js is expected when no local file is present; CDN fallback loads automatically