| |
| """ |
| Setup script — clones SAM2 and ProPainter, downloads model weights. |
| Called by app.py on first run. |
| """ |
| import os |
| import subprocess |
| import sys |
|
|
| def setup(): |
| base_dir = os.path.dirname(os.path.abspath(__file__)) |
|
|
| |
| sam2_dir = os.path.join(base_dir, "sam2") |
| if not os.path.exists(sam2_dir): |
| print("📦 Cloning SAM2...") |
| subprocess.run(["git", "clone", "https://github.com/facebookresearch/sam2.git", sam2_dir], check=True) |
| subprocess.run([sys.executable, "-m", "pip", "install", "-e", sam2_dir, "-q"], check=True) |
| |
| |
| ckpt_dir = os.path.join(sam2_dir, "checkpoints") |
| ckpt_file = os.path.join(ckpt_dir, "sam2.1_hiera_large.pt") |
| if not os.path.exists(ckpt_file): |
| os.makedirs(ckpt_dir, exist_ok=True) |
| print("⬇️ Downloading SAM2 weights...") |
| subprocess.run([ |
| "wget", "-q", "-O", ckpt_file, |
| "https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_large.pt" |
| ], check=True) |
| |
| |
| pp_dir = os.path.join(base_dir, "ProPainter") |
| if not os.path.exists(pp_dir): |
| print("📦 Cloning ProPainter...") |
| subprocess.run(["git", "clone", "https://github.com/sczhou/ProPainter.git", pp_dir], check=True) |
| req_file = os.path.join(pp_dir, "requirements.txt") |
| if os.path.exists(req_file): |
| subprocess.run([sys.executable, "-m", "pip", "install", "-r", req_file, "-q"], check=True) |
|
|
| print("✅ Setup complete!") |
|
|
| if __name__ == "__main__": |
| setup() |
|
|