Fork of VideoTools focused on player/inspection. VT Player lets us iterate on playback, navigation, and analysis workflows independently of the full suite.
Go to file
Stu 183602a302 Add drag-and-drop, fix cover art encoding, extract embedded thumbnails (v0.1.0-dev9)
Drag-and-Drop on Main Menu:
- Implemented position-based drop detection on main menu module tiles
- Added detectModuleTileAtPosition() to calculate which tile receives the drop
- Modified window drop handler to pass position and route to appropriate module
- Bypasses Fyne's drop event hierarchy limitation where window-level handlers
  intercept drops before widgets can receive them
- Only enabled tiles (currently Convert) respond to drops
- Loads video and switches to module automatically

Cover Art Embedding Fixes:
- Fixed FFmpeg exit code 234 error when embedding cover art
- Added explicit PNG codec specification for cover art streams
- Snippet generation: Added `-c✌️1 png` after mapping cover art stream
- Full conversion: Added `-c✌️1 png` for proper MP4 thumbnail encoding
- MP4 containers require attached pictures to be PNG or MJPEG encoded

Embedded Cover Art Extraction:
- Added EmbeddedCoverArt field to videoSource struct
- Extended ffprobe parsing to detect attached_pic disposition
- Automatically extracts embedded thumbnails when loading videos
- Extracted cover art displays in metadata section (168x168)
- Enables round-trip workflow: generate snippet with thumbnail, load snippet
  and see the embedded thumbnail displayed

Technical Details:
- Modified handleDrop to accept position parameter
- Added Index and Disposition fields to ffprobe stream parsing
- Cover art streams now excluded from main video stream detection
- Grid layout: 3 columns, ~302px per column, ~122px per row, starts at y=100
- Embedded thumbnails extracted to /tmp/videotools-embedded-cover-*.png

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-23 18:46:51 -05:00
assets/logo Refactor to modular architecture with rainbow UI (v0.1.0-dev8) 2025-11-23 14:56:37 -05:00
docs Refactor to modular architecture with rainbow UI (v0.1.0-dev8) 2025-11-23 14:56:37 -05:00
internal Add drag-and-drop, fix cover art encoding, extract embedded thumbnails (v0.1.0-dev9) 2025-11-23 18:46:51 -05:00
.gitignore Ignore built binary and remove from repo 2025-11-21 18:57:48 -05:00
DONE.md Refactor to modular architecture with rainbow UI (v0.1.0-dev8) 2025-11-23 14:56:37 -05:00
go.mod Implement in-app playback with ffmpeg frame pump and Go audio 2025-11-20 16:11:56 -05:00
go.sum Implement in-app playback with ffmpeg frame pump and Go audio 2025-11-20 16:11:56 -05:00
main.go Add drag-and-drop, fix cover art encoding, extract embedded thumbnails (v0.1.0-dev9) 2025-11-23 18:46:51 -05:00
README.md Improve video player layout with overlay controls 2025-11-20 15:06:52 -05:00
TODO.md Refactor to modular architecture with rainbow UI (v0.1.0-dev8) 2025-11-23 14:56:37 -05:00

VideoTools Prototype

Requirements

  • Go 1.21+
  • Fyne 2.x (pulled automatically via go mod tidy)
  • FFmpeg (not yet invoked, but required for future transcoding)

Running

Launch the GUI:

go run .

Run a module via CLI:

go run . convert input.avi output.mp4
go run . combine file1.mov file2.wav / final.mp4
go run . logs

Add -debug or VIDEOTOOLS_DEBUG=1 for verbose stderr logs.

Logs

  • All actions log to videotools.log (override with VIDEOTOOLS_LOG_FILE=/path/to/log).
  • CLI command videotools logs (or go run . logs) prints the last 200 lines.
  • Each entry is tagged (e.g. [UI], [CLI], [FFMPEG]) so issues are easy to trace.

Notes

  • GUI requires a running display server (X11/Wayland). In headless shells it will log [UI] DISPLAY environment variable is empty.
  • Convert screen accepts drag-and-drop or the "Open File…" button; ffprobe metadata populates instantly, the preview box animates extracted frames with simple play/pause + slider controls (and lets you grab cover art), and the "Generate Snippet" button produces a 20-second midpoint clip for quick quality checks (requires ffmpeg in PATH).
  • Simple mode now applies smart inverse telecine by default—automatically skipping it on progressive footage—and lets you rename the target file before launching a convert job.
  • Other module handlers are placeholders; hook them to actual FFmpeg calls next.