forked from Leak_Technologies/VideoTools
Major fixes: - Fix drag-and-drop video loading bug (s.source was never set) - Call switchToVideo() instead of showPlayerView() to properly initialize player state - Show initial preview frame/thumbnail when video loads - Improve ffprobe error messages (capture stderr for better diagnostics) UI improvements: - Move playlist from left to right side - Add playlist toggle button (☰) with visibility control - Load and display preview frame immediately when video loads - Improve control layout with volume container - Auto-hide playlist when only one video loaded Documentation: - Add FEATURE_ROADMAP.md tracking 30 planned features - Add ICONS_NEEDED.md listing 53 required SVG icons - Update .gitignore to exclude binaries References: DEV_SPEC_FRAME_ACCURATE_PLAYBACK.md Co-Authored-By: Claude <noreply@anthropic.com>
293 lines
8.3 KiB
Markdown
293 lines
8.3 KiB
Markdown
# 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 (<<KF, KF>>)
|
|
- [ ] 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)
|