Files
2026-08-16 18:24:52 +07:00

131 lines
3.6 KiB
Bash

#!/bin/bash
# Download pre-quantized ACE-Step GGUF models from HuggingFace
#
# Usage: ./models.sh [options]
# default: Q8_0 turbo essentials (text-encoder + LM-4B + DiT-turbo + VAE)
# --all: all models, all quants
# --quant X: use quant X (Q4_K_M, Q5_K_M, Q6_K, Q8_0, BF16)
# --lm SIZE: LM size (0.6B, 1.7B, 4B, default: 4B)
# --sft: include SFT DiT variant
# --base: include base DiT variant
# --shifts: include shift1/shift3/continuous DiT variants
set -eu
REPO="Serveurperso/ACE-Step-1.5-GGUF"
DIR="models"
QUANT="Q8_0"
LM_SIZE="4B"
ALL=0
SFT=0
BASE=0
SHIFTS=0
while [ $# -gt 0 ]; do
case "$1" in
--all) ALL=1 ;;
--quant) QUANT="$2"; shift ;;
--lm) LM_SIZE="$2"; shift ;;
--sft) SFT=1 ;;
--base) BASE=1 ;;
--shifts) SHIFTS=1 ;;
*) echo "Unknown option: $1"; exit 1 ;;
esac
shift
done
mkdir -p "$DIR"
dl() {
local file="$1"
if [ -f "$DIR/$file" ]; then
echo "[OK] $file"
return
fi
echo "[Download] $file"
hf download --quiet "$REPO" "$file" --local-dir "$DIR"
}
# Resolve quant to best available for each model type.
# Matches quantize.sh matrix exactly:
# Embedding/LM-small: BF16, Q8_0
# LM-4B: BF16, Q5_K_M, Q6_K, Q8_0 (Q4_K_M breaks audio codes)
# DiT: BF16, Q4_K_M, Q5_K_M, Q6_K, Q8_0
# Order: Q4_K_M < Q5_K_M < Q6_K < Q8_0 < BF16
# If requested quant unavailable, picks next larger available.
resolve_quant() {
local requested="$1" model_type="$2"
case "$model_type" in
emb|lm_small)
case "$requested" in
BF16) echo "BF16" ;;
*) echo "Q8_0" ;;
esac ;;
lm_4B)
case "$requested" in
BF16) echo "BF16" ;;
Q8_0) echo "Q8_0" ;;
Q6_K) echo "Q6_K" ;;
Q5_K_M|Q4_K_M) echo "Q5_K_M" ;;
*) echo "Q8_0" ;;
esac ;;
dit)
echo "$requested" ;;
esac
}
# VAE is always BF16 (small, quality-critical)
dl "vae-BF16.gguf"
# Text encoder
dl "Qwen3-Embedding-0.6B-$(resolve_quant "$QUANT" emb).gguf"
# LM
if [ "$LM_SIZE" = "4B" ]; then
dl "acestep-5Hz-lm-4B-$(resolve_quant "$QUANT" lm_4B).gguf"
else
dl "acestep-5Hz-lm-${LM_SIZE}-$(resolve_quant "$QUANT" lm_small).gguf"
fi
# DiT turbo (always included)
dl "acestep-v15-turbo-${QUANT}.gguf"
# Optional DiT variants
if [ "$SFT" = 1 ] || [ "$ALL" = 1 ]; then
dl "acestep-v15-sft-${QUANT}.gguf"
fi
if [ "$BASE" = 1 ] || [ "$ALL" = 1 ]; then
dl "acestep-v15-base-${QUANT}.gguf"
fi
if [ "$SHIFTS" = 1 ] || [ "$ALL" = 1 ]; then
dl "acestep-v15-turbo-shift1-${QUANT}.gguf"
dl "acestep-v15-turbo-shift3-${QUANT}.gguf"
dl "acestep-v15-turbo-continuous-${QUANT}.gguf"
fi
# --all: every model with its valid quants (matches quantize.sh)
if [ "$ALL" = 1 ]; then
# Embedding: BF16 + Q8_0 only
dl "Qwen3-Embedding-0.6B-BF16.gguf"
# Small/medium LM: BF16 + Q8_0 only (too small for aggressive quant)
for lm in 0.6B 1.7B; do
dl "acestep-5Hz-lm-${lm}-BF16.gguf"
dl "acestep-5Hz-lm-${lm}-Q8_0.gguf"
done
# Large LM: BF16 + Q5_K_M/Q6_K/Q8_0 (Q4_K_M breaks audio codes)
for q in BF16 Q5_K_M Q6_K Q8_0; do
dl "acestep-5Hz-lm-4B-${q}.gguf"
done
# DiT variants: BF16 + Q4_K_M/Q5_K_M/Q6_K/Q8_0
for dit in turbo sft base turbo-shift1 turbo-shift3 turbo-continuous; do
for q in BF16 Q4_K_M Q5_K_M Q6_K Q8_0; do
dl "acestep-v15-${dit}-${q}.gguf"
done
done
fi
echo "[Done] Models ready in $DIR/"