| import comfy.utils
|
| from ..libs.api.fluxai import fluxaiAPI
|
| from ..libs.api.bizyair import bizyairAPI, encode_data
|
| from nodes import NODE_CLASS_MAPPINGS as ALL_NODE_CLASS_MAPPINGS
|
|
|
| class joyCaption2API:
|
| API_URL = f"/supernode/joycaption2"
|
|
|
| @classmethod
|
| def INPUT_TYPES(s):
|
| return {
|
| "required": {
|
| "image": ("IMAGE",),
|
| "do_sample": ([True, False],),
|
| "temperature": (
|
| "FLOAT",
|
| {
|
| "default": 0.5,
|
| "min": 0.0,
|
| "max": 2.0,
|
| "step": 0.01,
|
| "round": 0.001,
|
| "display": "number",
|
| },
|
| ),
|
| "max_tokens": (
|
| "INT",
|
| {
|
| "default": 256,
|
| "min": 16,
|
| "max": 512,
|
| "step": 16,
|
| "display": "number",
|
| },
|
| ),
|
| "caption_type": (
|
| [
|
| "Descriptive",
|
| "Descriptive (Informal)",
|
| "Training Prompt",
|
| "MidJourney",
|
| "Booru tag list",
|
| "Booru-like tag list",
|
| "Art Critic",
|
| "Product Listing",
|
| "Social Media Post",
|
| ],
|
| ),
|
| "caption_length": (
|
| ["any", "very short", "short", "medium-length", "long", "very long"]
|
| + [str(i) for i in range(20, 261, 10)],
|
| ),
|
| "extra_options": (
|
| "STRING",
|
| {
|
| "placeholder": "Extra options(e.g):\nIf there is a person/character in the image you must refer to them as {name}.",
|
| "tooltip": "Extra options for the model",
|
| "multiline": True,
|
| },
|
| ),
|
| "name_input": (
|
| "STRING",
|
| {
|
| "default": "",
|
| "tooltip": "Name input is only used if an Extra Option is selected that requires it.",
|
| },
|
| ),
|
| "custom_prompt": (
|
| "STRING",
|
| {
|
| "default": "",
|
| "multiline": True,
|
| },
|
| ),
|
| },
|
| "optional":{
|
| "apikey_override": ("STRING", {"default": "", "forceInput": True, "tooltip":"Override the API key in the local config"}),
|
| }
|
| }
|
|
|
| RETURN_TYPES = ("STRING",)
|
| RETURN_NAMES = ("caption",)
|
|
|
| FUNCTION = "joycaption"
|
| OUTPUT_NODE = False
|
|
|
| CATEGORY = "EasyUse/API"
|
|
|
| def joycaption(
|
| self,
|
| image,
|
| do_sample,
|
| temperature,
|
| max_tokens,
|
| caption_type,
|
| caption_length,
|
| extra_options,
|
| name_input,
|
| custom_prompt,
|
| apikey_override=None
|
| ):
|
| pbar = comfy.utils.ProgressBar(100)
|
| pbar.update_absolute(10)
|
| SIZE_LIMIT = 1536
|
| _, w, h, c = image.shape
|
| if w > SIZE_LIMIT or h > SIZE_LIMIT:
|
| node_class = ALL_NODE_CLASS_MAPPINGS['easy imageScaleDownToSize']
|
| image, = node_class().image_scale_down_to_size(image, SIZE_LIMIT, True)
|
|
|
| payload = {
|
| "image": None,
|
| "do_sample": do_sample == True,
|
| "temperature": temperature,
|
| "max_new_tokens": max_tokens,
|
| "caption_type": caption_type,
|
| "caption_length": caption_length,
|
| "extra_options": [extra_options],
|
| "name_input": name_input,
|
| "custom_prompt": custom_prompt,
|
| }
|
|
|
| pbar.update_absolute(30)
|
| caption = bizyairAPI.joyCaption(payload, image, apikey_override, API_URL=self.API_URL)
|
|
|
| pbar.update_absolute(100)
|
| return (caption,)
|
|
|
| class joyCaption3API(joyCaption2API):
|
| API_URL = f"/supernode/joycaption3"
|
|
|
| NODE_CLASS_MAPPINGS = {
|
| "easy joyCaption2API": joyCaption2API,
|
| "easy joyCaption3API": joyCaption3API,
|
| }
|
|
|
| NODE_DISPLAY_NAME_MAPPINGS = {
|
| "easy joyCaption2API": "JoyCaption2 (BizyAIR)",
|
| "easy joyCaption3API": "JoyCaption3 (BizyAIR)",
|
| } |