VideoTools/docs/COMPARE_FULLSCREEN.md
Stu Leak 5b8fc452af Add FPS counter, queue improvements, Compare fixes, and comprehensive documentation
Features:
- FPS counter in conversion status showing real-time encoding speed
- Job queue now displays FPS, encoding speed (e.g., "1.2x"), and ETA for running conversions
- Copy Comparison button exports side-by-side metadata comparison report
- Auto-compare checkbox in Convert module - automatically loads Compare view after conversion
- Convert Now properly adds job to queue and displays in Job Queue with live stats
- Module badge colors in job queue now match main menu tile colors
- Fixed fullscreen compare window sizing (reduced player dimensions to prevent overflow)

Bug Fixes:
- Fixed queue state management - only one job runs at a time (prevents multiple jobs showing "running")
- Fixed Compare module slot assignment - single video drops now fill empty slot instead of overwriting
- Fixed job queue scroll rubber banding (no longer jumps back to top)
- Enhanced crop detection validation for WMV/AVI formats with dimension clamping and bounds checking

Documentation:
- VT_Player integration notes with API requirements for keyframing and trim features
- LosslessCut feature analysis for Trim module inspiration
- Video metadata guide covering MP4/MKV custom fields and NFO generation
- Trim module design specification
- Compare fullscreen mode documentation
- Updated VIDEO_PLAYER_FORK.md to mark fork as completed

Technical Changes:
- Added state tracking for FPS, speed, and ETA (main.go:197-199)
- Enhanced queue processJobs() to check for running jobs before starting new ones
- Improved Compare module drag-and-drop logic with smart slot assignment (both code paths)
- Added deferred scroll position restoration to prevent UI jumping
- Job queue Config map now carries conversion stats for display

🤖 Generated with Claude Code (https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 07:35:48 -05:00

151 lines
6.4 KiB
Markdown

# Compare Module - Fullscreen Mode
## Overview
The Compare module now includes a **Fullscreen Compare** mode that displays two videos side-by-side in a larger view, optimized for detailed visual comparison.
## Features
### Current (v0.1)
- ✅ Side-by-side fullscreen layout
- ✅ Larger video players for better visibility
- ✅ Individual playback controls for each video
- ✅ File labels showing video names
- ✅ Back button to return to regular Compare view
- ✅ Pink colored header/footer matching Compare module
### Planned (Future - requires VT_Player enhancements)
-**Synchronized playback** - Play/Pause both videos simultaneously
-**Linked seeking** - Seek to same timestamp in both videos
-**Frame-by-frame sync** - Step through both videos in lockstep
-**Volume link** - Adjust volume on both players together
-**Playback speed sync** - Change speed on both players at once
## Usage
### Accessing Fullscreen Mode
1. Load two videos in the Compare module
2. Click the **"Fullscreen Compare"** button
3. Videos will display side-by-side in larger players
### Controls
- **Individual players**: Each video has its own play/pause/seek controls
- **"Play Both" button**: Placeholder for future synchronized playback
- **"Pause Both" button**: Placeholder for future synchronized pause
- **"< BACK TO COMPARE"**: Return to regular Compare view
## Use Cases
### Visual Quality Comparison
Compare encoding settings or compression quality:
- Original vs. compressed
- Different codec outputs
- Before/after color grading
- Different resolution scaling
### Frame-Accurate Comparison
When VT_Player sync is implemented:
- Compare edits side-by-side
- Check for sync issues in re-encodes
- Validate frame-accurate cuts
- Compare different filter applications
### A/B Testing
Test different processing settings:
- Different deinterlacing methods
- Upscaling algorithms
- Noise reduction levels
- Color correction approaches
## Technical Notes
### Current Implementation
- Uses standard `buildVideoPane()` for each side
- 640x360 minimum player size (scales with window)
- Independent playback state per video
- No shared controls between players yet
### VT_Player API Requirements for Sync
For synchronized playback, VT_Player will need:
```go
// Playback state access
player.IsPlaying() bool
player.GetPosition() time.Duration
// Event callbacks
player.OnPlaybackStateChanged(callback func(playing bool))
player.OnPositionChanged(callback func(position time.Duration))
// Synchronized control
player.SyncWith(otherPlayer *Player)
player.Unsync()
```
### Synchronization Strategy
When VT_Player supports it:
1. **Master-Slave Pattern**: One player is master, other follows
2. **Linked Events**: Play/pause/seek events trigger on both
3. **Position Polling**: Periodically check for drift and correct
4. **Frame-Accurate Sync**: Step both players frame-by-frame together
## Keyboard Shortcuts (Planned)
When implemented in VT_Player:
- `Space` - Play/Pause both videos
- `J` / `L` - Rewind/Forward both videos
- `←` / `→` - Step both videos frame-by-frame
- `K` - Pause both videos
- `0-9` - Seek to percentage (0% to 90%) in both
- `Esc` - Exit fullscreen mode
## UI Layout
```
┌─────────────────────────────────────────────────────────────┐
│ < BACK TO COMPARE │ ← Pink header
├─────────────────────────────────────────────────────────────┤
│ │
│ Side-by-side fullscreen comparison. Use individual... │
│ │
│ [▶ Play Both] [⏸ Pause Both] │
│ ───────────────────────────────────────────────────────── │
│ │
│ ┌─────────────────────────┬─────────────────────────────┐ │
│ │ File 1: video1.mp4 │ File 2: video2.mp4 │ │
│ ├─────────────────────────┼─────────────────────────────┤ │
│ │ │ │ │
│ │ Video Player 1 │ Video Player 2 │ │
│ │ (640x360 min) │ (640x360 min) │ │
│ │ │ │ │
│ │ [Play] [Pause] [Seek] │ [Play] [Pause] [Seek] │ │
│ │ │ │ │
│ └─────────────────────────┴─────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
← Pink footer
```
## Future Enhancements
### v0.2 - Synchronized Playback
- Implement master-slave sync between players
- Add "Link" toggle button to enable/disable sync
- Visual indicator when players are synced
### v0.3 - Advanced Sync
- Offset compensation (e.g., if videos start at different times)
- Manual sync adjustment (nudge one video forward/back)
- Sync validation indicator (shows if videos are in sync)
### v0.4 - Comparison Tools
- Split-screen view with adjustable divider
- A/B quick toggle (show only one at a time)
- Difference overlay (highlight changed regions)
- Frame difference metrics display
## Notes
- Fullscreen mode is accessible from regular Compare view
- Videos must be loaded before entering fullscreen mode
- Synchronized controls are placeholders until VT_Player API is enhanced
- Window can be resized freely - players will scale
- Each player maintains independent state for now