Compare commits
5 Commits
762403b770
...
505db279d8
| Author | SHA1 | Date | |
|---|---|---|---|
| 505db279d8 | |||
| 271c83ec74 | |||
| 28e2f40b75 | |||
| 2f9995d8f1 | |||
| 91d38a1b3f |
13
DONE.md
13
DONE.md
|
|
@ -30,7 +30,15 @@ This file tracks completed features, fixes, and milestones.
|
|||
- **UI Polish**
|
||||
- "Run Benchmark" button highlighted (HighImportance) on first run
|
||||
- Returns to normal styling after initial benchmark
|
||||
- Guides new users to run initial benchmark
|
||||
- Guides new users to run initial benchmark
|
||||
|
||||
- ✅ **AI Upscale Integration (Real-ESRGAN)**
|
||||
- Added model presets with anime/general variants
|
||||
- Processing presets (Ultra Fast → Maximum Quality) with tile/TTA tuning
|
||||
- Upscale factor selection + output adjustment slider
|
||||
- Tile size, output frame format, GPU and thread controls
|
||||
- ncnn backend pipeline (extract → AI upscale → reassemble)
|
||||
- Filters and frame rate conversion applied before AI upscaling
|
||||
|
||||
- ✅ **Bitrate Preset Simplification**
|
||||
- Reduced from 13 confusing options to 6 clear presets
|
||||
|
|
@ -833,6 +841,9 @@ This file tracks completed features, fixes, and milestones.
|
|||
- ✅ Hide quality presets when bitrate mode is not CRF
|
||||
- ✅ Snippet UI now shows Convert Snippet + batch + options with context-sensitive controls
|
||||
- ✅ Reduced module video pane minimum sizes to allow GNOME window snapping
|
||||
- ✅ Added cache/temp directory setting with SSD recommendation and override
|
||||
- ✅ Snippet defaults now use conversion settings (not Match Source)
|
||||
- ✅ Added frame interpolation presets to Filters and wired filter chain to Upscale
|
||||
- ✅ Stabilized video seeking and embedded rendering
|
||||
- ✅ Improved player window positioning
|
||||
- ✅ Fixed clear video functionality
|
||||
|
|
|
|||
10
TODO.md
10
TODO.md
|
|
@ -66,6 +66,9 @@ This file tracks upcoming features, improvements, and known issues.
|
|||
- Quality presets hidden when bitrate mode is not CRF
|
||||
- Snippet UI rearranged into Convert Snippet / Batch / Options with context-sensitive visibility
|
||||
- Reduce module video pane min sizes to allow GNOME snapping
|
||||
- Cache/temp directory setting with SSD recommendation
|
||||
- Frame interpolation presets in Filters with Upscale linkage
|
||||
- Real-ESRGAN AI upscale controls with ncnn pipeline (models, presets, tiles, TTA)
|
||||
|
||||
*Last Updated: 2025-12-20*
|
||||
|
||||
|
|
@ -109,6 +112,13 @@ This file tracks upcoming features, improvements, and known issues.
|
|||
- Creative effects (grayscale, vignette)
|
||||
- Real-time preview system
|
||||
|
||||
- [ ] **DVD Authoring module**
|
||||
- Output VIDEO_TS folder + burn-ready ISO
|
||||
- Auto-detect NTSC/PAL with manual override
|
||||
- Preserve all audio tracks
|
||||
- Subtitle support (start with SRT)
|
||||
- Chapter sources: existing, manual markers, auto scene length
|
||||
|
||||
### Quality & Compression Improvements
|
||||
- [x] **Automatic black bar detection and cropping** (v0.1.0-dev13 - COMPLETED)
|
||||
- Implement ffmpeg cropdetect analysis pass
|
||||
|
|
|
|||
|
|
@ -252,7 +252,7 @@ func ProbeVideo(path string) (*VideoSource, error) {
|
|||
|
||||
// Extract embedded cover art if present
|
||||
if coverArtStreamIndex >= 0 {
|
||||
coverPath := filepath.Join(os.TempDir(), fmt.Sprintf("videotools-embedded-cover-%d.png", time.Now().UnixNano()))
|
||||
coverPath := filepath.Join(utils.TempDir(), fmt.Sprintf("videotools-embedded-cover-%d.png", time.Now().UnixNano()))
|
||||
extractCmd := exec.CommandContext(ctx, FFmpegPath,
|
||||
"-i", path,
|
||||
"-map", fmt.Sprintf("0:%d", coverArtStreamIndex),
|
||||
|
|
|
|||
|
|
@ -44,6 +44,12 @@ func HandleAudio(files []string) {
|
|||
fmt.Println("audio", files)
|
||||
}
|
||||
|
||||
// HandleDVDAuthor handles the DVD authoring module (placeholder)
|
||||
func HandleDVDAuthor(files []string) {
|
||||
logging.Debug(logging.CatModule, "dvd author handler invoked with %v", files)
|
||||
fmt.Println("dvd author", files)
|
||||
}
|
||||
|
||||
// HandleSubtitles handles the subtitles module (placeholder)
|
||||
func HandleSubtitles(files []string) {
|
||||
logging.Debug(logging.CatModule, "subtitles handler invoked with %v", files)
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import (
|
|||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
"unicode/utf8"
|
||||
|
||||
"fyne.io/fyne/v2"
|
||||
|
|
@ -271,3 +272,25 @@ func LoadAppIcon() fyne.Resource {
|
|||
logging.Debug(logging.CatUI, "no app icon found in search paths")
|
||||
return nil
|
||||
}
|
||||
|
||||
var tempDirOverride atomic.Value
|
||||
|
||||
// SetTempDir overrides the app temp directory (empty string resets to system temp).
|
||||
func SetTempDir(path string) {
|
||||
trimmed := strings.TrimSpace(path)
|
||||
if trimmed == "" {
|
||||
tempDirOverride.Store("")
|
||||
return
|
||||
}
|
||||
tempDirOverride.Store(trimmed)
|
||||
}
|
||||
|
||||
// TempDir returns the app temp directory, falling back to the system temp dir.
|
||||
func TempDir() string {
|
||||
if v := tempDirOverride.Load(); v != nil {
|
||||
if s, ok := v.(string); ok && s != "" {
|
||||
return s
|
||||
}
|
||||
}
|
||||
return os.TempDir()
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user