Commit Graph

565 Commits

Author SHA1 Message Date
920d17ddbb perf(ui): Increase scroll speed from 8x to 12x
- Increased scroll multiplier to 12x for significantly faster navigation
- Reduces mouse wheel rolling needed to navigate long settings panels
- Maintains control while providing much faster scrolling

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 19:32:23 -05:00
6cd5e01fbe fix(ui): Revert button colors to original grey style
- Removed bright hover color override for buttons and inputs
- Buttons now use default grey with subtle outline styling
- Fixes overly bright appearance in module header bars
- View Queue and navigation buttons now match original design

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 18:28:39 -05:00
3518e187ee feat(logging): Add panic recovery and error logging for UI crashes
- Added Error() and Fatal() logging functions for non-debug errors
- Added Panic() function to log panics with full stack traces
- Added RecoverPanic() for defer statements to catch crashes
- Added panic recovery to main() function
- Added panic recovery to queue job processing goroutine
- All panics now logged to videotools.log with timestamps and stack traces
- Helps diagnose UI crashes that occur during FFmpeg processing

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 18:00:34 -05:00
f01e804490 perf(ui): Increase scroll speed from 5x to 8x
- Increased scroll speed multiplier to 8x for faster navigation
- Balances speed with stability - fast enough to navigate quickly
- Without being so fast that it becomes hard to control

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 16:49:34 -05:00
ed9926e24e perf(ui): Increase scroll speed from 2.5x to 5x
- Doubled scroll speed multiplier for much faster navigation
- Applied to Convert and Settings modules
- Significantly improves ability to navigate long settings quickly

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 16:38:10 -05:00
8238870cc5 feat(ui): Add fast scroll with 2.5x speed multiplier
- Created NewFastVScroll widget with customizable scroll speed
- Intercepts scroll events and multiplies delta by 2.5x
- Applied to Convert module (Simple and Advanced tabs)
- Applied to Settings module
- Significantly improves scrolling responsiveness

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 16:06:10 -05:00
17765e484f fix(convert): Fix scrolling and add horizontal padding
- Removed outer VScroll that was scrolling entire content including video player
- Added VScroll to Simple tab (Advanced already had it)
- Only settings panel now scrolls, video/metadata stay fixed
- Changed mainContent to use NewPadded for horizontal spacing
- Improves usability and reduces claustrophobic feeling

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 15:48:29 -05:00
079969d375 fix(settings): Fix double scrollbar issue with single scroll container
- Removed individual VScroll containers from each tab
- Added single VScroll around entire tabs container
- Matches convert module pattern of one scroll for main content
- Eliminates overlapping scrollbars and janky scrolling behavior

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 15:38:43 -05:00
2d79b3322d fix(ui): Force white text on all enabled module tiles
- Changed Refresh() to always use TextColor for enabled modules
- Previously was calling getContrastColor() which changed text to black on bright backgrounds
- All module tiles now consistently use white text as intended

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 15:21:42 -05:00
5c8ad4e355 feat(author): Clear DVD title on module open and sync between tabs
- DVD title now starts empty each time Author module is opened
- Added DVD Title entry field to Videos tab
- Both Videos and Settings tab title fields update the same state
- Both trigger summary update and config persistence

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 15:12:24 -05:00
ff1fdd9c1e fix(ui): Fix vertical text in metadata filename display
Changed filename row to use VBox layout instead of HBox to give
it full width. This prevents the filename from wrapping at every
character. Removed wrapping from other metadata fields since
they're short values that don't need it.
2025-12-31 15:06:34 -05:00
a486961c4a fix(ui): Use hover color as default for buttons and inputs
Changed button and input backgrounds to use the brighter hover
color as their default appearance instead of dull grey. This makes
dropdowns and buttons more visually appealing by default.
2025-12-31 14:16:40 -05:00
d0a35cdcb2 fix(ui): Enable text wrapping in metadata panel
Enabled word wrapping for all value labels in the metadata panel
to prevent text cutoff. Long filenames and metadata values will
now wrap to multiple lines instead of being truncated.
2025-12-31 14:09:29 -05:00
cac747f5c2 fix(settings): Enable text wrapping for all labels in dependencies tab
Added text wrapping to description labels, install command labels,
and 'Required by' labels to prevent horizontal scrolling. All text
now wraps properly to fit the available width.
2025-12-31 14:01:08 -05:00
8403c991e9 fix(ui): Improve metadata panel column spacing
Changed from HBox with spacer to GridWithColumns for better
column alignment. This prevents the right column (Video Codec,
etc.) from being pushed too far to the right edge.
2025-12-31 13:50:29 -05:00
62dd39347a feat(ui): Add dialog for installing missing dependencies
When users click on modules with missing dependencies (orange tiles),
show a dialog listing the missing dependencies and their install
commands. This helps users quickly identify what they need to install
to enable the module.
2025-12-31 13:25:59 -05:00
d7175ed04d feat(ui): Add orange background for modules missing dependencies
Modules with handlers but missing dependencies now show orange
background with stripes instead of grey. This distinguishes them
from unimplemented modules (grey) and helps users identify what
needs to be installed.
2025-12-31 13:24:12 -05:00
5fe3c853f4 feat(ui): Mark unimplemented modules as disabled
Set Trim, Audio, and Blu-Ray module handlers to nil to mark them
as disabled. These modules show as grey tiles with lock icons and
diagonal stripes until they are implemented.

