diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index f03f7881..3fbe4fbe 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -36,8 +36,7 @@ jobs: python-version: ["3.13"] env: - ffmpeg-version: "7.1" - IMAGEIO_FFMPEG_EXE: "" + ffmpeg-version: "8.1" steps: - uses: actions/checkout@v5 @@ -70,7 +69,11 @@ jobs: shell: bash run: | 7z e ffmpeg-${{ env.ffmpeg-version }}-full_build.7z ffmpeg.exe -r - echo "IMAGEIO_FFMPEG_EXE=`realpath ffmpeg.exe`" >> "$GITHUB_ENV" + export PATH="$(pwd):$PATH" + # moviepy.config resolves ffmpeg via imageio_ffmpeg at import time; `--no-binary` + # strips the bundled binary, so point at the GyanD ffmpeg we just extracted + # for both pytest and the subsequent pyinstaller step. + echo "IMAGEIO_FFMPEG_EXE=$(realpath ffmpeg.exe)" >> "$GITHUB_ENV" python -m pytest -vv - name: Build PySceneDetect diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml index 607940c2..98d31c43 100644 --- a/.github/workflows/publish-pypi.yml +++ b/.github/workflows/publish-pypi.yml @@ -60,7 +60,7 @@ jobs: core.setFailed(`Workflow "${workflowName}" did not succeed for tag ${tag}. Conclusion was "${workflowConclusions[workflowName].conclusion}". See: ${workflowConclusions[workflowName].html_url}`); allSuccess = false; } else { - console.log(`✅ Workflow "${workflowName}" succeeded for tag ${tag}.`); + console.log(`[OK] Workflow "${workflowName}" succeeded for tag ${tag}.`); } } diff --git a/.gitignore b/.gitignore index 72e26afb..ec426043 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ docs/_build/ website/build/ +scripts/local/ tests/resources/* *.mp4 *.jpg @@ -10,6 +11,7 @@ tests/resources/* *.m4v *.csv packaging/windows/.version_info +packaging/windows/installer/PySceneDetect.back*.aip benchmarks/BCC/*.mp4 *.txt benchmarks/RAI/*.mp4 diff --git a/README.md b/README.md index 6f1a5a18..29ecff0d 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,8 @@ Video Cut Detection and Analysis Tool **Quick Install**: - pip install scenedetect[opencv] --upgrade + pip install scenedetect --upgrade # standard (depends on opencv-python) + pip install scenedetect-headless --upgrade # headless servers (depends on opencv-python-headless) Requires ffmpeg/mkvmerge for video splitting support. Windows builds (MSI installer/portable ZIP) can be found on [the download page](https://scenedetect.com/download/). diff --git a/RELEASE-PLAN.md b/RELEASE-PLAN.md index b7fb3257..2e968bc8 100644 --- a/RELEASE-PLAN.md +++ b/RELEASE-PLAN.md @@ -11,10 +11,7 @@ Version referenced below as `X.Y[.Z]` - replace with the real version throughout ## 1. Code & version - [ ] Bump `__version__` in `scenedetect/__init__.py`. -- [ ] Bump `ProductVersion` in `packaging/windows/installer/PySceneDetect.aip` (must match `__version__` - `scripts/pre_release.py --release` asserts this). -- [ ] No `-dev` / pre-release suffix on the version string for a final release. - -> **Note:** `setup.cfg` reads the package version dynamically via `version = attr: scenedetect.__version__`, and `pyproject.toml` does not declare a `version` field. The single source of truth is `scenedetect/__init__.py`; the `.aip` is the only other place to keep in sync. +- [ ] Regular release: No `-dev` suffix or other, pre-release: has `-dev0`, `-dev1`, ... ## 2. Docs @@ -33,16 +30,28 @@ Version referenced below as `X.Y[.Z]` - replace with the real version throughout - [ ] Unit tests green locally and in CI: `pytest -vv` (should collect `-m 'not release'` by default). - [ ] `ruff check scenedetect/ tests/` and `ruff format --check scenedetect/ tests/` pass. -- [ ] Release test suite green: tag a disposable `vX.Y.Z-release-rc` or use `workflow_dispatch` on `.github/workflows/release-test.yml` - all 4 jobs (`static`, `release-tests`, `install-matrix`, `long-stress`) green across the 3-OS × 2-Python matrix. See `RELEASE-TEST-PLAN.md` for what the suite covers. +- [ ] Release test suite green: tag a disposable `vX.Y.Z-release-rc` or use `workflow_dispatch` on `.github/workflows/release-test.yml` - all 4 jobs (`static`, `release-tests`, `install-matrix`, `long-stress`) green across the 3-OS x 2-Python matrix. See `RELEASE-TEST-PLAN.md` for what the suite covers. - [ ] `resources` branch has the artifacts the release tests need (goldens under `tests/resources/goldens/`, `tests/resources/stress_15min.mp4`). Re-push if any golden was regenerated. - [ ] Manual smoke: fresh venv, `pip install .` (pulls opencv-python automatically) then `pip install .[pyav]`; run `scenedetect -i