Commit pending assets, deps, and enhancement fixes
This commit is contained in:
parent
da848a3115
commit
11cd6630fb
135
WORKING_ON.md
135
WORKING_ON.md
|
|
@ -2,100 +2,111 @@
|
|||
|
||||
This file tracks what each agent is currently working on to prevent conflicts and coordinate changes.
|
||||
|
||||
**Last Updated**: 2026-01-04 02:30 UTC
|
||||
**Last Updated**: 2026-01-04 10:00 UTC
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Current Blockers
|
||||
|
||||
- **Build Status**: ✅ PASSING (dev23 UI cleanup complete)
|
||||
- **Build Status**: ⚠️ NEARLY PASSING - 3 compilation errors remain (lines 500, 6995-7003 in main.go)
|
||||
|
||||
---
|
||||
|
||||
## 👥 Active Work by Agent
|
||||
|
||||
### 🤖 Claude (thisagent - Claude Code)
|
||||
**Status**: ✅ DEV23 COMPLETE - v0.1.0-dev23 ready
|
||||
**Status**: ⚠️ IN PROGRESS - Widget deduplication + compilation fixes
|
||||
|
||||
**Completed This Session** (2026-01-04):
|
||||
- ✅ Refined colored dropdowns (accent bar, rounded corners, improved legibility)
|
||||
- ✅ Aligned settings panel input backgrounds to dropdown tone
|
||||
- ✅ Styled Auto-Crop and Interlacing actions to match panel UI
|
||||
- ✅ Rebuilt About / Support dialog to match mockup
|
||||
- ✅ Fixed Audio module crash on initial quality select
|
||||
- ✅ Bumped version to v0.1.0-dev23
|
||||
**Completed This Session** (2026-01-04 10:00):
|
||||
- ✅ **Quality Widget Deduplication** (main.go:7075-7128)
|
||||
- Converted qualitySelectSimple/Adv to ColoredSelect
|
||||
- Registered both with state manager for auto-sync
|
||||
- Updated updateQualityOptions to use state manager
|
||||
- Eliminated manual synchronization code
|
||||
- ✅ **Enhancement Module Fixes** (internal/enhancement/)
|
||||
- Defined SkinToneAnalysis struct
|
||||
- Fixed invalid ContentAnalysis field assignments
|
||||
- Removed unused imports and variables
|
||||
- Fixed onnx_model.go unused variable
|
||||
- ✅ **Missing Imports Restored** (main.go:3-48)
|
||||
- Added: atomic, json, sort, io, errors, bufio, strconv, math
|
||||
- Added: fyne.io/fyne/v2/driver/desktop
|
||||
- Added: internal/interlace, internal/sysinfo
|
||||
- Added: github.com/ebitengine/oto/v3
|
||||
- ✅ **Code Cleanup**
|
||||
- Removed duplicate QR code function
|
||||
|
||||
**Files Modified**:
|
||||
- `main.go` - About dialog layout, UI polish, audio crash fix, version bump
|
||||
- `internal/ui/components.go` - Colored select styling + input background tone
|
||||
- `FyneApp.toml` - Version bump to dev23
|
||||
- `docs/CHANGELOG.md` - Dev23 release notes
|
||||
- `main.go` - Quality widget deduplication, missing imports, duplicate code removal
|
||||
- `internal/enhancement/enhancement_module.go` - SkinToneAnalysis struct, field fixes
|
||||
- `internal/enhancement/onnx_model.go` - Unused variable cleanup
|
||||
- `go.mod`, `go.sum` - Added oto/v3 dependency
|
||||
|
||||
**Next Tasks**:
|
||||
1. Update docs to dev23 (ROADMAP/TODO/WORKING_ON/DONE)
|
||||
2. Create git tag v0.1.0-dev23
|
||||
3. Begin dev24 planning with Jake
|
||||
**⚠️ Remaining Compilation Errors** (HANDOFF TO opencode):
|
||||
1. Line 500: `canvas.NewImageFromBytes` undefined - QR code generation
|
||||
2. Lines 6995-7003: `outputExtLabel`, `outputExtBG`, `updateOutputHint` undefined - Convert UI
|
||||
|
||||
**Next Tasks for opencode**:
|
||||
1. Fix 3 remaining compilation errors in main.go
|
||||
2. Continue widget deduplication (4 remaining pairs)
|
||||
3. Convert 32 remaining widget.Select to ColoredSelect
|
||||
|
||||
---
|
||||
|
||||
### 🤖 opencode
|
||||
**Status**: Has uncommitted job editing feature
|
||||
**Status**: 🎯 PRIORITY HANDOFF - Fix compilation errors + widget deduplication
|
||||
|
||||
**Uncommitted Work** (Discovered by Claude):
|
||||
- `internal/queue/edit.go` (NEW - 363 lines) - Job editing logic
|
||||
- `internal/ui/command_editor.go` (NEW - 352 lines) - Fyne UI dialog
|
||||
- `internal/queue/execute_edit_job.go.wip` (NEW - 114 lines) - Moved out of build (has import errors)
|
||||
- `internal/queue/queue.go` (MODIFIED) - Refactored code to edit.go
|
||||
**🔥 IMMEDIATE TASKS** (from Claude):
|
||||
1. **Fix 3 Compilation Errors** in main.go:
|
||||
- Line 500: `canvas.NewImageFromBytes` undefined
|
||||
- Context: QR code generation in `generatePixelatedQRCode()`
|
||||
- May need to use `canvas.NewImageFromResource()` or similar
|
||||
- Lines 6995-7003: `outputExtLabel`, `outputExtBG`, `updateOutputHint` undefined
|
||||
- Context: Convert UI output file extension handling
|
||||
- Variables were likely removed/renamed - need to investigate and restore proper implementation
|
||||
|
||||
**Feature**: Job editing system with FFmpeg command management
|
||||
- Edit FFmpeg commands in queued jobs
|
||||
- Validate syntax and structure
|
||||
- Track edit history with timestamps
|
||||
- Apply/reset/revert functionality
|
||||
2. **Widget Deduplication** (4 remaining pairs):
|
||||
- resolutionSelectSimple & resolutionSelect (lines ~8009, 8347)
|
||||
- targetAspectSelect & targetAspectSelectSimple (lines ~7397, 8016)
|
||||
- encoderPresetSelect & simplePresetSelect (lines ~7531, 7543)
|
||||
- bitratePresetSelect & simpleBitrateSelect (lines ~7969, 7982)
|
||||
- **Pattern**: Follow quality widget example at main.go:7075-7128
|
||||
|
||||
**Completeness**: ⚠️ INCOMPLETE
|
||||
- ✅ Core logic complete, code compiles
|
||||
- ❌ No integration in main.go (EditJobManager never instantiated)
|
||||
- ❌ No UI hookups ("Edit Command" button missing from queue view)
|
||||
- ❌ No end-to-end workflow testing
|
||||
- ❌ Potential memory safety issue (queue.Get() shallow copy)
|
||||
3. **ColoredSelect Expansion** (32 remaining widgets):
|
||||
- Resolution, aspect, preset, bitrate, frame rate, etc.
|
||||
- Use appropriate color maps (BuildGenericColorMap, BuildQualityColorMap, etc.)
|
||||
|
||||
**Last Known Work**:
|
||||
- Player backend improvements
|
||||
**Uncommitted Work** (Defer to later):
|
||||
- `internal/queue/edit.go` - Job editing logic (keep for future dev24+)
|
||||
- `internal/ui/command_editor.go` - Fyne UI dialog
|
||||
- Enhancement module framework
|
||||
- Command execution refactoring
|
||||
|
||||
**Shared Responsibilities with Claude**:
|
||||
- Convert module UI/UX improvements
|
||||
- Queue system enhancements
|
||||
- Module integration testing
|
||||
**Coordination**:
|
||||
- Jake will be using Codex for UI work this week
|
||||
- Focus on build stability and widget conversions first
|
||||
|
||||
---
|
||||
|
||||
## 🤝 Coordination Status
|
||||
|
||||
**Opencode's Recommendation**: ✅ ACCEPTED - Option A
|
||||
**Current Handoff**: Claude → opencode
|
||||
|
||||
**Actions Taken by Claude**:
|
||||
1. ✅ Removed partial job editing integration from queueview.go:
|
||||
- Removed onEditJob parameter from buildJobItem signature
|
||||
- Removed Edit button code for JobTypeEditJob
|
||||
- Added missing "image" import
|
||||
2. ✅ Removed job editing integration from main.go:
|
||||
- Removed editJobManager field from appState struct
|
||||
- Removed JobTypeEditJob case statement
|
||||
- Removed executeEditJob function (150 lines)
|
||||
- Removed editJobManager initialization
|
||||
3. ✅ Preserved WIP files for dev23:
|
||||
- internal/queue/edit.go (not committed, ready for dev23)
|
||||
- internal/ui/command_editor.go (not committed, ready for dev23)
|
||||
- internal/queue/execute_edit_job.go.wip (needs import fixes)
|
||||
4. ✅ Build passing and ready for testing
|
||||
**Claude's Handoff** (2026-01-04 10:00):
|
||||
1. ✅ Quality widget deduplication complete (pattern established)
|
||||
2. ✅ Enhancement module compilation fixed
|
||||
3. ✅ Missing imports restored
|
||||
4. ⚠️ 3 compilation errors remain - handed off to opencode
|
||||
5. 📋 4 widget pairs still need deduplication
|
||||
6. 📋 32 widgets need ColoredSelect conversion
|
||||
|
||||
**Next Steps**:
|
||||
- Test dev22 features (GPU detection, AV1 presets, UI improvements)
|
||||
- Push to remote: `git push origin master --tags`
|
||||
- Begin dev23 planning with job editing integration as priority feature
|
||||
**For opencode**:
|
||||
- Priority 1: Fix 3 compilation errors (blocking build)
|
||||
- Priority 2: Complete widget deduplication using established pattern
|
||||
- Priority 3: ColoredSelect expansion for remaining 32 widgets
|
||||
|
||||
**Coordination Notes**:
|
||||
- User will be using Codex for UI work this week - coordinate visual changes
|
||||
- Build must pass before UI work can continue
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
BIN
assets/logo/LT_Logo-26.png
Normal file
BIN
assets/logo/LT_Logo-26.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 117 KiB |
4
go.mod
4
go.mod
|
|
@ -11,6 +11,8 @@ require (
|
|||
fyne.io/systray v1.11.1-0.20250603113521-ca66a66d8b58 // indirect
|
||||
github.com/BurntSushi/toml v1.5.0 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/ebitengine/oto/v3 v3.4.0 // indirect
|
||||
github.com/ebitengine/purego v0.9.0 // indirect
|
||||
github.com/fredbi/uri v1.1.1 // indirect
|
||||
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
||||
github.com/fyne-io/gl-js v0.2.0 // indirect
|
||||
|
|
@ -37,7 +39,7 @@ require (
|
|||
github.com/yuin/goldmark v1.7.8 // indirect
|
||||
golang.org/x/image v0.24.0 // indirect
|
||||
golang.org/x/net v0.35.0 // indirect
|
||||
golang.org/x/sys v0.30.0 // indirect
|
||||
golang.org/x/sys v0.36.0 // indirect
|
||||
golang.org/x/text v0.22.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
|
|
|||
18
go.sum
18
go.sum
|
|
@ -7,8 +7,14 @@ github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2
|
|||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/ebitengine/oto/v3 v3.4.0 h1:br0PgASsEWaoWn38b2Goe7m1GKFYfNgnsjSd5Gg+/bQ=
|
||||
github.com/ebitengine/oto/v3 v3.4.0/go.mod h1:IOleLVD0m+CMak3mRVwsYY8vTctQgOM0iiL6S7Ar7eI=
|
||||
github.com/ebitengine/purego v0.9.0 h1:mh0zpKBIXDceC63hpvPuGLiJ8ZAa3DfrFTudmfi8A4k=
|
||||
github.com/ebitengine/purego v0.9.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
|
||||
github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g=
|
||||
github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw=
|
||||
github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
|
||||
github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||
github.com/fredbi/uri v1.1.1 h1:xZHJC08GZNIUhbP5ImTHnt5Ya0T8FI2VAwI/37kh2Ko=
|
||||
github.com/fredbi/uri v1.1.1/go.mod h1:4+DZQ5zBjEwQCDmXW5JdIjz0PUA+yJbvtBv+u+adr5o=
|
||||
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
|
||||
|
|
@ -33,6 +39,8 @@ github.com/go-text/typesetting-utils v0.0.0-20241103174707-87a29e9e6066 h1:qCuYC
|
|||
github.com/go-text/typesetting-utils v0.0.0-20241103174707-87a29e9e6066/go.mod h1:DDxDdQEnB70R8owOx3LVpEFvpMK9eeH1o2r0yZhFI9o=
|
||||
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
|
||||
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y=
|
||||
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
|
||||
github.com/hack-pad/go-indexeddb v0.3.2 h1:DTqeJJYc1usa45Q5r52t01KhvlSN02+Oq+tQbSBI91A=
|
||||
|
|
@ -51,6 +59,8 @@ github.com/nicksnyder/go-i18n/v2 v2.5.1 h1:IxtPxYsR9Gp60cGXjfuR/llTqV8aYMsC472zD
|
|||
github.com/nicksnyder/go-i18n/v2 v2.5.1/go.mod h1:DrhgsSDZxoAfvVrBVLXoxZn/pN5TXqaDbq7ju94viiQ=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA=
|
||||
github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
|
|
@ -65,6 +75,12 @@ github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef h1:Ch6Q+AZUxDBCVqd
|
|||
github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef/go.mod h1:nXTWP6+gD5+LUJ8krVhhoeHjvHTutPxMYl5SvkcnJNE=
|
||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
github.com/yeqown/go-qrcode/v2 v2.2.5 h1:HCOe2bSjkhZyYoyyNaXNzh4DJZll6inVJQQw+8228Zk=
|
||||
github.com/yeqown/go-qrcode/v2 v2.2.5/go.mod h1:uHpt9CM0V1HeXLz+Wg5MN50/sI/fQhfkZlOM+cOTHxw=
|
||||
github.com/yeqown/go-qrcode/writer/standard v1.3.0 h1:chdyhEfRtUPgQtuPeaWVGQ/TQx4rE1PqeoW3U+53t34=
|
||||
github.com/yeqown/go-qrcode/writer/standard v1.3.0/go.mod h1:O4MbzsotGCvy8upYPCR91j81dr5XLT7heuljcNXW+oQ=
|
||||
github.com/yeqown/reedsolomon v1.0.0 h1:x1h/Ej/uJnNu8jaX7GLHBWmZKCAWjEJTetkqaabr4B0=
|
||||
github.com/yeqown/reedsolomon v1.0.0/go.mod h1:P76zpcn2TCuL0ul1Fso373qHRc69LKwAw/Iy6g1WiiM=
|
||||
github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic=
|
||||
github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
|
||||
golang.org/x/image v0.24.0 h1:AN7zRgVsbvmTfNyqIbbOraYL8mSwcKncEj8ofjgzcMQ=
|
||||
|
|
@ -73,6 +89,8 @@ golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
|
|||
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
|
||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
|
||||
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
|
||||
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
|
||||
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
|
|
|||
|
|
@ -5,9 +5,6 @@ import (
|
|||
"fmt"
|
||||
"image"
|
||||
"image/color"
|
||||
"image/draw"
|
||||
"math"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
|
|
@ -25,6 +22,18 @@ type AIModel interface {
|
|||
Close() error
|
||||
}
|
||||
|
||||
// SkinToneAnalysis represents detailed skin tone analysis for enhancement
|
||||
type SkinToneAnalysis struct {
|
||||
DetectedSkinTones []string // List of detected skin tones
|
||||
SkinSaturation float64 // 0.0-1.0
|
||||
SkinBrightness float64 // 0.0-1.0
|
||||
SkinWarmth float64 // -1.0 to 1.0 (negative=cool, positive=warm)
|
||||
SkinContrast float64 // 0.0-2.0 (1.0=normal)
|
||||
DetectedHemoglobin []string // Detected hemoglobin levels/characteristics
|
||||
IsAdultContent bool // Whether adult content was detected
|
||||
RecommendedProfile string // Recommended enhancement profile
|
||||
}
|
||||
|
||||
// ContentAnalysis represents video content analysis results
|
||||
type ContentAnalysis struct {
|
||||
Type string // "general", "anime", "film", "interlaced", "adult"
|
||||
|
|
@ -144,17 +153,10 @@ func (m *EnhancementModule) AnalyzeContent(path string) (*ContentAnalysis, error
|
|||
|
||||
// Advanced skin analysis for Phase 2.5
|
||||
advancedSkinAnalysis := m.analyzeSkinTonesAdvanced(output)
|
||||
|
||||
|
||||
// Update content analysis with advanced skin tone information
|
||||
contentAnalysis.SkinTones = advancedSkinAnalysis.DetectedSkinTones
|
||||
contentAnalysis.SkinSaturation = advancedSkinAnalysis.SkinSaturation
|
||||
contentAnalysis.SkinBrightness = advancedSkinAnalysis.SkinBrightness
|
||||
contentAnalysis.SkinWarmth = advancedSkinAnalysis.SkinWarmth
|
||||
contentAnalysis.SkinContrast = advancedSkinAnalysis.SkinContrast
|
||||
contentAnalysis.DetectedHemoglobin = advancedSkinAnalysis.DetectedHemoglobin
|
||||
contentAnalysis.IsAdultContent = advancedSkinAnalysis.IsAdultContent
|
||||
contentAnalysis.RecommendedProfile = advancedSkinAnalysis.RecommendedProfile
|
||||
|
||||
contentAnalysis.SkinTones = advancedSkinAnalysis
|
||||
|
||||
logging.Debug(logging.CatEnhance, "Advanced skin analysis applied: %+v", advancedSkinAnalysis)
|
||||
return contentAnalysis, nil
|
||||
}
|
||||
|
|
@ -190,18 +192,12 @@ func (m *EnhancementModule) analyzeSkinTonesAdvanced(ffprobeOutput []byte) *Skin
|
|||
RecommendedProfile: "balanced", // Default enhancement profile
|
||||
}
|
||||
|
||||
// Advanced frame-by-frame skin tone detection
|
||||
frameCount := 0
|
||||
skinToneHistogram := make(map[string]int) // [skin_tone]count
|
||||
totalSaturation := 0.0
|
||||
totalBrightness := 0.0
|
||||
totalWarmth := 0.0
|
||||
totalCoolness := 0.0
|
||||
|
||||
// For now, simulate frame-by-frame skin analysis
|
||||
// In production, this would process actual video frames
|
||||
// Here we detect dominant skin tones and distribution across frames
|
||||
|
||||
// TODO: Advanced frame-by-frame skin tone detection would use:
|
||||
// - frameCount for tracking processed frames
|
||||
// - skinToneHistogram for tone distribution
|
||||
// - totalSaturation, totalBrightness, totalWarmth, totalCoolness for averages
|
||||
// This will be implemented when video frame processing is added
|
||||
|
||||
return analysis
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -106,7 +106,6 @@ func (m *ONNXModel) enhancePixel(c color.RGBA) color.RGBA {
|
|||
// Simple enhancement: increase contrast and sharpness
|
||||
g := float64(c.G)
|
||||
b := float64(c.B)
|
||||
a := float64(c.A)
|
||||
|
||||
// Boost contrast (1.1x)
|
||||
g = min(255, g*1.1)
|
||||
|
|
|
|||
7
main.go
7
main.go
|
|
@ -1,18 +1,25 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"image/color"
|
||||
"io"
|
||||
"log"
|
||||
"math"
|
||||
"net/url"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"slices"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
|
|
|
|||
8
qr-demo/go.mod
Normal file
8
qr-demo/go.mod
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
module qr-demo
|
||||
|
||||
go 1.25.5
|
||||
|
||||
require (
|
||||
fyne.io/fyne/v2 v2.7.1 // indirect
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect
|
||||
)
|
||||
4
qr-demo/go.sum
Normal file
4
qr-demo/go.sum
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
fyne.io/fyne/v2 v2.7.1 h1:ja7rNHWWEooha4XBIZNnPP8tVFwmTfwMJdpZmLxm2Zc=
|
||||
fyne.io/fyne/v2 v2.7.1/go.mod h1:xClVlrhxl7D+LT+BWYmcrW4Nf+dJTvkhnPgji7spAwE=
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
|
||||
99
qr-demo/qr_about_demo.go
Normal file
99
qr-demo/qr_about_demo.go
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"fyne.io/fyne/v2"
|
||||
"fyne.io/fyne/v2/app"
|
||||
"fyne.io/fyne/v2/canvas"
|
||||
"fyne.io/fyne/v2/container"
|
||||
"fyne.io/fyne/v2/layout"
|
||||
"fyne.io/fyne/v2/widget"
|
||||
|
||||
"github.com/skip2/go-qrcode"
|
||||
)
|
||||
|
||||
func generatePixelatedQRCode() (fyne.CanvasObject, error) {
|
||||
docURL := "https://docs.leaktechnologies.dev/VideoTools"
|
||||
|
||||
// Generate QR code with large pixels for blocky look (160x160 with 8x8 pixel blocks)
|
||||
qrBytes, err := qrcode.Encode(docURL, qrcode.Medium, 160)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Convert to Fyne image with pixelated look
|
||||
img := canvas.NewImageFromBytes(qrBytes)
|
||||
img.FillMode = canvas.ImageFillOriginal // Keep pixelated look
|
||||
img.SetMinSize(fyne.NewSize(160, 160))
|
||||
|
||||
return img, nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
myApp := app.New()
|
||||
myWindow := myApp.NewWindow("QR Code Test - About Dialog Demo")
|
||||
|
||||
// Test QR generation
|
||||
qrCode, err := generatePixelatedQRCode()
|
||||
if err != nil {
|
||||
log.Printf("Failed to generate QR code: %v", err)
|
||||
fallback := widget.NewLabel("QR generation failed - using fallback")
|
||||
myWindow.SetContent(container.NewVBox(fallback))
|
||||
} else {
|
||||
// Recreate about dialog layout with QR code
|
||||
title := canvas.NewText("About & Support", color.Color{} /*textColor*/)
|
||||
title.TextSize = 20
|
||||
|
||||
versionText := widget.NewLabel("VideoTools QR Code Demo")
|
||||
devText := widget.NewLabel("Developer: Leak Technologies")
|
||||
|
||||
// QR code with label
|
||||
qrLabel := widget.NewLabel("Scan for docs")
|
||||
qrLabel.Alignment = fyne.TextAlignCenter
|
||||
|
||||
// Logs button
|
||||
logsLink := widget.NewButton("Logs Folder", func() {
|
||||
fmt.Println("Logs folder clicked")
|
||||
})
|
||||
logsLink.Importance = widget.LowImportance
|
||||
|
||||
feedbackLabel := widget.NewLabel("Feedback: use Logs button on main menu to view logs; send issues with attached logs.")
|
||||
feedbackLabel.Wrapping = fyne.TextWrapWord
|
||||
|
||||
mainContent := container.NewVBox(
|
||||
versionText,
|
||||
devText,
|
||||
widget.NewLabel(""),
|
||||
widget.NewLabel("Support Development"),
|
||||
widget.NewLabel("QR code demo for docs"),
|
||||
feedbackLabel,
|
||||
)
|
||||
|
||||
logoColumn := container.NewVBox()
|
||||
logoColumn.Add(qrCode)
|
||||
logoColumn.Add(qrLabel)
|
||||
logoColumn.Add(layout.NewSpacer())
|
||||
logoColumn.Add(logsLink)
|
||||
|
||||
body := container.NewBorder(
|
||||
container.NewHBox(title),
|
||||
nil,
|
||||
nil,
|
||||
logoColumn,
|
||||
mainContent,
|
||||
)
|
||||
body = container.NewPadded(body)
|
||||
sizeShim := canvas.NewRectangle(color.Transparent{})
|
||||
sizeShim.SetMinSize(fyne.NewSize(560, 280))
|
||||
|
||||
content := container.NewMax(sizeShim, body)
|
||||
myWindow.SetContent(content)
|
||||
}
|
||||
|
||||
myWindow.Resize(fyne.NewSize(600, 400))
|
||||
myWindow.CenterOnScreen()
|
||||
myWindow.ShowAndRun()
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user