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>
151 lines
6.4 KiB
Markdown
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
|