Download ComfyUI-ShotSplitter/tests/test_node_e2e.py from parlorsky/instara-models: direct link, hf CLI and curl.
- Browser
- Download file 3.23 kB
-
https://huggingface.co/parlorsky/instara-models/resolve/main/ComfyUI-ShotSplitter/tests/test_node_e2e.py
- Command line
-
hf download hf://parlorsky/instara-models/ComfyUI-ShotSplitter/tests/test_node_e2e.py
-
curl -L -o test_node_e2e.py https://huggingface.co/parlorsky/instara-models/resolve/main/ComfyUI-ShotSplitter/tests/test_node_e2e.py
3.23 kB
| """End-to-end: run the full Oz_ShotSplitter pipeline on real samples.""" | |
| import importlib.util | |
| import os | |
| import sys | |
| import pytest | |
| PACK_DIR = "/workspace/ComfyUI/custom_nodes/ComfyUI-ShotSplitter" | |
| def _load_pack(): | |
| """Load the hyphenated-name pack as a proper Python package.""" | |
| if "/workspace/ComfyUI" not in sys.path: | |
| sys.path.insert(0, "/workspace/ComfyUI") | |
| if "ComfyUI_ShotSplitter" in sys.modules: | |
| return sys.modules["ComfyUI_ShotSplitter"] | |
| spec = importlib.util.spec_from_file_location( | |
| "ComfyUI_ShotSplitter", | |
| os.path.join(PACK_DIR, "__init__.py"), | |
| submodule_search_locations=[PACK_DIR], | |
| ) | |
| mod = importlib.util.module_from_spec(spec) | |
| sys.modules["ComfyUI_ShotSplitter"] = mod | |
| spec.loader.exec_module(mod) | |
| return mod | |
| THREESHOT = "test_3shots.mp4" | |
| REEL = "reel_multishot.mp4" | |
| def test_e2e_3shot_synthetic_produces_three_clips(): | |
| pack = _load_pack() | |
| node = pack.Oz_ShotSplitter() | |
| out = node.run( | |
| video=THREESHOT, | |
| detector="ensemble", | |
| min_shot_seconds=0.3, | |
| merge_window_frames=3, | |
| adaptive_threshold=3.0, | |
| transnet_threshold=0.5, | |
| output_subfolder="shots/e2e_syn_test", | |
| filename_prefix="shot", | |
| crf=23, | |
| preset="veryfast", | |
| keep_audio=True, | |
| ) | |
| assert "result" in out | |
| clip_paths, first_frames, shot_count, manifest_json = out["result"] | |
| print(f"\n[E2E synthetic] shot_count={shot_count}") | |
| print(f"[E2E synthetic] clip_paths={clip_paths}") | |
| assert shot_count == 3, f"expected 3 shots for synthetic red/green/blue, got {shot_count}" | |
| assert len(clip_paths) == 3 | |
| assert first_frames.shape[0] == 3 | |
| assert all(os.path.isfile(p) for p in clip_paths) | |
| import json as _json | |
| manifest = _json.loads(manifest_json) | |
| assert len(manifest) == 3 | |
| # Verify the ui.videos payload is populated | |
| assert "ui" in out | |
| assert "videos" in out["ui"] | |
| assert len(out["ui"]["videos"]) == 3 | |
| for v in out["ui"]["videos"]: | |
| assert v["filename"].endswith(".mp4") | |
| assert v["subfolder"] == "shots/e2e_syn_test" | |
| assert v["type"] == "output" | |
| def test_e2e_real_reel_produces_two_or_more_clips(): | |
| pack = _load_pack() | |
| node = pack.Oz_ShotSplitter() | |
| out = node.run( | |
| video=REEL, | |
| detector="ensemble", | |
| min_shot_seconds=0.5, | |
| merge_window_frames=3, | |
| adaptive_threshold=3.0, | |
| transnet_threshold=0.5, | |
| output_subfolder="shots/e2e_reel_test", | |
| filename_prefix="shot", | |
| crf=23, | |
| preset="veryfast", | |
| keep_audio=True, | |
| ) | |
| clip_paths, first_frames, shot_count, manifest_json = out["result"] | |
| print(f"\n[E2E reel] shot_count={shot_count}") | |
| print(f"[E2E reel] clip_paths={clip_paths}") | |
| assert shot_count >= 2, f"expected >=2 shots in reel, got {shot_count}" | |
| assert all(os.path.isfile(p) for p in clip_paths) | |
| assert first_frames.shape[0] == shot_count | |