|
|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set -e |
|
|
|
|
|
|
|
|
REPO_ID="Wangchuk1376/ThangkaModels" |
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
|
|
LOCAL_DIR="$SCRIPT_DIR" |
|
|
|
|
|
|
|
|
RED='\033[0;31m' |
|
|
GREEN='\033[0;32m' |
|
|
YELLOW='\033[1;33m' |
|
|
BLUE='\033[0;34m' |
|
|
NC='\033[0m' |
|
|
|
|
|
|
|
|
print_banner() { |
|
|
echo -e "${BLUE}" |
|
|
echo "╔══════════════════════════════════════════════════════════════╗" |
|
|
echo "║ ║" |
|
|
echo "║ 🎨 唐卡修复AI模型 - Hugging Face上传工具 🎨 ║" |
|
|
echo "║ ║" |
|
|
echo "║ 上传模型到: ${REPO_ID} ║" |
|
|
echo "║ ║" |
|
|
echo "╚══════════════════════════════════════════════════════════════╝" |
|
|
echo -e "${NC}" |
|
|
} |
|
|
|
|
|
|
|
|
check_dependencies() { |
|
|
echo -e "${YELLOW}🔍 检查依赖...${NC}" |
|
|
|
|
|
|
|
|
if ! command -v hf &> /dev/null && ! command -v huggingface-cli &> /dev/null; then |
|
|
echo -e "${RED}❌ Hugging Face CLI未安装${NC}" |
|
|
echo "" |
|
|
echo "请安装Hugging Face CLI:" |
|
|
echo "" |
|
|
echo " macOS:" |
|
|
echo " brew install huggingface-cli" |
|
|
echo "" |
|
|
echo " Linux/Windows:" |
|
|
echo " pip install huggingface_hub[cli]" |
|
|
echo "" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
|
|
|
HF_CMD="hf" |
|
|
if ! command -v hf &> /dev/null; then |
|
|
HF_CMD="huggingface-cli" |
|
|
fi |
|
|
|
|
|
echo -e "${GREEN}✅ Hugging Face CLI已安装${NC}" |
|
|
|
|
|
|
|
|
if ! $HF_CMD whoami &> /dev/null; then |
|
|
echo -e "${RED}❌ 未登录Hugging Face${NC}" |
|
|
echo "" |
|
|
echo "请先登录:" |
|
|
echo " $HF_CMD login" |
|
|
echo "" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
CURRENT_USER=$($HF_CMD whoami 2>&1 | head -n 1) |
|
|
echo -e "${GREEN}✅ 已登录为: ${CURRENT_USER}${NC}" |
|
|
echo "" |
|
|
} |
|
|
|
|
|
|
|
|
confirm_upload() { |
|
|
echo -e "${YELLOW}📋 上传信息确认:${NC}" |
|
|
echo " 仓库: ${REPO_ID}" |
|
|
echo " 本地目录: ${LOCAL_DIR}" |
|
|
echo "" |
|
|
|
|
|
|
|
|
echo " 正在统计文件..." |
|
|
TOTAL_FILES=$(find "$LOCAL_DIR" -type f ! -path "*/\.*" ! -name "upload_to_huggingface.sh" | wc -l | tr -d ' ') |
|
|
TOTAL_SIZE=$(du -sh "$LOCAL_DIR" | cut -f1) |
|
|
|
|
|
echo " 文件数量: ${TOTAL_FILES}" |
|
|
echo " 总大小: ${TOTAL_SIZE}" |
|
|
echo "" |
|
|
|
|
|
|
|
|
echo " 主要文件:" |
|
|
if [ -f "$LOCAL_DIR/README.md" ]; then |
|
|
echo " ✅ README.md" |
|
|
else |
|
|
echo " ⚠️ README.md (未找到)" |
|
|
fi |
|
|
|
|
|
if [ -d "$LOCAL_DIR/models" ]; then |
|
|
echo " ✅ models/ 目录" |
|
|
echo " - sd2.1_base_paddle/" |
|
|
echo " - control_v11p_sd21_canny_paddle/" |
|
|
echo " - finetuned/ (LoRA模型)" |
|
|
else |
|
|
echo " ⚠️ models/ 目录 (未找到)" |
|
|
fi |
|
|
echo "" |
|
|
|
|
|
|
|
|
read -p "确认上传? (y/N): " -n 1 -r |
|
|
echo |
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then |
|
|
echo -e "${YELLOW}❌ 上传已取消${NC}" |
|
|
exit 0 |
|
|
fi |
|
|
echo "" |
|
|
} |
|
|
|
|
|
|
|
|
create_gitattributes() { |
|
|
echo -e "${YELLOW}📝 创建.gitattributes...${NC}" |
|
|
|
|
|
cat > "$LOCAL_DIR/.gitattributes" << 'EOF' |
|
|
|
|
|
*.safetensors filter=lfs diff=lfs merge=lfs -text |
|
|
*.pdparams filter=lfs diff=lfs merge=lfs -text |
|
|
*.bin filter=lfs diff=lfs merge=lfs -text |
|
|
*.ckpt filter=lfs diff=lfs merge=lfs -text |
|
|
*.pth filter=lfs diff=lfs merge=lfs -text |
|
|
*.h5 filter=lfs diff=lfs merge=lfs -text |
|
|
*.pb filter=lfs diff=lfs merge=lfs -text |
|
|
*.msgpack filter=lfs diff=lfs merge=lfs -text |
|
|
*.tar.gz filter=lfs diff=lfs merge=lfs -text |
|
|
*.zip filter=lfs diff=lfs merge=lfs -text |
|
|
EOF |
|
|
|
|
|
echo -e "${GREEN}✅ .gitattributes创建完成${NC}" |
|
|
echo "" |
|
|
} |
|
|
|
|
|
|
|
|
upload_files() { |
|
|
echo -e "${BLUE}📤 开始上传文件...${NC}" |
|
|
echo "" |
|
|
|
|
|
cd "$LOCAL_DIR" |
|
|
|
|
|
|
|
|
echo -e "${YELLOW}步骤 1/3: 上传文档和配置文件...${NC}" |
|
|
if [ -f "README.md" ]; then |
|
|
$HF_CMD upload "$REPO_ID" README.md --repo-type model |
|
|
echo -e "${GREEN}✅ README.md 上传完成${NC}" |
|
|
fi |
|
|
|
|
|
if [ -f ".gitattributes" ]; then |
|
|
$HF_CMD upload "$REPO_ID" .gitattributes --repo-type model |
|
|
echo -e "${GREEN}✅ .gitattributes 上传完成${NC}" |
|
|
fi |
|
|
echo "" |
|
|
|
|
|
|
|
|
if [ -d "models" ]; then |
|
|
echo -e "${YELLOW}步骤 2/3: 上传models目录...${NC}" |
|
|
echo " ⏳ 这可能需要较长时间,请耐心等待..." |
|
|
echo "" |
|
|
|
|
|
$HF_CMD upload "$REPO_ID" models/ \ |
|
|
--repo-type model \ |
|
|
--num-workers 4 \ |
|
|
--verbose |
|
|
|
|
|
echo "" |
|
|
echo -e "${GREEN}✅ models目录上传完成${NC}" |
|
|
fi |
|
|
echo "" |
|
|
|
|
|
|
|
|
echo -e "${YELLOW}步骤 3/3: 上传其他文件...${NC}" |
|
|
|
|
|
|
|
|
OTHER_FILES=$(find . -maxdepth 1 -type f \ |
|
|
! -name "README.md" \ |
|
|
! -name ".gitattributes" \ |
|
|
! -name ".DS_Store" \ |
|
|
! -name "upload_to_huggingface.sh" \ |
|
|
! -path "*/.*") |
|
|
|
|
|
if [ -n "$OTHER_FILES" ]; then |
|
|
for file in $OTHER_FILES; do |
|
|
filename=$(basename "$file") |
|
|
$HF_CMD upload "$REPO_ID" "$file" --repo-type model |
|
|
echo -e "${GREEN}✅ ${filename} 上传完成${NC}" |
|
|
done |
|
|
else |
|
|
echo " 没有其他文件需要上传" |
|
|
fi |
|
|
echo "" |
|
|
} |
|
|
|
|
|
|
|
|
verify_upload() { |
|
|
echo -e "${BLUE}🔍 验证上传...${NC}" |
|
|
echo "" |
|
|
|
|
|
REPO_URL="https://huggingface.co/${REPO_ID}" |
|
|
|
|
|
echo " 模型仓库地址: ${REPO_URL}" |
|
|
echo "" |
|
|
|
|
|
|
|
|
if command -v open &> /dev/null; then |
|
|
read -p "是否在浏览器中打开? (Y/n): " -n 1 -r |
|
|
echo |
|
|
if [[ ! $REPLY =~ ^[Nn]$ ]]; then |
|
|
open "$REPO_URL" |
|
|
fi |
|
|
fi |
|
|
echo "" |
|
|
} |
|
|
|
|
|
|
|
|
show_completion() { |
|
|
echo -e "${GREEN}" |
|
|
echo "╔══════════════════════════════════════════════════════════════╗" |
|
|
echo "║ ║" |
|
|
echo "║ 🎉 上传完成! 🎉 ║" |
|
|
echo "║ ║" |
|
|
echo "╚══════════════════════════════════════════════════════════════╝" |
|
|
echo -e "${NC}" |
|
|
echo "" |
|
|
echo "📦 模型仓库: https://huggingface.co/${REPO_ID}" |
|
|
echo "" |
|
|
echo "📚 使用方法:" |
|
|
echo "" |
|
|
echo " # 使用CLI下载" |
|
|
echo " huggingface-cli download ${REPO_ID} --local-dir ./models" |
|
|
echo "" |
|
|
echo " # 使用Python下载" |
|
|
echo " from huggingface_hub import snapshot_download" |
|
|
echo " snapshot_download(repo_id=\"${REPO_ID}\", local_dir=\"./models\")" |
|
|
echo "" |
|
|
echo " # 在代码中使用" |
|
|
echo " from diffusion_paddle import load_model" |
|
|
echo " pipe = load_model(\"${REPO_ID}/sd2.1_base_paddle\")" |
|
|
echo "" |
|
|
echo "🌟 别忘了给项目点星!" |
|
|
echo " GitHub: https://github.com/WangchukMind/thangka-restoration-ai" |
|
|
echo "" |
|
|
} |
|
|
|
|
|
|
|
|
main() { |
|
|
print_banner |
|
|
|
|
|
|
|
|
check_dependencies |
|
|
|
|
|
|
|
|
confirm_upload |
|
|
|
|
|
|
|
|
create_gitattributes |
|
|
|
|
|
|
|
|
upload_files |
|
|
|
|
|
|
|
|
verify_upload |
|
|
|
|
|
|
|
|
show_completion |
|
|
} |
|
|
|
|
|
|
|
|
main "$@" |
|
|
|
|
|
|