Skip to content

Commit a1ca4bc

Browse files
committed
[docs] Remove scenedetect-core references
scenedetect-core 0.7.1 has been yanked from PyPI and the package discontinued: pip cannot safely support multiple packages installing the same module files, and restructuring the published packages around a shared core would break in-place upgrades. See #558. Update install docs to cover only scenedetect/scenedetect-headless and note the discontinuation in the changelog.
1 parent d40629d commit a1ca4bc

20 files changed

Lines changed: 89 additions & 90 deletions

.github/workflows/build.yml

Lines changed: 7 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ jobs:
8888
- name: Build Package
8989
shell: bash
9090
run: |
91-
# Builds scenedetect-core plus the scenedetect/scenedetect-headless variants.
91+
# Builds the scenedetect/scenedetect-headless packages.
9292
python packaging/build_all.py
9393
echo "scenedetect_version=`python -c \"import scenedetect; print(scenedetect.__version__.replace('-', '.'))\"`" >> "$GITHUB_ENV"
9494
@@ -132,40 +132,16 @@ jobs:
132132
scenedetect -i tests/resources/testvideo.mp4 -b opencv time --end 2s
133133
scenedetect -i tests/resources/testvideo.mp4 -b pyav time --end 2s
134134
135-
- name: Smoke Test Package (Core Only)
136-
shell: bash
137-
run: |
138-
python -m venv .smoke-core
139-
VENV_BIN=.smoke-core/bin
140-
[ -d .smoke-core/Scripts ] && VENV_BIN=.smoke-core/Scripts
141-
source "$VENV_BIN/activate"
142-
pip install "dist/scenedetect_core-${{ env.scenedetect_version }}-py3-none-any.whl"
143-
# Core declares no OpenCV variant; importing without one must raise the friendly error.
144-
python -c "
145-
try:
146-
import scenedetect
147-
raise AssertionError('import should fail without cv2')
148-
except ModuleNotFoundError as ex:
149-
assert ex.name == 'cv2', ex
150-
"
151-
# Any variant satisfies the library; core must not drag in CLI deps or the entry point.
152-
pip install opencv-python-headless
153-
python -c "import scenedetect; print(scenedetect.__version__)"
154-
python -c "import importlib.util as u; assert u.find_spec('click') is None, 'click must not be a core dependency'"
155-
python -c "import importlib.util as u; assert u.find_spec('tqdm') is None, 'tqdm must not be a core dependency'"
156-
if command -v scenedetect >/dev/null 2>&1; then
157-
echo "The scenedetect entry point must not be installed by scenedetect-core"
158-
exit 1
159-
fi
160-
161135
- name: Smoke Test Package (Upgrade From 0.7)
162136
shell: bash
163137
run: |
164-
# All three packages ship the code (no metapackage layering) precisely so that
165-
# in-place upgrades from pre-0.7.1 installs keep working - a code-carrying dist
138+
# Both packages ship the code (no metapackage layering) precisely so that
139+
# in-place upgrades from older installs keep working - a code-carrying dist
166140
# flipped to a code-free metapackage would break here, since uninstalling the old
167-
# version deletes module files a dependency just wrote. Keep this as a regression
168-
# guard for that failure mode (https://scenedetect.com/issues/558).
141+
# version deletes module files a dependency just wrote. This is also why the
142+
# short-lived scenedetect-core (published in 0.7.1 only) was yanked rather than
143+
# layered on. Keep this as a regression guard for that failure mode
144+
# (https://scenedetect.com/issues/558).
169145
python -m venv .smoke-upgrade
170146
VENV_BIN=.smoke-upgrade/bin
171147
[ -d .smoke-upgrade/Scripts ] && VENV_BIN=.smoke-upgrade/Scripts

.github/workflows/publish-pypi.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ jobs:
103103
run-id: ${{ steps.resolve.outputs.run-id }}
104104

105105
- name: List artifact contents
106-
# Expect 6 files: sdist + wheel for each of scenedetect-core, scenedetect,
107-
# and scenedetect-headless. All three projects publish from this one step;
106+
# Expect 4 files: sdist + wheel for each of scenedetect and
107+
# scenedetect-headless. Both projects publish from this one step;
108108
# each needs a trusted publisher configured on PyPI/TestPyPI for this workflow.
109109
run: ls -la pkg/
110110