Settings remains enabled despite nil handler as it has functionality.
2025-12-31 13:16:10 -05:00
ec51114372 fix(app): Use PNG icon instead of ICO for cross-platform compatibility
Changed icon from .ico to .png format to fix Fyne icon loading
error on Linux. PNG is the proper cross-platform format.
2025-12-31 13:07:56 -05:00
c4d31b31bc fix(ui): Use grey background for disabled modules with white text
Disabled modules now show grey background instead of dimmed colors.
All modules (enabled and disabled) use consistent white text.
2025-12-31 13:06:39 -05:00
9f55604d69 fix(ui): Darken bright module colors for white text readability
Changed module colors to work better with white text:
- Trim: #FFEB3B → #F9A825 (dark yellow/gold)
- Audio: #FFC107 → #FF8F00 (dark amber)
- Subtitles: #8BC34A → #689F38 (dark green)

All modules now use consistent white text for uniform appearance.
2025-12-31 12:59:40 -05:00
7954524bac fix(ui): Prevent crash from nil raster image for enabled modules
The diagonal stripe pattern raster function was returning nil for
enabled modules, causing a nil pointer dereference when Fyne tried
to process the texture. Fixed by always returning a valid image -
transparent for enabled modules, striped for disabled modules.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 12:50:34 -05:00
776ec1f672 feat(ui): Add diagonal stripe pattern to disabled modules
Replaced lock icon-only approach with diagonal stripe overlay for better visual distinction:
- Added static (non-animated) diagonal stripe pattern to disabled tiles
- Stripes use semi-transparent dark overlay (similar to queue progress bars)
- Thicker diagonal lines (8px spacing instead of 4px)
- Pattern clearly distinguishes disabled from enabled modules
- Kept lock icon as secondary indicator

This addresses the issue where adaptive text colors made it difficult to distinguish available vs. disabled modules. The stripe pattern provides immediate visual feedback without relying solely on color dimming.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 12:42:18 -05:00
89824f7859 feat(ui): Add lock icon to disabled modules for better visibility
Enhanced disabled module visual indicators:
- Added lock icon (🔒) in top-right corner of disabled tiles
- Lock icon shows/hides dynamically based on module availability
- Improved Refresh() to handle dynamic enable/disable state changes
- Updated renderer to include lock icon in layout and objects list

This makes it immediately clear which modules are available and which require missing dependencies, addressing the issue where adaptive text colors made disabled modules less distinguishable.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 12:25:24 -05:00
3b99cad32b fix(ui): Move filename to separate row in metadata panel
Fixed filename overlapping with video codec information:
- Moved filename to its own full-width row at the top
- Two-column grid now starts below filename
- Prevents long filenames from overlapping with right column data
- Improves readability of metadata panel

This addresses the issue where long filenames like "She's So Small 12 Scene 3 Dillion Harper.mp4" would run into "Video Codec: h264" on the same line.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 12:13:58 -05:00
41e08b18a7 fix(ui): Add adaptive text color for module tiles accessibility
Implemented automatic text color adaptation based on background brightness to improve readability:
- Added getContrastColor() function using WCAG luminance formula
- Bright modules (Trim/yellow, Audio/amber, Subtitles/light-green) now use dark text
- Dark modules continue using light text
- Ensures high contrast ratio for all module tiles
- Prevents eye strain from low-contrast combinations

This fixes the accessibility issue where bright yellow, amber, and light green modules had poor legibility with white text.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 09:28:58 -05:00
f1556175db fix(windows): Use ICO format for Windows application icon
Changed FyneApp.toml to reference VT_Icon.ico instead of VT_Icon.png.

Windows requires ICO format for proper application icon display in the taskbar and window title bar. PNG icons don't work correctly on Windows.

To apply this fix on Windows, rebuild with:
  fyne package -os windows -icon assets/logo/VT_Icon.ico

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 08:44:15 -05:00
462dfb06c6 debug(author): Add debug logging to VIDEO_TS chapter extraction
Added comprehensive debug logging to extractChaptersFromVideoTS() function to diagnose chapter extraction issues:
- Log VOB file search path
- Log number of VOB files found and their paths
- Log which VOB file is selected for chapter extraction
- Log ffprobe errors if chapter extraction fails
- Log number of chapters successfully extracted

