|
import os |
|
import csv |
|
import shutil |
|
import tarfile |
|
import subprocess |
|
from pathlib import Path |
|
|
|
|
|
def install_packages_but_jank_af(): |
|
packages = ['build-essential', 'python3-dev', 'ffmpeg', 'aria2'] |
|
pip_packages = ['pip', 'setuptools', 'wheel', 'httpx==0.23.0', 'faiss-gpu', 'fairseq', 'gradio==3.34.0', |
|
'ffmpeg', 'ffmpeg-python', 'praat-parselmouth', 'pyworld', 'numpy==1.23.5', |
|
'numba==0.56.4', 'librosa==0.9.2', 'mega.py', 'gdown', 'onnxruntime', 'pyngrok==4.1.12', |
|
'gTTS', 'elevenlabs', 'wget', 'tensorboardX', 'unidecode', 'huggingface-hub', |
|
'yt-dlp', 'pedalboard', 'pathvalidate', 'nltk', 'edge-tts', 'git+https://github.com/suno-ai/bark.git', 'python-dotenv', 'av'] |
|
|
|
print("Updating and installing system packages...") |
|
for package in packages: |
|
print(f"Installing {package}...") |
|
subprocess.check_call(['apt-get', 'install', '-qq', '-y', package]) |
|
|
|
print("Updating and installing pip packages...") |
|
subprocess.check_call(['pip', 'install', '--upgrade'] + pip_packages) |
|
|
|
print('Packages up to date.') |
|
|
|
|
|
def setup_environment(ForceUpdateDependencies, ForceTemporaryStorage): |
|
|
|
if not ForceTemporaryStorage: |
|
from google.colab import drive |
|
|
|
if not os.path.exists('/content/drive'): |
|
drive.mount('/content/drive') |
|
else: |
|
print('Drive is already mounted. Proceeding...') |
|
|
|
|
|
def install_packages(): |
|
packages = ['build-essential', 'python3-dev', 'ffmpeg', 'aria2'] |
|
pip_packages = ['pip', 'setuptools', 'wheel', 'httpx==0.23.0', 'faiss-gpu', 'fairseq', 'gradio==3.34.0', |
|
'ffmpeg', 'ffmpeg-python', 'praat-parselmouth', 'pyworld', 'numpy==1.23.5', |
|
'numba==0.56.4', 'librosa==0.9.2', 'mega.py', 'gdown', 'onnxruntime', 'pyngrok==4.1.12', |
|
'gTTS', 'elevenlabs', 'wget', 'tensorboardX', 'unidecode', 'huggingface-hub', |
|
'yt-dlp', 'pedalboard', 'pathvalidate', 'nltk', 'edge-tts', 'git+https://github.com/suno-ai/bark.git', 'python-dotenv', 'av'] |
|
|
|
print("Updating and installing system packages...") |
|
for package in packages: |
|
print(f"Installing {package}...") |
|
subprocess.check_call(['apt-get', 'install', '-qq', '-y', package]) |
|
|
|
print("Updating and installing pip packages...") |
|
subprocess.check_call(['pip', 'install', '--upgrade'] + pip_packages) |
|
|
|
print('Packages up to date.') |
|
|
|
|
|
def scan_and_write(base_path, output_file): |
|
with open(output_file, 'w', newline='') as f: |
|
writer = csv.writer(f) |
|
for dirpath, dirs, files in os.walk(base_path): |
|
for filename in files: |
|
fname = os.path.join(dirpath, filename) |
|
try: |
|
mtime = os.path.getmtime(fname) |
|
writer.writerow([fname, mtime]) |
|
except Exception as e: |
|
print( |
|
f'Skipping irrelevant nonexistent file {fname}: {str(e)}') |
|
print(f'Finished recording filesystem timestamps to {output_file}.') |
|
|
|
|
|
def compare_files(old_file, new_file): |
|
old_files = {} |
|
new_files = {} |
|
|
|
with open(old_file, 'r') as f: |
|
reader = csv.reader(f) |
|
old_files = {rows[0]: rows[1] for rows in reader} |
|
|
|
with open(new_file, 'r') as f: |
|
reader = csv.reader(f) |
|
new_files = {rows[0]: rows[1] for rows in reader} |
|
|
|
removed_files = old_files.keys() - new_files.keys() |
|
added_files = new_files.keys() - old_files.keys() |
|
unchanged_files = old_files.keys() & new_files.keys() |
|
|
|
changed_files = { |
|
f for f in unchanged_files if old_files[f] != new_files[f]} |
|
|
|
for file in removed_files: |
|
print(f'File has been removed: {file}') |
|
|
|
for file in changed_files: |
|
print(f'File has been updated: {file}') |
|
|
|
return list(added_files) + list(changed_files) |
|
|
|
|
|
if ForceTemporaryStorage: |
|
file_path = '/content/CachedRVC.tar.gz' |
|
else: |
|
file_path = '/content/drive/MyDrive/RVC_Cached/CachedRVC.tar.gz' |
|
|
|
content_file_path = '/content/CachedRVC.tar.gz' |
|
extract_path = '/' |
|
|
|
if not os.path.exists(file_path): |
|
folder_path = os.path.dirname(file_path) |
|
os.makedirs(folder_path, exist_ok=True) |
|
print('No cached dependency install found. Attempting to download GitHub backup..') |
|
|
|
try: |
|
download_url = "https://github.com/kalomaze/QuickMangioFixes/releases/download/release3/CachedRVC.tar.gz" |
|
subprocess.run(["wget", "-O", file_path, download_url]) |
|
print('Download completed successfully!') |
|
except Exception as e: |
|
print('Download failed:', str(e)) |
|
|
|
|
|
if os.path.exists(file_path): |
|
os.remove(file_path) |
|
print('Failed download file deleted. Continuing manual backup..') |
|
|
|
if Path(file_path).exists(): |
|
if ForceTemporaryStorage: |
|
print('Finished downloading CachedRVC.tar.gz.') |
|
else: |
|
print( |
|
'CachedRVC.tar.gz found on Google Drive. Proceeding to copy and extract...') |
|
|
|
|
|
if ForceTemporaryStorage: |
|
pass |
|
else: |
|
shutil.copy(file_path, content_file_path) |
|
|
|
print('Beginning backup copy operation...') |
|
|
|
with tarfile.open(content_file_path, 'r:gz') as tar: |
|
for member in tar.getmembers(): |
|
target_path = os.path.join(extract_path, member.name) |
|
try: |
|
tar.extract(member, extract_path) |
|
except Exception as e: |
|
print( |
|
'Failed to extract a file (this isn\'t normal)... forcing an update to compensate') |
|
ForceUpdateDependencies = True |
|
print( |
|
f'Extraction of {content_file_path} to {extract_path} completed.') |
|
|
|
if ForceUpdateDependencies: |
|
install_packages() |
|
ForceUpdateDependencies = False |
|
else: |
|
print('CachedRVC.tar.gz not found. Proceeding to create an index of all current files...') |
|
scan_and_write('/usr/', '/content/usr_files.csv') |
|
|
|
install_packages() |
|
|
|
scan_and_write('/usr/', '/content/usr_files_new.csv') |
|
changed_files = compare_files( |
|
'/content/usr_files.csv', '/content/usr_files_new.csv') |
|
|
|
with tarfile.open('/content/CachedRVC.tar.gz', 'w:gz') as new_tar: |
|
for file in changed_files: |
|
new_tar.add(file) |
|
print(f'Added to tar: {file}') |
|
|
|
os.makedirs('/content/drive/MyDrive/RVC_Cached', exist_ok=True) |
|
shutil.copy('/content/CachedRVC.tar.gz', |
|
'/content/drive/MyDrive/RVC_Cached/CachedRVC.tar.gz') |
|
print('Updated CachedRVC.tar.gz copied to Google Drive.') |
|
print('Dependencies fully up to date; future runs should be faster.') |
|
|