VT_Player/docs/FEATURE_ROADMAP.md
Stu Leak 5e2171a95e Fix video loading and improve player UI
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>
2025-12-05 10:01:59 -05:00

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)