115 Commits

Author SHA1 Message Date
cee840b225 chore: sync package-lock.json version to 0.2.2
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-27 20:49:42 -04:00
1b035c9af6 fix: use per-video caption cache dir to prevent cross-video caption bleed
Subtitle downloads were going to a shared /tmp/video-clipper/subtitles/ dir,
so find_vtt_file could return captions from a previously-loaded video. Now
uses cache_manager::caption_cache_dir (URL-hash-keyed) with pre-download
cleanup, matching the existing per-video caching pattern.

Bump to v0.2.2.

Co-authored-by: Cursor <cursoragent@cursor.com>
v0.2.2
2026-09-23 06:00:43 -04:00
c1de18715e feat: v0.2.1 — Player controls polish, screenshot capture, quit shortcut
v0.2.0 introduced Player mode with floating controls, auto-hide UI,
PiP, fullscreen, JKL shuttle, speed selector, captions, and cut-clip.

v0.2.1 builds on that with extensive UI polish and new features:

Player Controls Polish:
- Enlarged center playback icons (Play 48, Rewind/FF 36) with filled SVGs
- Moved Cut Clip scissors into center group with hidden cut-before button
- Narrowed floating panel from 70% to 60% width
- Custom-styled volume slider matching seek bar (linear-gradient fill)
- Pure opacity fade animation (0.35s) replacing slide-in
- Tinted panel background (rgba(53,54,80,0.75)) visible on black canvas
- Drop shadow on center transport controls
- Scissors buttons dimmed via color (not opacity) with single-property transitions
- ScissorsLineDashed icon for cut-before variant
- Timestamps in single seek row (time | bar | duration) with sans-serif font
- Milliseconds shown at smaller size, revealed on hover

Screenshot Capture (S / Shift+S):
- Canvas compositing at native video resolution with optional caption burn-in
- Caption rendering matches CSS preview (font, background, outline, word highlight)
- New Rust save_screenshot command using existing filename pattern
- Output: {title} - {ms}ms-screenshot.png
- crossorigin=anonymous on video element for untainted canvas

Other:
- Q keyboard shortcut to quit via Tauri process plugin
- formatTimeParts() utility for split timestamp rendering
- Updated About dialog shortcuts list
- Version bump to 0.2.1

Co-authored-by: Cursor <cursoragent@cursor.com>
v0.2.1
2026-09-23 05:30:45 -04:00
619fe59dbe feat: timeline zooms to clip region on cut-clip from Player mode
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 03:18:18 -04:00
f6ad41f5fd fix: blur via visibility (no opacity), raise to 84px, enlarge center icons 50%
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 03:16:52 -04:00
d7a207154a fix: guard against zero-length clip at EOF
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 02:32:46 -04:00
507e3b79b7 feat: tabbed About dialog with keyboard shortcuts reference
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 02:29:31 -04:00
ac7cb70cb7 feat: cut clip from Player mode (X/Z keys, scissors button)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 02:27:21 -04:00
d964c97fe6 feat: C and P both toggle between Clipper/Player modes
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 02:25:45 -04:00
be27b1b3c6 feat: replace emoji icons with Lucide SVG components
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 02:24:03 -04:00
646f2e511b fix: raise controls to 64px, smooth blur via ::before pseudo-element
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 02:21:56 -04:00
d8a6e0edd0 docs: v0.2.1 implementation plan — 5 tasks
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 01:49:46 -04:00
21a5445143 docs: v0.2.1 design spec — polish, icons, cut clip, shortcuts
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 01:42:50 -04:00
2e36d16bfe fix: QA round 2 — playhead guard, controls position, caption lift, Tauri fullscreen, timeline sync
- Guard drawPlayhead on session.duration > 0 in PlayerTimeline
- Move floating controls pill from bottom: 24px to 48px
- Add playerControlsVisible prop to VideoPlayer; captions slide up 160px when controls visible
- Replace web Fullscreen API with Tauri getCurrentWindow().setFullscreen() (WKWebView compat)
- Add core:window:allow-set-fullscreen and core:window:allow-is-fullscreen permissions
- Tie PlayerTimeline visibility to showPlayerControls; remove unused proximity logic

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 20:16:10 -04:00
0f2a523cc2 fix: QuickTime-style floating controls pill, speed selector, rate sync
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:46:46 -04:00
c00c215d33 fix: adjustShuttle reads live rate with 0.25 step, fullscreen targets documentElement
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:45:50 -04:00
980f31a414 fix: auto-hide timers, status bar, keyframe shortcuts in Player mode
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:44:48 -04:00
d847a0cff2 docs: v0.2.0 Player mode bugfixes implementation plan
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:43:34 -04:00
0e84e66cf7 docs: v0.2.0 Player mode bugfixes design spec
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:39:51 -04:00
711f18ffe5 fix: add tabindex to seek bar slider role, remove dead handleVideoClick
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:16:04 -04:00
7e838dc391 chore: bump version to 0.2.0
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:13:18 -04:00
1a86a34152 feat: add FLIP transitions for Clipper/Player mode switching
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:12:26 -04:00
2472decb20 fix: bind captionsEnabled between App and VideoPlayer for Player mode CC sync
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:11:21 -04:00
3e219b7760 feat: conditional CC rendering and click-to-play in Player mode
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:10:43 -04:00
199ad1ce3b fix: transport shortcuts work in Player mode via runTransportAction fallback
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:09:27 -04:00
d36138c550 feat: add Player/Clipper mode switching with auto-hide UI
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:08:25 -04:00
56686a36e6 feat: add PlayerTimeline simplified waveform component
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:06:32 -04:00
f717687b1b feat: add PlayerControls floating overlay component
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:05:03 -04:00
bb5fa4bd63 feat: add SpeedSelector popup component
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:03:46 -04:00
d9f58747a4 feat: add PiP, fullscreen, and playbackRate helpers to playback module
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:02:03 -04:00
bd96da4dc9 feat: add appMode preference (clipper/player) with persistence
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 19:00:34 -04:00
8bcec23d8c docs: add v0.2.0 player mode implementation plan
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 18:58:00 -04:00
4f7458d8f8 docs: add v0.2.0 player mode design spec
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 18:51:01 -04:00
c90b6765b7 fix: timeline resize regression + dynamic lane alignment
- Remove splitAreaEl dependency from handleResizeMove; use fixed 40-500 clamp
- Add computeLanes() + LaneLayout for dynamic lane height computation
- Update clipRenderer to accept LaneLayout instead of hardcoded constants
- Tighten CONTROLS_HEIGHT (30→22) and CLIP_HEIGHT (30→20) to reduce gaps
- Tighten label baseline offset (14→10) for better waveform-to-tick alignment

