Commit Graph

275 Commits

Author SHA1 Message Date
5f2d2c888b Extract inspect module from main.go
Refactoring:
- Create inspect_module.go (292 lines)
- Move showInspectView() and buildInspectView()
- Reduce main.go from 14,329 to 14,116 lines (-213 lines)
- Reduce main.go from 426KB to 420KB

This is the first step in modularizing main.go to improve:
- Windows build performance (currently 5+ minutes)
- Code maintainability and organization
- Following established pattern from author_module.go and subtitles_module.go

Remaining modules to extract:
- player, compare, thumb, filters, upscale, merge, convert, queue, benchmark
2025-12-23 20:51:42 -05:00
269a0209d3 Add authoring log/progress and queue job 2025-12-23 20:47:10 -05:00
df83bc334a Add batch queue feature to Convert module
Convert Module:
- Add "Add All to Queue" button when multiple videos loaded
- Batch-add all loaded videos to queue with one click
- Remove confirmation dialogs for faster workflow
- Queue button updates immediately to show new count
- Button only visible when 2+ videos are loaded

Workflow improvements:
- No more clicking through videos one by one to queue
- No "OK" confirmation clicks required
- Queue count updates instantly in View Queue button
- Auto-starts queue after adding jobs
2025-12-23 20:27:59 -05:00
1294c7f156 Add DVD5/DVD9 disc size guidance 2025-12-23 20:20:15 -05:00
4cf60e2d8c Add subtitles module with offline STT 2025-12-23 18:30:27 -05:00
d51b62d1d1 Show clip-based chapters in author chapters tab 2025-12-23 17:58:45 -05:00
cf657b5b6f Add chapter naming per clip in author videos tab 2025-12-23 17:56:39 -05:00
a4c95f222a Add author chapter sources and scene detection 2025-12-23 17:54:01 -05:00
a78e986d1e Improve author subtitles layout and summary refresh 2025-12-23 17:39:47 -05:00
6f0343823d Handle drag-and-drop in author module 2025-12-23 17:33:17 -05:00
f3362e37a9 Wire author module navigation 2025-12-23 17:24:50 -05:00
c70b7584fd Add drag and drop for Player module and enable Author module
Player Module Drag and Drop:
- Add handleDrop case for player module
- Drag video files onto player to load them
- Works the same way as convert module
- Auto-probe and load first video file from drop

Author Module:
- Enable Author module button in main menu
- Add "author" to enabled modules list (line 1525)
- Module is now clickable and functional
2025-12-23 17:20:07 -05:00
848ae91b2a Fix VT_Player seeking and frame stepping
Seeking Fixes:
- Remove debouncing delay for immediate response
- Progress bar now seeks instantly when clicked or dragged
- No more 150ms lag during playback navigation

Frame Stepping Fixes:
- Calculate current frame from time position (current * fps)
- Previously used frameN which resets to 0 on every seek
- Frame stepping now accurately moves ±1 frame from actual position
- Buttons now work correctly regardless of seek history

Technical Details:
- currentFrame = int(p.current * p.fps) instead of p.frameN
- Removed seekTimer and seekMutex debouncing logic
- Immediate Seek() call in slider.OnChanged for responsive UX
2025-12-23 15:53:09 -05:00
075ce0f096 VT_Player foundation: Frame-accurate navigation and responsive scrubbing
Frame Navigation:
- Add frame-by-frame stepping with Previous/Next frame buttons
- Implement StepFrame() method for precise frame control
- Auto-pause when frame stepping for accuracy
- Display real-time frame counter during playback

Responsive Scrubbing:
- Add 150ms debounce to progress bar seeking
- Prevents rapid FFmpeg restarts during drag operations
- Smoother user experience when scrubbing through video

Player Session Improvements:
- Track frame numbers accurately with frameFunc callback
- Add duration field for proper frame calculations
- Update frame counter in real-time during playback
- Display current frame number in UI (Frame: N)

UI Enhancements:
- Frame step buttons: ◀| (previous) and |▶ (next)
- Frame counter label with monospace styling
- Integrated into existing player controls layout

Technical Details:
- Frame calculation: targetFrame = currentFrame ± delta
- Time conversion: offset = frameNumber / fps
- Clamp frame numbers to valid range [0, maxFrame]
- Call frameFunc callback on each displayed frame

