No description
  • Go 90.3%
  • Shell 4.7%
  • PowerShell 3.7%
  • Batchfile 0.7%
  • C 0.6%
Find a file
Stu Leak c5ecdd3e01
All checks were successful
Forgejo Publish Release / linux-package (push) Successful in 4m20s
Forgejo Publish Release / windows-package (push) Successful in 11m47s
Forgejo Publish Release / publish-release (push) Successful in 15s
fix(player): catch STATUS_STACK_OVERFLOW in VEH, increase thread stack to 4 MB
Three changes to prevent/catch the hard crash that kills the process at
~frame 21 during H.264 playback:

1. safe_bridge.c (MinGW VEH): extend the crash handler to also catch
   STATUS_STACK_OVERFLOW (0xC00000FD) in addition to EXCEPTION_ACCESS_VIOLATION.
   For stack-overflow the guard page is restored with _resetstkoflw() before
   longjmp so the unwind has enough stack to execute.  The exc_code_out value
   is SAFE_BRIDGE_STACK_OVERFLOW (0xDEAD0003) so callers can log it distinctly.

2. engine.go LDFLAGS: add -Wl,--stack,4194304 to set the Windows PE default
   thread stack to 4 MB.  H.264 CABAC decode (~400 KB peak stack) fits easily
   inside 1 MB, but the overflow was confirmed in a StatusStackOverflow path.
   4 MB eliminates the overflow while the VEH acts as a safety net.

3. engine.go thumbnail codec: change thread_count from 2 → 1.  The thumbnail
   goroutine decodes frames sequentially; multi-threading buys nothing and
   creates internal codec threads whose cleanup (avcodec_free_context) runs
   just before the main playback engine starts, with a risk of TLS corruption.

