Commit Graph

356 Commits

Author SHA1 Message Date
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
7716017ba8 Document Real-ESRGAN upscale pipeline 2025-12-20 20:58:34 -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
0322bbada8 Update TODO and DONE timestamps 2025-12-20 15:36:55 -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
dc6f99752d Remove patronizing 'final' language from DONE.md
- App is a work in progress, nothing is ever 'final'
- Changed size references to just state the values without 'final'
- More accurate and less presumptive
2025-12-20 15:24:58 -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
8c0b1c16b2 Update DONE.md with finalized UI scaling and preset improvements
Added details for:
- Final UI scaling values (150x65 tiles, 18pt title, etc.)
- Removed scrolling requirement
- Preset UX improvements (manual at bottom, better defaults)
- Encoding preset order reversal
2025-12-20 15:23:53 -05:00
e05cb159b1 Improve preset UX and finalize 800x600 UI scaling
UI Scaling Improvements:
- Reduce module tiles from 160x80 to 150x65
- Reduce title from 20 to 18
- Reduce queue tile from 140x50 to 120x40
- Reduce category labels to 12px
- Reduce padding from 8 to 4px
- Remove scrolling, everything fits in 800x600

Preset UX Improvements:
- Move "Manual" to bottom of all preset dropdowns
- Default bitrate preset: "2.5 Mbps - Medium Quality"
- Default target size: "100MB"
- Manual input fields hidden by default
- Show manual fields only when "Manual" selected

Encoding Preset Order:
- Reverse order: veryslow first, ultrafast last
- Better quality options now appear first
- Applied to both simple and advanced mode
2025-12-20 15:23:14 -05:00
d1f7e1aa60 Add unit selector for manual video bitrate 2025-12-20 15:14:12 -05:00
45a5c42c06 Ensure upscale targets recompute from presets 2025-12-20 14:58:02 -05:00
b7b1c79ad7 Update DONE.md with dev19 continuation fixes
Added today's completed items:
- UI Scaling for 800x600 Windows
- Header Layout Improvements
- Queue Clear Behavior Fix
- Threading Safety Fix

All items from 2025-12-20 continuation session
2025-12-20 14:51:12 -05:00
a3e1c09865 Scale UI for 800x600 window compatibility and improve layout
UI Scaling:
- Reduce module tiles from 220x110 to 160x80
- Reduce title size from 28 to 20
- Reduce queue tile from 160x60 to 140x50 with smaller text
- Reduce section padding from 14 to 8 pixels
- Remove extra padding wrapper around tiles

Header Layout Improvements:
- Use border layout with title on left, controls on right
- Compact button labels: "☰ History" → "☰", "Run Benchmark" → "Benchmark"
- Eliminates wasted space in header

Queue Behavior Fix:
- "Clear Completed" always returns to main menu (not last module)
- "Clear All" always returns to main menu
- Prevents unwanted navigation to convert module after clearing

All changes work together to fit app within 800x600 default window
2025-12-20 14:50:45 -05:00
2940190ce7 Hide CRF input when lossless quality is selected 2025-12-20 14:47:47 -05:00
5252736307 Sync target aspect between simple and advanced 2025-12-20 14:38:15 -05:00
efdd5bcdf3 Make main menu vertically scrollable for 800x600 windows
- Wrap module sections in NewVScroll container
- Use border layout with fixed header and scrollable content
- Allows all modules to be accessible within 800x600 window
- Header and controls remain visible while content scrolls
2025-12-20 14:37:33 -05:00
30fc6e2cb5 Fix main menu layout alignment issue
- Replace layout.NewHBoxLayout() with container.NewHBox() for header
- Replace layout.NewVBoxLayout() with container.NewVBox() for body
- Prevents unwanted stretching and improves alignment with rest of UI
- Elements now use natural sizing instead of filling available space
2025-12-20 14:32:04 -05:00
bc343f74ee Default target aspect to Source unless user-set 2025-12-20 14:29:56 -05:00
b7977ba565 Fix Fyne threading errors in stats bar Layout()
- Remove Show()/Hide() calls from Layout() method
- These methods must only be called from main UI thread
- Layout() can be called from any thread during resize/redraw
- Show/Hide logic remains in Refresh() which uses DoFromGoroutine

Fixes threading warnings from Fyne when stats bar updates
2025-12-20 14:20:05 -05:00
a071229a8a Fix stats bar UI thread updates 2025-12-20 14:14:42 -05:00
098f5a0754 Add app icon support and window sizing improvements
- Update LoadAppIcon() to search for PNG first (better Linux support)
- Add FyneApp.toml for icon metadata and Windows embedding
- Create VideoTools.desktop for Linux application launcher integration
- Change default window size from 1200x700 to 800x600
- Icon now appears in taskbar, app switcher, and Windows title bar
2025-12-20 14:13:18 -05:00
1cb3b9c299 Replace benchmark error dialogs with notifications 2025-12-20 14:12:33 -05:00
b2ae3ab02a Refresh history sidebar when jobs complete 2025-12-20 14:08:03 -05:00
a04c51a16b Add subtitles module placeholder and benchmark UI flag 2025-12-20 14:03:14 -05:00
54c50e7336 Add sysinfo package for benchmark hardware detection 2025-12-20 13:46:08 -05:00
644ff1bc17 Add unit selector for target file size 2025-12-20 13:35:39 -05:00
cdecc9db04 Estimate missing audio bitrate in metadata 2025-12-20 13:29:09 -05:00
e41432ffd6 Improve benchmark results sorting and cancel flow 2025-12-20 12:05:19 -05:00