Commit Graph

369 Commits

Author SHA1 Message Date
931fda6dd2 Add lightweight roadmap and clarify dev workflow 2025-12-23 14:35:05 -05:00
8513902232 Finalize authoring workflow and update install docs 2025-12-23 14:24:09 -05:00
d031afa269 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
e9608c6085 Implement VT_Player module with frame-accurate video playback
- Add VTPlayer interface with microsecond precision seeking
- Implement MPV controller for frame-accurate playback
- Add VLC backend support for cross-platform compatibility
- Create FFplay wrapper to bridge existing controller
- Add factory pattern for automatic backend selection
- Implement Fyne UI wrapper with real-time controls
- Add frame extraction capabilities for preview system
- Support preview mode for trim/upscale/filter modules
- Include working demo and implementation documentation
2025-12-21 16:31:44 -05:00
7bf03dec9f Lock module splits to fixed 60-40 layout 2025-12-21 16:23:59 -05:00
8bc621b583 Enforce fixed Upscale split ratio 2025-12-21 16:19:55 -05:00
b80982b494 Lock Upscale layout to fixed 60-40 split 2025-12-21 16:14:52 -05:00
1d18ab2db2 Add upscale quality preset to prevent runaway bitrates 2025-12-21 16:09:01 -05:00
93ec8c7b15 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

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 15:59:30 -05:00
6835b6d69d Update DONE.md with Real-ESRGAN setup and window resize fix 2025-12-21 14:20:14 -05:00
0f24b786c2 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

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 14:19:50 -05:00
58ad59a0c7 Add automated Real-ESRGAN setup script for Linux
Created setup-realesrgan-linux.sh for easy one-command installation:
- Downloads Real-ESRGAN ncnn Vulkan binary from GitHub releases
- Installs to ~/.local/bin/realesrgan-ncnn-vulkan
- Installs all AI models to ~/.local/share/realesrgan/models/
- Sets proper permissions
- Provides PATH setup instructions

Installation:
  ./scripts/setup-realesrgan-linux.sh

Models included (45MB):
- realesr-animevideov3 (x2, x3, x4) - Anime/illustration upscaling
- realesrgan-x4plus - General photo/video upscaling
- realesrgan-x4plus-anime - Anime-specific upscaling

Tested and working on Fedora 43. Makes AI upscaling fully automated
for Linux users - no manual downloads or configuration needed.

Next step: Add in-app "Install AI Upscaling" button to VideoTools UI
for even easier setup without using terminal.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 14:10:46 -05:00
7aa0de8bcb Bump version to v0.1.0-dev19 2025-12-20 21:55:13 -05:00
a9804b3ad3 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.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 21:33:55 -05:00
364d2099f5 Run gofmt on main.go for consistent formatting
Applied gofmt to fix code alignment and formatting consistency.
Changes are purely cosmetic (whitespace/alignment).

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 21:17:26 -05:00
762c840de9 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)

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 21:07:48 -05:00
55c291406f Document Real-ESRGAN upscale pipeline 2025-12-20 20:58:34 -05:00
505db279d8 Gate AI upscale on ncnn backend 2025-12-20 20:56:24 -05:00
271c83ec74 Add Real-ESRGAN upscale controls and pipeline 2025-12-20 20:55:21 -05:00
28e2f40b75 Add frame interpolation presets in Filters 2025-12-20 20:25:21 -05:00
2f9995d8f1 Add configurable temp directory with SSD hint 2025-12-20 19:55:13 -05:00
91d38a1b3f Add DVD authoring placeholder and adjust snippet defaults 2025-12-20 18:49:54 -05:00
762403b770 Lower video pane min sizes for window snapping 2025-12-20 16:41:07 -05:00
66346d8cee Rearrange snippet controls with options toggle 2025-12-20 16:36:45 -05:00
e39b6a7f99 Fix snippet toggle button scope 2025-12-20 16:29:47 -05:00
a7b92cfa8e Collapse snippet tools behind a toggle 2025-12-20 16:27:19 -05:00
7b264c7224 Hide quality presets outside CRF mode 2025-12-20 16:22:48 -05:00
e002b586b1 Sync bitrate preset between simple and advanced 2025-12-20 16:13:32 -05:00
17900f2b0a Normalize bitrate preset default to 2.5 Mbps 2025-12-20 16:07:13 -05:00
3354017032 Expand and rename bitrate presets 2025-12-20 16:02:23 -05:00
7ae1bb10dd Add CRF preset dropdown with manual option 2025-12-20 15:57:49 -05:00
c9e34815da Prevent CRF control from showing in non-CRF modes 2025-12-20 15:52:36 -05:00
97cad9eeba Hide irrelevant bitrate controls by mode 2025-12-20 15:49:49 -05:00
3c4560a55a Default encoder preset to slow 2025-12-20 15:46:09 -05:00
69230dda0d Add 2.0 Mbps preset and default to 2.5 Mbps 2025-12-20 15:41:46 -05:00
a9d0dbf51f Update TODO and DONE timestamps 2025-12-20 15:36:55 -05:00
4b1bdea7ed Restore target size reduction presets 2025-12-20 15:35:37 -05:00
19269a204d Fix reset tabs scope in convert view 2025-12-20 15:33:08 -05:00
cdf8b10769 Force reset to restore source resolution and frame rate 2025-12-20 15:30:41 -05:00
685707e8d1 Reset convert settings to full defaults 2025-12-20 15:25:51 -05:00
0ef618df55 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

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 15:24:58 -05:00
d20dcde5bb 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

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 15:24:24 -05:00
0da96bc743 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

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 15:23:53 -05:00
c1ccb38062 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

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 15:23:14 -05:00
c62b7867fd Add unit selector for manual video bitrate 2025-12-20 15:14:12 -05:00
c6feb239b9 Ensure upscale targets recompute from presets 2025-12-20 14:58:02 -05:00
4c43a13f9c 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

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 14:51:12 -05:00
67b838e9ad 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

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-20 14:50:45 -05:00
2dae75dd8e Hide CRF input when lossless quality is selected 2025-12-20 14:47:47 -05:00
406709bec6 Sync target aspect between simple and advanced 2025-12-20 14:38:15 -05:00