Also adds a playbackLoop diagnostic log (INFO, first 25 frames) that prints
"pre-vsync" before DwmFlush so future crash logs will show whether the fault
is inside NextFrame, WaitVsync, or SetFrame for each frame number.
2026-05-17 05:56:51 -04:00
.forgejo/workflows ci: require ffmpeg.exe present on cache hit before skipping BtbN download 2026-05-15 06:29:19 -04:00
.github/workflows ci: replace MSYS2 with standalone winlibs GCC + BtbN shared FFmpeg 2026-03-26 03:10:10 -04:00
.opencode/plans Rename Thumb module to Thumbnail throughout codebase 2026-01-17 04:15:39 -05:00
_fyne@28e8a8a538 debug: finalize startup crash diagnostics — crash confirmed in glfw.CreateWindow() 2026-05-15 19:37:33 -04:00
assets Fix language flags and dropdown caret in Settings 2026-05-11 15:11:13 -04:00
cmd Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
docs docs: update all 6 docs for dev48 — theme system, transport migration, crash diagnostics, i18n persistence, signing 2026-05-16 15:37:13 -04:00
internal fix(player): catch STATUS_STACK_OVERFLOW in VEH, increase thread stack to 4 MB 2026-05-17 05:56:51 -04:00
packaging fix(linux): align desktop Icon= name with icon filename for AppImage 2026-03-18 15:16:33 -04:00
qr-demo Migrate About and docs links to Forgejo wiki 2026-03-07 02:42:08 -05:00
scripts fix(ci): replace UTF-8 em dashes with ASCII -- in ci-build.ps1 string literals 2026-05-15 05:44:14 -04:00
.gitattributes Track Whisper model with LFS 2026-01-05 22:10:57 -05:00
.gitignore gitignore: ignore *.dll files 2026-05-12 03:48:30 -04:00
.gitmodules build: add Fyne fork as submodule at _fyne 2026-03-20 13:54:13 -04:00
about_module.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
AGENTS.md docs: update all 6 docs for dev48 — theme system, transport migration, crash diagnostics, i18n persistence, signing 2026-05-16 15:37:13 -04:00
audio_module.go migrate audio_module buttons to MakePillButton 2026-05-16 16:52:50 -04:00
author_dvd_functions.go migrate author_menu_preview, author_dvd_functions, convert_player_native buttons to MakePillButton 2026-05-17 00:16:33 -04:00
author_menu.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
author_menu_preview.go migrate author_menu_preview, author_dvd_functions, convert_player_native buttons to MakePillButton 2026-05-17 00:16:33 -04:00
author_module.go refactor(buttons): migrate author_module.go widget.NewButton → MakePillButton 2026-05-16 18:28:02 -04:00
burn_linux.go fix(burn): replace stubs with real burn implementations 2026-04-04 13:43:54 -04:00
burn_module.go migrate burn_module buttons to MakePillButton 2026-05-16 16:53:45 -04:00
burn_windows.go fix(burn): replace stubs with real burn implementations 2026-04-04 13:43:54 -04:00
compare_module.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
convert_player_native.go migrate author_menu_preview, author_dvd_functions, convert_player_native buttons to MakePillButton 2026-05-17 00:16:33 -04:00
deps_dialog_module.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
DONE.md docs: update all 6 docs for dev48 — theme system, transport migration, crash diagnostics, i18n persistence, signing 2026-05-16 15:37:13 -04:00
enhancement_module.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
file_manager_module.go migrate file_manager_module buttons to MakePillButton 2026-05-16 16:55:10 -04:00
filters_module.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
flags_embed.go Feat: flag icons in Settings language selector 2026-05-03 03:19:51 -04:00
font_preference.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
font_preference_stub.go Change font toggle to dropdown with IBM Plex Mono / VCR OSD Mono options 2026-04-22 15:08:43 -04:00
fonts_embed.go feat(player): SMPTE colour bars idle state and click-to-load dialog 2026-04-11 21:35:57 -04:00
FyneApp.toml Bump version to v0.1.1-dev48 for next tester download 2026-05-14 23:20:09 -04:00
go.mod Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
go.sum feat(tooltips): add tooltip support to module tiles 2026-04-05 19:33:35 -04:00
icons_embed.go dev33: fix embed paths and import cycle 2026-03-13 13:54:16 -04:00
inspect_module.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
inspect_module_stub.go build: always compile with native_media tag; fix inspect stub message 2026-03-22 01:26:35 -04:00
locale_module.go fix(i18n): remember Inuktitut script preference across language switches 2026-05-15 06:00:31 -04:00
logo_embed.go dev33: fix embed paths and import cycle 2026-03-13 13:54:16 -04:00
main.go align queue and benchmark module header/footer bars with other modules; use MakePillButton, NewTitleLabel, accentColor, and statsBar 2026-05-17 05:16:59 -04:00
mainmenu_module.go migrate mainmenu_module aboutBtn to MakePillButton 2026-05-16 16:55:47 -04:00
merge_config.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
naming_helpers.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
native_media.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
native_media_stub.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
platform.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
player_module.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
queue_module.go align queue and benchmark module header/footer bars with other modules; use MakePillButton, NewTitleLabel, accentColor, and statsBar 2026-05-17 05:16:59 -04:00
README.md feat: implement Archivist round-trip (multitrack rip/load/author) 2026-03-15 23:47:36 -04:00
rip_module.go refactor(buttons): migrate author_module.go widget.NewButton → MakePillButton 2026-05-16 18:28:02 -04:00
settings_module.go fix(update): remove per-transfer deadline from binary download 2026-05-17 03:33:46 -04:00
subtitles_module.go refactor(buttons): migrate author_module.go widget.NewButton → MakePillButton 2026-05-16 18:28:02 -04:00
thumbnail_config.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
thumbnail_module.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
TODO.md docs: update all 6 docs for dev48 — theme system, transport migration, crash diagnostics, i18n persistence, signing 2026-05-16 15:37:13 -04:00
update_linux.go fix(update): use helper script for Linux binary replacement 2026-04-13 21:00:54 -04:00
update_windows.go fix(update): retry file copy until lock releases instead of fixed 2s sleep 2026-04-07 16:58:34 -04:00
upscale_module.go Fix Go module path: git.leaktechnologies.dev/stu/VideoTools → git.leaktechnologies.dev/leak_technologies/VideoTools 2026-05-15 02:42:43 -04:00
VERSION Bump version to v0.1.1-dev48 for next tester download 2026-05-14 23:20:09 -04:00
VideoTools_test.exe docs: update all 6 docs for dev48 — theme system, transport migration, crash diagnostics, i18n persistence, signing 2026-05-16 15:37:13 -04:00

VideoTools - Video Processing Suite

What is VideoTools?

VideoTools is a desktop video processing application built on FFmpeg. It provides a graphical interface for converting, inspecting, and preparing video.

It includes tools for video conversion, batch processing, media inspection, merging, filtering, audio extraction, thumbnail generation, ripping, DVD-compliant output, and upscaling where supported.

Project Status

This project is under active development, and many documented features are not yet implemented.

