Commit Graph

535 Commits

Author SHA1 Message Date
Jake P
799102cac7 Attempted to create GUI
Attempted to create GUIs for both lt-convert and lt-gui
2025-12-17 22:50:59 +00:00
ec967d50e7 Clamp snippet bitrates and block lossless for short clips 2025-12-17 16:19:24 -05:00
ce5ad6e7fa Clamp snippet conversion bitrate and ensure yuv420p 2025-12-17 16:15:31 -05:00
c3a9cbd69e Update DONE and TODO for UI/progress work 2025-12-17 14:53:46 -05:00
4c737d5280 Fix fyne hover interface import for status bar 2025-12-17 14:52:27 -05:00
b826c02660 Improve snippet progress reporting and speed up striped bars 2025-12-17 14:47:37 -05:00
ac424543d8 Make entire status strip clickable 2025-12-17 14:34:13 -05:00
589330cc0b Restore tap handling on status bar 2025-12-17 14:33:11 -05:00
27e038e1a1 Fix queue stats to properly distinguish cancelled from failed jobs
The queue Stats() method was grouping cancelled and failed jobs together,
causing cancelled jobs to be displayed as "failed" in the status bar.
Updated Stats() to return a separate cancelled count and modified all
callers (updateStatsBar, queueProgressCounts, showMainMenu) to handle
the new return value. Also updated ConversionStatsBar to display
cancelled jobs separately in the status bar.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-17 14:25:18 -05:00
aa64e64576 Add mouse back/forward button navigation support
- Add navigationHistory and navigationHistoryPosition to appState
- Add navigationHistorySuppress flag to prevent recursive history tracking
- Implement pushNavigationHistory to track module navigation
- Implement navigateBack and navigateForward for mouse button navigation
- Create mouseButtonHandler widget to capture mouse button events
- Wrap all content with mouseButtonHandler in setContent
- Track history in showModule and showMainMenu
- Handle mouse button 4 (back) and mouse button 5 (forward)
- Maintain history of up to 50 module navigations

Mouse back/forward buttons now work like a web browser - press the back button
to return to previous modules, press forward to go back to where you were.
History is maintained across all module transitions for seamless navigation.
2025-12-17 14:09:42 -05:00
082153be19 Ensure status bar remains tappable 2025-12-17 14:05:27 -05:00
6e4eda93d2 Improve progress bar visibility and thickness
- Increase striped progress bar contrast (light: 90→60, dark: 140→200)
- Increase fill opacity (180→200) for better visibility
- Increase progress bar height from 14px to 20px across both striped and standard bars
- Makes progress bars more visible and easier to read at a glance

The striped gradient now has much clearer distinction between light and dark
stripes, and the increased thickness makes progress easier to track visually.
2025-12-17 13:36:56 -05:00
957b92d8cd Fix FrameRate default to always be Source
- Add check in loadPersistedConvertConfig to default FrameRate to "Source" if empty
- Add check after loading persisted config to ensure FrameRate is "Source" if not set
- Prevents unwanted frame rate conversions from persisted config overriding safe defaults

This ensures that frame rate always defaults to "Source" and users won't
accidentally convert all their videos to 23.976fps or another frame rate
if they had previously saved a config with a specific frame rate set.
2025-12-17 13:28:26 -05:00
34e613859d Add frame rate controls to merge and convert simple mode
- Add mergeFrameRate and mergeMotionInterpolation fields to appState
- Add frame rate dropdown and motion interpolation checkbox to merge UI
- Pass frame rate settings through merge job config
- Implement frame rate conversion in executeMergeJob (for non-DVD formats)
- Add frame rate controls to convert module's simple mode

Frame rate conversion with optional motion interpolation is now available in:
- Convert module (simple and advanced modes)
- Merge module
- Upscale module

