""" Quick setup verification script for Video Highlight Extractor Run this to verify your installation is complete. """ import sys def check_dependencies(): """Check if all required dependencies are installed.""" print("šŸ” Checking dependencies...\n") dependencies = { 'streamlit': 'Streamlit framework', 'cv2': 'OpenCV', 'torch': 'PyTorch', 'transformers': 'Hugging Face Transformers', 'ultralytics': 'YOLOv8', 'clip': 'OpenAI CLIP', 'PIL': 'Pillow', 'numpy': 'NumPy', 'sklearn': 'scikit-learn' } missing = [] for module, name in dependencies.items(): try: if module == 'cv2': import cv2 elif module == 'clip': import clip else: __import__(module) print(f"āœ… {name}") except ImportError: print(f"āŒ {name} - NOT FOUND") missing.append(name) print() # Check optional dependencies print("šŸ“¦ Optional dependencies:") try: from decord import VideoReader print("āœ… Decord (GPU-accelerated video decoding)") except ImportError: print("āš ļø Decord - Not installed (will use OpenCV fallback)") try: from scenedetect import detect print("āœ… PySceneDetect (Scene detection)") except ImportError: print("āš ļø PySceneDetect - Not installed (will use fallback)") print() # Check CUDA print("šŸ–„ļø GPU Support:") try: import torch if torch.cuda.is_available(): print(f"āœ… CUDA available - {torch.cuda.get_device_name(0)}") print(f" CUDA version: {torch.version.cuda}") else: print("āš ļø CUDA not available - Will use CPU") except: print("āš ļø Could not check CUDA status") print() # Check FFmpeg print("šŸŽ¬ FFmpeg:") import subprocess try: result = subprocess.run( ['ffmpeg', '-version'], capture_output=True, text=True, timeout=5 ) if result.returncode == 0: version_line = result.stdout.split('\n')[0] print(f"āœ… {version_line}") else: print("āŒ FFmpeg found but error checking version") missing.append("FFmpeg (functional)") except FileNotFoundError: print("āŒ FFmpeg - NOT FOUND in PATH") missing.append("FFmpeg") except Exception as e: print(f"āš ļø FFmpeg check failed: {e}") print("\n" + "="*60) if missing: print(f"\nāŒ Missing dependencies: {', '.join(missing)}") print("\nšŸ“ To install missing dependencies:") print(" pip install -r requirements.txt") if "FFmpeg" in missing: print("\nšŸ“ To install FFmpeg:") print(" Windows: choco install ffmpeg") print(" Linux: sudo apt-get install ffmpeg") print(" Mac: brew install ffmpeg") return False else: print("\nāœ… All required dependencies installed!") print("\nšŸš€ Ready to run:") print(" streamlit run app.py") return True def verify_structure(): """Verify project structure is complete.""" print("\n" + "="*60) print("\nšŸ“ Verifying project structure...\n") from pathlib import Path required_files = [ 'app.py', 'requirements.txt', 'README.md', 'pipeline/__init__.py', 'pipeline/ingest.py', 'pipeline/segmentation.py', 'pipeline/aesthetic.py', 'pipeline/objects.py', 'pipeline/vlm.py', 'pipeline/scoring.py', 'pipeline/selector.py', 'utils/__init__.py', 'utils/config.py', 'utils/video_utils.py', 'utils/similarity.py' ] required_dirs = [ 'outputs/frames', 'outputs/video' ] missing_files = [] for file in required_files: if Path(file).exists(): print(f"āœ… {file}") else: print(f"āŒ {file} - MISSING") missing_files.append(file) for dir_path in required_dirs: if Path(dir_path).exists(): print(f"āœ… {dir_path}/") else: print(f"āŒ {dir_path}/ - MISSING") missing_files.append(dir_path) print() if missing_files: print(f"āŒ Missing files/directories: {len(missing_files)}") return False else: print("āœ… All project files present!") return True if __name__ == "__main__": print("="*60) print("šŸŽ¬ VIDEO HIGHLIGHT EXTRACTOR - Setup Verification") print("="*60) print() deps_ok = check_dependencies() structure_ok = verify_structure() print("\n" + "="*60) if deps_ok and structure_ok: print("\nšŸŽ‰ Setup complete! Your application is ready to use.") print("\nšŸ“š Next steps:") print(" 1. Run: streamlit run app.py") print(" 2. Upload a video in the sidebar") print(" 3. Configure settings and click 'Extract Highlights'") print("\nšŸ“– See README.md for detailed documentation") else: print("\nāš ļø Setup incomplete. Please address the issues above.") sys.exit(1) print("\n" + "="*60)