Elvenson commited on
Commit
059fad7
1 Parent(s): 2eead2f

add handler, README

Browse files
Files changed (3) hide show
  1. .gitattributes +34 -0
  2. README.md +50 -0
  3. handler.py +46 -0
.gitattributes ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: creativeml-openrail-m
3
+ tags:
4
+ - stable-diffusion
5
+ - stable-diffusion-diffusers
6
+ - endpoints-template
7
+ duplicated_from: philschmid/stable-diffusion-v1-4-endpoints
8
+ ---
9
+ # Fork of [CompVis/stable-diffusion-v1-4](https://huggingface.co/CompVis/stable-diffusion-v1-4)
10
+ > Stable Diffusion is a latent text-to-image diffusion model capable of generating photo-realistic images given any text input.
11
+ > For more information about how Stable Diffusion functions, please have a look at [🤗's Stable Diffusion with 🧨Diffusers blog](https://huggingface.co/blog/stable_diffusion).
12
+ For more information about the model, license and limitations check the original model card at [CompVis/stable-diffusion-v1-4](https://huggingface.co/CompVis/stable-diffusion-v1-4).
13
+ ### License (CreativeML OpenRAIL-M)
14
+ The full license can be found here: https://huggingface.co/spaces/CompVis/stable-diffusion-license
15
+ ---
16
+ This repository implements a custom `handler` task for `text-to-image` for 🤗 Inference Endpoints. The code for the customized pipeline is in the [pipeline.py](https://huggingface.co/philschmid/stable-diffusion-v1-4-endpoints/blob/main/handler.py).
17
+ There is also a [notebook](https://huggingface.co/philschmid/stable-diffusion-v1-4-endpoints/blob/main/create_handler.ipynb) included, on how to create the `handler.py`
18
+ ### expected Request payload
19
+ ```json
20
+ {
21
+ "inputs": "A prompt used for image generation"
22
+ }
23
+ ```
24
+ below is an example on how to run a request using Python and `requests`.
25
+ ## Run Request
26
+ ```python
27
+ import json
28
+ from typing import List
29
+ import requests as r
30
+ import base64
31
+ from PIL import Image
32
+ from io import BytesIO
33
+ ENDPOINT_URL = ""
34
+ HF_TOKEN = ""
35
+ # helper decoder
36
+ def decode_base64_image(image_string):
37
+ base64_image = base64.b64decode(image_string)
38
+ buffer = BytesIO(base64_image)
39
+ return Image.open(buffer)
40
+ def predict(prompt:str=None):
41
+ payload = {"inputs": code_snippet,"parameters": parameters}
42
+ response = r.post(
43
+ ENDPOINT_URL, headers={"Authorization": f"Bearer {HF_TOKEN}"}, json={"inputs": prompt}
44
+ )
45
+ resp = response.json()
46
+ return decode_base64_image(resp["image"])
47
+ prediction = predict(
48
+ prompt="the first animal on the mars"
49
+ )
50
+ ```
handler.py ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import base64
2
+ from io import BytesIO
3
+ from typing import Dict, List, Any
4
+
5
+ import torch
6
+ from PIL import Image
7
+ from diffusers import StableDiffusionPipeline
8
+
9
+
10
+ REPO_ID = "runwayml/stable-diffusion-v1-5"
11
+
12
+
13
+ # helper decoder
14
+ def decode_base64_image(image_string):
15
+ base64_image = base64.b64decode(image_string)
16
+ buffer = BytesIO(base64_image)
17
+ return Image.open(buffer)
18
+
19
+
20
+ class EndpointHandler:
21
+ def __init__(self, path=""):
22
+ self.pipe = StableDiffusionPipeline.from_pretrained("./stable-diffusion-v1-5")
23
+ # self.pipe = self.pipe.to("cuda")
24
+
25
+ def __call__(self, data: Any) -> List[List[Dict[str, float]]]:
26
+ """
27
+ Args:
28
+ data (:obj:):
29
+ includes the input data and the parameters for the inference.
30
+ Return:
31
+ A :obj:`dict`:. base64 encoded image
32
+ """
33
+ prompts = data.pop("inputs", None)
34
+ encoded_image = data.pop("image", None)
35
+ init_image = None
36
+ if encoded_image:
37
+ init_image = decode_base64_image(encoded_image)
38
+ init_image.thumbnail((768, 768))
39
+ image = self.pipe(prompts, init_image=init_image).images[0]
40
+
41
+ # encode image as base 64
42
+ buffered = BytesIO()
43
+ image.save(buffered, format="png")
44
+
45
+ # post process the prediction
46
+ return {"image": buffered.getvalue()}