Commit pending assets, deps, and enhancement fixes

This commit is contained in:
Stu Leak 2026-01-04 05:09:32 -05:00
parent d66116c3ab
commit cefedc2bd5
11 changed files with 233 additions and 728 deletions

View File

@ -2,100 +2,111 @@
This file tracks what each agent is currently working on to prevent conflicts and coordinate changes. 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 ## 🔴 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 ## 👥 Active Work by Agent
### 🤖 Claude (thisagent - Claude Code) ### 🤖 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): **Completed This Session** (2026-01-04 10:00):
- ✅ Refined colored dropdowns (accent bar, rounded corners, improved legibility) - ✅ **Quality Widget Deduplication** (main.go:7075-7128)
- ✅ Aligned settings panel input backgrounds to dropdown tone - Converted qualitySelectSimple/Adv to ColoredSelect
- ✅ Styled Auto-Crop and Interlacing actions to match panel UI - Registered both with state manager for auto-sync
- ✅ Rebuilt About / Support dialog to match mockup - Updated updateQualityOptions to use state manager
- ✅ Fixed Audio module crash on initial quality select - Eliminated manual synchronization code
- ✅ Bumped version to v0.1.0-dev23 - ✅ **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**: **Files Modified**:
- `main.go` - About dialog layout, UI polish, audio crash fix, version bump - `main.go` - Quality widget deduplication, missing imports, duplicate code removal
- `internal/ui/components.go` - Colored select styling + input background tone - `internal/enhancement/enhancement_module.go` - SkinToneAnalysis struct, field fixes
- `FyneApp.toml` - Version bump to dev23 - `internal/enhancement/onnx_model.go` - Unused variable cleanup
- `docs/CHANGELOG.md` - Dev23 release notes - `go.mod`, `go.sum` - Added oto/v3 dependency
**Next Tasks**: **⚠️ Remaining Compilation Errors** (HANDOFF TO opencode):
1. Update docs to dev23 (ROADMAP/TODO/WORKING_ON/DONE) 1. Line 500: `canvas.NewImageFromBytes` undefined - QR code generation
2. Create git tag v0.1.0-dev23 2. Lines 6995-7003: `outputExtLabel`, `outputExtBG`, `updateOutputHint` undefined - Convert UI
3. Begin dev24 planning with Jake
**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 ### 🤖 opencode
**Status**: Has uncommitted job editing feature **Status**: 🎯 PRIORITY HANDOFF - Fix compilation errors + widget deduplication
**Uncommitted Work** (Discovered by Claude): **🔥 IMMEDIATE TASKS** (from Claude):
- `internal/queue/edit.go` (NEW - 363 lines) - Job editing logic 1. **Fix 3 Compilation Errors** in main.go:
- `internal/ui/command_editor.go` (NEW - 352 lines) - Fyne UI dialog - Line 500: `canvas.NewImageFromBytes` undefined
- `internal/queue/execute_edit_job.go.wip` (NEW - 114 lines) - Moved out of build (has import errors) - Context: QR code generation in `generatePixelatedQRCode()`
- `internal/queue/queue.go` (MODIFIED) - Refactored code to edit.go - 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 2. **Widget Deduplication** (4 remaining pairs):
- Edit FFmpeg commands in queued jobs - resolutionSelectSimple & resolutionSelect (lines ~8009, 8347)
- Validate syntax and structure - targetAspectSelect & targetAspectSelectSimple (lines ~7397, 8016)
- Track edit history with timestamps - encoderPresetSelect & simplePresetSelect (lines ~7531, 7543)
- Apply/reset/revert functionality - bitratePresetSelect & simpleBitrateSelect (lines ~7969, 7982)
- **Pattern**: Follow quality widget example at main.go:7075-7128
**Completeness**: ⚠️ INCOMPLETE 3. **ColoredSelect Expansion** (32 remaining widgets):
- ✅ Core logic complete, code compiles - Resolution, aspect, preset, bitrate, frame rate, etc.
- ❌ No integration in main.go (EditJobManager never instantiated) - Use appropriate color maps (BuildGenericColorMap, BuildQualityColorMap, etc.)
- ❌ No UI hookups ("Edit Command" button missing from queue view)
- ❌ No end-to-end workflow testing
- ❌ Potential memory safety issue (queue.Get() shallow copy)
**Last Known Work**: **Uncommitted Work** (Defer to later):
- Player backend improvements - `internal/queue/edit.go` - Job editing logic (keep for future dev24+)
- `internal/ui/command_editor.go` - Fyne UI dialog
- Enhancement module framework - Enhancement module framework
- Command execution refactoring
**Shared Responsibilities with Claude**: **Coordination**:
- Convert module UI/UX improvements - Jake will be using Codex for UI work this week
- Queue system enhancements - Focus on build stability and widget conversions first
- Module integration testing
--- ---
## 🤝 Coordination Status ## 🤝 Coordination Status
**Opencode's Recommendation**: ✅ ACCEPTED - Option A **Current Handoff**: Claude → opencode
**Actions Taken by Claude**: **Claude's Handoff** (2026-01-04 10:00):
1. ✅ Removed partial job editing integration from queueview.go: 1. ✅ Quality widget deduplication complete (pattern established)
- Removed onEditJob parameter from buildJobItem signature 2. ✅ Enhancement module compilation fixed
- Removed Edit button code for JobTypeEditJob 3. ✅ Missing imports restored
- Added missing "image" import 4. ⚠️ 3 compilation errors remain - handed off to opencode
2. ✅ Removed job editing integration from main.go: 5. 📋 4 widget pairs still need deduplication
- Removed editJobManager field from appState struct 6. 📋 32 widgets need ColoredSelect conversion
- 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
**Next Steps**: **For opencode**:
- Test dev22 features (GPU detection, AV1 presets, UI improvements) - Priority 1: Fix 3 compilation errors (blocking build)
- Push to remote: `git push origin master --tags` - Priority 2: Complete widget deduplication using established pattern
- Begin dev23 planning with job editing integration as priority feature - 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

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
View File

