stable-diffusion - annna - Annna the nice friendly bot.
(HTM) git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/annna/
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
---
stable-diffusion (3090B)
---
1 #!/bin/sh
2
3 export PATH="$HOME/bin:$PATH"
4
5 if [ $# -lt 2 ];
6 then
7 printf "usage: %s output.png some funny cat prompt ...\n" \
8 "$(basename "${0}")" >&2
9 exit 1
10 fi
11
12 outputf="${1}"
13 shift 1
14 prompt="$@"
15
16 sdnegative='nipples, busty, nude, lowres, (worst quality, low quality, normal quality:2), cropped, infant, blur, haze, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, extra limbs, disfigured, deformed, body out of frame, bad anatomy, watermark, signature, cut off, low contrast, underexposed, overexposed, bad art, beginner, amateur, distorted face, blurry, draft, grainy, nsfw'
17 sdthreads=16
18
19 sdwidth=512
20 case "${prompt}" in
21 *width=*)
22 sdwidth="$(printf "${prompt}\n" \
23 | sed 's, ,\n,g' \
24 | grep "^width=" \
25 | sed 's,.*=,,')"
26 prompt="$(printf "${prompt}\n" \
27 | sed 's, ,\n,g' \
28 | grep -v "^width=" \
29 | paste -sd ' ')"
30 ;;
31 esac
32
33 sdheight=512
34 case "${prompt}" in
35 *height=*)
36 sdheight="$(printf "${prompt}\n" \
37 | sed 's, ,\n,g' \
38 | grep "^height=" \
39 | sed 's,.*=,,')"
40 prompt="$(printf "${prompt}\n" \
41 | sed 's, ,\n,g' \
42 | grep -v "^height=" \
43 | paste -sd ' ')"
44 ;;
45 esac
46
47 sdsteps=20
48 case "${prompt}" in
49 *steps=*)
50 sdsteps="$(printf "${prompt}\n" \
51 | sed 's, ,\n,g' \
52 | grep "^steps=" \
53 | sed 's,.*=,,')"
54 prompt="$(printf "${prompt}\n" \
55 | sed 's, ,\n,g' \
56 | grep -v "^steps=" \
57 | paste -sd ' ')"
58 ;;
59 esac
60
61 sdscale=8
62 case "${prompt}" in
63 *scale=*)
64 sdscale="$(printf "${prompt}\n" \
65 | sed 's, ,\n,g' \
66 | grep "^scale=" \
67 | sed 's,.*=,,')"
68 prompt="$(printf "${prompt}\n" \
69 | sed 's, ,\n,g' \
70 | grep -v "^scale=" \
71 | paste -sd ' ')"
72 ;;
73 esac
74
75 function local_sd() {
76 outputf="${1}"
77 prompt="${2}"
78
79 sdbase="/br/ai/stable-diffusion.cpp"
80 sdcmd="${sdbase}/build/bin/sd \
81 -t ${sdthreads} \
82 --steps ${sdsteps} \
83 -s -1 \
84 -H ${sdheight} \
85 -W ${sdwidth} \
86 --cfg-scale ${sdscale}"
87 sdmodel="${sdbase}/${SD_MODEL:-models/epicphotogasm_x.f16.gguf}"
88
89 if mountpoint -q /br/ai/tmp;
90 then
91 sdbasename="$(basename "${sdmodel}")"
92 sdtmppath="/br/ai/tmp/${sdbasename}"
93 [ ! -r "${sdtmppath}" ] && cp "${sdmodel}" /br/ai/tmp
94 [ -r "${sttmppath}" ] && sdmodel="${sdtmppath}"
95 fi
96
97 ${sdcmd} --type f16 -m ${sdmodel} -o "${outputf}" -p "${prompt}" -n "${sdnegative}" >/dev/null 2>&1
98 #${sdcmd} -m ${sdmodel} -o "${outputf}" -p "$@" -n "${sdnegative}" -v
99 }
100
101 function remote_sd() {
102 outputf="${1}"
103 ofilename="$(basename "${outputf}")"
104 prompt="${2}"
105
106 sdbase="/home/annna/scm/stable-diffusion.cpp"
107 sdcmd="${sdbase}/build/bin/sd \
108 -t ${sdthreads} \
109 --steps ${sdsteps} \
110 -s -1 \
111 -H ${sdheight} \
112 -W ${sdwidth} \
113 --cfg-scale ${sdscale}"
114 sdmodel="${sdbase}/${SD_MODEL:-models/epicphotogasm_x.f16.gguf}"
115
116 ollama-gpu \
117 "$(printf '%q ' ${sdcmd} --type f16 -m ${sdmodel} -o "/tmp/${ofilename}" -p "${prompt}" -n "${sdnegative}")" \
118 >/dev/null 2>&1
119 [ $? -gt 0 ] && return
120 scp -P 5680 "annna@gpu.r-36.net:/tmp/${ofilename}" "${outputf}"
121 ollama-gpu rm "/tmp/${ofilename}"
122 }
123
124 remote_sd "${outputf}" "${prompt}"
125 [ ! -s "${outputf}" ] && local_sd "${outputf}" "${prompt}"
126 [ ! -s "${outputf}" -a -f "${outputf}" ] && rm -f "${outputf}"
127