Skip to content

Releases: iTroy0/WebP-Converter

v2.2

09 Jun 23:55

Choose a tag to compare

WebP → Video Converter v2.2

Major correctness + UX release. Update strongly recommended.

Fixed

  • Frame timing: conversions now preserve each frame's real duration (variable frame rate). Previously every file was flattened to a constant FPS — animations with mixed frame delays played too fast/slow. Toggle "Use original frame timing" to switch back to forced FPS.
  • Aspect ratio: resolution presets (480p/720p/1080p/4K) fit inside the target box instead of stretching. Combining files with different sizes now letterboxes instead of distorting.
  • Needless re-encode resize on "Same Resolution" removed (sharper output).
  • Paths containing quotes no longer break ffmpeg; last frame duration no longer dropped.
  • MP4 gets +faststart (instant streaming start); WebM/VP9 encoding is much faster (row-mt, deadline good).
  • GIF output properly quantized with transparency support and true per-frame timing; combining into GIF now allowed.
  • No more orphan ffmpeg processes or corrupt partial files when cancelling or closing mid-conversion.
  • Crash fixes: deleted queue files, rapid preview switching, close-during-convert, non-Windows app icon.
  • Decode errors now surface in the UI (previously invisible in windowed builds) and the batch continues past bad files.

Added

  • Drag & drop files or whole folders into the window
  • Real encode progress (live percentage from ffmpeg)
  • "Add Folder" button
  • Preview: checkerboard behind transparency, true frame timing, frame/duration info, Space to pause
  • Clean output filenames: name.mp4, name (1).mp4 — no more random suffixes
  • In-window stacked toasts; success toast click opens the output folder
  • Ctrl+Enter to start conversion; window size remembered between sessions
  • Launcher scripts now find Python reliably and show dependency errors instead of hiding them

Download

  • Windows: WebP.Converter.exe below — portable, no install needed
  • Linux/macOS: run from source (./start.sh), see README

v2.1

11 Apr 07:37

Choose a tag to compare

What's new

Bug fixes

  • Fix thread-safety: snapshot all tkinter vars on main thread before worker dispatch
  • Fix video clip resource leak (ffmpeg process not closed on error)
  • Fix GIF export leaking file handles
  • Fix progress bar inaccuracy in combine mode
  • Fix preview compositing ignoring disposal methods
  • Clamp custom resolution to 7680px max to prevent memory exhaustion
  • Validate and sanitize all values loaded from settings.json
  • Move settings file to platform config dir (%APPDATA% / ~/.config)
  • Pin dependency versions in requirements.txt

UX improvements

  • Cancel button (Escape) that kills ffmpeg instantly mid-encode
  • Per-file status indicators in queue (⟳ converting / ✓ done / ✕ error)
  • Keyboard shortcuts: Ctrl+O add files, Delete remove, Escape cancel
  • Click-to-toggle preview playback
  • File count shown in queue header
  • Custom resolution fields hidden when not in use
  • Controls locked during conversion
  • Toast notifications clamped to screen bounds

Architecture

  • Replaced moviepy with direct ffmpeg via imageio-ffmpeg (instant cancel, smaller build)
  • Cross-platform: Linux/macOS launcher (start.sh), platform-adaptive fonts
  • App icon added

WebP Converter v1.0 – Stable

24 Feb 03:29
99b389d

Choose a tag to compare

🔧 Code Quality & Architecture
Double threading eliminated — the original code had start_conversion_thread spawning a thread that called start_conversion, which spawned another thread. Collapsed into a single clean flow.
Thread safety fixed — all UI widget updates from background threads (progress bar, labels, button state) are now routed through self.after(0, ...) to prevent crashes.
_ui() helper — added a unified method to safely schedule any UI call from a background thread, accepting both *args and **kwargs.
Conversion lock — clicking Start during an active conversion shows a toast instead of launching a second conversion. The button is disabled and changes text to "⏳ CONVERTING…" during the process.
Settings persistence expanded — originally only fps, format, and output folder were saved. Now also saves CRF and resolution preset across sessions.
Temp directory — replaced hardcoded temp_frames/ folder in the working directory with tempfile.TemporaryDirectory, which is guaranteed to clean up even if an error occurs.