This will help debug why chapters aren't appearing when VIDEO_TS folders are dragged into the Author module.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 08:44:03 -05:00
d240f1f773 feat(ui): Redesign main menu with compact 3x5 grid layout
Redesigned main menu for better space efficiency and visual organization:
- Changed from flexible GridWrap to fixed 3-column grid layout
- Organized modules into priority-based sections with category labels
- Category labels positioned above each section (Convert, Inspect, Disc, Playback)
- Reduced tile size from 150x65 to 135x58 for better spacing
- Removed excessive padding for more compact layout
- All 15 modules now visible in organized 3x5 grid

Layout organization:
- Row 1-2: Convert modules (Convert, Merge, Trim, Filters, Audio, Subtitles)
- Row 3: Inspect/Advanced (Compare, Inspect, Upscale)
- Row 4: Disc modules (Author, Rip, Blu-Ray)
- Row 5: Misc modules (Player, Thumb, Settings)

This addresses user feedback about wasted space and provides a more polished, professional appearance.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 08:43:49 -05:00
b079bff6fb feat(settings): Add Settings module with dependency management
Add comprehensive Settings module for managing system dependencies and application preferences:
- Created settings_module.go with dependency checking system
- Maps modules to required dependencies (FFmpeg, DVDAuthor, xorriso, Real-ESRGAN, Whisper)
- Displays dependency status with visual indicators (green/red)
- Shows platform-specific installation commands
- Auto-enables/disables modules based on installed dependencies
- Added Settings tile to main menu (always enabled)
- Integrated module availability checking via isModuleAvailable()

This provides users a centralized location to check and install missing dependencies, addressing the requirement to disable modules when dependencies aren't available.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-31 08:43:30 -05:00
879bec4309 fix(ui): Fix vertical text in metadata panel
Removed TextWrapWord setting from metadata value labels that was
causing text to wrap character-by-character in constrained space,
making the filename and other metadata appear vertically.

Text now flows naturally without wrapping, fixing the display issue
shown in the screenshot.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 22:15:17 -05:00
f8a9844b53 feat(author): Add Cancel Job button to Author module
Added a "Cancel Job" button to the Author module top bar that:
- Appears only when an Author job is currently running
- Uses DangerImportance styling for clear visual indication
- Cancels the running author job when clicked
- Hides automatically when no author job is running

This addresses the user's request for cancel buttons in every module
where it's relevant. The button provides immediate job cancellation
without needing to navigate to the queue view.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 22:09:25 -05:00
52dce047b7 fix(author): Auto-navigate to queue when starting DVD authoring
When user clicks "COMPILE TO DVD", now automatically navigates to the
queue view so they can immediately see the job progress. This prevents
confusion about how to access the queue during authoring.

Fixes issue where users couldn't find the queue while authoring was
in progress - the queue was accessible via the button, but now the
navigation is automatic for better UX.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 22:09:25 -05:00
bb8b8f7039 feat(install): Add Whisper support for automated subtitling
Added optional Whisper installation to install.sh:
- New --skip-whisper flag to disable Whisper installation
- Interactive prompt asking if user wants Whisper for subtitling
- Automatic installation of openai-whisper via pip3
- PATH configuration hints for ~/.local/bin
- Python 3 and pip3 dependency checks

Whisper enables automated subtitle generation from audio using
OpenAI's speech recognition model.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 22:09:25 -05:00
cc16352098 feat(author): Extract and display chapters from VIDEO_TS folders
Added chapter extraction from VIDEO_TS folders when importing:
- New extractChaptersFromVideoTS() function to parse chapters from VOB files
- Automatically loads chapters when VIDEO_TS folder is dropped
- Displays chapters in Chapters tab with "VIDEO_TS Chapters" source label
- Uses ffprobe to extract chapter info from main title VOB file

Chapters are now fully imported and visible in the UI when loading
VIDEO_TS folders, preserving the original DVD chapter structure.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 22:09:25 -05:00
75a8b900e8 feat(author): Add VIDEO_TS folder burning UI support
Added visual feedback in the Author module when a VIDEO_TS folder is loaded:
- Display VIDEO_TS path with info card in Videos tab
- Show message that folder will be burned directly without re-encoding
- Add Remove button to clear VIDEO_TS folder
- Update empty state message to indicate VIDEO_TS folder support

Backend support for VIDEO_TS burning was already implemented, this adds
the missing UI elements to show users when a VIDEO_TS folder is loaded.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 22:09:25 -05:00
2964de5b14 Add notice that chapter names are for future DVD menu support
Added italic note "(For future DVD menus)" below chapter title entry
fields to inform users that:
- Chapter markers work and allow navigation between scenes
- Chapter names are saved but not displayed in basic DVDs
- Names will be used when DVD menu system is implemented

