111 lines
3.2 KiB
Bash
111 lines
3.2 KiB
Bash
#!/bin/bash
|
|
# Download all models for ComfyUI Z-Image Turbo on BC-250
|
|
set -euo pipefail
|
|
|
|
cd ~/ComfyUI
|
|
source venv/bin/activate
|
|
|
|
pip install -q huggingface-hub safetensors
|
|
|
|
echo ""
|
|
echo "=== Step 1: Download Z-Image Turbo GGUF (5.2 GB) ==="
|
|
mkdir -p ~/ComfyUI/models/unet
|
|
python3 -c "
|
|
from huggingface_hub import hf_hub_download
|
|
print('Downloading z_image_turbo-Q5_K_S.gguf from jayn7/Z-Image-Turbo-GGUF ...')
|
|
hf_hub_download(
|
|
'jayn7/Z-Image-Turbo-GGUF',
|
|
'z_image_turbo-Q5_K_S.gguf',
|
|
local_dir='/home/fabian/ComfyUI/models/unet'
|
|
)
|
|
print('Done!')
|
|
"
|
|
|
|
echo ""
|
|
echo "=== Step 2: Download Gemma 2 2B Text Encoder shards (9.8 GB) ==="
|
|
mkdir -p ~/sd-models/text_encoders/lumina2_gemma2_2b
|
|
python3 -c "
|
|
from huggingface_hub import hf_hub_download
|
|
import os
|
|
|
|
repo = 'Alpha-VLLM/Lumina-Image-2.0'
|
|
dest = '/home/fabian/sd-models/text_encoders/lumina2_gemma2_2b'
|
|
os.makedirs(dest, exist_ok=True)
|
|
|
|
files = [
|
|
'text_encoder/config.json',
|
|
'text_encoder/model.safetensors.index.json',
|
|
'text_encoder/model-00001-of-00003.safetensors',
|
|
'text_encoder/model-00002-of-00003.safetensors',
|
|
'text_encoder/model-00003-of-00003.safetensors',
|
|
]
|
|
for f in files:
|
|
print(f'Downloading {f}...')
|
|
hf_hub_download(repo, f, local_dir=dest)
|
|
print('Done!')
|
|
"
|
|
|
|
echo ""
|
|
echo "=== Step 3: Merge Text Encoder shards into single safetensors ==="
|
|
mkdir -p ~/ComfyUI/models/text_encoders
|
|
python3 << 'EOF'
|
|
import safetensors.torch
|
|
import os, json
|
|
|
|
base_dir = "/home/fabian/sd-models/text_encoders/lumina2_gemma2_2b/text_encoder"
|
|
output = "/home/fabian/ComfyUI/models/text_encoders/gemma2_2b_lumina2.safetensors"
|
|
|
|
with open(os.path.join(base_dir, "model.safetensors.index.json")) as f:
|
|
index = json.load(f)
|
|
|
|
all_tensors = {}
|
|
shards = set(index["weight_map"].values())
|
|
print(f"Loading {len(shards)} shards with {len(index['weight_map'])} tensors...")
|
|
for shard in sorted(shards):
|
|
path = os.path.join(base_dir, shard)
|
|
print(f" Loading {shard}...")
|
|
tensors = safetensors.torch.load_file(path, device="cpu")
|
|
all_tensors.update(tensors)
|
|
|
|
print(f"Total tensors: {len(all_tensors)}")
|
|
print(f"Saving merged file to {output}...")
|
|
safetensors.torch.save_file(all_tensors, output)
|
|
sz = os.path.getsize(output) / 1e9
|
|
print(f"Done! Size: {sz:.2f} GB")
|
|
EOF
|
|
|
|
echo ""
|
|
echo "=== Step 4: Download VAE (335 MB) ==="
|
|
mkdir -p ~/ComfyUI/models/vae
|
|
python3 -c "
|
|
from huggingface_hub import hf_hub_download
|
|
print('Downloading ae.safetensors ...')
|
|
hf_hub_download(
|
|
'black-forest-labs/FLUX.1-schnell',
|
|
'ae.safetensors',
|
|
local_dir='/home/fabian/ComfyUI/models/vae'
|
|
)
|
|
print('Done!')
|
|
"
|
|
|
|
echo ""
|
|
echo "=== Step 5: Download example workflow ==="
|
|
mkdir -p ~/ComfyUI/user/default/workflows
|
|
python3 -c "
|
|
from huggingface_hub import hf_hub_download
|
|
hf_hub_download(
|
|
'jayn7/Z-Image-Turbo-GGUF',
|
|
'example_workflow.json',
|
|
local_dir='/home/fabian/ComfyUI/user/default/workflows'
|
|
)
|
|
print('Workflow downloaded!')
|
|
"
|
|
|
|
echo ""
|
|
echo "=== Verification ==="
|
|
ls -lh ~/ComfyUI/models/unet/z_image_turbo-Q5_K_S.gguf 2>/dev/null || echo "MISSING: GGUF model"
|
|
ls -lh ~/ComfyUI/models/text_encoders/gemma2_2b_lumina2.safetensors 2>/dev/null || echo "MISSING: Text encoder"
|
|
ls -lh ~/ComfyUI/models/vae/ae.safetensors 2>/dev/null || echo "MISSING: VAE"
|
|
echo ""
|
|
echo "=== ALL DOWNLOADS COMPLETE ==="
|