All modules support both simple fps conversion (fast) and motion
interpolation (slower, smoother) for professional frame rate standardization.
2025-12-17 13:22:23 -05:00
09de435839 Add frame rate control to upscale module
- Add upscaleFrameRate and upscaleMotionInterpolation fields to appState
- Add Frame Rate section to upscale UI with dropdown and motion interpolation checkbox
- Pass frame rate settings through upscale job config
- Implement frame rate conversion in executeUpscaleJob using minterpolate or fps filter
- Frame rate section appears after resolution selection in upscale settings

Frame rate control is now available in both convert and upscale modules,
allowing users to standardize content from different regions with optional
motion interpolation for smooth conversion.
2025-12-17 13:11:34 -05:00
ccd75af936 Adjust convert action bar spacing 2025-12-17 06:11:12 -05:00
662ebc209c Place convert action bar in tinted footer 2025-12-17 06:06:49 -05:00
a1678cf150 Return to single dark status strip footer 2025-12-17 05:57:44 -05:00
95781ba7ea Align convert footer to single tinted bar with actions 2025-12-17 05:55:25 -05:00
249f5501e2 Add motion interpolation for frame rate conversion
- Add UseMotionInterpolation field to convertConfig struct
- Implement minterpolate filter for smooth frame rate changes when enabled
- Add UI checkbox in advanced settings for motion interpolation option
- Use minterpolate with high-quality settings (mci mode, aobmc, bidir ME, vsbmc)
- Falls back to simple fps filter when motion interpolation is disabled
- Fix pre-existing statusBar function calls (renamed to moduleFooter)

Motion interpolation provides smooth frame rate conversion (e.g., 24fps→60fps)
using motion-compensated interpolation instead of simple frame duplication.
This is useful for standardizing content from different regions.
2025-12-17 05:39:54 -05:00
2b16b130f4 Refine footer layout to match legacy look 2025-12-17 05:35:03 -05:00
f021bcc26c Use unified status bar helper across modules 2025-12-17 05:06:25 -05:00
8a9a947ee2 Make stats bar consistent across modules 2025-12-17 03:12:45 -05:00
6d379a309e Replace chapter warning popup with inline label
Removed confirmation dialog popups when converting files with
chapters to DVD format. Instead, show a non-intrusive inline
warning label that appears/disappears based on format selection.

Warning label:
- Shows only when file has chapters AND DVD format is selected
- Displays inline below format selector in both simple and advanced modes
- No user action required - just informational
- Text: "Chapters will be lost - DVD format doesn't support embedded chapters. Use MKV/MP4 to preserve chapters."
2025-12-17 03:10:59 -05:00
484a636fb4 Add chapter loss warning when converting to DVD format
When converting a file with chapters to DVD/MPEG format, show
a confirmation dialog warning the user that chapters will be lost.

MPEG format does not support embedded chapters - they require
full DVD authoring with IFO files. Users are warned and given
the option to cancel or continue.

Warning appears for both 'Convert Now' and 'Add to Queue' buttons.
2025-12-17 03:05:26 -05:00
f2ac544d75 Make stats bar overlay use module tint and lighter text 2025-12-17 03:03:45 -05:00
a5ad368d0f Fix duplicate queue button declaration in inspect view 2025-12-17 02:45:39 -05:00
320f522d85 Fix queue progress calc type 2025-12-17 02:38:55 -05:00
1eb2d11ccd Add stats bar across modules and fix thumb color 2025-12-17 02:32:06 -05:00
73e5c4940f Animate striped progress bars in queue 2025-12-17 02:25:00 -05:00
90ceba0693 Include upscale output path in queue job 2025-12-17 02:22:33 -05:00
530418f3e5 Improve queue progress UI and upscale progress reporting 2025-12-17 02:21:55 -05:00
da07c82fd9 Add stats bar to filters and upscale views 2025-12-17 02:17:06 -05:00
1f9df596bc Preserve AR and default lossless MKV in upscale 2025-12-17 02:11:49 -05:00
b934797832 Enable drag-and-drop loading in filters and upscale 2025-12-17 01:57:51 -05:00
e76eeba60e Fix chapter detection in video probing
Added -show_chapters flag to ffprobe command to retrieve chapter
information. Parse chapters from JSON output and set HasChapters
field when chapters are present.

