Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion scenedetect/_cli/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ def __init__(self):
self.scene_manager: SceneManager | None = None
self.stats_manager: StatsManager | None = None
self.save_images: bool = False # True if the save-images command was specified
self.save_images_result: ty.Any = (None, None) # Result of save-images used by save-html
self.save_images_result: ty.Any = None # Result of save-images used by save-html

# Input:
self.video_stream: VideoStream | None = None
Expand Down
4 changes: 2 additions & 2 deletions tests/release/test_cli_permutations.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,8 @@ def test_cli_save_qp_smoke(test_video_file, tmp_path):
def test_cli_save_html_smoke(test_video_file, tmp_path):
"""save-html replaces the deprecated export-html and produces an HTML report.

Note: save-html lacks its own --output option and ignores the global -o, so the
file is routed via --filename with an absolute path.
Note: save-html lacks its own --output option, so the file is routed via --filename
with an absolute path.
"""
out_html = tmp_path / "scenes.html"
result = _run(
Expand Down
9 changes: 8 additions & 1 deletion tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -672,9 +672,16 @@ def test_cli_save_html(tmp_path: Path):
"""Test `save-html` command."""
base_command = "-i {VIDEO} -s {STATS} time {TIME} {DETECTOR} {COMMAND}"
assert invoke_scenedetect(base_command, COMMAND="save-html", output_dir=tmp_path) == 0
# The global -o option should also apply when no images are saved.
assert (
invoke_scenedetect(base_command, COMMAND="save-html --no-images", output_dir=tmp_path) == 0
invoke_scenedetect(
base_command,
COMMAND="save-html --no-images --filename no-images.html",
output_dir=tmp_path,
)
== 0
)
assert (tmp_path / "no-images.html").exists()
# Ensure we can still call the now deprecated export-html command.
assert invoke_scenedetect(base_command, COMMAND="export-html", output_dir=tmp_path) == 0
# TODO: Check for existence of HTML & image files.
Expand Down
1 change: 1 addition & 0 deletions website/pages/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

- [bugfix] OTIO exports use the full source duration when provided, including from the CLI, instead of declaring a fixed 1,980-frame duration. The available range remains unspecified when the duration is unknown. Scene source ranges are unchanged. [#580](https://github.com/Breakthrough/PySceneDetect/pull/580)
- [bugfix] The OpenCV backend keeps `position` on the last frame after reaching the end of a VFR video, so the last scene no longer ends early (or before it starts) [#561](https://github.com/Breakthrough/PySceneDetect/issues/561)
- [bugfix] `save-html --no-images` now writes to the global `-o`/`--output` directory instead of the working directory [#583](https://github.com/Breakthrough/PySceneDetect/pull/583)

### PySceneDetect 0.7.2 (October 11, 2026)

Expand Down