From 6b2068e8039f5d7f56c53ae23fa915a89f67941e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Sun, 23 Nov 2025 17:58:50 +0100 Subject: [PATCH] feat: add CivitAI NSFW model downloader script MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add artifact_civitai_download.sh with beautiful purple/magenta CLI - Rename artifact_comfyui_download.sh to artifact_hugginface_download.sh - Remove comfyui_models.example.yaml (moved to runpod repo) Features: - Dedicated downloader for CivitAI models - Beautiful CLI with progress bars and retry logic - Same architecture as HuggingFace downloader 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- artifact_civitai_download.sh | Bin 0 -> 22536 bytes ...load.sh => artifact_hugginface_download.sh | 0 comfyui_models.example.yaml | 112 ------------------ 3 files changed, 112 deletions(-) create mode 100755 artifact_civitai_download.sh rename artifact_comfyui_download.sh => artifact_hugginface_download.sh (100%) delete mode 100644 comfyui_models.example.yaml diff --git a/artifact_civitai_download.sh b/artifact_civitai_download.sh new file mode 100755 index 0000000000000000000000000000000000000000..7fea697facfc91a998730094707852da4616d053 GIT binary patch literal 22536 zcmcg!&2k$_a<)&7z{Lk2e649w18{~QNJ+Eaa2m9ie@!fCWFEi_}n;=Kha+eb`gRZX1%D>9W%*yIVUo|e`Y2zZy zt}2fzkJN7bKF(Vmb(jpJvD!|!!s$>A(kRTMOl6D7IG(=CRGz5aWHMTuchoRWqd}geag;G0=UI3e z?WoO0m}16okoO0KSs3?+8mG=@@wy zrIUCXf}_beNi$VDnWwXH)HnqB(>zpXSJ5N_o)3!=;PoO9Ug@<@+h@({o2{o$UvEvS zMEZV`Mwe+ahrk4<%JXh(_eay|`=`{e*WPmt+h{oGwcAIo=?R)%wY%Npm#*z8+MajM z+pgsqS`J$W?W41nYy1w4yRTXvuwS9&<%`alH}db$1YDmd<6-6bad)rpc_tgD!t>~AF=d;=D!4$6Ra;R13dh1P}w_vdDJ~_?KOkH`s<)_dV=xY_GvSy1(p3y zk2*aDur7u-ga1R1eduSqhvxqYD$LoS3Gk<9Ewr5km6xsFQRnEO8T<$Oc8>Oso564J ztJUirzwGxq2QPrbztgPe&%5nDH#dX-3ZSmP>v!e#U&zyocI&5C&EPNPNe1u~tsY?f z@Sj9S=ZHx9Z%pve>?9+4wBI>6@3qc4$43th9`H^FX*|pAPPC|;?)Ew-XZ^hnIJs6E z3>E&1eQFv`BK*90-a38JKRrJ0?Y3WUys%YW|erP zUcXlL5h3;B_^`cfoTSO`v7Kg(bUvLW!-nk0W((b1gp+Zg-oE`_5 z2Un3(Dwv&NltVVEH=mv)LzSdzo{2QaMv~C9#&wdu%VyyqDhUcZw+xJ?@8dL?PT(d8 ziY*u%t*ke@=3%GqAZc+lv?sL;c--;%*~z)l@*DS57^&Sf4FMx9XCA386mhIR6&<5n zn*(CZC*xv<-9n_qZE^f6+AnMdXwXs*>R(`cstsnkxBt%CJY4d!r-ht*~k#^p&}eN;K(fT5}eRr@=r z2I?cdn8QnjEIx~Z)yC?NqvSrAe`<=nrS``VaSP0!5$`Z=JP_&@(idTm74x9p7+k=! zPPcRRO6{K??UDyU9w4GCc!8JkK)ncOvuK*B7f~8L^xS}VlE%|qjpow+6NrYd0Kp>fPrHrc+fnfu>ca0Japo097Wn zh~#~vR@3;$;`tzK2`bBq)`<*W16;#4NSg%Bp)MWyA*N>OuUfGx>L z`qx_|0wY+5@_aCevdp4v(bLFr^a^>oPzi`_uK*OKY2ubc84SW=0%8NK0uc4vub((3 zUWe%vi{nm=Bz6Wg9XAy~IWX~bl-vo!vhIfBtveuOc{H;SWGxToX$o(yyu|Y)565VH z;;(yc3!biCv=rQsPv>q#8!-;Dzx0 zwTRPLLGD9P-v6s~5!M zr^CkpVAX>F)*cTVkB4sE!;zd>RtI>}tfrsLWmYFBK$s%pdDS}Xs#+FLD5~ZEQYgbA z?RsTKUHTNKmQ;b7`V<_OR|$gQ=rTzcvQUKlMShh`pJK}k*6cXOOZN@b4?nbzPY9C= zFi6r|Q9tuLTV$1r9jKZ}TxXkMdinnK_S=e?&u@P6wo=K{#SYKTTYLhiqGmyCsA^hW zS0Qra(uZ_T;(makZkt&+iu#mtuZ{Hn43FB))l^l49porvRR_W}0f<1`yo~ai>$#zB zmZIP^A!|h~upwgeW@{O2iVK2`Tc8UBj?wzac~pVA=ax!7!31yBb-jE%=q`@D2YfQm zXY+go{9=^13O>?et!}s7g-0UkveSF!fi{I$(qnsekb$1<6<8y;)JE3pu!DHG-EF

PB%QUQS65oeNHIF(}L`n!+mcU%WxBsD|S;S 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 file mappings for symlinks. -# -# IMPORTANT: Use the 'files' array to specify EXACTLY which files to link -# and where to link them. Without explicit file mappings, ALL files from -# the repository will be linked (which causes trash/wrong files). -# -# Format: -# - repo_id: HuggingFace repository (e.g., "runwayml/stable-diffusion-v1-5") -# - description: Human-readable description -# - size_gb: Approximate size -# - essential: Is this a core model? -# - type: ComfyUI subdirectory (checkpoints, vae, loras, controlnet, etc.) -# - filename: Optional filter for find_model_files (usually leave empty) -# - files: Array of {source: "filename_in_repo", dest: "filename_in_comfyui"} -# -# Example: -# files: -# - source: "v1-5-pruned-emaonly.safetensors" -# dest: "sd-v1-5.safetensors" -# -# This will create: ComfyUI/models/checkpoints/sd-v1-5.safetensors -# Pointing to: ~/.cache/huggingface/.../v1-5-pruned-emaonly.safetensors - -settings: - # RunPod: /workspace/huggingface_cache - # Local: ~/.cache/huggingface - cache_dir: /workspace/huggingface_cache - parallel_downloads: 1 - -model_categories: - # Stable Diffusion Checkpoints - checkpoints: - - repo_id: runwayml/stable-diffusion-v1-5 - description: Stable Diffusion v1.5 - size_gb: 4 - essential: true - type: checkpoints - filename: "" - files: - - source: "v1-5-pruned-emaonly.safetensors" - dest: "sd-v1-5.safetensors" - - - repo_id: stabilityai/stable-diffusion-xl-base-1.0 - description: SDXL Base 1.0 - size_gb: 7 - essential: true - type: checkpoints - filename: "" - files: - - source: "sd_xl_base_1.0.safetensors" - dest: "sdxl-base-1.0.safetensors" - - # VAE Models - vae: - - repo_id: stabilityai/sd-vae-ft-mse-original - description: SD VAE ft MSE - size_gb: 0.3 - essential: true - type: vae - filename: "" - files: - - source: "vae-ft-mse-840000-ema-pruned.safetensors" - dest: "sd-vae-ft-mse.safetensors" - - # LoRA Models - loras: - - repo_id: latent-consistency/lcm-lora-sdv1-5 - description: LCM LoRA for SD v1.5 - size_gb: 0.1 - essential: false - type: loras - filename: "" - files: - - source: "pytorch_lora_weights.safetensors" - dest: "lcm-lora-sdv1-5.safetensors" - - # ControlNet Models - controlnet: - - repo_id: lllyasviel/control_v11p_sd15_canny - description: ControlNet Canny - size_gb: 1.4 - essential: false - type: controlnet - filename: "" - files: - - source: "diffusion_pytorch_model.safetensors" - dest: "control_v11p_sd15_canny.safetensors" - - - repo_id: lllyasviel/control_v11p_sd15_openpose - description: ControlNet OpenPose - size_gb: 1.4 - essential: false - type: controlnet - filename: "" - files: - - source: "diffusion_pytorch_model.safetensors" - dest: "control_v11p_sd15_openpose.safetensors" - - # Upscale Models - upscale_models: - - repo_id: ai-forever/Real-ESRGAN - description: Real-ESRGAN x4 - size_gb: 0.1 - essential: false - type: upscale_models - filename: "" - files: - - source: "RealESRGAN_x4plus.pth" - dest: "RealESRGAN_x4plus.pth"