For a clear, up-to-date overview of what is complete, in progress, and planned, please see our Project Status Page. This document provides the most accurate reflection of the project's current state.

Builds

Capabilities

  • Video conversion via FFmpeg
  • Queue-based batch processing
  • Media inspection and analysis
  • Merge, filters, and audio extraction
  • Thumbnail generation
  • Compare playback
  • DVD authoring, encoding, and ripping tools
  • Settings for language and hardware acceleration
  • Optional AI-assisted upscaling (where supported)

Codecs and Frame Rates

Preset output formats:

  • MP4: H.264, H.265, AV1
  • MOV: H.264, H.265, ProRes
  • MKV: Remux (copy), H.265, AV1
  • WebM: VP9, AV1
  • DVD: NTSC/PAL (MPEG-2)

Frame rate targets:

  • Source, 23.976, 24, 25, 29.97, 30, 50, 59.94, 60
  • Optional motion interpolation for frame-rate changes
  • DVD presets lock to NTSC (29.97) or PAL (25) frame rates

Quick Start

Installation (One Command)

bash scripts/linux/install.sh

The installer will build, install, and set up shell aliases.

After installation:

source ~/.bashrc    # (or ~/.zshrc, or ~/.config/fish/config.fish)
VideoTools

Alternative: Developer Setup

If you already have the repo cloned (dev workflow):

cd /path/to/VideoTools
bash scripts/linux/build.sh
bash scripts/linux/run.sh

For detailed installation options, troubleshooting, and platform-specific notes, see INSTALLATION.md. For upcoming work and priorities, see docs/ROADMAP.md.

DVD Workflow (Optional)

  1. Start VideoToolsVideoTools
  2. Load a video → Drag & drop into Convert module
  3. Select format → Choose "DVD-NTSC (MPEG-2)" or "DVD-PAL (MPEG-2)"
  4. Choose aspect → Select 4:3 or 16:9
  5. Name output → Enter filename (without .mpg)
  6. Queue → Click "Add to Queue"
  7. Encode → Click "View Queue" → "Start Queue"
  8. Export → Use the .mpg file in DVDStyler

Documentation

Getting Started:

For Users:

  • BUILD_AND_RUN.md - How to build and run VideoTools
  • DVD_USER_GUIDE.md - Complete guide to DVD encoding

For Developers:

  • DVD_IMPLEMENTATION_SUMMARY.md - Technical specifications
  • INTEGRATION_GUIDE.md - System architecture and integration
  • QUEUE_SYSTEM_GUIDE.md - Queue system reference
  • localization-policy.md - Localization strategy and implementation guide

Localization

VideoTools ships with built-in support for multiple languages. Switch language in Settings → General. Aboriginal Sans is embedded for proper rendering of Unified Canadian Aboriginal Syllabics (Inuktitut).

Language Code Script Coverage
English (Canada) en-CA Latin 100% — source of truth
French (Canada) fr-CA Latin 98%
Inuktitut iu Syllabics + Latin toggle 11% — in progress

Coverage is measured against the en-CA field count. The iu translation is an ongoing community effort; untranslated strings fall back to English automatically.

Requirements

  • Go 1.21+ (for building)
  • FFmpeg (for video encoding)
  • X11 or Wayland display server (for GUI)

System Architecture

VideoTools has a modular architecture:

  • internal/convert/ - DVD and video encoding
  • internal/queue/ - Job queue system
  • internal/ui/ - User interface components
  • internal/player/ - Media playback
  • scripts/ - Build and run automation

Commands

Build & Run

# One-time setup
source scripts/alias.sh    # bash
# source scripts/alias.zsh  # zsh
# source scripts/alias.fish # fish

# Run the application
VideoTools

# Force rebuild
VideoToolsRebuild

# Clean build artifacts
VideoToolsClean

Legacy (Direct commands)

# Build
go build -o VideoTools .

# Run
./VideoTools

# Run with debug logging
VIDEOTOOLS_DEBUG=1 ./VideoTools

# View logs
go run . logs

Troubleshooting

  • See BUILD_AND_RUN.md for detailed troubleshooting
  • Check videotools.log for detailed error messages
  • Use VIDEOTOOLS_DEBUG=1 for verbose logging

Getting Help

  1. Read BUILD_AND_RUN.md for setup issues
  2. Read docs/README.md for module and guide links
  3. Read DVD_USER_GUIDE.md for DVD-specific workflows
  4. Check videotools.log for error details
  5. Review documentation in project root