# VT_Player Feature Implementation Roadmap This document tracks feature implementation with one git commit per feature. Each feature will be implemented according to the DEV_SPEC_FRAME_ACCURATE_PLAYBACK.md. ## Commit Strategy - One feature = One commit - Descriptive commit messages following format: `Add [feature]: [brief description]` - Test each feature before committing - Update this file to track completion status --- ## Phase 1: Core Playback Foundation ✓ (Partially Complete) ### ✅ Commit 1: Fix video loading and display **Status:** COMPLETED - [x] Fix drag-and-drop video loading (s.source not set) - [x] Show initial thumbnail/preview frame - [x] Improve ffprobe error messages **Commit:** Ready to commit ### ✅ Commit 2: Improve player layout **Status:** COMPLETED - [x] Move playlist to right side - [x] Add playlist toggle button - [x] Make window properly resizable **Commit:** Ready to commit --- ## Phase 2: Frame-Accurate Navigation (DEV_SPEC Phase 2) ### Commit 3: Implement keyframe detection system **Priority:** HIGH (Core feature for lossless cutting) - [ ] Create `internal/keyframe/detector.go` - [ ] Implement `DetectKeyframes()` using ffprobe - [ ] Implement keyframe caching (~/.cache/vt_player/) - [ ] Add `FindNearestKeyframe()` function - [ ] Performance target: <5s for 1-hour video **References:** DEV_SPEC lines 54-119 ### Commit 4: Add frame-by-frame navigation controls **Priority:** HIGH - [ ] Add frame step buttons (previous/next frame) - [ ] Implement `StepFrame()` in player controller - [ ] Add keyboard shortcuts (Left/Right arrows) - [ ] Update position tracking **References:** DEV_SPEC lines 121-190 ### Commit 5: Add keyframe jump controls **Priority:** HIGH - [ ] Add keyframe navigation buttons (<>) - [ ] Implement `SeekToKeyframe()` function - [ ] Add keyboard shortcuts (Shift+Left/Right) - [ ] Display frame counter in UI **References:** DEV_SPEC lines 246-295 --- ## Phase 3: Timeline & Visualization (DEV_SPEC Phase 3) ### Commit 6: Create custom timeline widget **Priority:** HIGH - [ ] Create `internal/ui/timeline.go` - [ ] Implement custom Fyne widget with keyframe markers - [ ] Add visual keyframe indicators (yellow lines) - [ ] Smooth seeking via timeline drag **References:** DEV_SPEC lines 192-241 ### Commit 7: Add timeline markers and display **Priority:** HIGH - [ ] Display keyframe markers on timeline - [ ] Add in-point marker (blue line) - [ ] Add out-point marker (red line) - [ ] Show current position scrubber **References:** DEV_SPEC lines 217-233 --- ## Phase 4: Lossless Cut Features (DEV_SPEC Phase 5) ### Commit 8: Implement in/out point marking **Priority:** HIGH (Core LosslessCut feature) - [ ] Add "Set In" button (keyboard: I) - [ ] Add "Set Out" button (keyboard: O) - [ ] Add "Clear" button (keyboard: X) - [ ] Visual feedback on timeline **References:** DEV_SPEC lines 296-311 ### Commit 9: Create cut export system **Priority:** HIGH - [ ] Create `internal/cut/export.go` - [ ] Implement `Export()` with FFmpeg stream copy - [ ] Add export validation (keyframe proximity check) - [ ] Add progress reporting **References:** DEV_SPEC lines 351-495 ### Commit 10: Add export UI and dialogs **Priority:** HIGH - [ ] Add "Export Cut" button (keyboard: E) - [ ] File save dialog - [ ] Progress dialog with cancel - [ ] Success/error feedback - [ ] Auto-snap to keyframe option **References:** DEV_SPEC lines 432-495 --- ## Phase 5: Subtitle Support ### Commit 11: Add subtitle track detection **Priority:** MEDIUM - [ ] Extend probeVideo() to detect subtitle streams - [ ] Store subtitle track metadata - [ ] Create subtitle track selection UI ### Commit 12: Implement subtitle rendering **Priority:** MEDIUM - [ ] Add subtitle extraction via ffmpeg - [ ] Parse subtitle formats (SRT, ASS, WebVTT) - [ ] Render subtitles over video - [ ] Add subtitle toggle button/shortcut ### Commit 13: Add subtitle styling controls **Priority:** LOW - [ ] Font size adjustment - [ ] Font color/background options - [ ] Position adjustment - [ ] Save subtitle preferences --- ## Phase 6: Advanced Playback Features ### Commit 14: Add playback speed control **Priority:** MEDIUM - [ ] Speed control widget (0.25x - 2x) - [ ] Keyboard shortcuts (+/- for speed) - [ ] Maintain pitch correction option - [ ] Display current speed in UI ### Commit 15: Implement A-B loop functionality **Priority:** MEDIUM - [ ] Set loop start point (A) - [ ] Set loop end point (B) - [ ] Enable/disable loop mode - [ ] Visual indicators on timeline - [ ] Keyboard shortcuts (A, B, L keys) ### Commit 16: Add screenshot capture **Priority:** MEDIUM - [ ] Capture current frame as PNG - [ ] File save dialog - [ ] Keyboard shortcut (S or F12) - [ ] Show success notification - [ ] Filename with timestamp --- ## Phase 7: Multiple Audio/Video Tracks ### Commit 17: Add audio track detection **Priority:** MEDIUM - [ ] Detect all audio streams in video - [ ] Store audio track metadata (language, codec) - [ ] Create audio track selection menu ### Commit 18: Implement audio track switching **Priority:** MEDIUM - [ ] Switch audio track during playback - [ ] Remember selected track per video - [ ] Keyboard shortcut for cycling tracks ### Commit 19: Add video track selection (for multi-angle) **Priority:** LOW - [ ] Detect multiple video streams - [ ] Video track selection UI - [ ] Switch video tracks --- ## Phase 8: Chapter Support (VideoTools Integration) ### Commit 20: Add chapter detection **Priority:** MEDIUM (Required for VideoTools integration) - [ ] Extend probeVideo() to detect chapters - [ ] Parse chapter metadata (title, timestamp) - [ ] Store chapter information in videoSource ### Commit 21: Create chapter navigation UI **Priority:** MEDIUM - [ ] Chapter list widget/menu - [ ] Chapter markers on timeline - [ ] Click chapter to jump - [ ] Display current chapter ### Commit 22: Add chapter navigation controls **Priority:** MEDIUM - [ ] Previous chapter button - [ ] Next chapter button - [ ] Keyboard shortcuts (PgUp/PgDn) - [ ] Chapter information overlay --- ## Phase 9: Enhanced UI/UX ### Commit 23: Add fullscreen mode **Priority:** MEDIUM - [ ] Fullscreen toggle (F11 or double-click) - [ ] Auto-hide controls after 3 seconds - [ ] Mouse movement shows controls - [ ] Exit fullscreen (Escape or F11) ### Commit 24: Implement aspect ratio controls **Priority:** MEDIUM - [ ] Detect source aspect ratio - [ ] Aspect ratio menu (Auto, 16:9, 4:3, 21:9, etc.) - [ ] Crop/letterbox options - [ ] Remember preference per video ### Commit 25: Add video information overlay **Priority:** LOW - [ ] Show codec, resolution, bitrate - [ ] Show current frame number - [ ] Show keyframe indicator - [ ] Toggle with keyboard (I key) ### Commit 26: Create settings dialog **Priority:** MEDIUM - [ ] Hardware acceleration toggle - [ ] Default volume setting - [ ] Cache size limit - [ ] Screenshot save location - [ ] Keyboard shortcut configuration --- ## Phase 10: Performance & Polish ### Commit 27: Optimize keyframe detection caching **Priority:** MEDIUM - [ ] Implement persistent disk cache - [ ] Cache invalidation on file modification - [ ] Limit cache size (50MB default) - [ ] Cache cleanup on startup ### Commit 28: Add keyboard shortcuts help **Priority:** LOW - [ ] Create shortcuts overlay (? or F1) - [ ] List all shortcuts - [ ] Searchable/filterable - [ ] Printable reference ### Commit 29: Implement recent files list **Priority:** LOW - [ ] Track recently opened files - [ ] Recent files menu - [ ] Limit to 10 most recent - [ ] Clear recent files option ### Commit 30: Add drag-and-drop enhancements **Priority:** LOW - [ ] Visual drop zone highlight - [ ] Support for subtitle file drops - [ ] Support for playlist file drops (M3U, etc.) - [ ] Feedback during drop operation --- ## Summary **Total Commits Planned:** 30 **Completed:** 2 **In Progress:** 0 **Remaining:** 28 **Priority Breakdown:** - HIGH: 11 features (Core frame-accurate playback) - MEDIUM: 14 features (Extended functionality) - LOW: 5 features (Polish and convenience) **Estimated Timeline:** - Phase 2-4 (Frame-accurate + Cut): ~2-3 weeks (Priority features) - Phase 5-8 (Subtitles, Tracks, Chapters): ~2-3 weeks - Phase 9-10 (Polish): ~1 week **Dependencies:** - Chapters (Commit 20-22) must be compatible with VideoTools format - Keyframe detection (Commit 3) is required before timeline (Commit 6) - Timeline (Commit 6-7) is required before cut markers (Commit 8)