Update documentation for dev16 and dev17

- Mark Interlacing Detection (dev16) as completed in DONE.md
- Mark Thumbnail Module (dev17) as completed in TODO.md and DONE.md
- Document all features, technical improvements, and bug fixes
- Add comprehensive changelog entries for both modules

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Stu Leak 2025-12-14 00:37:58 -05:00
parent 64cc10c01c
commit a82e7f8308
2 changed files with 144 additions and 9 deletions

130
DONE.md
View File

@ -2,6 +2,136 @@
This file tracks completed features, fixes, and milestones.
## Version 0.1.0-dev17 (2025-12-14)
### Features
- ✅ **Thumbnail Module - Complete Implementation**
- Individual thumbnail generation with customizable count (3-50 thumbnails)
- Contact sheet generation with metadata headers
- Customizable grid layouts (2-12 columns, 2-12 rows)
- Even timestamp distribution across video duration
- JPEG output with configurable quality (default: 85)
- Configurable thumbnail width (160-640px for individual, 200px for contact sheets)
- Saves to `{video_directory}/{video_name}_thumbnails/` for easy access
- DejaVu Sans Mono font matching app styling
- App background color (#0B0F1A) for contact sheet padding
- Dynamic total count display for grid layouts
- ✅ **Thumbnail UI Integration**
- Video preview window (640x360) in thumbnail module
- Mode-specific controls (contact sheet: columns/rows, individual: count/width)
- Dual button system:
- "GENERATE NOW" - Adds to queue and starts immediately
- "Add to Queue" - Adds for batch processing
- "View Results" button with in-app contact sheet viewer (900x700 dialog)
- "View Queue" button for queue access from thumbnail module
- Drag-and-drop support for video files (universal across app)
- Real-time grid total calculation as columns/rows change
- ✅ **Job Queue Integration for Thumbnails**
- Background thumbnail generation with progress tracking
- Job queue support with live progress updates
- Can queue multiple thumbnail jobs from different videos
- Progress callback integration for thumbnail extraction
- Proper context cancellation support
- ✅ **Snippet Tool Improvement**
- Changed from re-encoding to stream copy (`-c copy`)
- Instant 20-second snippet extraction with zero quality loss
- No encoding overhead - extracts source streams directly
- Removed 148 lines of unnecessary encoding logic
### Technical Improvements
- ✅ **Timestamp-based Frame Selection**
- Fixed frame selection from FPS-dependent (`eq(n,frame_num)`) to timestamp-based (`gte(t,timestamp)`)
- Ensures correct thumbnail count regardless of video frame rate
- Works reliably with VFR (Variable Frame Rate) content
- Uses `setpts=N/TB` for proper timestamp reset in contact sheets
- ✅ **FFmpeg Filter Optimization**
- Tile filter for grid layouts: `tile=COLUMNSxROWS`
- Select filter with timestamp-based frame extraction
- Pad filter with hex color codes for app background matching
- Drawtext filter with font specification and positioning
- Scale filter maintaining aspect ratios
- ✅ **Module Architecture**
- Added thumbnail state fields to appState (thumbFile, thumbCount, thumbWidth, thumbContactSheet, thumbColumns, thumbRows, thumbLastOutputPath)
- Implemented `showThumbView()` for thumbnail module UI
- Implemented `buildThumbView()` for split layout (preview 55%, settings 45%)
- Implemented `executeThumbJob()` for job queue integration
- Universal drag-and-drop handler for all modules
- ✅ **Error Handling**
- Disabled timestamp overlay on individual thumbnails to avoid font availability issues
- Graceful handling of missing output directories
- Proper error dialogs with context-specific messages
- Exit status 234 resolution (font-related errors)
### Bug Fixes
- ✅ Fixed incorrect thumbnail count in contact sheets (was generating 34 instead of 40 for 5x8 grid)
- ✅ Fixed frame selection FPS assumption (hardcoded 30fps removed)
- ✅ Fixed module visibility (added thumb module to enabled check)
- ✅ Fixed undefined function call (openFileManager → openFolder)
- ✅ Fixed dynamic total count not updating when changing grid dimensions
- ✅ Fixed font-related crash on systems without DejaVu Sans Mono
## Version 0.1.0-dev16 (2025-12-14)
### Features
- ✅ **Interlacing Detection Module - Complete Implementation**
- Automatic interlacing analysis using FFmpeg idet filter
- Field order detection (TFF - Top Field First, BFF - Bottom Field First)
- Frame-by-frame analysis with classifications:
- Progressive frames
- Top Field First interlaced frames
- Bottom Field First interlaced frames
- Undetermined frames
- Interlaced percentage calculation
- Status determination: Progressive (<5%), Interlaced (>95%), Mixed Content (5-95%)
- Confidence levels: High (<5% undetermined), Medium (5-15%), Low (>15%)
- Quick analyze mode (500 frames) for fast detection
- Full video analysis option for comprehensive results
- ✅ **Deinterlacing Recommendations**
- Automatic deinterlacing recommendations based on analysis
- Suggested filter selection (yadif for compatibility)
- Human-readable recommendations
- SuggestDeinterlace boolean flag for programmatic use
- ✅ **Preview Generation**
- Deinterlace preview at specific timestamps
- Side-by-side comparison (original vs deinterlaced)
- Uses yadif filter for preview generation
- Frame extraction with proper scaling
### Technical Improvements
- ✅ **Detector Implementation**
- Created `/internal/interlace/detector.go` package
- NewDetector() constructor accepting ffmpeg and ffprobe paths
- Analyze() method with configurable sample frame count
- QuickAnalyze() convenience method for 500-frame sampling
- Regex-based parsing of idet filter output
- Multi-frame detection statistics extraction
- ✅ **Detection Result Structure**
- Comprehensive DetectionResult type with all metrics
- String() method for formatted output
- Percentage calculations for interlaced content
- Field order determination logic
- Confidence calculation based on undetermined ratio
- ✅ **FFmpeg Integration**
- idet filter integration for interlacing detection
- Proper stderr pipe handling for filter statistics
- Context-aware command execution with cancellation support
- Null output format for analysis-only operations
### Documentation
- ✅ Added interlacing detection to module list
- ✅ Documented detection algorithms and thresholds
- ✅ Explained field order types and their implications
## Version 0.1.0-dev13 (In Progress - 2025-12-03)
### Features

23
TODO.md
View File

@ -467,15 +467,20 @@ Trim provides frame-accurate cutting with lossless-first philosophy (inspired by
- [ ] 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
### Thumb Module ✅ COMPLETED (v0.1.0-dev17)
- [x] Design thumbnail generation UI
- [x] Single thumbnail extraction
- [x] Grid/contact sheet generation
- [x] Customizable layouts (columns/rows 2-12)
- [x] Batch processing (job queue integration)
- [x] Contact sheet metadata headers
- [x] Preview window integration
- [x] Dual-mode settings (individual vs contact sheet)
- [x] Dynamic total count display
- [x] View results in-app
- [ ] Scene detection (future enhancement)
- [ ] Animated thumbnails (future enhancement)
- [ ] Template system (future enhancement)
### Inspect Module (Partial)
- [ ] Enhanced metadata display