Commit Graph

870 Commits

Author SHA1 Message Date
VideoTools CI
016d2a4f8a Improve GStreamer seek responsiveness and allow disable toggle 2026-01-18 06:43:36 -05:00
VideoTools CI
d14ca93560 Add non-Windows stub for EnsureGStreamerOnPath 2026-01-17 20:37:00 -05:00
VideoTools CI
a194801545 Ensure GStreamer bin is added to PATH on Windows startup 2026-01-17 20:35:17 -05:00
VideoTools CI
c28d86b9bc Add Windows helper to prepend GStreamer bin to PATH 2026-01-17 20:33:08 -05:00
VideoTools CI
8b56e2dbd9 Fix player stub build tag for non-gstreamer builds 2026-01-17 20:22:40 -05:00
VideoTools CI
12d29da20e Add optional dependency install controls in settings 2026-01-17 17:24:52 -05:00
VideoTools CI
75bce11be3 Fix missing function reference in Thumb-to-Thumbnail rename
- Update loadMultipleThumbVideos call to loadMultipleThumbnailVideos in main.go
- Resolves build error: s.loadMultipleThumbVideos undefined
- All Thumb-to-Thumbnail refactoring now complete and functional
2026-01-17 14:10:17 -05:00
VideoTools CI
e794666445 Fix Windows build GOFLAGS issue - move gstreamer tags to build command 2026-01-17 13:20:02 -05:00
VideoTools CI
c039ed2753 Rename Thumb module to Thumbnail throughout codebase
- Rename thumb_module.go to thumbnail_module.go and thumb_config.go to thumbnail_config.go
- Update all function names from showThumbView/addThumbSource/etc to showThumbnailView/addThumbnailSource/etc
- Update all struct fields from thumbFile/thumbFiles/etc to thumbnailFile/thumbnailFiles/etc
- Update config struct from thumbConfig to thumbnailConfig
- Update job type from JobTypeThumb to JobTypeThumbnail
- Update module registration from 'thumb' to 'thumbnail' in main.go
- Update UI components to show 'THUMBNAIL' instead of 'THUMB'
- Update handler function from HandleThumb to HandleThumbnail
- Update file naming patterns from 'thumb_*.jpg' to 'thumbnail_*.jpg'
- Update author module references to use Thumbnail naming
- Update documentation in QUEUE_SYSTEM_GUIDE.md
- Maintains all existing functionality while using clearer naming
2026-01-17 04:15:39 -05:00
VideoTools CI
965242a767 Add comprehensive Windows 11 support and localization infrastructure
- Enhanced Windows 11 native installer with GPU detection and DirectX 12 support
- Add cross-platform GUI detection utilities for improved platform handling
- Implement localization infrastructure foundation with i18n support
- Create comprehensive cross-platform deployment guide
- Add Inuktitut and Cree syllabics support framework
- Enhanced Arch Linux installation with desktop environment detection
- Implement Windows 11 DPI awareness and display scaling support
- Add automated cross-platform testing framework
2026-01-17 03:05:12 -05:00
VideoTools CI
e29f305c50 Add optional Go installation to install script
- Prompt to install Go when not detected as required dependency
- Support cross-platform installation via package managers (apt, dnf, pacman, zypper, brew)
- Add Windows manual installation guidance
- Verify successful installation after attempt
- Maintain existing script flow and error handling
2026-01-17 03:04:30 -05:00
c1c72fa417 Let Fyne size content after fullscreen 2026-01-16 16:08:52 -05:00
ed7a618a57 Avoid content size guard to fix fullscreen menu layout 2026-01-15 03:05:43 -05:00
f1cbfa66c0 Fix main menu sizing and add shell aliases 2026-01-15 02:58:55 -05:00
1db5069b9c Fix Arch/Manjaro install script to include all required dependencies
- Add base-devel and pkgconf packages for Go CGO compilation
- Add xorriso package for DVD ISO extraction (was missing)
- Add --needed flag to avoid reinstalling existing packages
- Add graphics driver detection with helpful warnings for NVIDIA/AMD GPUs
- Non-invasive: warns about missing drivers but doesn't auto-install them
2026-01-12 18:17:47 -05:00
14c63d2def Implement complete DVD chapters and extras menu system
- Add dual logo support (title logo + studio logo) for DVD menus
- Implement chapters menu with chapter navigation
- Implement extras menu for bonus content
- Add "Mark as Extra" checkbox for clips in UI
- Extras automatically appear in separate menu when marked
- Filter extras from chapters menu in real-time
- Encode extras as separate DVD titles (Title 2, 3, etc.)
- Update menu navigation with proper PGC looping
- Fix text escaping in DVD menus (alphanumeric only)
- Remove "future DVD menus" placeholder text from UI