@ -11,6 +11,8 @@ require (
fyne.io/systray v1.11.1-0.20250603113521-ca66a66d8b58 // indirect fyne.io/systray v1.11.1-0.20250603113521-ca66a66d8b58 // indirect
github.com/BurntSushi/toml v1.5.0 // indirect github.com/BurntSushi/toml v1.5.0 // indirect
github.com/davecgh/go-spew v1.1.1 // 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/fredbi/uri v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/fyne-io/gl-js v0.2.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 github.com/yuin/goldmark v1.7.8 // indirect
golang.org/x/image v0.24.0 // indirect golang.org/x/image v0.24.0 // indirect
golang.org/x/net v0.35.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 golang.org/x/text v0.22.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
) )

18
go.sum
View File

@ -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/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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g=
github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= 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 h1:xZHJC08GZNIUhbP5ImTHnt5Ya0T8FI2VAwI/37kh2Ko=
github.com/fredbi/uri v1.1.1/go.mod h1:4+DZQ5zBjEwQCDmXW5JdIjz0PUA+yJbvtBv+u+adr5o= 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= 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/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 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= 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 h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y=
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= 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= 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/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 h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= 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 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA=
github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo= github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 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/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 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= 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 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic=
github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
golang.org/x/image v0.24.0 h1:AN7zRgVsbvmTfNyqIbbOraYL8mSwcKncEj8ofjgzcMQ= 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/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 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= 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= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

View File

@ -5,9 +5,6 @@ import (
"fmt" "fmt"
"image" "image"
"image/color" "image/color"
"image/draw"
"math"
"sort"
"strings" "strings"
"time" "time"
@ -25,6 +22,18 @@ type AIModel interface {
Close() error 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 // ContentAnalysis represents video content analysis results
type ContentAnalysis struct { type ContentAnalysis struct {
Type string // "general", "anime", "film", "interlaced", "adult" 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 // Advanced skin analysis for Phase 2.5
advancedSkinAnalysis := m.analyzeSkinTonesAdvanced(output) advancedSkinAnalysis := m.analyzeSkinTonesAdvanced(output)
// Update content analysis with advanced skin tone information // Update content analysis with advanced skin tone information
contentAnalysis.SkinTones = advancedSkinAnalysis.DetectedSkinTones contentAnalysis.SkinTones = advancedSkinAnalysis
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
logging.Debug(logging.CatEnhance, "Advanced skin analysis applied: %+v", advancedSkinAnalysis) logging.Debug(logging.CatEnhance, "Advanced skin analysis applied: %+v", advancedSkinAnalysis)
return contentAnalysis, nil return contentAnalysis, nil
} }
@ -190,18 +192,12 @@ func (m *EnhancementModule) analyzeSkinTonesAdvanced(ffprobeOutput []byte) *Skin
RecommendedProfile: "balanced", // Default enhancement profile RecommendedProfile: "balanced", // Default enhancement profile
} }
// Advanced frame-by-frame skin tone detection // TODO: Advanced frame-by-frame skin tone detection would use:
frameCount := 0 // - frameCount for tracking processed frames
skinToneHistogram := make(map[string]int) // [skin_tone]count // - skinToneHistogram for tone distribution
totalSaturation := 0.0 // - totalSaturation, totalBrightness, totalWarmth, totalCoolness for averages
totalBrightness := 0.0 // This will be implemented when video frame processing is added
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
return analysis return analysis
} }

View File

@ -106,7 +106,6 @@ func (m *ONNXModel) enhancePixel(c color.RGBA) color.RGBA {
// Simple enhancement: increase contrast and sharpness // Simple enhancement: increase contrast and sharpness
g := float64(c.G) g := float64(c.G)
b := float64(c.B) b := float64(c.B)
a := float64(c.A)
// Boost contrast (1.1x) // Boost contrast (1.1x)
g = min(255, g*1.1) g = min(255, g*1.1)

View File

@ -1,18 +1,25 @@
package main package main
import ( import (
"bufio"
"bytes" "bytes"
"context" "context"
"encoding/json"
"errors"
"flag" "flag"
"fmt" "fmt"
"image/color" "image/color"
"io"
"log" "log"
"math"
"net/url" "net/url"
"os" "os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
"runtime" "runtime"
"slices" "slices"
"sort"
"strconv"
"strings" "strings"
"sync" "sync"
"sync/atomic" "sync/atomic"

8
qr-demo/go.mod Normal file
View 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
View 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
View 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()
}