Files
ubuntu-bare-metal/stacks/server-ui/scripts/comfyui/download-model.sh
T
tomasz-syn-grzegorza 73e4fc005e Add stack Update, ComfyUI model manager, and slim ComfyUI stack.
Server UI gains Update on stack cards, ComfyUI Models tab with workflow
scan and downloads, and centralized comfyui_config. Model catalog and
download scripts move from stacks/comfyui to server-ui so ComfyUI stays a
minimal Docker wrapper for easier image updates.
2026-07-05 18:45:17 +00:00

106 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/catalog-lib.sh"
if [[ $# -lt 1 ]]; then
echo "Usage: $0 <catalog-model-id>"
echo ""
echo "Available models:"
catalog_list_ids | sed 's/^/ /'
exit 1
fi
MODEL_ID="$1"
if ! catalog_list_ids | grep -qx "${MODEL_ID}"; then
echo "ERROR: Unknown model id: ${MODEL_ID}"
echo "Run: ${SCRIPT_DIR}/list-models.sh"
exit 1
fi
load_comfyui_stack_env
DATA_ROOT="${DATA_ROOT:-/data}"
catalog_ensure_dirs "${DATA_ROOT}"
SOURCE="$(catalog_get_field "${MODEL_ID}" source)"
NAME="$(catalog_get_field "${MODEL_ID}" name)"
DEST="$(catalog_dest_path "${MODEL_ID}" "${DATA_ROOT}")"
echo "=== Download: ${NAME} (${MODEL_ID}) ==="
echo "Source: ${SOURCE}"
echo "Target: ${DEST}"
echo ""
if [[ -f "${DEST}" ]]; then
echo "Already exists: ${DEST}"
echo ""
echo "Done."
exit 0
fi
mkdir -p "$(dirname "${DEST}")"
# shellcheck disable=SC1091
source "${SCRIPT_DIR}/download-http-lib.sh"
case "${SOURCE}" in
huggingface)
HF_REPO="$(catalog_get_field "${MODEL_ID}" hf_repo)"
FILENAME="$(catalog_get_field "${MODEL_ID}" filename)"
DOWNLOAD_URL="$(catalog_get_field "${MODEL_ID}" download_url)"
HF_REVISION="$(catalog_get_field "${MODEL_ID}" hf_revision)"
REVISION="${HF_REVISION:-main}"
if [[ -n "${DOWNLOAD_URL}" ]]; then
URL="${DOWNLOAD_URL}"
elif [[ -n "${HF_REPO}" && -n "${FILENAME}" ]]; then
URL="https://huggingface.co/${HF_REPO}/resolve/${REVISION}/${FILENAME}"
else
echo "ERROR: Catalog entry missing download_url or hf_repo/filename"
exit 1
fi
download_http_file "${URL}" "${DEST}"
;;
url)
DOWNLOAD_URL="$(catalog_get_field "${MODEL_ID}" download_url)"
if [[ -z "${DOWNLOAD_URL}" ]]; then
echo "ERROR: Catalog entry missing download_url"
exit 1
fi
download_http_file "${DOWNLOAD_URL}" "${DEST}"
;;
civitai)
CIVITAI_MODEL_ID="$(catalog_get_field "${MODEL_ID}" civitai_model_id)"
if [[ -z "${CIVITAI_MODEL_ID}" ]]; then
echo "ERROR: Catalog entry missing civitai_model_id"
exit 1
fi
if [[ -z "${CIVITAI_TOKEN:-}" ]]; then
echo "ERROR: CIVITAI_TOKEN not set in stacks/comfyui/.env"
exit 1
fi
curl -fL \
-H "Authorization: Bearer ${CIVITAI_TOKEN}" \
-o "${DEST}" \
"https://civitai.com/api/download/models/${CIVITAI_MODEL_ID}"
;;
*)
echo "ERROR: Unknown source: ${SOURCE}"
exit 1
;;
esac
if [[ ! -f "${DEST}" ]]; then
echo "ERROR: Download finished but file missing: ${DEST}"
exit 1
fi
echo ""
echo "Done."