.github/workflows/release-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
fi
4949
- name: Build and Check
5050
run: |
51-
# Builds scenedetect-core plus the scenedetect/scenedetect-headless variants.
51+
# Builds the scenedetect/scenedetect-headless packages.
5252
python packaging/build_all.py
5353
# Glob by extension: dist/ also holds tracked website assets (dist/logo/),
5454
# which `twine check dist/*` would reject as an unknown distribution.

.github/workflows/release.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,5 @@ jobs:
213213
echo "Release $TAG verified and published:"
214214
echo " https://pypi.org/project/scenedetect/$VERSION/"
215215
echo " https://pypi.org/project/scenedetect-headless/$VERSION/"
216-
echo " https://pypi.org/project/scenedetect-core/$VERSION/"
217216
echo " https://github.com/$GH_REPO/pkgs/container/pyscenedetect"
218217
fi

RELEASE-PLAN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ Optional: version referenced below as `X.Y[.Z]` - replace with the real version
5454
## 6. Publish & Release Checks
5555

5656
- [ ] Dispatch `release.yml` (Release Orchestrator) with the release tag while the Github release is still a **draft**. It runs the verify-then-publish ladder (MSI install/upgrade test -> TestPyPI -> publish Github release -> PyPI -> Docker), verifying each stage before the next; `verify-only` stops before anything goes public. See the header of `release.yml` for details.
57-
- [ ] Verify all three projects: https://pypi.org/project/scenedetect/, https://pypi.org/project/scenedetect-headless/, and https://pypi.org/project/scenedetect-core/.
57+
- [ ] Verify both projects: https://pypi.org/project/scenedetect/ and https://pypi.org/project/scenedetect-headless/.
5858
- [ ] Deploy website: `generate-website.yml`
5959
- [ ] Deploy docs: `generate-docs.yml`
6060
- [ ] Merge release branch back into `main`, verify `docs/LATEST_VERSION` is correct

docs/api.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ Most types/functions are also available directly from the `scenedetect` package
5858

5959
.. code:: python
6060
61-
scenedetect<0.8
61+
scenedetect~=0.7
6262
6363
6464
.. _scenedetect-quickstart:

docs/cli.rst

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -312,13 +312,13 @@ Options
312312

313313
Max distance between hash values (0.0 to 1.0) of adjacent frames. Lower values are more sensitive to changes.
314314

315-
Default: ``0.395``
315+
Default: ``0.35``
316316

317317
.. option:: -s SIZE, --size SIZE
318318

319319
Size of square of low frequency data to include from the discrete cosine transform.
320320

321-
Default: ``16``
321+
Default: ``8``
322322

323323
.. option:: -l FRAC, --lowpass FRAC
324324

@@ -363,13 +363,13 @@ Options
363363

364364
Max difference (0.0 to 1.0) between histograms of adjacent frames. Lower values are more sensitive to changes.
365365

366-
Default: ``0.05``
366+
Default: ``0.2``
367367

368368
.. option:: -b NUM, --bins NUM
369369

370370
The number of bins to use for the histogram calculation.
371371

372-
Default: ``256``
372+
Default: ``128``
373373

374374
.. option:: -m TIMECODE, --min-scene-len TIMECODE
375375

docs/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ PySceneDetect Documentation
88

99
Welcome to the PySceneDetect docs. The docs are split into two separate parts: one for the command-line interface (the `scenedetect` command) and another for the Python API (the `scenedetect` module).
1010

11-
You can install the latest release of PySceneDetect by running `pip install scenedetect` (or `pip install scenedetect-headless` on servers without GUI libraries), or by downloading the Windows build from `scenedetect.com/download <http://www.scenedetect.com/download/>`_. Library-only installs that need a specific OpenCV variant (e.g. `opencv-contrib-python`) can use `pip install scenedetect-core`, which has no CLI dependencies and lets you supply any OpenCV package. PySceneDetect requires `ffmpeg` or `mkvmerge` for video splitting support.
11+
You can install the latest release of PySceneDetect by running `pip install scenedetect` (or `pip install scenedetect-headless` on servers without GUI libraries), or by downloading the Windows build from `scenedetect.com/download <http://www.scenedetect.com/download/>`_. PySceneDetect requires `ffmpeg` or `mkvmerge` for video splitting support.
1212