Foundation ready for future enhancements (keyboard shortcuts, etc.)
2025-12-23 15:37:26 -05:00
e5ef23c094 Bump version to v0.1.0-dev20 2025-12-23 14:37:31 -05:00
60fd6e93ee Finalize authoring workflow and update install docs 2025-12-23 14:24:09 -05:00
2b6be14d59 Enhance Author module structure and implement drag-and-drop support
- Add authorClips, authorSubtitles, authorOutputType fields to appState
- Create authorClip struct for video clip management
- Implement drag-and-drop support for video clips and subtitles
- Add Settings tab with output type, region, aspect ratio options
- Create Video Clips tab with file management
- Add Subtitles tab for track management
- Prepare framework for DVD/ISO generation
- Update HandleAuthor to work with drag-and-drop system
- Add comprehensive file validation and error handling
- Support for multiple video clips compilation
- Ready for chapter detection and DVD authoring implementation
2025-12-22 20:09:43 -05:00
058628b81f Lock module splits to fixed 60-40 layout 2025-12-21 16:23:59 -05:00
4fcf40a51e Enforce fixed Upscale split ratio 2025-12-21 16:19:55 -05:00
6a6e1cb69b Lock Upscale layout to fixed 60-40 split 2025-12-21 16:14:52 -05:00
fe81415576 Add upscale quality preset to prevent runaway bitrates 2025-12-21 16:09:01 -05:00
b8c257cad1 Fix queue buttons, log viewer hang, and Windows console flashing
Queue UI:
- Fix pending job button labels - now shows "Remove" instead of "Cancel"
- Running/paused jobs still correctly show "Cancel" button

Log Viewer:
- Fix app hanging when viewing large conversion logs
- Make file reads asynchronous to prevent blocking UI thread
- Show "Loading log file..." message while reading
- Auto-scroll to bottom when log opens

Windows Console Flashing:
- Add ApplyNoWindow to all missing exec.Command calls
- Fixes command prompt windows flashing during module operations
- Applied to: hwaccel detection, encoder checks, Python backend detection
- Prevents console windows from appearing during upscale module usage
2025-12-21 15:59:30 -05:00
cc61c4ad5b Fix window auto-resizing when content changes
Resolved issue where window would resize itself based on dynamic content
like progress bars and queue updates. Window now maintains the size that
the user sets, regardless of content changes.

**Problem:**
- When progress bars updated or queue content changed, the window would
  automatically resize to fit the new content MinSize
- This caused the window to get larger or smaller unexpectedly
- User-set window size was not being preserved

**Solution:**
- Modified setContent() to capture current window size before setting new content
- Restore the window size after SetContent() completes
- This prevents Fyne from auto-resizing based on content MinSize changes
- Window only resizes when user manually drags edges or maximizes

**Impact:**
- Window maintains stable size through all content changes
- Progress bars, queue updates, and module switches no longer trigger resize
- User retains full control of window size via manual resize/maximize
- Improves professional appearance and user experience

Reported by: Jake
2025-12-21 14:19:50 -05:00
2127dfe121 Bump version to v0.1.0-dev19 2025-12-20 21:55:13 -05:00
3a2fc0ad04 Add Author module skeleton with tabbed interface
Renamed "DVD Author" to "Author" for broader disc production workflow.
Created foundation for complete authoring pipeline with three main tasks:

**Module Structure:**
- Tabbed interface with Chapters, Rip DVD/ISO, and Author Disc tabs
- Added authorChapter struct (timestamp, title, auto-detected flag)
- Added author module state fields (file, chapters, threshold, detecting)

**Chapters Tab (Basic UI):**
- File selection with video probing integration
- Scene detection sensitivity slider (0.1-0.9 threshold)
- Placeholder UI for chapter list and controls
- Add Chapter and Export Chapters buttons (placeholders)
- Foundation for FFmpeg scdet scene detection

**Rip DVD/ISO Tab:**
- Placeholder for high-quality disc extraction
- Will support lossless ripping (like FLAC from CD)
- Preserve all audio/subtitle tracks

**Author Disc Tab:**
- Placeholder for VIDEO_TS/ISO creation
- Will support burn-ready output, NTSC/PAL, menus

Changes:
- Modified main.go: Added authorChapter struct, author state fields,
  showAuthorView(), buildAuthorView(), buildChaptersTab(),
  buildRipTab(), buildAuthorDiscTab()