This prevents users from wasting time entering custom chapter names
expecting them to appear in DVD players, while preserving the data
for future menu implementation.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 22:09:25 -05:00
673e914f5e Add notice that chapter names are for future DVD menu support
Added italic note "(For future DVD menus)" below chapter title entry
fields to inform users that:
- Chapter markers work and allow navigation between scenes
- Chapter names are saved but not displayed in basic DVDs
- Names will be used when DVD menu system is implemented

This prevents users from wasting time entering custom chapter names
expecting them to appear in DVD players, while preserving the data
for future menu implementation.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 21:39:37 -05:00
11b5fae23d Remove terminal banner from alias.sh
The banner was displaying every time a new shell was opened,
which was intrusive. Now the aliases load silently.

Commands are still available (VideoTools, VideoToolsRebuild,
VideoToolsClean) but without the banner on every terminal load.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 21:25:03 -05:00
7cecf2bdd7 Remove emojis from install script, use text indicators
Replaced all emojis with text-based indicators:
- ✓ → [OK] (with GREEN color)
- ✗ → [ERROR] (with RED color)
- ⚠ → WARNING: (with YELLOW color)

Color coding is preserved for visual distinction while remaining
accessible in all terminals and avoiding encoding issues.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 21:20:24 -05:00
254cc1243f Add optional AI upscaling tools installation
Added support for installing Real-ESRGAN NCNN during setup:

**New Features:**
- Prompts user to install AI upscaling tools (Real-ESRGAN NCNN)
- Downloads and installs binary from GitHub releases
- Tries /usr/local/bin with sudo, falls back to ~/.local/bin
- Supports x86_64 architecture, warns for ARM
- Added --skip-ai flag to skip AI tools prompt

**Installation Flow:**
1. Ask: "Install DVD authoring tools?" (dvdauthor + xorriso)
2. Ask: "Install AI upscaling tools?" (Real-ESRGAN NCNN)
3. Auto-install all missing dependencies user requested

**Benefits:**
- Users get AI upscaling without manual download
- FFmpeg native upscaling still works without it
- Optional enhancement, not required

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 21:15:47 -05:00
6497e27e0d Auto-install missing dependencies without additional prompt
Previously, install.sh would:
1. Ask "Install DVD authoring tools?"
2. Then ask again "Install missing dependencies now?"

Now it automatically installs any missing dependencies after the
user confirms they want DVD tools, eliminating the redundant prompt.

Changes:
- Removed second confirmation prompt for dependency installation
- Automatically installs missing deps when detected
- Shows clear message: "Missing dependencies: ... Installing..."

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 21:11:06 -05:00
006a80fb03 Fix install script to specifically require xorriso
The dependency check was accepting any ISO tool (mkisofs, genisoimage,
or xorriso), but the install commands now specifically install xorriso.

Updated checks to require xorriso specifically since:
- It handles both ISO9660 and UDF formats
- Required for RIP module to extract UDF DVD ISOs
- Now installed by all package managers in the script

This ensures the install script will detect and install xorriso even
if older tools like genisoimage are already present.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 21:10:32 -05:00
34cf6382cc Fix metadata display and improve ISO extraction support
**Metadata Panel Fix:**
- Simplified makeRow layout to properly display values
- Changed from complex Border layout to simple HBox
- Metadata values now visible in Convert module

**RIP Module Improvements:**
- Added mount-based ISO extraction for UDF ISOs
- Added 7z extraction fallback
- Prioritizes xorriso > 7z > bsdtar for ISO extraction
- Handles both ISO9660 and UDF format DVDs

**Installation Script:**
- Updated all package managers to install xorriso
- Ensures proper UDF ISO support when disc modules enabled
- apt/dnf/zypper now install xorriso instead of genisoimage

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 21:07:50 -05:00
a1a0a653e6 Use meaningful chapter names from metadata or filenames
When authoring DVDs from multiple videos, chapters now display:
- Video metadata title if available
- Filename without extension as fallback
- Instead of generic "Chapter 1", "Chapter 2", etc.

This provides better navigation experience in DVD players.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-30 20:37:24 -05:00
984088749c Fix chapter generation by creating clips from paths when clips array is empty 2025-12-30 17:09:36 -05:00
b71c066517 Remove cover art box and add spacing between metadata columns 2025-12-30 17:05:16 -05:00
ad1da23c6c Add Clear ISO button and organize output under ~/Videos/VideoTools/ 2025-12-30 17:01:47 -05:00
1b4e504a57 Auto-create output directories for rip and author operations 2025-12-30 16:52:40 -05:00
4a58a22b81 Fix suffix checkbox to regenerate name from source instead of keeping existing value 2025-12-30 16:40:44 -05:00