| import os |
| import requests |
| from tqdm import tqdm |
| import time |
|
|
| def download_file(url, directory, chunk_size=1024, max_retries=5, retry_delay=5): |
| if not os.path.exists(directory): |
| os.makedirs(directory) |
|
|
| local_filename = os.path.join(directory, url.split('/')[-1].split('?')[0]) |
|
|
| headers = {} |
| mode = 'wb' |
| initial_pos = 0 |
|
|
| if os.path.exists(local_filename): |
| initial_pos = os.path.getsize(local_filename) |
| headers['Range'] = f'bytes={initial_pos}-' |
| mode = 'ab' |
|
|
| for attempt in range(max_retries): |
| try: |
| with requests.get(url, headers=headers, stream=True) as r: |
| r.raise_for_status() |
| total_size = int(r.headers.get('content-length', 0)) + initial_pos |
|
|
| with open(local_filename, mode) as f: |
| with tqdm( |
| desc=f"Попытка {attempt+1}/{max_retries}: {local_filename}", |
| total=total_size, |
| unit='iB', |
| unit_scale=True, |
| unit_divisor=1024, |
| initial=initial_pos |
| ) as progress_bar: |
| for chunk in r.iter_content(chunk_size=chunk_size): |
| size = f.write(chunk) |
| progress_bar.update(size) |
| initial_pos += size |
|
|
| return local_filename |
|
|
| except (requests.exceptions.RequestException, IOError) as e: |
| print(f"Ошибка при скачивании {url}: {str(e)}") |
| print(f"Повторная попытка через {retry_delay} секунд...") |
| time.sleep(retry_delay) |
|
|
| if os.path.exists(local_filename): |
| initial_pos = os.path.getsize(local_filename) |
| headers['Range'] = f'bytes={initial_pos}-' |
| mode = 'ab' |
|
|
| raise Exception(f"Не удалось скачать файл после {max_retries} попыток") |
|
|
| |
| files_to_download = [ |
| ("https://huggingface.co/daswer123/test/resolve/main/models/ControlNet/diffusion_pytorch_model.safetensors?download=true", "models/ControlNet"), |
| ("https://huggingface.co/daswer123/test/resolve/main/models/ControlNet/ip-adapter.bin?download=true", "models/ControlNet"), |
| ("https://huggingface.co/daswer123/test/resolve/main/models/Stable-diffusion/moxieDiffusionXL_v16.safetensors?download=true", "models/Stable-diffusion"), |
| ("https://huggingface.co/daswer123/test/resolve/main/models/VAE/sdxl_vae.safetensors?download=true", "models/VAE"), |
| ("https://huggingface.co/daswer123/test/resolve/main/models/ESRGAN/4x_NMKD-Siax_2000k.pth?download=true", "models/ESRGAN") |
| ] |
|
|
| |
| current_dir = os.getcwd() |
|
|
| |
| for url, directory in files_to_download: |
| full_directory = os.path.join(current_dir, directory) |
| try: |
| downloaded_file = download_file(url, full_directory) |
| print(f"Успешно скачан файл: {downloaded_file}") |
| except Exception as e: |
| print(f"Не удалось скачать {url}: {str(e)}") |
|
|
| print("Все файлы обработаны!") |
|
|