diff --git a/otherarch/sdcpp/sdtype_adapter.cpp b/otherarch/sdcpp/sdtype_adapter.cpp index 214badb43..0f3bc8c2c 100644 --- a/otherarch/sdcpp/sdtype_adapter.cpp +++ b/otherarch/sdcpp/sdtype_adapter.cpp @@ -674,18 +674,16 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs) //for img2img sd_image_t input_image = {0,0,0,nullptr}; - std::vector extraimage_references; - extraimage_references.reserve(max_extra_images); - std::vector> extraimage_buffers; - extraimage_buffers.reserve(max_extra_images); + std::vector kontext_imgs; + std::vector wan_imgs; + std::vector photomaker_imgs; + bool is_wan = (loadedsdver == SDVersion::VERSION_WAN2 || loadedsdver == SDVersion::VERSION_WAN2_2_I2V || loadedsdver == SDVersion::VERSION_WAN2_2_TI2V); + bool is_kontext = (loadedsdver==SDVersion::VERSION_FLUX && !loaded_model_is_chroma(sd_ctx)); int nx, ny, nc; int img2imgW = sd_params->width; //for img2img input int img2imgH = sd_params->height; int img2imgC = 3; // Assuming RGB image - //because the reference image can be larger than the output image, allocate at least enough for 1024x1024 - const int imgMemNeed = std::max(img2imgW * img2imgH * img2imgC + 512, 1024 * 1024 * img2imgC + 512); - std::vector> resized_extraimage_bufs(max_extra_images, std::vector(imgMemNeed)); std::string ts = get_timestamp_str(); if(!sd_is_quiet) @@ -707,52 +705,45 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs) } input_extraimage_buffers.clear(); } - extraimage_buffers.clear(); - extraimage_references.clear(); for(int i=0;i(nx2) / ny2; - int desiredWidth = nx2; - int desiredHeight = ny2; - int smallestsrcdim = std::min(img2imgW,img2imgH); - if(desiredWidth > desiredHeight) + if(is_wan) { - desiredWidth = smallestsrcdim; - desiredHeight = smallestsrcdim / aspect_ratio; - } else { - desiredHeight = smallestsrcdim; - desiredWidth = smallestsrcdim * aspect_ratio; + uint8_t * loaded = load_image_from_b64(extra_image_data[i],nx2,ny2,img2imgW,img2imgH,3); + if(loaded) + { + input_extraimage_buffers.push_back(loaded); + sd_image_t extraimage_reference; + extraimage_reference.width = nx2; + extraimage_reference.height = ny2; + extraimage_reference.channel = desiredchannels; + extraimage_reference.data = loaded; + wan_imgs.push_back(extraimage_reference); + } } - - //round dims to 64 - desiredWidth = roundnearest(16,desiredWidth); - desiredHeight = roundnearest(16,desiredHeight); - desiredWidth = std::clamp(desiredWidth,64,1024); - desiredHeight = std::clamp(desiredHeight,64,1024); - - if(!sd_is_quiet && sddebugmode==1) + else if (is_kontext || photomaker_enabled) { - printf("Resize Extraimg: %dx%d to %dx%d\n",nx2,ny2,desiredWidth,desiredHeight); + uint8_t * loaded = load_image_from_b64(extra_image_data[i],nx2,ny2); + if(loaded) + { + input_extraimage_buffers.push_back(loaded); + sd_image_t extraimage_reference; + extraimage_reference.width = nx2; + extraimage_reference.height = ny2; + extraimage_reference.channel = desiredchannels; + extraimage_reference.data = loaded; + if(is_kontext) + { + kontext_imgs.push_back(extraimage_reference); + } + else + { + photomaker_imgs.push_back(extraimage_reference); + } + } } - int resok = stbir_resize_uint8(input_extraimage_buffers[i], nx2, ny2, 0, resized_extraimage_bufs[i].data(), desiredWidth, desiredHeight, 0, desiredchannels); - if (!resok) { - printf("\nKCPP SD: resize extra image failed!\n"); - output.data = ""; - output.animated = 0; - output.status = 0; - return output; - } - sd_image_t extraimage_reference; - extraimage_reference.width = desiredWidth; - extraimage_reference.height = desiredHeight; - extraimage_reference.channel = desiredchannels; - extraimage_reference.data = resized_extraimage_bufs[i].data(); - extraimage_references.push_back(extraimage_reference); } //ensure prompt has img keyword, otherwise append it @@ -765,48 +756,10 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs) sd_params->prompt = "person " + sd_params->prompt; } } - } - std::vector reference_imgs; - std::vector wan_imgs; - bool is_wan = (loadedsdver == SDVersion::VERSION_WAN2 || loadedsdver == SDVersion::VERSION_WAN2_2_I2V || loadedsdver == SDVersion::VERSION_WAN2_2_TI2V); - bool is_kontext = (loadedsdver==SDVersion::VERSION_FLUX && !loaded_model_is_chroma(sd_ctx)); - if(extra_image_data.size()>0) - { - if(is_kontext) - { - for(int i=0;i photomaker_imgs; - if(photomaker_enabled && extra_image_data.size()>0) - { - for(int i=0;i