chatV / img /readme.md
tangmen's picture
add files
113dbd0
simple stable diffusion server that saves images to cloud storage - returns links to google cloud storage
## Creators
[![netwrck logo](https://static.netwrck.com/static/img/netwrck-logo-colord256.png)](https://netwrck.com)
Checkout [Voiced AI Characters to chat with](https://netwrck.com) at [netwrck.com](https://netwrck.com)
Characters are narrated and written by many GPT models trained on 1000s of fantasy novels and chats.
Also for LLMs for making Text - Checkout [Text-Generator.io](https://text-generator.io) for a Open Source text generator that uses many AI models to generate the best along with image understanding and OCR networks.
## Setup
. Create a virtual environment (optional)
```bash
python3 -m venv venv
source venv/bin/activate
```
#### Install dependencies
```bash
pip install -r requirements.txt
pip install -r dev-requirements.txt
cd models
git clone https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0
# install stopwords
python -c "import nltk; nltk.download('stopwords')"
```
#### Edit settings in env.py
#### download your Google cloud credentials to secrets/google-credentials.json
Images generated will be stored in your bucket
#### Run the server
```bash
GOOGLE_APPLICATION_CREDENTIALS=secrets/google-credentials.json gunicorn -k uvicorn.workers.UvicornWorker -b :8000 main:app --timeout 600 -w 1
```
with max 4 requests at a time
This will drop a lot of requests under load instead of taking on too much work and causing OOM Errors.
```bash
GOOGLE_APPLICATION_CREDENTIALS=secrets/google-credentials.json PYTHONPATH=. uvicorn --port 8000 --timeout-keep-alive 600 --workers 1 --backlog 1 --limit-concurrency 4 main:app
```
#### Make a Request
http://localhost:8000/create_and_upload_image?prompt=good%20looking%20elf%20fantasy%20character&save_path=created/elf.webp
Response
```shell
{"path":"https://storage.googleapis.com/static.netwrck.com/static/uploads/created/elf.png"}
```
http://localhost:8000/docs
Check to see that "good Looking elf fantasy character" was created
![elf.png](https://storage.googleapis.com/static.netwrck.com/static/uploads/created/elf.png)
![elf2.png](https://storage.googleapis.com/static.netwrck.com/static/uploads/created/elf2.png)
### Testing
```bash
GOOGLE_APPLICATION_CREDENTIALS=secrets/google-credentials.json pytest .
```
#### Running under supervisord
edit ops/supervisor.conf
install the supervisor
apt-get install -y supervisor
```bash
sudo cat >/etc/supervisor/conf.d/python-app.conf << EOF
[program:sdif_http_server]
directory=/home/lee/code/sdif
command=/home/lee/code/sdif/.env/bin/uvicorn --port 8000 --timeout-keep-alive 600 --workers 1 --backlog 1 --limit-concurrency 4 main:app
autostart=true
autorestart=true
environment=VIRTUAL_ENV="/home/lee/code/sdif/.env/",PATH="/opt/app/sdif/.env/bin",HOME="/home/lee",GOOGLE_APPLICATION_CREDENTIALS="secrets/google-credentials.json",PYTHONPATH="/home/lee/code/sdif"
stdout_logfile=syslog
stderr_logfile=syslog
user=lee
EOF
supervisorctl reread
supervisorctl update
```
#### run a manager process to kill/restart if the server if it is hanging
Sometimes the server just stops working and needs a hard restart
This command will kill the server if it is hanging and restart it (must be running under supervisorctl)
```
python3 manager.py
```
# hack restarting without supervisor
run the server in a infinite loop
```
while true; do GOOGLE_APPLICATION_CREDENTIALS=secrets/google-credentials.json PYTHONPATH=. uvicorn --port 8000 --timeout-keep-alive 600 --workers 1 --backlog 1 --limit-concurrency 4 main:app; done
```