Skip to content

Instantly share code, notes, and snippets.

@michaelgold
Last active August 10, 2025 05:22
Show Gist options
  • Save michaelgold/4f660c9b87f5995a10de9f5d4089d2ad to your computer and use it in GitHub Desktop.
Save michaelgold/4f660c9b87f5995a10de9f5d4089d2ad to your computer and use it in GitHub Desktop.
#!/bin/bash
set -euo pipefail
# 1) Prepare persistent layout + symlinks (same migrate_link you already have)
WORK="/workspace"; [ -d /runpod-volume ] && WORK="/runpod-volume"
migrate_link() {
src="$1"; dst="$2"
mkdir -p "$dst"
if [ -d "$src" ] && [ ! -L "$src" ]; then
shopt -s dotglob; mv "$src"/* "$dst"/ 2>/dev/null || true; shopt -u dotglob
rm -rf "$src"
fi
ln -sfnT "$dst" "$src"
}
mkdir -p "$WORK"/{models,custom_nodes,manager,u2net,output,workflows,input} /app/comfy/user/default /root
migrate_link /app/comfy/models "$WORK/models"
migrate_link /app/comfy/custom_nodes "$WORK/custom_nodes"
migrate_link /app/comfy/output "$WORK/output"
migrate_link /app/comfy/input "$WORK/input"
migrate_link /app/comfy/user/default/ComfyUI-Manager "$WORK/manager"
rm -rf /root/.u2net || true; ln -sfnT "$WORK/u2net" /root/.u2net
# 2) Point comfy-cli and set token if present
comfy workspace set /app/comfy || true
[ -n "${HF_TOKEN:-}" ] && comfy model download --set-hf-api-token "$HF_TOKEN" || true
# 3) Background downloader
cat >/usr/local/bin/comfy-models-download.sh <<"EOF"
#!/bin/bash
set -euo pipefail
REL=models
dl(){ u=$1; r=$2; f=$3; tgt="/app/comfy/$REL/$r/$f"
if [ -f "$tgt" ]; then echo "SKIP $tgt"; return 0; fi
mkdir -p "$(dirname "$tgt")"
comfy model download --url "$u" --relative-path "$REL/$r" --filename "$f"
}
# --- your list ---
dl https://huggingface.co/tencent/Hunyuan3D-2/resolve/main/hunyuan3d-dit-v2-0-fast/model.fp16.safetensors diffusion_models/hy3dgen hunyuan3d-dit-v2-0-fast-fp16.safetensors
dl https://huggingface.co/tencent/Hunyuan3D-2mv/resolve/main/hunyuan3d-dit-v2-mv-fast/model.fp16.safetensors diffusion_models/hy3dgen hunyuan3d-dit-v2-mv-fast-fp16.safetensors
dl https://huggingface.co/Kijai/flux-fp8/resolve/main/flux1-dev-fp8.safetensors unet/FLUX1 flux1-dev-fp8.safetensors
dl https://huggingface.co/Kijai/flux-fp8/resolve/main/flux_shakker_labs_union_pro-fp8_e4m3fn.safetensors controlnet/FLUX1 flux_shakker_labs_union_pro-fp8_e4m3fn.safetensors
dl https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp8_e4m3fn.safetensors text_encoders/t5 t5xxl_fp8_e4m3fn.safetensors
dl https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/clip_l.safetensors text_encoders clip_l.safetensors
dl https://huggingface.co/black-forest-labs/FLUX.1-dev/resolve/main/ae.safetensors vae/FLUX1 ae.safetensors
dl https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/open-clip-xlm-roberta-large-vit-huge-14_visual_fp16.safetensors clip_vision open-clip-xlm-roberta-large-vit-huge-14_visual_fp16.safetensors
dl https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Wan2_1-I2V-14B-480P_fp8_e4m3fn.safetensors diffusion_models/WanVideo Wan2_1-I2V-14B-480P_fp8_e4m3fn.safetensors
dl https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/umt5-xxl-enc-bf16.safetensors text_encoders umt5-xxl-enc-bf16.safetensors
dl https://huggingface.co/Kijai/WanVideo_comfy/resolve/main/Wan2_1_VAE_bf16.safetensors vae/WanVideo Wan2_1_VAE_bf16.safetensors
dl https://huggingface.co/Comfy-Org/Lumina_Image_2.0_Repackaged/resolve/main/split_files/vae/ae.safetensors vae ae.safetensors
dl https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp8_e4m3fn_scaled.safetensors text_encoders/t5 t5xxl_fp8_e4m3fn_scaled.safetensors
dl https://huggingface.co/Comfy-Org/flux1-kontext-dev_ComfyUI/resolve/main/split_files/diffusion_models/flux1-dev-kontext_fp8_scaled.safetensors diffusion_models flux1-dev-kontext_fp8_scaled.safetensors
dl https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors diffusion_models wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors
dl https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/diffusion_models/wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors diffusion_models wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors
dl https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/vae/wan_2.1_vae.safetensors vae wan_2.1_vae.safetensors
dl https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/vae/wan2.2_vae.safetensors vae wan2.2_vae.safetensors
dl https://huggingface.co/Comfy-Org/Wan_2.2_ComfyUI_Repackaged/resolve/main/split_files/text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors text_encoders umt5_xxl_fp8_e4m3fn_scaled.safetensors
EOF
chmod +x /usr/local/bin/comfy-models-download.sh
# run once, in background, with a lock and logs
mkdir -p "$WORK/logs"
nohup flock -n /tmp/comfy-models.lock \
bash -lc "nice -n 10 ionice -c2 -n7 /usr/local/bin/comfy-models-download.sh" \
>"$WORK/logs/model_download.log" 2>&1 & disown
# 4) Hand off to normal startup (foreground)
exec /app/utils/init.sh
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment