CoolFace
Datasetpublic

mrdarkbr/wan22-code-backup

sourceHugging Faceupdated 29d agoView on Hugging Face
0likes55downloads
restore_all.py237 linesDownload Raw Back to root
1import os2import shutil3import subprocess4import sys5from pathlib import Path6 7import modal8 9app = modal.App("restore-all-volumes-fast")10image = (11    modal.Image.debian_slim(python_version="3.11")12    .pip_install("huggingface_hub[hf_transfer]>=0.34", "hf_transfer")13    .apt_install("git", "wget", "aria2")14    .env({15        "HF_HUB_ENABLE_HF_TRANSFER": "1",16        "HF_HUB_DOWNLOAD_TIMEOUT": "7200",17    })18)19 20vol_qwen = modal.Volume.from_name("comfyui-models", create_if_missing=True)21vol_wan = modal.Volume.from_name("wan22-comfyui-models", create_if_missing=True)22vol_animate = modal.Volume.from_name("wan22-animate-models", create_if_missing=True)23vol_qwenpose = modal.Volume.from_name("qwenposetransfers", create_if_missing=True)24vol_qwent2v = modal.Volume.from_name("qwen-t2v-models", create_if_missing=True)25vol_krea2 = modal.Volume.from_name("krea-2-models", create_if_missing=True)26vol_minimax = modal.Volume.from_name("minimax-h3-models", create_if_missing=True)27vol_minimax_runs = modal.Volume.from_name("minimax-h3-extension-runs", create_if_missing=True)28vol_maskvid = modal.Volume.from_name("maskvid-models-volume", create_if_missing=True)29 30 31def run_hf_download(repo_id: str, mount_path: str, repo_type: str, token: str):32    from huggingface_hub import snapshot_download33    print(f"๐Ÿš€ Baixando {repo_id} ({repo_type}) com hf_transfer ultra-rapido para {mount_path}...")34    snapshot_download(35        repo_id=repo_id,36        repo_type=repo_type,37        local_dir=mount_path,38        token=token.strip(),39        max_workers=16,40    )41    print(f"โœ… Restaurado: {repo_id}")42 43 44@app.function(image=image, volumes={"/data/qwen": vol_qwen}, timeout=86400, cpu=8, ephemeral_disk=2048 * 1024)45def download_qwen(token: str):46    run_hf_download("mrdarkbr/QWEN_MODAL_BACKUP", "/data/qwen", "dataset", token)47    vol_qwen.commit()48 49 50@app.function(image=image, volumes={"/data/animate": vol_animate}, timeout=86400, cpu=8, ephemeral_disk=2048 * 1024)51def download_animate(token: str):52    run_hf_download("mrdarkbr/wan22-animate-models-backup", "/data/animate", "model", token)53    vol_animate.commit()54 55 56@app.function(image=image, volumes={"/data/qwenpose": vol_qwenpose}, timeout=86400, cpu=8, ephemeral_disk=2048 * 1024)57def download_qwenpose(token: str):58    run_hf_download("mrdarkbr/qwenposetransfers-backup", "/data/qwenpose", "model", token)59    vol_qwenpose.commit()60 61 62@app.function(image=image, volumes={"/data/qwent2v": vol_qwent2v}, timeout=86400, cpu=8, ephemeral_disk=2048 * 1024)63def download_qwent2v(token: str):64    run_hf_download("mrdarkbr/qwen-t2v-models-backup", "/data/qwent2v", "dataset", token)65    vol_qwent2v.commit()66 67 68@app.function(image=image, volumes={"/data/krea2": vol_krea2}, timeout=86400, cpu=8, ephemeral_disk=2048 * 1024)69def download_krea2(token: str):70    run_hf_download("mrdarkbr/krea2-models-backup", "/data/krea2", "dataset", token)71    72    # Organizar LoRAs do Krea2 em todas as pastas necessarias73    base_dir = Path("/data/krea2")74    loras_dirs = [base_dir / "loras", base_dir / "models" / "loras"]75    for ld in loras_dirs:76        ld.mkdir(parents=True, exist_ok=True)77    78    for f in base_dir.glob("*.safetensors"):79        for ld in loras_dirs:80            dst = ld / f.name81            if not dst.exists():82                shutil.copy2(f, dst)83                print(f"Copiado {f.name} para {ld}")84                85    vol_krea2.commit()86    print("Volume krea-2-models restaurado e organizado!")87 88 89@app.function(image=image, volumes={"/data/minimax": vol_minimax}, timeout=86400, cpu=8, ephemeral_disk=2048 * 1024)90def download_minimax(token: str):91    run_hf_download("mrdarkbr/minimax-h3-models-backup", "/data/minimax", "dataset", token)92    93    # Organizar pastas de loras94    base_dir = Path("/data/minimax")95    lora_dirs = [base_dir / "loras", base_dir / "models" / "loras"]96    for ld in lora_dirs:97        ld.mkdir(parents=True, exist_ok=True)98        99    for f in base_dir.glob("*.safetensors"):100        for ld in lora_dirs:101            dst = ld / f.name102            if not dst.exists():103                shutil.copy2(f, dst)104 105    # Download extra missing models using aria2 / hf_transfer106    unet_dir = Path("/data/minimax/diffusion_models")107    unet_dir.mkdir(parents=True, exist_ok=True)108    unet_path = unet_dir / "pinkcherryMMH3Fl2va_06Beta_int8.safetensors"109    if not unet_path.exists() or unet_path.stat().st_size < 1000000:110        print(f"Baixando pinkcherry com aria2 acelerado em {unet_path}...")111        unet_url = "https://huggingface.co/mrdarkbr/minimax-h3-models-backup/resolve/main/diffusion_models/pinkcherryMMH3Fl2va_06Beta_int8.safetensors"112        subprocess.run(["aria2c", "-c", "-x", "16", "-s", "16", "-k", "1M", "--header", f"Authorization: Bearer {token.strip()}", "-d", str(unet_dir), "-o", "pinkcherryMMH3Fl2va_06Beta_int8.safetensors", unet_url], check=False)113    114    lora_path = lora_dirs[0] / "AfterMidnight_ref2va_h3_sexytime_rank64-v1.2.safetensors"115    if not lora_path.exists() or lora_path.stat().st_size < 1000000:116        print(f"Baixando AfterMidnight com aria2 acelerado em {lora_path}...")117        lora_url = "https://huggingface.co/SexGod1979/AfterMidnight-MiniMax-H3-NSFW/resolve/main/AfterMidnight_ref2va_h3_sexytime_rank64-v1.2.safetensors"118        subprocess.run(["aria2c", "-c", "-x", "16", "-s", "16", "-k", "1M", "-d", str(lora_dirs[0]), "-o", "AfterMidnight_ref2va_h3_sexytime_rank64-v1.2.safetensors", lora_url], check=False)119        # Copiar para models/loras tambem120        if lora_path.exists():121            shutil.copy2(lora_path, lora_dirs[1] / lora_path.name)122 123    vol_minimax.commit()124    print("Volume minimax-h3-models restaurado!")125 126 127@app.function(image=image, volumes={"/data/minimax-runs": vol_minimax_runs}, timeout=86400, cpu=8, ephemeral_disk=2048 * 1024)128def download_minimax_runs(token: str):129    run_hf_download("mrdarkbr/minimax-h3-extension-runs-backup", "/data/minimax-runs", "dataset", token)130    vol_minimax_runs.commit()131 132 133@app.function(image=image, volumes={"/data/wan22": vol_wan}, timeout=86400, cpu=8, ephemeral_disk=2048 * 1024)134def download_wan(token: str):135    run_hf_download("mrdarkbr/wan22-comfyui-models-backup", "/data/wan22", "dataset", token)136    137    # 1. LoRAs SVI138    lora_dir = Path("/data/wan22/models/loras")139    lora_dir.mkdir(parents=True, exist_ok=True)140    urls = {141        "SVI_v2_PRO_Wan2.2-I2V-A14B_HIGH_lora_rank_128_fp16.safetensors": "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/LoRAs/Stable-Video-Infinity/v2.0/SVI_v2_PRO_Wan2.2-I2V-A14B_HIGH_lora_rank_128_fp16.safetensors",142        "SVI_v2_PRO_Wan2.2-I2V-A14B_LOW_lora_rank_128_fp16.safetensors": "https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/LoRAs/Stable-Video-Infinity/v2.0/SVI_v2_PRO_Wan2.2-I2V-A14B_LOW_lora_rank_128_fp16.safetensors",143    }144    for filename, url in urls.items():145        dest = lora_dir / filename146        if not dest.exists() or dest.stat().st_size < 1000000:147            print(f"Baixando LoRA SVI: {filename}...")148            subprocess.run(["aria2c", "-c", "-x", "16", "-s", "16", "-k", "1M", "-d", str(lora_dir), "-o", filename, url], check=False)149 150    # 2. Modelos MMAudio (em /data/wan22/mmaudio e /data/wan22/models/mmaudio)151    mmaudio_dirs = [Path("/data/wan22/mmaudio"), Path("/data/wan22/models/mmaudio")]152    for md in mmaudio_dirs:153        md.mkdir(parents=True, exist_ok=True)154        155    mmaudio_models = {156        "mmaudio_large_44k_v2_fp16.safetensors": "https://huggingface.co/Kijai/MMAudio_safetensors/resolve/main/mmaudio_large_44k_v2_fp16.safetensors",157        "mmaudio_vae_44k_fp16.safetensors": "https://huggingface.co/Kijai/MMAudio_safetensors/resolve/main/mmaudio_vae_44k_fp16.safetensors",158        "mmaudio_synchformer_fp16.safetensors": "https://huggingface.co/Kijai/MMAudio_safetensors/resolve/main/mmaudio_synchformer_fp16.safetensors",159        "apple_DFN5B-CLIP-ViT-H-14-384_fp16.safetensors": "https://huggingface.co/Kijai/MMAudio_safetensors/resolve/main/apple_DFN5B-CLIP-ViT-H-14-384_fp16.safetensors"160    }161    162    for filename, url in mmaudio_models.items():163        primary_dest = mmaudio_dirs[0] / filename164        if not primary_dest.exists() or primary_dest.stat().st_size < 100000:165            print(f"Baixando modelo MMAudio: {filename}...")166            subprocess.run(["aria2c", "-c", "-x", "16", "-s", "16", "-k", "1M", "-d", str(mmaudio_dirs[0]), "-o", filename, url], check=False)167        secondary_dest = mmaudio_dirs[1] / filename168        if not secondary_dest.exists() and primary_dest.exists():169            shutil.copy2(primary_dest, secondary_dest)170 171    vol_wan.commit()172    print("Volume wan22-comfyui-models restaurado com SVI e MMAudio!")173 174 175@app.function(image=image, volumes={"/data/maskvid": vol_maskvid}, timeout=86400, cpu=8, ephemeral_disk=2048 * 1024)176def download_maskvid(token: str):177    run_hf_download("mrdarkbr/maskvid-models-backup", "/data/maskvid", "dataset", token)178    vol_maskvid.commit()179    print("Volume maskvid-models-volume restaurado!")180 181 182@app.function(183    image=image,184    volumes={185        "/data/minimax": vol_minimax,186        "/data/wan": vol_wan,187        "/data/krea": vol_krea2,188        "/data/comfy": vol_qwen,189    },190    timeout=600191)192def sync_single_local_lora(filename: str, data: bytes):193    # Salvar em todos os volumes necessarios194    for base in [Path("/data/minimax"), Path("/data/wan"), Path("/data/krea"), Path("/data/comfy")]:195        for d in [base / "loras", base / "models" / "loras", base]:196            d.mkdir(parents=True, exist_ok=True)197            dst = d / filename198            if not dst.exists() or dst.stat().st_size != len(data):199                with open(dst, "wb") as f:200                    f.write(data)201 202    vol_minimax.commit()203    vol_wan.commit()204    vol_krea2.commit()205    vol_qwen.commit()206 207 208@app.local_entrypoint()209def main(token: str = ""):210    token = token.strip()211    if not token:212        raise ValueError('Use modal run restore_all.py --token="hf_..."')213    print("Restaurando nove volumes em paralelo com velocidade maxima...")214    jobs = [215        download_qwen.spawn(token),216        download_wan.spawn(token),217        download_animate.spawn(token),218        download_qwenpose.spawn(token),219        download_qwent2v.spawn(token),220        download_krea2.spawn(token),221        download_minimax.spawn(token),222        download_minimax_runs.spawn(token),223        download_maskvid.spawn(token),224    ]225    for job in jobs:226        job.get()227        228    # Sincronizar todos os LoRAs locais (como Synthstep00008300, Creampie, etc.)229    local_safetensors = list(Path(".").glob("*.safetensors"))230    if local_safetensors:231        print(f"\nSincronizando {len(local_safetensors)} LoRAs locais para todos os volumes...")232        for sf in local_safetensors:233            print(f"  -> Sincronizando {sf.name} ({sf.stat().st_size / (1024*1024):.1f} MB)...")234            sync_single_local_lora.remote(sf.name, sf.read_bytes())235 236    print("\n๐ŸŽ‰ RESTAURACAO COMPLETA: Todos os volumes, LoRAs (incluindo Synthstep e Krea2) e modelos MMAudio sincronizados sem erros!")237