Co-authored-by: Cursor <cursoragent@cursor.com>
v0.1.3
2026-09-22 18:15:19 -04:00
23b30be357 fix: CSS-grid layout to preserve video on toggle + magnification enhancements (brighter, larger, minor ticks)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 17:30:47 -04:00
124542b4c4 fix: post-smoke-test polish — preserve playhead, clip list redesign, play-clip action, 1100x750 default
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 17:15:28 -04:00
279e27a9b5 docs: user edits to v0.1.3 spec (version bump section)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 16:54:53 -04:00
8c271773bd feat: timeline right-click context menu with mark/seek/delete actions
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 16:53:43 -04:00
27c199e090 feat: larger timeline timestamps with mouse-proximity magnification
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 16:51:56 -04:00
923c7b0e23 fix: clip list width edge cases (falsy check, narrow-window clamp)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 16:50:57 -04:00
b371ec6c3e feat: adjustable clip list layout (bottom/left sidebar)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 16:49:35 -04:00
0b8bec2496 chore: bump version to 0.1.3
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 16:48:14 -04:00
91550dacd6 docs: add v0.1.3 implementation plan
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 16:42:59 -04:00
9752a6d614 docs: add v0.1.3 polish/tweaks design spec
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 16:32:17 -04:00
9499d776fd fix: about dialog, cache paths, keyframes, reprocess always uses low-res
- Replace native macOS About menu with custom Svelte dialog via Tauri event
- Inline SVG icon in AboutDialog (fixes broken image in webview)
- Align cache directory with Tauri $APPDATA, add to asset protocol scope
- Fix ffprobe 8.x keyframe parsing (skip_frame nokey, flexible parser)
- Copy caption files into cache dir when outside cache path
- Add -y flag to ffmpeg thumbnail extraction (prevent hang on re-extract)
- Reprocess always uses preview (low-res) file, never HQ export
- Prefer cached preview file for analysis even when HQ is cached
- Guard upgrade toast when already on HQ

Co-authored-by: Cursor <cursoragent@cursor.com>
v0.1.2
2026-09-22 16:16:00 -04:00
925a3fc054 chore: bump version to 0.1.2
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 14:49:47 -04:00
36ff3094b6 feat: add per-video reprocess button to status bar
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 14:48:26 -04:00
2c3d035d1f feat: add cache management section to Preferences panel
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 14:47:29 -04:00
b180d4324c feat: integrate analysis cache into video session processing
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 14:45:37 -04:00
b7a5caf4ae feat: add TypeScript bindings for cache IPC commands
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-22 14:44:24 -04:00