🐛 Bug Fixes
set_selected_file no longer rebuilds the entire file list — the original rebuilt all rows on every click. Now it only updates the two affected rows' highlight colors.
Late-binding closure bug — on_enter/on_leave/on_click handlers in the file list now use default argument capture to avoid all referencing the last loop value.
self.after(10) with no callback — was a no-op that did nothing useful but was being called from a background thread unsafely. Removed.
GIF + combine validation — now fires before any frame extraction begins, not after wasting time extracting everything.
Even dimensions enforced — libx264 hard-requires width and height to be divisible by 2. Added make_even() helper applied to all resize paths (custom, preset, and Same Resolution) so the encoder never rejects the output.
from moviepy import ImageSequenceClip — updated to match moviepy v2.x import style (was moviepy.editor for v1.x).
CTkImage for preview — replaced ImageTk.PhotoImage with ctk.CTkImage to eliminate HiDPI scaling warnings on every frame render.
Preview aspect ratio — was forcing every image to 400×400. Now uses aspect_fit() to scale within bounds while preserving the original ratio.
Preview loads on a background thread — large animated WebPs no longer freeze the UI while loading frames.
Preview after IDs tracked — cancelled properly via self.after_cancel() to prevent orphaned callbacks stacking up.

✨ Features Added
Files append instead of replace — picking files a second time adds to the queue, skipping duplicates. The original wiped the list on every file selection.
Output folder displayed in UI — a label always shows where files will be saved, updates immediately when changed.
Remove file auto-previews next — removing a file from the queue automatically loads a preview of the next available file instead of going blank.
Empty queue placeholder — shows "No files added yet" text instead of a blank scrollable area.
File metadata in queue rows — each row now shows filename, file size, dimensions, frame count, and estimated duration.
Status indicator in title bar — a ● READY / CONVERTING / DONE / ERROR label in the top-right corner reflects the current app state with color coding.
Left panel render fix — CTkScrollableFrame has a known bug where children don't render until the user manually scrolls. Fixed by nudging the canvas scroll position 100ms after startup.
Mixed resolution warning on combine — when combining files of different sizes, an amber toast tells the user exactly what resolution everything is being normalized to, rather than silently downscaling.

🎨 UI Redesign
Two-column layout — settings on the left (scrollable), preview + queue on the right, instead of everything stacked vertically.
Design token system — all colors defined as named constants (ACCENT, CARD, BG, RED, GREEN, etc.) at the top of the file for easy theming.
Cyan accent palette (#00c2d4) — applied consistently to sliders, buttons, selected rows, section headers, and the status indicator.
Section cards — each logical group (FILES, FORMAT & RESOLUTION, ENCODING, CONVERT, PREVIEW, QUEUE) is wrapped in a dark card with a rounded border and an accent-colored header with a hairline divider.
Slider rows — live value displayed inline on the right side of the label in monospace bold, no separate label below.
Convert button — larger (46px tall), black text on cyan, visually disabled state during conversion.
Segoe UI + Consolas typography — replaced Arial throughout. Technical metadata (paths, dimensions, frame counts) uses Consolas monospace.
Queue row selection — selected file gets a cyan border + dark teal background. Hover state gives a subtle highlight on unselected rows. Remove button only shows red on hover.
Screenshot 2026-02-24 061126

WebP_Converter 0.3

03 May 19:32
f28bde2

Choose a tag to compare

1.📊Enhanced Progress Bar
a. Implemented a smooth, animated progress bar that updates in b. real-time during the conversion process.
c. Displays detailed status messages, such as "Extracting frames" and "Encoding video," to inform users of the current operation.

2.📽️Custom Resolution Support
a. Added the ability for users to specify custom output resolutions.
b. Users can input desired width and height values for the output video or GIF.

image

WebP_Converter 0.2

30 Apr 09:20
256b7c7

Choose a tag to compare

✅ 1. Added GIF Export Support
Your app can now export to .gif format, not just .mp4, .mkv, .webm.
adjusted arguments for best possible quality for .gif files

✅ 2. Adjustment to UI
You can now resize the window (both width and height freely).
Minimized restriction on minimum size.
Adjust spacings
Set some order into the UI

✅ 3. Widened the Animation Preview
Previews of selected WebPs are now bigger (400x400 instead of 300x300).

✅ 4. Multithreaded Frame Extraction
Frame saving during extraction now happens with multi-core (ThreadPoolExecutor).
Speeds up frame extraction dramatically for big WebPs.
increases bundled exe size but very useful

✅ 5. Resolution Preset Dropdown
A new dropdown was added to the settings panel with the label: “Resolution Preset:”
The options in the dropdown are:
"Same Resolution" (default)
"480p"
"720p"
"1080p"
"4K"
✅ 6. Compression Quality Setting (CRF Slider)
Added a CRF slider: range from 18 (high quality) to 30 (more compression)
defaults 22
✅ 7. FPS Slider range from 1 to 60
defaults 16
✅ 8. Bug fixes
Make open_output_folder() cross-platform it was windows only

Latest Version1

WebP_Converter_GUI 0.1

28 Apr 16:56
00aa7c7

Choose a tag to compare

Pre-release

Intial Release, expect some bugs