Changelog¶
This page mirrors CHANGELOG.md in the repository. The project uses
git-tag-driven semantic versioning through hatch-vcs.
[Unreleased] — 2026-07-05 modernization pass¶
Fixed¶
- Encoding was broken against current
ffmpeg-python.encoder.pycalledstream.video.filter_complex(...), which does not exist in the installedffmpeg-python, so everycrop/trimencode raisedAttributeError. The crop/scale chain is now passed through as the-vfoutput option. ffmpeg.run(global_args=...)is not a valid keyword in the installedffmpeg-pythonand raisedTypeError. Global flags (-loglevel) are now attached to the stream via.global_args(...).- Letterbox auto-detection always found nothing in the default mode.
detect_letterbox_ffmpegran ffmpeg at-loglevel error, butcropdetectprints itscrop=result atinfolevel — so the parser saw an empty log whenever--verbosewas off. Detection now runs atinfo(captured internally, never shown to the user). - The parallel frame pipeline deadlocked. The reader emitted a single
Nonesentinel while up to four processor workers consumed the queue, so three workers looped forever and the collector hung. Each worker now re-posts the sentinel before exiting, so it propagates to every worker. This affectedtrim --subtitlesand the OpenCV letterbox fallback.
Added¶
- Test suite (
tests/, 48 tests): unit tests for size/dimension parsing, output-path generation, crop validation, the Numba detection kernels, the OpenCV frame processors, and encoder config selection; ffmpeg-gated integration tests that generate a synthetic letterboxed clip and exercisecrop,trim(explicit +--Letterbox), frame extraction, and the parallel pipeline end to end. .github/workflows/ci.yml— lint, format check, and tests on Python 3.10/3.11/3.12 with ffmpeg installed..github/workflows/release.yml— build and PyPI trusted publishing plus a GitHub release onv*tags.- Jekyll documentation under
docs/(home, usage, hardware acceleration) using the Just the Docs remote theme, plus a project icon atdocs/assets/icon.png. pytest/coverageconfiguration,pytest-covdev dependency,CLAUDE.md,PLAN.md,DEPENDENCIES.md.
Changed¶
- Documentation moved from Jekyll (
docs/*.md) to ProperDocs + MaterialX: sources insrc_docs/md/, config insrc_docs/mkdocs.yml, built bysrc_docs/build.shintodocs/and rebuilt on push by.github/workflows/docs.yml. Published at https://vexy.dev/vexy-vid/. build.shbuilds docs and/or the package (./build.sh [all|docs|package]);publish.shtags withgitnextver, builds and uploads withuv publish.release.ymlpublishes withskip-existing: true, so a version already uploaded bypublish.shdoes not fail the workflow..gitignorenow covers.DS_Store, agent scratch dirs (.swarm/,.opencode/), and the Jekyll build output.ruffconfig records intentional CLI-flag capitalization (--Halign,--Valign,--Letterbox) via targeted per-file ignores instead of leaving lint errors.
[1.0.4] and earlier¶
Initial package: crop and trim commands, PyAV frame extraction, Numba
pixel analysis, hardware-encoder detection, hatch-vcs packaging.