diff --git a/api.py b/api.py index 1adf635..7fe9faa 100644 --- a/api.py +++ b/api.py @@ -50,7 +50,7 @@ Eris TRTpatch: Please refer the Readme on https://git.foxo.me/Hitmare/Eris_api_tensor_patch for the full TRTpatch instructions Eris Imagelimit: - Will resize every request down to 1024px max on height and width, keeping the aspect ratio. Also reduces Steps down to 35 if the set Steps exceeds 35 + Will resize every request down to 1024px max on height and width, keeping the aspect ratio. Also reduces Steps down to the set limit if the set Steps exceeds the limit Compatible with the TRTpatch. Please refer the Readme on https://git.foxo.me/Hitmare/Eris_api_tensor_patch for the full TRTpatch instructions @@ -65,7 +65,18 @@ eris_imagelog = False eris_consolelog = False eris_TRTpatch = False eris_imagelimit = False - +# Limits for text2image. needs eris_imagelimit = True +txt_max_width_height = 1024 +txt_min_width_height = 320 +txt_max_pixel_count = 589824 +txt_max_steps = 35 +txt_max_characters = 2000 +# Limits for image2image. needs eris_imagelimit = True +img_max_width_height = 1024 +img_min_width_height = 320 +img_max_pixel_count = 589824 +img_max_steps = 35 +img_max_characters = 2000 def script_name_to_index(name, scripts): try: @@ -379,22 +390,70 @@ class Api: # Eris imagelimit 1024x1024 35 Steps if eris_imagelimit: - # Add a check to only resize if the dimensions are larger than 1024 - if txt2imgreq.width > 1024 or txt2imgreq.height > 1024: - # Calculate the aspect ratio - aspect_ratio = txt2imgreq.width / txt2imgreq.height - # Scale down to the maximum allowed dimensions while retaining the aspect ratio - if aspect_ratio > 1: # If the image is wider than it is tall - txt2imgreq.width = 1024 - txt2imgreq.height = round(1024 / aspect_ratio) - else: # If the image is as wide as it is tall or taller - txt2imgreq.height = 1024 - txt2imgreq.width = round(1024 * aspect_ratio) - # Ensure both dimensions are a multiple of 64 (if this is a requirement for your use case) + # Configuration variables + #max_width_height = 1024 + #min_width_height = 320 + #max_pixel_count = 589824 + #max_steps = 35 + #max_characters = 2000 + max_width_height = txt_max_width_height + min_width_height = txt_min_width_height + max_pixel_count = txt_max_pixel_count + max_steps = txt_max_steps + max_characters = txt_max_characters + + # Log the initial values + # initial_pixels = txt2imgreq.width * txt2imgreq.height + # print(f'Before processing: Resolution={txt2imgreq.width}x{txt2imgreq.height}, ' + # f'Steps={txt2imgreq.steps}, Total Pixels={initial_pixels}') + + # Log the length of the prompt before processing + # original_length = len(txt2imgreq.prompt) + # print(f'Original prompt length: {original_length} characters') + + # Truncate the prompt if it exceeds the maximum number of characters + if len(txt2imgreq.prompt) > max_characters: + txt2imgreq.prompt = txt2imgreq.prompt[:max_characters] + # print(f'Truncated prompt length: {len(txt2imgreq.prompt)} characters') + + # Calculate the initial aspect ratio + aspect_ratio = txt2imgreq.width / txt2imgreq.height + + # Enforce maximum dimensions + if txt2imgreq.width > max_width_height or txt2imgreq.height > max_width_height: + if aspect_ratio > 1: # Image is wider than it is tall + txt2imgreq.width = max_width_height + txt2imgreq.height = int(max_width_height / aspect_ratio) + else: # Image is taller than it is wide + txt2imgreq.height = max_width_height + txt2imgreq.width = int(max_width_height * aspect_ratio) + + # Enforce minimum dimensions + if txt2imgreq.width < min_width_height or txt2imgreq.height < min_width_height: + if aspect_ratio > 1: # Image is wider than it is tall + txt2imgreq.width = min_width_height + txt2imgreq.height = int(min_width_height / aspect_ratio) + else: # Image is taller than it is wide + txt2imgreq.height = min_width_height + txt2imgreq.width = int(min_width_height * aspect_ratio) + + # Adjust based on maximum pixel count + if txt2imgreq.width * txt2imgreq.height > max_pixel_count: + scale_factor = (max_pixel_count / (txt2imgreq.width * txt2imgreq.height)) ** 0.5 + txt2imgreq.width = int(txt2imgreq.width * scale_factor) + txt2imgreq.height = int(txt2imgreq.height * scale_factor) + + # Clamp steps to the maximum allowed + txt2imgreq.steps = min(txt2imgreq.steps, max_steps) + + # Ensure both dimensions are a multiple of 64 txt2imgreq.width = round(txt2imgreq.width // 64) * 64 txt2imgreq.height = round(txt2imgreq.height // 64) * 64 - # Reduce maximum steps - txt2imgreq.steps = min(txt2imgreq.steps, 35) + + # Calculate the adjusted pixel amount after processing + # adjusted_pixels = txt2imgreq.width * txt2imgreq.height + # print(f'After processing: Resolution={txt2imgreq.width}x{txt2imgreq.height}, ' + # f'Steps={txt2imgreq.steps}, Total Pixels={adjusted_pixels}') # Eris ______ @@ -474,22 +533,65 @@ class Api: # Eris imagelimit 1024x1024 35 Steps if eris_imagelimit: - # Add a check to only resize if the dimensions are larger than 1024 - if img2imgreq.width > 1024 or img2imgreq.height > 1024: - # Calculate the aspect ratio of the input image - aspect_ratio = img2imgreq.width / img2imgreq.height - # Scale down to the maximum allowed dimensions while retaining the aspect ratio - if aspect_ratio > 1: # If the image is wider than it is tall - img2imgreq.width = 1024 - img2imgreq.height = round(1024 / aspect_ratio) - else: # If the image is as wide as it is tall or taller - img2imgreq.height = 1024 - img2imgreq.width = round(1024 * aspect_ratio) - # Ensure both dimensions are a multiple of 64 (if this is a requirement for your use case) - img2imgreq.width = round(img2imgreq.width / 64) * 64 - img2imgreq.height = round(img2imgreq.height / 64) * 64 - # Reduce maximum steps - img2imgreq.steps = min(img2imgreq.steps, 35) + # Configuration variables + #max_width_height = 1024 + #min_width_height = 320 + #max_pixel_count = 589824 + #max_steps = 35 + #max_characters = 2000 + max_width_height = img_max_width_height + min_width_height = img_min_width_height + max_pixel_count = img_max_pixel_count + max_steps = img_max_steps + max_characters = img_max_characters + + # Log the initial values + # initial_pixels = img2imgreq.width * img2imgreq.height + # print(f'Before processing: Resolution={img2imgreq.width}x{img2imgreq.height}, ' + # f'Steps={img2imgreq.steps}, Total Pixels={initial_pixels}') + + # Truncate the prompt if it exceeds the maximum number of characters + if len(img2imgreq.prompt) > max_characters: + img2imgreq.prompt = img2imgreq.prompt[:max_characters] + + # Calculate the initial aspect ratio + aspect_ratio = img2imgreq.width / img2imgreq.height + + # Enforce maximum dimensions + if img2imgreq.width > max_width_height or img2imgreq.height > max_width_height: + if aspect_ratio > 1: # Image is wider than it is tall + img2imgreq.width = max_width_height + img2imgreq.height = int(max_width_height / aspect_ratio) + else: # Image is taller than it is wide + img2imgreq.height = max_width_height + img2imgreq.width = int(max_width_height * aspect_ratio) + + # Enforce minimum dimensions + if img2imgreq.width < min_width_height or img2imgreq.height < min_width_height: + if aspect_ratio > 1: # Image is wider than it is tall + img2imgreq.width = min_width_height + img2imgreq.height = int(min_width_height / aspect_ratio) + else: # Image is taller than it is wide + img2imgreq.height = min_width_height + img2imgreq.width = int(min_width_height * aspect_ratio) + + # Adjust based on maximum pixel count + if img2imgreq.width * img2imgreq.height > max_pixel_count: + scale_factor = (max_pixel_count / (img2imgreq.width * img2imgreq.height)) ** 0.5 + img2imgreq.width = int(img2imgreq.width * scale_factor) + img2imgreq.height = int(img2imgreq.height * scale_factor) + + # Clamp steps to the maximum allowed + img2imgreq.steps = min(img2imgreq.steps, max_steps) + + # Ensure both dimensions are a multiple of 64 + img2imgreq.width = round(img2imgreq.width // 64) * 64 + img2imgreq.height = round(img2imgreq.height // 64) * 64 + + # Calculate the adjusted pixel amount after processing + # adjusted_pixels = img2imgreq.width * img2imgreq.height + # print(f'After processing: Resolution={img2imgreq.width}x{img2imgreq.height}, ' + # f'Steps={img2imgreq.steps}, Total Pixels={adjusted_pixels}') # Eris ______ # Eris console prompt log -> writes promts into the console/terminal window