- Modified internal/modules/handlers.go: Renamed HandleDVDAuthor to
  HandleAuthor with updated comment
- Updated DONE.md with Author module skeleton details

Next steps: Implement FFmpeg scene detection, chapter list UI,
and DVD/ISO ripping functionality.
2025-12-20 21:33:55 -05:00
fd77671c5f Run gofmt on main.go for consistent formatting
Applied gofmt to fix code alignment and formatting consistency.
Changes are purely cosmetic (whitespace/alignment).
2025-12-20 21:17:26 -05:00
d704604a99 Add audio channel remixing options to convert module
Added advanced audio channel remixing features for videos with imbalanced
left/right audio channels (e.g., music in left ear, vocals in right ear).

New audio channel options using FFmpeg pan filter:
- Left to Stereo: Copy left channel to both speakers
- Right to Stereo: Copy right channel to both speakers
- Mix to Stereo: Downmix both channels together evenly
- Swap L/R: Swap left and right channels

Changes:
- Updated audioChannelsSelect dropdown with 8 options (was 4)
- Implemented pan filter logic in all 4 FFmpeg command builders:
  - buildFFmpegCommandFromJob (main convert)
  - DVD encoding function
  - Convert command builder
  - Snippet generation
- Removed unused "os" import from internal/convert/ffmpeg.go
- Updated DONE.md with audio channel remixing feature

The pan filter syntax allows precise channel routing:
- pan=stereo|c0=c0|c1=c0 (left to both)
- pan=stereo|c0=c1|c1=c1 (right to both)
- pan=stereo|c0=0.5*c0+0.5*c1|c1=0.5*c0+0.5*c1 (mix)
- pan=stereo|c0=c1|c1=c0 (swap)
2025-12-20 21:07:48 -05:00
d7bd60e522 Gate AI upscale on ncnn backend 2025-12-20 20:56:24 -05:00
341453f400 Add Real-ESRGAN upscale controls and pipeline 2025-12-20 20:55:21 -05:00
0c79c82918 Add frame interpolation presets in Filters 2025-12-20 20:25:21 -05:00
e2a71cc9b0 Add configurable temp directory with SSD hint 2025-12-20 19:55:13 -05:00
9e20c37dcc Add DVD authoring placeholder and adjust snippet defaults 2025-12-20 18:49:54 -05:00
ba8073f532 Lower video pane min sizes for window snapping 2025-12-20 16:41:07 -05:00
2e35e27609 Rearrange snippet controls with options toggle 2025-12-20 16:36:45 -05:00
1042265db7 Fix snippet toggle button scope 2025-12-20 16:29:47 -05:00
6c765839bd Collapse snippet tools behind a toggle 2025-12-20 16:27:19 -05:00
2bc86c01a2 Hide quality presets outside CRF mode 2025-12-20 16:22:48 -05:00
f5b4842210 Sync bitrate preset between simple and advanced 2025-12-20 16:13:32 -05:00
24724c47cc Normalize bitrate preset default to 2.5 Mbps 2025-12-20 16:07:13 -05:00
de68a93343 Expand and rename bitrate presets 2025-12-20 16:02:23 -05:00
f3dfb82d8d Add CRF preset dropdown with manual option 2025-12-20 15:57:49 -05:00
bd05dca244 Prevent CRF control from showing in non-CRF modes 2025-12-20 15:52:36 -05:00
06b7707736 Hide irrelevant bitrate controls by mode 2025-12-20 15:49:49 -05:00
a878970be7 Default encoder preset to slow 2025-12-20 15:46:09 -05:00
b1f3daa3e4 Add 2.0 Mbps preset and default to 2.5 Mbps 2025-12-20 15:41:46 -05:00
4376a0c958 Restore target size reduction presets 2025-12-20 15:35:37 -05:00
c36cb29af7 Fix reset tabs scope in convert view 2025-12-20 15:33:08 -05:00
640380db13 Force reset to restore source resolution and frame rate 2025-12-20 15:30:41 -05:00
96b019efe2 Reset convert settings to full defaults 2025-12-20 15:25:51 -05:00
60342b60bd Refactor convert config reset to use helper function
- Extract reset defaults logic to resetConvertDefaults function
- Add setTargetFileSize helper with syncing guard
- Add syncingTargetSize flag to prevent update loops
- Consolidate reset button handlers to call shared function
- Improves code organization and maintainability
2025-12-20 15:24:24 -05:00