Menu structure:
- Main menu: Play, Chapters (if >1), Extras (if present)
- Chapters menu: Lists all feature chapters + Back button
- Extras menu: Lists all extras as separate titles + Back button
- All menus loop and return to main menu after playback
2026-01-12 18:17:40 -05:00
eaba5abe5f Quiet whisper model download output 2026-01-11 07:34:52 -05:00
e8e3a64cb3 Verify whisper model checksum on install 2026-01-11 07:26:41 -05:00
9999a1716a Auto-download whisper small model in install 2026-01-11 07:21:56 -05:00
9b9d853d17 Clarify offline STT model requirement 2026-01-11 07:14:49 -05:00
813c8859d3 Prefer whisper small model for offline STT 2026-01-11 07:12:36 -05:00
94d9530ee3 Prevent subtitles layout from forcing window resize 2026-01-11 07:07:33 -05:00
0e69f1766b Support python whisper CLI in subtitles 2026-01-11 06:58:48 -05:00
f3c1d3777e Enable subtitles drag-and-drop in module view 2026-01-11 06:48:18 -05:00
af0b29f1a4 Add playback stall watchdog and recovery 2026-01-11 05:44:21 -05:00
e0abdd6a33 Include git commit in version string 2026-01-10 16:47:45 -05:00
3fcaa9959b Coalesce player scrub seeks 2026-01-10 16:25:00 -05:00
db841b286d Reuse shared PlayerState enum 2026-01-10 15:50:34 -05:00
5139ae8f4e Add GStreamer player state machine 2026-01-10 15:46:32 -05:00
426b9946b4 Open queue when clicking active history jobs 2026-01-10 05:12:36 -05:00
5c601f6714 Fix history dialog crash for in-progress jobs 2026-01-10 05:11:34 -05:00
2403e4fe46 Add GStreamer bus loop and events 2026-01-10 04:56:13 -05:00
d8dd3b804c Refresh frame after seek when paused 2026-01-10 04:45:43 -05:00
c12571368c Keep seek/step playback state consistent 2026-01-10 04:39:36 -05:00
237c496678 Pull preroll frames when paused 2026-01-10 03:22:34 -05:00
e3d282623a Render frame immediately on step seek 2026-01-10 03:18:42 -05:00
b6790600c9 Improve GStreamer frame stepping reliability 2026-01-10 03:08:18 -05:00
d1dfde120e Prime GStreamer frames after seeks 2026-01-10 03:05:07 -05:00
1c23009a6c Fix GStreamer appsink timeout type 2026-01-10 02:54:32 -05:00
8b6d7f02a3 Fix GStreamer message type check 2026-01-10 02:53:06 -05:00
17a9a7eec8 Harden GStreamer playback pacing and errors 2026-01-10 02:50:38 -05:00
4e1167c21d Clear player session on video reset 2026-01-10 02:46:10 -05:00
9dd6ddd1e5 fix(author): remove quotes from fontfile and font paths in FFmpeg filter
Fixed FFmpeg filter parsing error by removing single quotes from font
paths and properly escaping special characters instead.

The Bug:
FFmpeg's drawtext filter was failing because fontfile paths were wrapped
in single quotes, which conflicted with the filter expression parsing:
  drawtext=fontfile='/path/to/font.ttf':text='Some Text'
                    ^                ^      ^          ^
                    These quotes broke FFmpeg's parser!

Error was:
  [AVFilterGraph] No option name near ' I Fucked My Best…'
  Error parsing filterchain ... around:

The Fix:
Before: fontfile='/home/.../IBMPlexMono-Regular.ttf'
After:  fontfile=/home/.../IBMPlexMono-Regular.ttf (with : and ' escaped)

Now we:
1. Escape : as \: (FFmpeg filter requirement)
2. Escape ' as \' (FFmpeg filter requirement)
3. Don't wrap in quotes (FFmpeg doesn't need them)

