|
|
| import os
|
| import time
|
| from huggingface_hub import HfApi, list_repo_files
|
|
|
|
|
|
|
|
|
|
|
| REPO_ID = "chichimedia/Greywan"
|
| HF_TOKEN = os.getenv("HF_TOKEN")
|
|
|
| if not HF_TOKEN:
|
| raise EnvironmentError("HF_TOKEN environment variable not set!")
|
|
|
| api = HfApi()
|
|
|
|
|
|
|
|
|
|
|
| def list_local_files(base_dir="."):
|
| """Recursively list all local files excluding system/git/junk."""
|
| excluded_dirs = {
|
| ".git", "__pycache__", ".cache", ".idea", ".vscode", ".venv", "env",
|
| "venv", "node_modules", ".mypy_cache"
|
| }
|
| excluded_exts = {".lock", ".tmp", ".log", ".bat", ".sh"}
|
|
|
| all_files = []
|
| for root, dirs, files in os.walk(base_dir):
|
| dirs[:] = [d for d in dirs if d not in excluded_dirs]
|
| for f in files:
|
| if any(f.endswith(ext) for ext in excluded_exts):
|
| continue
|
| full_path = os.path.join(root, f)
|
| rel_path = os.path.relpath(full_path, base_dir)
|
| all_files.append(rel_path.replace("\\", "/"))
|
| return all_files
|
|
|
|
|
|
|
|
|
|
|
| def main():
|
| print("[INFO] Fetching existing files from HF repo...")
|
| remote_files = set(list_repo_files(REPO_ID, token=HF_TOKEN))
|
| print(f"[INFO] Found {len(remote_files)} files on remote.\n")
|
|
|
| local_files = list_local_files(".")
|
| upload_count = 0
|
| skip_count = 0
|
|
|
| for rel in sorted(local_files):
|
| if rel in remote_files:
|
| print(f"[SKIP] {rel}")
|
| skip_count += 1
|
| continue
|
|
|
| print(f"[UPLOAD] {rel}")
|
| full = os.path.abspath(rel)
|
| start_time = time.time()
|
|
|
| try:
|
| api.upload_file(
|
| path_or_fileobj=full,
|
| path_in_repo=rel,
|
| repo_id=REPO_ID,
|
| repo_type="model",
|
| token=HF_TOKEN,
|
| )
|
| elapsed = time.time() - start_time
|
| size_mb = os.path.getsize(full) / (1024 * 1024)
|
| speed = size_mb / elapsed if elapsed > 0 else 0
|
| print(f"[OK] {rel} — {size_mb:.1f} MB in {elapsed:.1f}s ({speed:.2f} MB/s real)\n")
|
| upload_count += 1
|
| except Exception as e:
|
| print(f"[ERROR] Failed to upload {rel}: {e}\n")
|
|
|
| print(f"\n[SUMMARY] Uploaded: {upload_count}, Skipped: {skip_count}")
|
| print("[DONE]")
|
|
|
|
|
|
|
|
|
|
|
| if __name__ == "__main__":
|
| main()
|
|
|