1313
.. note::
1414

packaging/build_all.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,23 @@
77
#
88
# Copyright (C) 2026 Brandon Castellano <http://www.bcastell.com>.
99
#
10-
"""Builds all three PySceneDetect distributions into dist/:
10+
"""Builds the two published PySceneDetect distributions into dist/:
1111
12-
- scenedetect-core: minimal dependencies (numpy only, no OpenCV variant declared,
13-
no console script) - built from the repo root pyproject.toml
14-
- scenedetect / scenedetect-headless: the same code plus an OpenCV variant, the
15-
CLI dependencies, and the `scenedetect` console script
12+
- scenedetect / scenedetect-headless: the full package (code, an OpenCV variant,
13+
the CLI dependencies, and the `scenedetect` console script), produced by
14+
temporarily swapping packaging/variants/pyproject-<name>.toml into the repo
15+
root (restored afterwards, even on failure)
1616
17-
All three are code-carrying packages built from the repo root, so they share the
18-
same source, readme, and dynamic version. The scenedetect / scenedetect-headless
19-
variants are produced by temporarily swapping packaging/variants/pyproject-<name>.toml
20-
into the repo root (restored afterwards, even on failure).
17+
Both are standalone code-carrying packages built from the repo root, so they share
18+
the same source, readme, and dynamic version. The root pyproject.toml
19+
(`scenedetect-core`) is a development/local-install configuration only and is NOT
20+
built or published here: scenedetect-core 0.7.1 was briefly published and then
21+
yanked - layering packages over a shared core dist is unsafe with pip (co-installed
22+
variants double-own files, and converting an existing code-carrying name to a
23+
metapackage breaks in-place upgrades; see https://scenedetect.com/issues/558).
2124
2225
Requires `build` (pip install build). Fails if dist/ ends up with any wheel/sdist
23-
besides the six expected artifacts, so clear stale build artifacts from dist/ first.
26+
besides the four expected artifacts, so clear stale build artifacts from dist/ first.
2427
(Other dist/ contents are ignored - e.g. dist/logo/ is tracked website assets.)
2528
"""
2629

@@ -63,7 +66,6 @@ def main() -> None:
6366
"and re-run."
6467
)
6568

66-
build() # scenedetect-core from the unmodified repo root.
6769
try:
6870
for name in VARIANTS:
6971
variant = (ROOT / "packaging" / "variants" / f"pyproject-{name}.toml").read_text(
@@ -76,7 +78,7 @@ def main() -> None:
7678
PYPROJECT.write_text(original, encoding="utf-8")
7779

7880
expected = set()
79-
for name in ("scenedetect-core", *VARIANTS):
81+
for name in VARIANTS:
8082
normalized = name.replace("-", "_")
8183
expected.add(f"{normalized}-{version}.tar.gz")
8284
expected.add(f"{normalized}-{version}-py3-none-any.whl")

packaging/package-info.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Github Repo: https://github.com/Breakthrough/PySceneDetect/
2525

2626
Install: ``pip install --upgrade scenedetect`` (or ``scenedetect-headless`` for servers)
2727

28-
Packages: `scenedetect <https://pypi.org/project/scenedetect/>`_ (CLI + ``opencv-python``), `scenedetect-headless <https://pypi.org/project/scenedetect-headless/>`_ (CLI + ``opencv-python-headless``), and `scenedetect-core <https://pypi.org/project/scenedetect-core/>`_ (library only, minimal dependencies, bring your own OpenCV variant). All provide the same ``scenedetect`` module -- install only one.
28+
Packages: `scenedetect <https://pypi.org/project/scenedetect/>`_ (CLI + ``opencv-python``) and `scenedetect-headless <https://pypi.org/project/scenedetect-headless/>`_ (CLI + ``opencv-python-headless``). Both provide the same ``scenedetect`` module -- install only one.
2929

3030
----------------------------------------------------------
3131

0 commit comments

Comments
 (0)