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>
8.3 KiB
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
- Fix drag-and-drop video loading (s.source not set)
- Show initial thumbnail/preview frame
- Improve ffprobe error messages Commit: Ready to commit
✅ Commit 2: Improve player layout
Status: COMPLETED
- Move playlist to right side
- Add playlist toggle button
- 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)