User reports progress jumps to 100% within 10 seconds but merge continues for 45s total.
Added comprehensive debug logging to track:
- Individual clip durations as they're summed
- Total expected duration for the merge
- Exact moment when progress hits 100% with actual vs expected times
- Only update progress when it changes by ≥0.1% (reduces callback spam)
This will help diagnose whether:
- Clip durations are being calculated incorrectly
- FFmpeg's out_time_ms doesn't match expected total duration
- Concat demuxer reports different output duration than sum of inputs
Logging appears in logs/videotools.log with CatFFMPEG category.
To view: tail -f logs/videotools.log | grep FFMPEG
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Issues fixed:
- Missing file extensions caused FFmpeg errors (user's job 234 failure)
- Limited codec options (only copy or H.265)
- Manual codec mode selector was redundant
Changes:
1. Auto file extension handling:
- Automatically adds/corrects extension based on selected format
- .mkv for MKV/Blu-ray formats
- .mpg for DVD formats
- .mp4 for MP4 formats
- Validates and fixes extension in addMergeToQueue
2. Expanded format options:
- MKV (Copy streams) - stream copy, no re-encoding
- MKV (H.264) - re-encode with H.264, CRF 23
- MKV (H.265) - re-encode with H.265, CRF 28
- MP4 (H.264) - H.264 + AAC audio, web-optimized
- MP4 (H.265) - H.265 + AAC audio, web-optimized
- DVD NTSC/PAL (16:9 and 4:3)
- Blu-ray (H.264)
3. Removed redundant codec mode selector:
- Format dropdown now explicitly includes codec choice
- Cleaner, more intuitive UI
- Backward compatible with old queue jobs
Extension is auto-updated when:
- User selects a different format (updates existing path extension)
- User adds merge to queue (validates/fixes before encoding)
- Prevents errors from missing or wrong file extensions
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Long FFmpeg error messages were pushing the queue UI off screen, making
the interface unusable when jobs failed with verbose errors.
Changes:
- Truncate error messages to 150 characters maximum in status text
- Add helpful message indicating full error is available via Copy Error button
- Enable text wrapping on status labels to handle multi-line content gracefully
- Prevents UI layout breakage while maintaining error visibility
Users can still access the full error message via:
- Copy Error button (copies full error to clipboard)
- View Log button (opens per-job conversion log)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The -progress flag was being added AFTER the output path in the FFmpeg command,
causing FFmpeg to not recognize it and therefore not output progress information.
Moved -progress pipe:1 -nostats to appear BEFORE the output path.
Now merge jobs will correctly report progress as they encode:
- Progress starts at 0%
- Updates based on out_time_ms from FFmpeg progress output
- Calculates percentage based on total duration of all clips
- Shows accurate real-time progress in queue view and stats bar
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The Merge module's ui.NewDroppable wrappers weren't receiving drop events
because the window-level handleDrop function was intercepting them first.
Added merge module handling to handleDrop function:
- Accepts individual video files and adds them sequentially to merge clips
- Accepts multiple files at once and processes all in order
- Accepts folders and recursively finds all video files
- Probes each video to get duration and metadata
- Sets chapter names defaulting to filename
- Auto-sets output path to "merged.mkv" once 2+ clips are added
- Refreshes UI after each clip is added
Now drag-and-drop works consistently across all modules (Convert, Compare, Inspect, Merge).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Files Module:
- Built-in video file explorer/manager
- Metadata table view with sortable columns (size, codec, resolution, fps, bitrate)
- Right-click context menu for file operations
- Integration with Convert, Compare, and Inspect modules
- Delete with confirmation and recycle bin safety
- SQLite-based metadata caching for performance
Color-Coded Module Navigation:
- Apply module signature colors to cross-module buttons/links
- Creates visual consistency across the application
- Helps users intuitively understand module relationships
Both features designed to integrate cleanly with existing architecture.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>