Files with chapters will now correctly show 'Chapters: Yes' in
the file information display.
2025-12-17 01:26:17 -05:00
3b0b84b6f1 Preserve chapters, subtitles, and metadata in convert module
Added explicit stream mapping to preserve all streams:
- Map video, audio, and subtitle streams (subtitles optional)
- Added -map_chapters to preserve chapter information
- Added -map_metadata to preserve all file metadata
- Copy subtitle streams without re-encoding

Applies to both conversions with and without cover art.
Works for all output formats that support these features.
2025-12-17 01:22:33 -05:00
75073b2f5d Fix DVD format merges to preserve chapter metadata
Removed -target ntsc-dvd and -target pal-dvd preset flags which
strip metadata including chapters. Instead, manually specify all
DVD parameters (bitrate, maxrate, bufsize, format) to maintain
full control and preserve chapter metadata.

Chapters now retained in both new 'dvd' format and legacy DVD formats.
2025-12-17 01:18:27 -05:00
a9ba43a03b Fix 'Clear Completed' to return to previous module when queue is empty
When 'Clear Completed' empties the queue, return to the previous
module instead of staying in an empty queue view. If jobs remain
after clearing, stay in queue view and refresh.
2025-12-17 01:04:22 -05:00
ac59fad380 Fix 'Clear All' queue button to return to previous module
Changed 'Clear All' behavior to return to the last active module
instead of always going to main menu. Falls back to main menu
if no previous module is tracked or if coming from queue itself.
2025-12-17 00:57:01 -05:00
148d9ede18 Simplify merge format dropdown with user-friendly options
Added clearer format descriptions:
- "Fast Merge (No Re-encoding)" instead of "MKV (Copy streams)"
- "Lossless MKV (Best Quality)" - new option with slow preset, CRF 18, FLAC audio
- "High Quality MP4 (H.264/H.265)" instead of technical codec names
- "DVD Format" with conditional region/aspect selectors
- "Blu-ray Format" instead of "Blu-ray (H.264)"

DVD Format improvements:
- When "DVD Format" is selected, shows Region (NTSC/PAL) and Aspect (16:9/4:3) options
- Options hidden for other formats
- Stored in state and passed to merge job config
- Updated execution to use DVD region/aspect settings

Maintains backward compatibility with legacy DVD format codes.
2025-12-17 00:52:26 -05:00
c4c41b5606 Fix 'Clear Completed' to preserve running jobs
Removed cancelRunningLocked() call from Clear() method.
Now 'Clear Completed' only removes completed/failed/cancelled jobs
and preserves pending/running/paused jobs.

Previously it was cancelling active jobs before filtering, causing
running jobs (like merges) to be removed from the queue.
2025-12-17 00:34:20 -05:00
c82676859e Fix WMV snippet encoding and simplify UI labels
WMV Encoder Fix:
- WMV files now use wmv2 encoder (ffmpeg compatible) instead of wmv3
- Audio uses wmav2 for WMV files
- High quality bitrate (2000k) for WMV video
- Fallback handling for unsupported source codecs

UI Simplification:
- Changed "High Quality (source format/codecs)" to "Match Source Format"
- Simplified hint text to just "Unchecked = Use Conversion Settings"
- More concise and less confusing labels
2025-12-17 00:29:38 -05:00
04f24b922b Improve snippet quality and streamline multi-video workflow
Snippet Quality Improvements:
- High Quality mode now detects and uses source codecs (WMV stays WMV)
- Uses conversion panel's encoder preset (e.g., 'slow') instead of hardcoded 'ultrafast'
- Uses conversion panel's CRF setting for quality control
- Outputs to source file extension in High Quality mode
- Updated UI label to "High Quality (source format/codecs)"

