diff --git a/docs/DONE.md b/docs/DONE.md index f9e970e..ea08dff 100644 --- a/docs/DONE.md +++ b/docs/DONE.md @@ -1,427 +1,9 @@ -# VideoTools - Completed Features +# VT Player – Completed Items -This file tracks completed features, fixes, and milestones. - -## Version 0.1.0-dev13 (In Progress - 2025-12-03) - -### Features -- ✅ **Automatic Black Bar Detection and Cropping** - - Detects and removes black bars to reduce file size (15-30% typical reduction) - - One-click "Detect Crop" button analyzes video using FFmpeg cropdetect - - Samples 10 seconds from middle of video for stable detection - - Shows estimated file size reduction percentage before applying - - User confirmation dialog displays before/after dimensions - - Manual crop override capability (width, height, X/Y offsets) - - Applied before scaling for optimal results - - Works in both direct convert and queue job execution - - Proper handling for videos without black bars - - 30-second timeout protection for detection process - -- ✅ **Frame Rate Conversion UI with Size Estimates** - - Comprehensive frame rate options: Source, 23.976, 24, 25, 29.97, 30, 50, 59.94, 60 - - Intelligent file size reduction estimates (40-50% for 60→30 fps) - - Real-time hints showing "Converting X → Y fps: ~Z% smaller file" - - Warning for upscaling attempts with judder notice - - Automatic calculation based on source and target frame rates - - Dynamic updates when video or frame rate changes - - Supports both film (24 fps) and broadcast standards (25/29.97/30) - - Uses FFmpeg fps filter for frame rate conversion - -- ✅ **Encoder Preset Descriptions with Speed/Quality Trade-offs** - - Detailed information for all 9 preset options - - Speed comparisons relative to "slow" and "medium" baselines - - File size impact percentages for each preset - - Visual icons indicating speed categories (⚡⏩⚖️🎯🐌) - - Recommends "slow" as best quality/size ratio - - Dynamic hint updates when preset changes - - Helps users make informed encoding time decisions - - Ranges from ultrafast (~10x faster, ~30% larger) to veryslow (~5x slower, ~15-20% smaller) - -- ✅ **Compare Module** - - Side-by-side video comparison interface - - Load two videos and compare detailed metadata - - Displays format, resolution, codecs, bitrates, frame rate, pixel format - - Shows color space, color range, GOP size, field order - - Indicates presence of chapters and metadata - - Accessible via GUI button (pink color) or CLI: `videotools compare ` - - Added formatBitrate() helper function for consistent bitrate display - -- ✅ **Target File Size Encoding Mode** - - New "Target Size" bitrate mode in convert module - - Specify desired output file size (e.g., "25MB", "100MB", "8MB") - - Automatically calculates required video bitrate based on: - - Target file size - - Video duration - - Audio bitrate - - Container overhead (3% reserved) - - Implemented ParseFileSize() to parse size strings (KB, MB, GB) - - Implemented CalculateBitrateForTargetSize() for bitrate calculation - - Works in both GUI convert view and job queue execution - - Minimum bitrate sanity check (100 kbps) to prevent invalid outputs - -### Technical Improvements -- ✅ Added compare command to CLI help text -- ✅ Consistent "Target Size" naming throughout UI and code -- ✅ Added compareFile1 and compareFile2 to appState for video comparison -- ✅ Module button grid updated with compare button (pink/magenta color) - -## Version 0.1.0-dev12 (2025-12-02) - -### Features -- ✅ **Automatic hardware encoder detection and selection** - - Prioritizes NVIDIA NVENC > Intel QSV > VA-API > OpenH264 - - Falls back to software encoders (libx264/libx265) if no hardware acceleration available - - Automatically uses best available encoder without user configuration - - Significant performance improvement on systems with GPU encoding support - -- ✅ **iPhone/mobile device compatibility settings** - - H.264 profile selection (baseline, main, high) - - H.264 level selection (3.0, 3.1, 4.0, 4.1, 5.0, 5.1) - - Defaults to main profile, level 4.0 for maximum compatibility - - Ensures videos play on iPhone 4 and newer devices - -- ✅ **Advanced deinterlacing with dual methods** - - Added bwdif (Bob Weaver) deinterlacing - higher quality than yadif - - Kept yadif for faster processing when speed is priority - - Auto-detect interlaced content based on field_order metadata - - Deinterlace modes: Auto (detect and apply), Force, Off - - Defaults to bwdif for best quality - -- ✅ **Audio normalization for compatibility** - - Force stereo (2 channels) output - - Force 48kHz sample rate - - Ensures consistent playback across all devices - - Optional toggle for maximum compatibility mode - -- ✅ **10-bit encoding for better compression** - - Changed default pixel format from yuv420p to yuv420p10le - - Provides 10-20% file size reduction at same visual quality - - Better handling of color gradients and banding - - Automatic for all H.264/H.265 conversions - -- ✅ **Browser desync fix** - - Added `-fflags +genpts` to regenerate timestamps - - Added `-r` flag to enforce constant frame rate (CFR) - - Fixes "desync after multiple plays" issue in Chromium browsers (Chrome, Edge, Vivaldi) - - Eliminates gradual audio drift when scrubbing/seeking - -- ✅ **Extended resolution support** - - Added 8K (4320p) resolution option - - Supports: 720p, 1080p, 1440p, 4K (2160p), 8K (4320p) - - Prepared for future VR and ultra-high-resolution content - -- ✅ **Black bar cropping infrastructure** - - Added AutoCrop configuration option - - Cropdetect filter support for future auto-detection - - Foundation for 15-30% file size reduction in dev13 - -### Technical Improvements -- ✅ All new settings propagate to both direct convert and queue processing -- ✅ Backward compatible with legacy InverseTelecine setting -- ✅ Comprehensive logging for all encoding decisions -- ✅ Settings persist across video loads - -### Bug Fixes -- ✅ Fixed VFR (Variable Frame Rate) handling that caused desync -- ✅ Prevented timestamp drift in long videos -- ✅ Improved browser playback compatibility - -## Version 0.1.0-dev11 (2025-11-30) - -### Features -- ✅ Added persistent conversion stats bar visible on all screens - - Real-time progress updates for running jobs - - Displays pending/completed/failed job counts - - Clickable to open queue view - - Shows job title and progress percentage -- ✅ Added multi-video navigation with Prev/Next buttons - - Load multiple videos for batch queue setup - - Switch between loaded videos to review settings before queuing - - Shows "Video X of Y" counter -- ✅ Added installation script with animated loading spinner - - Braille character animations - - Shows current task during build and install - - Interactive path selection (system-wide or user-local) -- ✅ Added error dialogs with "Copy Error" button - - One-click error message copying for debugging - - Applied to all major error scenarios - - Better user experience when reporting issues - -### Improvements -- ✅ Align direct convert and queue behavior - - Show active direct convert inline in queue with live progress - - Preserve queue scroll position during updates - - Back button from queue returns to originating module - - Queue badge includes active direct conversions - - Allow adding to queue while a convert is running -- ✅ DVD-compliant outputs - - Enforce MPEG-2 video + AC-3 audio, yuv420p - - Apply NTSC/PAL targets with correct fps/resolution - - Disable cover art for DVD targets to avoid mux errors - - Unified settings for direct and queued jobs -- ✅ Updated queue tile to show active/total jobs instead of completed/total - - Shows pending + running jobs out of total - - More intuitive status at a glance -- ✅ Fixed critical deadlock in queue callback system - - Callbacks now run in goroutines to prevent blocking - - Prevents app freezing when adding jobs to queue -- ✅ Improved batch file handling with detailed error reporting - - Shows which specific files failed to analyze - - Continues processing valid files when some fail - - Clear summary messages -- ✅ Fixed queue status display - - Always shows progress percentage (even at 0%) - - Clearer indication when job is running vs. pending -- ✅ Fixed queue deserialization for formatOption struct - - Handles JSON map conversion properly - - Prevents panic when reloading saved queue on startup - -### Bug Fixes -- ✅ Fixed crash when dragging multiple files - - Better error handling in batch processing - - Graceful degradation for problematic files -- ✅ Fixed deadlock when queue callbacks tried to read stats -- ✅ Fixed formatOption deserialization from saved queue - -## Version 0.1.0-dev7 (2025-11-23) - -### Features -- ✅ Changed default aspect ratio from 16:9 to Source across all instances - - Updated initial state default - - Updated empty fallback default - - Updated reset button behavior - - Updated clear video behavior - - Updated hint label text - -### Documentation -- ✅ Created comprehensive MODULES.md with all planned modules -- ✅ Created PERSISTENT_VIDEO_CONTEXT.md design document -- ✅ Created VIDEO_PLAYER.md documenting custom player implementation -- ✅ Reorganized docs into module-specific folders -- ✅ Created detailed Convert module documentation -- ✅ Created detailed Inspect module documentation -- ✅ Created detailed Rip module documentation -- ✅ Created docs/README.md navigation hub -- ✅ Created TODO.md and DONE.md tracking files - -## Version 0.1.0-dev6 and Earlier - -### Core Application -- ✅ Fyne-based GUI framework -- ✅ Multi-module architecture with tile-based main menu -- ✅ Application icon and branding -- ✅ Debug logging system (VIDEOTOOLS_DEBUG environment variable) -- ✅ Cross-module state management -- ✅ Window initialization and sizing - -### Convert Module (Partial Implementation) -- ✅ Basic video conversion functionality -- ✅ Format selection (MP4, MKV, WebM, MOV, AVI) -- ✅ Codec selection (H.264, H.265, VP9) -- ✅ Quality presets (CRF-based encoding) -- ✅ Output aspect ratio selection - - Source, 16:9, 4:3, 1:1, 9:16, 21:9 -- ✅ Aspect ratio handling methods - - Auto, Letterbox, Pillarbox, Blur Fill -- ✅ Deinterlacing options - - Inverse telecine with default smoothing -- ✅ Mode toggle (Simple/Advanced) -- ✅ Output filename customization -- ✅ Default output naming ("-convert" suffix) -- ✅ Status indicator during conversion -- ✅ Cancelable conversion process -- ✅ FFmpeg command construction -- ✅ Process management and execution - -### Video Loading & Metadata -- ✅ File selection dialog -- ✅ FFprobe integration for metadata parsing -- ✅ Video source structure with comprehensive metadata - - Path, format, resolution, duration - - Video/audio codecs - - Bitrate, framerate, pixel format - - Field order detection -- ✅ Preview frame generation (24 frames) -- ✅ Temporary directory management for previews - -### Media Player -- ✅ Embedded video playback using FFmpeg -- ✅ Audio playback with SDL2 -- ✅ Frame-accurate rendering -- ✅ Playback controls (play/pause) -- ✅ Volume control -- ✅ Seek functionality with progress bar -- ✅ Player window sizing based on video aspect ratio -- ✅ Frame pump system for smooth playback -- ✅ Audio/video synchronization -- ✅ Stable seeking and embedded video rendering - -### Metadata Display -- ✅ Metadata panel showing key video information -- ✅ Resolution display -- ✅ Duration formatting -- ✅ Codec information -- ✅ Aspect ratio display -- ✅ Field order indication - -### Inspect Module (Basic) -- ✅ Video metadata viewing -- ✅ Technical details display -- ✅ Comprehensive information in Convert module metadata panel -- ✅ Cover art preview capability - -### UI Components -- ✅ Main menu with 8 module tiles - - Convert, Merge, Trim, Filters, Upscale, Audio, Thumb, Inspect -- ✅ Module color coding for visual identification -- ✅ Clear video control in metadata panel -- ✅ Reset button for Convert settings -- ✅ Status label for operation feedback -- ✅ Progress indication during operations - -### Git & Version Control -- ✅ Git repository initialization -- ✅ .gitignore configuration -- ✅ Version tagging system (v0.1.0-dev1 through dev7) -- ✅ Commit message formatting -- ✅ Binary exclusion from repository -- ✅ Build cache exclusion - -### Build System -- ✅ Go modules setup -- ✅ Fyne dependencies integration -- ✅ FFmpeg/FFprobe external tool integration -- ✅ SDL2 integration for audio -- ✅ OpenGL bindings (go-gl) for video rendering -- ✅ Cross-platform file path handling - -### Asset Management -- ✅ Application icon (VT_Icon.svg) -- ✅ Icon export to PNG format -- ✅ Icon embedding in application - -### Logging & Debugging -- ✅ Category-based logging (SYS, UI, MODULE, etc.) -- ✅ Timestamp formatting -- ✅ Debug output toggle via environment variable -- ✅ Comprehensive debug messages throughout application -- ✅ Log file output (videotools.log) - -### Error Handling -- ✅ FFmpeg execution error capture -- ✅ File selection cancellation handling -- ✅ Video parsing error messages -- ✅ Process cancellation cleanup - -### Utility Functions -- ✅ Duration formatting (seconds to HH:MM:SS) -- ✅ Aspect ratio parsing and calculation -- ✅ File path manipulation -- ✅ Temporary directory creation and cleanup - -## Technical Achievements - -### Architecture -- ✅ Clean separation between UI and business logic -- ✅ Shared state management across modules -- ✅ Modular design allowing easy addition of new modules -- ✅ Event-driven UI updates - -### FFmpeg Integration -- ✅ Dynamic FFmpeg command building -- ✅ Filter chain construction for complex operations -- ✅ Stream mapping for video/audio handling -- ✅ Process execution with proper cleanup -- ✅ Progress parsing from FFmpeg output (basic) - -### Media Playback -- ✅ Custom media player implementation -- ✅ Frame extraction and display pipeline -- ✅ Audio decoding and playback -- ✅ Synchronization between audio and video -- ✅ Embedded playback within application window -- ✅ Checkpoint system for playback position - -### UI/UX -- ✅ Responsive layout adapting to content -- ✅ Intuitive module selection -- ✅ Clear visual feedback during operations -- ✅ Logical grouping of related controls -- ✅ Helpful hint labels for user guidance - -## Milestones - -- **2025-11-23** - v0.1.0-dev7 released with Source aspect ratio default -- **2025-11-22** - Documentation reorganization and expansion -- **2025-11-21** - Last successful binary build (GCC compatibility) -- **Earlier** - v0.1.0-dev1 through dev6 with progressive feature additions - - dev6: Aspect ratio controls and cancelable converts - - dev5: Icon and basic UI improvements - - dev4: Build cache management - - dev3: Media player checkpoint - - Earlier: Initial implementation and architecture - -## Development Progress - -### Lines of Code (Estimated) -- **main.go**: ~2,500 lines (comprehensive Convert module, UI, player) -- **Documentation**: ~1,500 lines across multiple files -- **Total**: ~4,000+ lines - -### Modules Status -- **Convert**: 60% complete (core functionality working, advanced features pending) -- **Inspect**: 20% complete (basic metadata display, needs dedicated module) -- **Merge**: 0% (planned) -- **Trim**: 0% (planned) -- **Filters**: 0% (planned) -- **Upscale**: 0% (planned) -- **Audio**: 0% (planned) -- **Thumb**: 0% (planned) -- **Rip**: 0% (planned) - -### Documentation Status -- **Module Documentation**: 30% complete - - ✅ Convert: Complete - - ✅ Inspect: Complete - - ✅ Rip: Complete - - ⏳ Others: Pending -- **Design Documents**: 50% complete - - ✅ Persistent Video Context - - ✅ Module Overview - - ⏳ Architecture - - ⏳ FFmpeg Integration -- **User Guides**: 0% complete - -## Bug Fixes & Improvements - -### Recent Fixes -- ✅ Fixed aspect ratio default from 16:9 to Source (dev7) -- ✅ Stabilized video seeking and embedded rendering -- ✅ Improved player window positioning -- ✅ Fixed clear video functionality -- ✅ Resolved build caching issues -- ✅ Removed binary from git repository - -### Performance Improvements -- ✅ Optimized preview frame generation -- ✅ Efficient FFmpeg process management -- ✅ Proper cleanup of temporary files -- ✅ Responsive UI during long operations - -## Acknowledgments - -### Technologies Used -- **Fyne** - Cross-platform GUI framework -- **FFmpeg/FFprobe** - Video processing and analysis -- **SDL2** - Audio playback -- **OpenGL (go-gl)** - Video rendering -- **Go** - Primary programming language - -### Community Resources -- FFmpeg documentation and community -- Fyne framework documentation -- Go community and standard library - ---- - -*Last Updated: 2025-11-23* +- Forked and rebranded from VideoTools (module path, scripts, branding) with a clean docs layout under `docs/`. +- Aligned git history with VideoTools so upstream sync and PRs are straightforward. +- Minimal player-first UX: app boots directly into a dark landing screen with centered play icon, “Load Video” button, and drop hint. +- Playlist basics: load single/multiple files or folders; prev/next navigation; list view when media is present. +- Drag-and-drop: drop files or folders anywhere to load (folders are scanned for videos). +- Player controls: play/pause, seek slider with time labels, volume/mute slider, prev/next track buttons, and session reuse for loaded media. +- Queue/convert UI removed from the surface; only player UI is exposed (legacy code still present but hidden). diff --git a/docs/TODO.md b/docs/TODO.md index 2a9e2bf..26447a4 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -1,447 +1,26 @@ -# VideoTools TODO (v0.1.0-dev13 plan) - -This file tracks upcoming features, improvements, and known issues. - -## Priority Features for dev13 (Based on Jake's research) - -### Quality & Compression Improvements -- [x] **Automatic black bar detection and cropping** (v0.1.0-dev13 - COMPLETED) - - Implement ffmpeg cropdetect analysis pass - - Auto-apply detected crop values - - 15-30% file size reduction with zero quality loss - - Add manual crop override option - -- [x] **Frame rate conversion UI** (v0.1.0-dev13 - COMPLETED) - - Dropdown: Source, 23.976, 24, 25, 29.97, 30, 50, 59.94, 60 fps - - Auto-suggest 60→30fps conversion with size estimate - - Show file size impact (40-50% reduction for 60→30) - -- [x] **HEVC/H.265 encoder preset options** (v0.1.0-dev13 - COMPLETED) - - Preset dropdown: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow - - Show time/quality trade-off estimates - - Recommend "slow" for best quality/size balance - -- [ ] **Advanced filters module** - - Denoising: hqdn3d (fast), nlmeans (slow, high quality) - - Sharpening: unsharp filter with strength slider - - Deblocking: remove compression artifacts - - All with strength sliders and preview - -### Encoding Features -- [ ] **2-pass encoding for precise bitrate targeting** - - UI for target file size - - Auto-calculate bitrate from duration + size - - Progress tracking for both passes - -- [ ] **SVT-AV1 codec support** - - Faster than H.265, smaller files - - Add compatibility warnings for iOS - - Preset selection (0-13) - -### UI & Workflow -- [ ] **Add UI controls for dev12 backend features** - - H.264 profile/level dropdowns - - Deinterlace method selector (yadif/bwdif) - - Audio normalization checkbox - - Auto-crop toggle - -- [ ] **Encoding presets system** - - "iPhone Compatible" preset (main/4.0, stereo, 48kHz, auto-crop) - - "Maximum Compression" preset (H.265, slower, CRF 24, 10-bit, auto-crop) - - "Fast Encode" preset (medium, hardware encoding) - - Save custom presets - -- [ ] **File size estimator** - - Show estimated output size before encoding - - Based on source duration, target bitrate/CRF - - Update in real-time as settings change - -### VR & Advanced Features -- [ ] **VR video support infrastructure** - - Detect VR metadata tags - - Side-by-side and over-under format detection - - Preserve VR metadata in output - - Add VR-specific presets - -- [ ] **Batch folder import** - - Select folder, auto-add all videos to queue - - Filter by extension - - Apply same settings to all files - - Progress indicator for folder scanning - -## Windows Compatibility (v0.1.0-dev14) - -### Build System -- [ ] **Cross-compilation setup** - - Configure CGO for Windows cross-compilation - - Set up MinGW-w64 toolchain - - Test Fyne compilation on Windows - - Create Windows build script equivalent to build.sh - -- [ ] **Dependency bundling** - - Bundle ffmpeg.exe with Windows builds - - Include all required DLLs (OpenGL, etc.) - - Create installer with dependencies - - Add ffmpeg to PATH or bundle in application directory - -### Platform-Specific Code -- [ ] **Path handling** - - Replace Unix path separators with filepath.Separator - - Handle Windows drive letters (C:\, D:\, etc.) - - Support UNC paths (\\server\share\) - - Test with spaces and special characters in paths - -- [ ] **File dialogs** - - Ensure Fyne file dialogs work on Windows - - Test drag-and-drop on Windows Explorer - - Handle Windows file associations - - Add "Open with VideoTools" context menu option - -- [ ] **Process management** - - Test ffmpeg process spawning on Windows - - Handle Windows process termination (no SIGTERM) - - Support Windows-style console output - - Test background process handling - -### Hardware Detection -- [ ] **Windows GPU detection** - - Detect NVIDIA GPUs (NVENC) on Windows - - Detect Intel integrated graphics (QSV) - - Detect AMD GPUs (AMF) - - Auto-select best available encoder - -- [ ] **Windows-specific encoders** - - Add Windows Media Foundation encoders - - Test NVENC on Windows (h264_nvenc, hevc_nvenc) - - Test Intel QSV on Windows - - Add fallback to software encoding - -### Testing & Distribution -- [ ] **Windows testing** - - Test on Windows 10 - - Test on Windows 11 - - Test with different GPU vendors - - Test on systems without GPU - -- [ ] **Installation** - - Create Windows installer (MSI or NSIS) - - Add to Windows Start Menu - - Create desktop shortcut option - - Auto-update mechanism - -- [ ] **Documentation** - - Windows installation guide - - Windows-specific troubleshooting - - GPU driver requirements - - Antivirus whitelist instructions - -### Nice-to-Have -- [ ] Windows Store submission -- [ ] Portable/USB-stick version -- [ ] Windows taskbar progress integration -- [ ] File thumbnail generation for Windows Explorer -- [ ] Windows notification system integration - -## Critical Issues / Polishing -- [ ] Queue polish: ensure scroll/refresh stability with 10+ jobs and long runs -- [ ] Direct+queue parity: verify label/progress/order are correct when mixing modes -- [ ] Conversion error surfacing: include stderr snippet in dialog for faster debug -- [ ] DVD author helper (optional): one-click VIDEO_TS/ISO from DVD .mpg -- [ ] Build reliability: document cgo/GL deps and avoid accidental cache wipes - -## Core Features - -### Persistent Video Context -- [ ] Implement video info bar UI component -- [ ] Add "Clear Video" button globally accessible -- [ ] Update all modules to check for `state.source` -- [ ] Add "Use Different Video" option in modules -- [ ] Implement auto-clear preferences -- [ ] Add recent files tracking and dropdown menu -- [ ] Test video persistence across module switches - -### Convert Module Completion (dev12 focus) -- [ ] Add hardware acceleration UI controls (NVENC, QSV, VAAPI) -- [ ] Implement two-pass encoding mode -- [ ] Add bitrate-based encoding option (not just CRF) -- [ ] Implement custom FFmpeg arguments field -- [ ] Add preset save/load functionality -- [x] Add batch conversion queue (v0.1.0-dev11) -- [x] Multi-video loading and navigation (v0.1.0-dev11) -- [ ] Estimated file size calculator -- [ ] Preview/comparison mode -- [ ] Audio-only output option -- [ ] Add more codec options (AV1, VP9) - -### Merge Module (Not Started) -- [ ] Design UI layout -- [ ] Implement file list/order management -- [ ] Add drag-and-drop reordering -- [ ] Preview transitions -- [ ] Handle mixed formats/resolutions -- [ ] Audio normalization across clips -- [ ] Transition effects (optional) -- [ ] Chapter markers at join points - -### Trim Module (Not Started) -- [ ] Design UI with timeline -- [ ] Implement frame-accurate seeking -- [ ] Visual timeline with preview thumbnails -- [ ] Multiple trim ranges selection -- [ ] Chapter-based splitting -- [ ] Smart copy mode (no re-encode) -- [ ] Batch trim operations -- [ ] Keyboard shortcuts for marking in/out points - -### Filters Module (Not Started) -- [ ] Design filter selection UI -- [ ] Implement color correction filters - - [ ] Brightness/Contrast - - [ ] Saturation/Hue - - [ ] Color balance - - [ ] Curves/Levels -- [ ] Implement enhancement filters - - [ ] Sharpen/Blur - - [ ] Denoise - - [ ] Deband -- [ ] Implement creative filters - - [ ] Grayscale/Sepia - - [ ] Vignette - - [ ] Speed adjustment - - [ ] Rotation/Flip -- [ ] Implement stabilization -- [ ] Add real-time preview -- [ ] Filter presets -- [ ] Custom filter chains - -### Upscale Module (Not Started) -- [ ] Design UI for upscaling -- [ ] Implement traditional scaling (Lanczos, Bicubic) -- [ ] Integrate Waifu2x (if feasible) -- [ ] Integrate Real-ESRGAN (if feasible) -- [ ] Add resolution presets -- [ ] Quality vs. speed slider -- [ ] Before/after comparison -- [ ] Batch upscaling - -### Audio Module (Not Started) -- [ ] Design audio extraction UI -- [ ] Implement audio track extraction -- [ ] Audio track replacement/addition -- [ ] Multi-track management -- [ ] Volume normalization -- [ ] Audio delay correction -- [ ] Format conversion -- [ ] Channel mapping -- [ ] Audio-only operations - -### Thumb Module (Not Started) -- [ ] Design thumbnail generation UI -- [ ] Single thumbnail extraction -- [ ] Grid/contact sheet generation -- [ ] Customizable layouts -- [ ] Scene detection -- [ ] Animated thumbnails -- [ ] Batch processing -- [ ] Template system - -### Inspect Module (Partial) -- [ ] Enhanced metadata display -- [ ] Stream information viewer -- [ ] Chapter viewer/editor -- [ ] Cover art viewer/extractor -- [ ] HDR metadata display -- [ ] Export reports (text/JSON) -- [ ] MediaInfo integration -- [ ] Comparison mode (before/after conversion) - -### Rip Module (Not Started) -- [ ] Design disc ripping UI -- [ ] DVD drive detection and scanning -- [ ] Blu-ray drive support -- [ ] ISO file loading -- [ ] Title selection interface -- [ ] Track management (audio/subtitle) -- [ ] libdvdcss integration -- [ ] libaacs integration -- [ ] Batch ripping -- [ ] Metadata lookup integration - -## Additional Modules - -### Subtitle Module (Proposed) -- [ ] Requirements analysis -- [ ] UI design -- [ ] Extract subtitle tracks -- [ ] Add/replace subtitles -- [ ] Burn subtitles into video -- [ ] Format conversion -- [ ] Timing adjustment -- [ ] Multi-language support - -### Streams Module (Proposed) -- [ ] Requirements analysis -- [ ] UI design -- [ ] Stream viewer/inspector -- [ ] Stream selection/removal -- [ ] Stream reordering -- [ ] Map streams to outputs -- [ ] Default flag management - -### GIF Module (Proposed) -- [ ] Requirements analysis -- [ ] UI design -- [ ] Video segment to GIF -- [ ] Palette optimization -- [ ] Frame rate control -- [ ] Loop settings -- [ ] Dithering options -- [ ] Preview before export - -### Crop Module (Proposed) -- [ ] Requirements analysis -- [ ] UI design -- [ ] Visual crop selector -- [ ] Auto-detect black bars -- [ ] Aspect ratio presets -- [ ] Preview with crop overlay -- [ ] Batch crop with presets - -### Screenshots Module (Proposed) -- [ ] Requirements analysis -- [ ] UI design -- [ ] Single frame extraction -- [ ] Burst capture -- [ ] Scene-based capture -- [ ] Format options -- [ ] Batch processing - -## UI/UX Improvements - -### General Interface -- [ ] Keyboard shortcuts system -- [x] Drag-and-drop file loading (v0.1.0-dev11) -- [x] Multiple file drag-and-drop with batch processing (v0.1.0-dev11) -- [ ] Dark/light theme toggle -- [ ] Custom color schemes -- [ ] Window size/position persistence -- [ ] Multi-window support -- [ ] Responsive layout improvements - -### Media Player -- [ ] Enhanced playback controls -- [ ] Frame-by-frame navigation -- [ ] Playback speed control -- [ ] A-B repeat loop -- [ ] Snapshot/screenshot button -- [ ] Audio waveform display -- [ ] Subtitle display during playback - -### Queue/Batch System -- [x] Global job queue (v0.1.0-dev11) -- [x] Priority management (v0.1.0-dev11) -- [x] Pause/resume individual jobs (v0.1.0-dev11) -- [x] Queue persistence (v0.1.0-dev11) -- [x] Job history (v0.1.0-dev11) -- [x] Persistent status bar showing queue stats (v0.1.0-dev11) -- [ ] Parallel processing option -- [ ] Estimated completion time - -### Settings/Preferences -- [ ] Settings dialog -- [ ] Default output directory -- [ ] FFmpeg path configuration -- [ ] Hardware acceleration preferences -- [ ] Auto-clear video behavior -- [ ] Preview quality settings -- [ ] Logging verbosity -- [ ] Update checking - -## Performance & Optimization - -- [ ] Optimize preview frame generation -- [ ] Cache metadata for recently opened files -- [ ] Implement progressive loading for large files -- [ ] Add GPU acceleration detection -- [ ] Optimize memory usage for long videos -- [ ] Background processing improvements -- [ ] FFmpeg process management enhancements - -## Testing & Quality - -- [ ] Unit tests for core functions -- [ ] Integration tests for FFmpeg commands -- [ ] UI automation tests -- [ ] Test suite for different video formats -- [ ] Regression tests -- [ ] Performance benchmarks -- [ ] Error handling improvements -- [ ] Logging system enhancements - -## Documentation - -### User Documentation -- [ ] Complete README.md for all modules -- [ ] Getting Started guide -- [ ] Installation instructions (Windows, macOS, Linux) -- [ ] Keyboard shortcuts reference -- [ ] Workflow examples -- [ ] FAQ section -- [ ] Troubleshooting guide -- [ ] Video tutorials (consider for future) - -### Developer Documentation -- [ ] Architecture overview -- [ ] Code structure documentation -- [ ] FFmpeg integration guide -- [ ] Contributing guidelines -- [ ] Build instructions for all platforms -- [ ] Release process documentation -- [ ] API documentation (if applicable) - -## Packaging & Distribution - -- [ ] Create installers for Windows (.exe/.msi) -- [ ] Create macOS app bundle (.dmg) -- [ ] Create Linux packages (.deb, .rpm, AppImage) -- [ ] Set up CI/CD pipeline -- [ ] Automatic builds for releases -- [ ] Code signing (Windows/macOS) -- [ ] Update mechanism -- [ ] Crash reporting system - -## Future Considerations - -- [ ] Plugin system for extending functionality -- [ ] Scripting/automation support -- [ ] Command-line interface mode -- [ ] Web-based remote control -- [ ] Cloud storage integration -- [ ] Collaborative features -- [ ] AI-powered scene detection -- [ ] AI-powered quality enhancement -- [ ] Streaming output support -- [ ] Live input support (webcam, capture card) - -## Known Issues - -- **Build hangs on GCC 15.2.1** - CGO compilation freezes during OpenGL binding compilation -- No Windows/macOS builds tested yet -- Preview frames not cleaned up on crash - -## Fixed Issues (v0.1.0-dev11) - -- ✅ Limited error messages for FFmpeg failures - Added "Copy Error" button to all error dialogs -- ✅ No progress indication during metadata parsing - Added persistent stats bar showing real-time progress -- ✅ Crash when dragging multiple files - Improved error handling with detailed reporting -- ✅ Queue callback deadlocks - Fixed by running callbacks in goroutines -- ✅ Queue deserialization panic - Fixed formatOption struct handling - -## Research Needed - -- [ ] Best practices for FFmpeg filter chain optimization -- [ ] GPU acceleration capabilities across platforms -- [ ] AI upscaling integration options -- [ ] Disc copy protection legal landscape -- [ ] Cross-platform video codecs support -- [ ] HDR/Dolby Vision handling +# VT Player – TODO + +## Near-term UI/UX +- Replace placeholder play icon with a proper asset; keep centered “Load Video” and drop hint on any window size. +- Tighten control bar (Haruna-like): cleaner spacing, distinct buttons, consistent sizing. +- Add keyboard shortcuts (Space play/pause, Left/Right seek, +/- volume, F fullscreen). +- Fullscreen toggle wired to player backend; ensure external ffplay window obeys target coords/sizing. + +## Playback & Playlist +- Add per-item remove/clear actions; optional recent-files list; drag-to-reorder playlist. +- Show active item highlight and hover states; keep drop-to-playlist behavior for files/folders. +- Verify drop handling on all platforms (Wayland/X11/Windows). + +## Keyframing (next milestone) +- Define keyframe data model and storage (per file). +- Render markers/ticks on the seek bar; jump/add/delete keyframes with shortcuts. +- Keep compatibility with VideoTools (same metadata format/paths). + +## Integration with VideoTools +- Keep `master` rebased on `upstream/master`; cherry-pick player changes to upstream PR branches when needed. +- Document how to flip module paths/branding when preparing a PR back to VideoTools. + +## Cleanup/Codebase +- Remove unused convert/queue/compare code paths and dead menu logic once player is stable. +- Simplify `main.go` by moving player view/controls into dedicated files. +- Delete old VideoTools-only docs/content that no longer applies once we finish the pruning.