mirror of
https://github.com/vladmandic/automatic
synced 2026-09-20 01:31:13 +02:00
fix api ip-adapter
This commit is contained in:
+2
-1
@@ -44,7 +44,6 @@ Other than SD3, highlight is (finally) new release of **Torch-DirectML** as well
|
||||
- fix unsaturated outputs, force apply vae config on model load
|
||||
- fix hidiffusion handling of non-square aspect ratios, thanks @ShenZhang-Shin!
|
||||
- fix control second pass resize
|
||||
- fix api face-hires
|
||||
- fix **hunyuandit** set attention processor
|
||||
- fix civitai download without name
|
||||
- fix compatibility with latest adetailer
|
||||
@@ -54,6 +53,8 @@ Other than SD3, highlight is (finally) new release of **Torch-DirectML** as well
|
||||
- fix saving style without name provided
|
||||
- fix t2i-color adapter
|
||||
- fix sdxl "has been incorrectly initialized"
|
||||
- fix api face-hires
|
||||
- fix api ip-adapter
|
||||
- restructure api examples: `cli/api-*`
|
||||
- handle theme fallback when invalid theme is specified
|
||||
- remove obsolete training code leftovers
|
||||
|
||||
Executable
+55
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# curl -vX POST http://localhost:7860/sdapi/v1/txt2img --header "Content-Type: application/json" -d @3261.json
|
||||
import os
|
||||
import json
|
||||
import logging
|
||||
import argparse
|
||||
import requests
|
||||
import urllib3
|
||||
|
||||
|
||||
sd_url = os.environ.get('SDAPI_URL', "http://127.0.0.1:7860")
|
||||
sd_username = os.environ.get('SDAPI_USR', None)
|
||||
sd_password = os.environ.get('SDAPI_PWD', None)
|
||||
options = {
|
||||
"save_images": True,
|
||||
"send_images": True,
|
||||
}
|
||||
|
||||
logging.basicConfig(level = logging.INFO, format = '%(asctime)s %(levelname)s: %(message)s')
|
||||
log = logging.getLogger(__name__)
|
||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||
|
||||
|
||||
def auth():
|
||||
if sd_username is not None and sd_password is not None:
|
||||
return requests.auth.HTTPBasicAuth(sd_username, sd_password)
|
||||
return None
|
||||
|
||||
|
||||
def post(endpoint: str, payload: dict = None):
|
||||
if 'sdapi' not in endpoint:
|
||||
endpoint = f'sdapi/v1/{endpoint}'
|
||||
if 'http' not in endpoint:
|
||||
endpoint = f'{sd_url}/{endpoint}'
|
||||
req = requests.post(endpoint, json = payload, timeout=300, verify=False, auth=auth())
|
||||
return { 'error': req.status_code, 'reason': req.reason, 'url': req.url } if req.status_code != 200 else req.json()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description = 'api-txt2img')
|
||||
parser.add_argument('endpoint', nargs=1, help='endpoint')
|
||||
parser.add_argument('json', nargs=1, help='json data or file')
|
||||
args = parser.parse_args()
|
||||
log.info(f'api-json: {args}')
|
||||
if os.path.isfile(args.json[0]):
|
||||
with open(args.json[0], 'r', encoding='ascii') as f:
|
||||
txt = f.read()
|
||||
txt = txt.encode('ascii')
|
||||
print('HERE', txt)
|
||||
dct = json.loads(txt)
|
||||
else:
|
||||
dct = json.loads(args.json[0])
|
||||
res = post(endpoint=args.endpoint[0], payload=dct)
|
||||
print(res)
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env python
|
||||
import io
|
||||
import os
|
||||
import sys
|
||||
import base64
|
||||
from PIL import Image
|
||||
from rich import print # pylint: disable=redefined-builtin
|
||||
|
||||
|
||||
def encode(file: str):
|
||||
image = Image.open(file) if os.path.exists(file) else None
|
||||
print(f'Input: file={file} image={image}')
|
||||
if image is None:
|
||||
return None
|
||||
if image.mode != 'RGB':
|
||||
image = image.convert('RGB')
|
||||
with io.BytesIO() as stream:
|
||||
image.save(stream, 'JPEG')
|
||||
image.close()
|
||||
values = stream.getvalue()
|
||||
encoded = base64.b64encode(values).decode()
|
||||
return encoded
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.argv.pop(0)
|
||||
fn = sys.argv[0] if len(sys.argv) > 0 else ''
|
||||
b64 = encode(fn)
|
||||
print('=== BEGIN ===')
|
||||
print(f'{b64}')
|
||||
print('=== END ===')
|
||||
|
||||
@@ -152,8 +152,8 @@ class ItemIPAdapter(BaseModel):
|
||||
adapter: str = Field(title="Adapter", default="Base", description="")
|
||||
images: List[str] = Field(title="Image", default=[], description="")
|
||||
masks: Optional[List[str]] = Field(title="Mask", default=[], description="")
|
||||
scale: float = Field(title="Scale", default=0.5, gt=0, le=1, description="")
|
||||
start: float = Field(title="Start", default=0.0, gt=0, le=1, description="")
|
||||
scale: float = Field(title="Scale", default=0.5, ge=0, le=1, description="")
|
||||
start: float = Field(title="Start", default=0.0, ge=0, le=1, description="")
|
||||
end: float = Field(title="End", default=1.0, gt=0, le=1, description="")
|
||||
|
||||
class ItemFace(BaseModel):
|
||||
|
||||
+1
-1
Submodule wiki updated: 4e01da914a...c5c9e89981
Reference in New Issue
Block a user