Workflow Streamlining:
- Removed popup dialog when loading multiple videos
- Showing convert view is sufficient feedback
- Failed files logged instead of shown in dialog

UI Fixes:
- Status label no longer wraps to new line on action bar
- Set text truncation to keep status on single line
2025-12-17 00:24:00 -05:00
480c015ff4 Fix snippet duration precision by always re-encoding
Changed snippet "Default Format" mode from stream copy to re-encoding with
high quality settings (libx264, CRF 17, ultrafast preset). Stream copy
cannot provide precise durations as it can only cut at keyframe boundaries.

Both snippet modes now output MP4 and re-encode. The difference is quality:
- High Quality mode: CRF 17, ultrafast preset
- Conversion Settings mode: Uses configured output settings

Updated UI labels to reflect "Snippet Quality" instead of output format.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-16 23:54:58 -05:00
9fbc791e57 Fix snippet duration: revert to simple, reliable FFmpeg approach
Reverts the problematic -accurate_seek and -to flags that caused wildly incorrect durations (9:40 instead of 10s). Returns to the standard, reliable FFmpeg pattern for stream copy:

ffmpeg -ss START -i input -t DURATION -c copy output

This places -ss before -i for fast keyframe seeking and uses -t for duration (not -to which is an absolute timestamp causing incorrect extraction). Should now correctly extract the configured snippet length centered on video midpoint.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-16 23:36:04 -05:00
1a04cab1d6 Fix snippet duration accuracy with stream copy mode
Improves snippet timing accuracy for Default Format mode by:
- Adding -accurate_seek flag for precise keyframe seeking
- Changing from -t (duration) to -to (end time) for better accuracy
- Adding -avoid_negative_ts make_zero to fix timestamp issues with problematic containers like WMV

This should resolve issues where snippets were 1:20 or 0:21 instead of the configured length (e.g., 10s). Stream copy still uses keyframe-level precision but should now be much closer to target duration.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-16 23:24:29 -05:00
727bbd9097 Fix drag-and-drop workflow: load videos to memory instead of auto-queuing
Changes multi-video drag-and-drop behavior to load videos into memory instead of automatically adding them to conversion queue. This allows users to:
- Adjust conversion settings before queuing
- Generate snippets instead of converting
- Navigate through videos before deciding to convert

Creates new loadMultipleVideos() function that loads all videos into loadedVideos array and shows informative dialog. Users can now use Convert or Snippet buttons to manually process videos as needed.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-16 23:23:43 -05:00
6315524a6e Fix UI scaling for small laptop screens (1280x768+)
Reduces default window size from 1280x800 to 1200x700 to fit on 1280x768 laptop screens. Reduces all hardcoded MinSize values for professional cross-resolution support:
- Window default: 1200x700 (was 1280x800)
- Log scroll: 600x350 (was 700x450)
- Deinterlace preview: 640x360 (was 800x450)
- Contact sheet viewer: 700x600 with scroll (was 900x700)
- Contact sheet image: 640x480 (was 800x600)
- Filters settings: 350x400 (was 400x600)
- Upscale settings: 400x400 (was 450x600)

All content uses scrollable containers for proper scaling. Window is resizable and can be maximized via window manager controls.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-16 23:21:58 -05:00
83ad75e04d Update documentation for snippet system overhaul
Documents the complete snippet system redesign with dual output modes:
- "Snippet to Default Format": Stream copy mode for bit-perfect source preservation
- "Snippet to Output Format": Conversion preview using actual settings

Updates ai-speak.md with comprehensive snippet testing requirements and Jake's AI communication. Updates DONE.md with detailed feature breakdown, technical improvements, and bug fixes. Includes testing checklist for both snippet modes and batch generation.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-16 23:09:09 -05:00