Same fix applied to font= paths (system fonts).
2026-01-10 02:02:59 -05:00
53a11819ec fix(author): remove quotes from scale expression in menu logo filter
Fixed FFmpeg filter parsing error by removing unnecessary single quotes
from the scale expression in resolveMenuLogoScaleExpr.

The Bug:
FFmpeg command was failing with "Error parsing filterchain" because
the scale expression had quotes around the min() functions:
  scale=w='min(iw*0.50,180)':h='min(ih*0.50,120)'
                ^^^^^^^^^^^^        ^^^^^^^^^^^^
FFmpeg's filter parser doesn't expect quotes here and treats them as
part of the option value, breaking the parsing.

The Fix:
  Before: scale=w='min(iw*%.2f,%.0f)':h='min(ih*%.2f,%.0f)'
  After:  scale=w=min(iw*%.2f,%.0f):h=min(ih*%.2f,%.0f)

Error was:
  [AVFilterGraph] No option name near ' I Fucked My Best…'
  [AVFilterGraph] Error parsing filterchain around: ,180)':h='min...
  exit status 234

Now the scale expression is parsed correctly and menu generation
should complete successfully.
2026-01-10 01:54:47 -05:00
654378422a fix(author): pass logFn through all menu generation functions
Fixed menu generation logging by threading logFn parameter through all
menu building functions. Previously, all menu FFmpeg commands were
called with logFn=nil, so errors were never logged.

Functions updated to accept and pass logFn:
- buildMenuBackground
- buildDarkMenuBackground
- buildPosterMenuBackground
- buildMenuOverlays
- buildMenuOverlay (helper)
- buildMenuMPEG

All three menu templates now properly log:
- SimpleMenu.Generate() → buildMenuBackground → runCommandWithLogger
- DarkMenu.Generate() → buildDarkMenuBackground → runCommandWithLogger
- PosterMenu.Generate() → buildPosterMenuBackground → runCommandWithLogger

Before:
- Menu FFmpeg commands run silently (logFn=nil)
- Errors not logged → "ERROR: FFmpeg failed during DVD encoding"
- No way to diagnose what failed

After:
- >> /usr/bin/ffmpeg [full command with args]
- ERROR starting command: [error details]
- ERROR command failed: [error] (exit code: X)

Combined with the previous commit's enhanced runCommandWithLogger,
we now have complete visibility into menu generation failures.
2026-01-10 01:46:01 -05:00
1a5e29c372 Scope history clear to active tab 2026-01-10 01:39:57 -05:00
2d76dc9d6b Keep history tab selection and add clear all 2026-01-10 01:36:17 -05:00
a831a3820d debug(author): add detailed command logging to runCommandWithLogger
Enhanced runCommandWithLogger to log:
1. The exact command being executed (before execution)
2. Any errors when starting the command
3. Exit codes when commands fail

Before:
- No visibility into what command failed
- Silent failures during menu generation
- Log just showed "ERROR: FFmpeg failed during DVD encoding"

After:
- >> /usr/bin/ffmpeg [args...] (shows exact command)
- ERROR starting command: [error] (if command won't start)
- ERROR command failed: [error] (exit code: X) (if command fails)

This will help diagnose the menu generation failures by showing exactly
what FFmpeg command is failing and why.
2026-01-10 01:33:47 -05:00
2e8c91abf8 Fix history sidebar titles and delete handling 2026-01-10 01:28:09 -05:00
cc3e98ce26 feat(author): bundle IBM Plex Mono font for DVD menus
Downloaded and bundled IBM Plex Mono Regular font (153KB) to ensure
consistent DVD menu branding across all systems.

Font details:
- Source: IBM Plex (open source, SIL Open Font License)
- File: assets/fonts/IBMPlexMono-Regular.ttf
- Size: 153KB
- Format: TrueType Font

The font is automatically discovered by findMenuFontPath() which searches:
1. assets/fonts/IBMPlexMono-Regular.ttf (working directory)
2. <executable_dir>/assets/fonts/IBMPlexMono-Regular.ttf

The menuFontArg() function now:
1. Checks if FontPath exists → uses bundled IBM Plex Mono 
2. Falls back to system fonts if bundled font missing
3. Ultimate fallback: "monospace"

This ensures VideoTools DVD menus always use the perfect VT aesthetic
with IBM Plex Mono, regardless of system-installed fonts.
2026-01-10 01:27:20 -05:00