Download setup.py from NuriDerBurrito/Recollection_Garden: direct link, hf CLI and curl.
- Browser
- Download file 5.6 kB
-
https://huggingface.co/NuriDerBurrito/Recollection_Garden/resolve/main/setup.py
- Command line
-
hf download hf://NuriDerBurrito/Recollection_Garden/setup.py
-
curl -L -o setup.py https://huggingface.co/NuriDerBurrito/Recollection_Garden/resolve/main/setup.py
5.6 kB
| import os | |
| import sys | |
| import re | |
| import json | |
| import argparse | |
| from pathlib import Path | |
| import subprocess | |
| import shlex | |
| from IPython import get_ipython | |
| # --- Configuration --- | |
| # You can change this to any name you want for your main folder. | |
| WEBUI_FOLDER_NAME = 'stable-diffusion-webui-reForge' | |
| # --- Constants for Environment Detection --- | |
| ENV = { | |
| 'Colab': ('/content', '/content', 'COLAB_JUPYTER_TOKEN'), | |
| 'Kaggle': ('/kaggle', '/kaggle/working', 'KAGGLE_DATA_PROXY_TOKEN') | |
| } | |
| # --- Color Codes for Readable Output --- | |
| RESET = '\033[0m' | |
| RED = '\033[31m' | |
| GREEN = '\033[32m' | |
| YELLOW = '\033[33m' | |
| ARROW = f'{YELLOW}▶{RESET}' | |
| ERROR = f'{RED}[ERROR]{RESET}' | |
| SUCCESS = f'{GREEN}[SUCCESS]{RESET}' | |
| INFO = f'{YELLOW}[INFO]{RESET}' | |
| # --- 1. Environment Detection --- | |
| def get_environment(): | |
| """Detects if the script is running on Colab or Kaggle and returns paths.""" | |
| for name, (base, home, var) in ENV.items(): | |
| if var in os.environ: | |
| print(f"{INFO} Detected environment: {name}") | |
| return name, Path(base), Path(home) | |
| print(f"{ERROR} This script must be run on Google Colab or Kaggle.") | |
| sys.exit(1) | |
| # --- 2. Argument Parsing for API Keys --- | |
| def get_args(): | |
| """Parses command-line arguments for API keys.""" | |
| parser = argparse.ArgumentParser(description='Setup API keys and directory shortcuts for model downloads.') | |
| parser.add_argument('--civitai_key', required=True, help='Your CivitAI API key.') | |
| parser.add_argument('--hf_read_token', default=None, help='Your Huggingface READ token (optional).') | |
| args = parser.parse_args() | |
| civitai_key = args.civitai_key.strip() | |
| hf_read_token = args.hf_read_token.strip() if args.hf_read_token else '' | |
| if not civitai_key: | |
| print(f"{ERROR} Civitai API key is missing.") | |
| sys.exit(1) | |
| if re.search(r'\s+', civitai_key): | |
| print(f"{ERROR} Civitai API key cannot contain spaces.") | |
| sys.exit(1) | |
| if len(civitai_key) < 32: | |
| print(f"{ERROR} Civitai API key seems too short (must be at least 32 characters).") | |
| sys.exit(1) | |
| print(f"{SUCCESS} Civitai API key validated.") | |
| if hf_read_token: | |
| print(f"{SUCCESS} Huggingface token provided.") | |
| return civitai_key, hf_read_token | |
| # --- 3. API Key Injection --- | |
| def download_helper_script(script_path): | |
| """Downloads the helper script (nenen88.py) if it doesn't exist.""" | |
| if not script_path.exists(): | |
| print(f"{ARROW} Downloading helper script to {script_path}...") | |
| script_url = 'https://github.com/gutris1/segsmaker/raw/main/script/nenen88.py' | |
| try: | |
| subprocess.run(['wget', '-qO', str(script_path), script_url], check=True) | |
| print(f"{SUCCESS} Helper script downloaded.") | |
| except subprocess.CalledProcessError: | |
| print(f"{ERROR} Failed to download helper script. API key injection will not work.") | |
| sys.exit(1) | |
| def inject_keys(civitai_key, hf_read_token, script_path): | |
| """Injects API keys into the downloaded helper script.""" | |
| print(f"{ARROW} Injecting API keys into helper script...") | |
| try: | |
| content = script_path.read_text() | |
| content = content.replace("TOKET = ''", f"TOKET = '{civitai_key}'") | |
| content = content.replace("TOBRUT = ''", f"TOBRUT = '{hf_read_token}'") | |
| script_path.write_text(content) | |
| print(f"{SUCCESS} API keys injected successfully.") | |
| except FileNotFoundError: | |
| print(f"{ERROR} Helper script not found at {script_path}. Cannot inject keys.") | |
| sys.exit(1) | |
| # --- 4. Directory Structure Creation (No Shortcuts) --- | |
| def setup_directory_structure(webui_path, model_path): | |
| """ | |
| Creates a standard ReForge/A1111 directory structure. | |
| (Shortcuts are not created, only the directories themselves). | |
| """ | |
| print(f"{ARROW} Setting up ReForge-style directory structure in {webui_path}...") | |
| model_dirs = { | |
| 'Stable-diffusion', | |
| 'VAE', | |
| 'Lora', | |
| 'LyCORIS', | |
| 'embeddings', | |
| 'ControlNet', | |
| 'adetailer' | |
| } | |
| webui_path.mkdir(parents=True, exist_ok=True) | |
| model_path.mkdir(parents=True, exist_ok=True) | |
| for subdir in model_dirs: | |
| (model_path / subdir).mkdir(parents=True, exist_ok=True) | |
| print(f" - Created directory: {model_path / subdir}") | |
| print(f"{SUCCESS} Directory structure is ready in {webui_path}") | |
| # --- Main Execution --- | |
| def main(): | |
| """Main function to orchestrate the setup process.""" | |
| env_name, base_path, home_path = get_environment() | |
| webui_path = base_path / WEBUI_FOLDER_NAME | |
| model_path = webui_path / 'models' | |
| startup_dir = Path('/root/.ipython/profile_default/startup') | |
| startup_dir.mkdir(parents=True, exist_ok=True) | |
| helper_script_path = startup_dir / 'nenen88.py' | |
| civitai_key, hf_read_token = get_args() | |
| download_helper_script(helper_script_path) | |
| inject_keys(civitai_key, hf_read_token, helper_script_path) | |
| # --- THE FIX: Execute the helper script to load its magic commands --- | |
| print(f"{ARROW} Loading downloader functions...") | |
| get_ipython().run_line_magic('run', str(helper_script_path)) | |
| print(f"{SUCCESS} Downloader is now ready!") | |
| setup_directory_structure(webui_path, model_path) | |
| print("\n" + "="*50) | |
| print(f"{SUCCESS} Setup complete!") | |
| print(f"{INFO} Your main folder is: {webui_path}") | |
| print(f"{INFO} You can now use the %download magic command directly in your cells.") | |
| print(f"{INFO} Models will be saved in the 'models' subdirectory of your main folder.") | |
| print("="*50) | |
| if __name__ == '__main__': | |
| main() |