From 14b7da5e4454beb2fa50a423cbabd50607809fb6 Mon Sep 17 00:00:00 2001 From: Concedo <39025047+LostRuins@users.noreply.github.com> Date: Sun, 31 May 2026 23:08:58 +0800 Subject: [PATCH] allow reversing the reference image --- embd_res/kcpp_sdui.embd | 38 +++++++++++++++--------------- expose.h | 1 + koboldcpp.py | 3 +++ otherarch/sdcpp/sdtype_adapter.cpp | 17 ++++++------- 4 files changed, 32 insertions(+), 27 deletions(-) diff --git a/embd_res/kcpp_sdui.embd b/embd_res/kcpp_sdui.embd index 2b215291f..8a6d52638 100644 --- a/embd_res/kcpp_sdui.embd +++ b/embd_res/kcpp_sdui.embd @@ -5,18 +5,18 @@ Stable UI for KoboldCpp - - diff --git a/expose.h b/expose.h index 1bdd5b9dc..3c85d98be 100644 --- a/expose.h +++ b/expose.h @@ -223,6 +223,7 @@ struct sd_generation_inputs const char * mask = ""; const int extra_images_len = 0; const char ** extra_images = nullptr; + const bool reverse_refimg = false; const bool flip_mask = false; const float denoising_strength = 0.0f; const float cfg_scale = 0.0f; diff --git a/koboldcpp.py b/koboldcpp.py index b8bac819a..13877d137 100644 --- a/koboldcpp.py +++ b/koboldcpp.py @@ -407,6 +407,7 @@ class sd_generation_inputs(ctypes.Structure): ("mask", ctypes.c_char_p), ("extra_images_len", ctypes.c_int), ("extra_images", ctypes.POINTER(ctypes.c_char_p)), + ("reverse_refimg", ctypes.c_bool), ("flip_mask", ctypes.c_bool), ("denoising_strength", ctypes.c_float), ("cfg_scale", ctypes.c_float), @@ -2814,6 +2815,7 @@ def sd_generate(genparams): vid_fps = (16 if vid_fps < 16 else (24 if vid_fps > 24 else vid_fps)) swap_refimg = (True if tryparseint(genparams.get("send_as_refimg", 0),0) else False) + reverse_refimg = (True if tryparseint(genparams.get("reverse_refimg", 0),0) else False) if len(extra_images_arr)==0 and swap_refimg and init_images and init_images!="" and not mask: extra_images_arr = [init_images] init_images = "" @@ -2828,6 +2830,7 @@ def sd_generate(genparams): for n, estr in enumerate(extra_images_arr): extra_image = strip_base64_prefix(estr) inputs.extra_images[n] = extra_image.encode("UTF-8") + inputs.reverse_refimg = reverse_refimg inputs.flip_mask = flip_mask inputs.cfg_scale = cfg_scale if distilled_guidance is not None: diff --git a/otherarch/sdcpp/sdtype_adapter.cpp b/otherarch/sdcpp/sdtype_adapter.cpp index a1d948794..7d51561e0 100644 --- a/otherarch/sdcpp/sdtype_adapter.cpp +++ b/otherarch/sdcpp/sdtype_adapter.cpp @@ -1371,15 +1371,16 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs) vid_gen_params.video_frames = vid_req_frames; vid_gen_params.fps = vid_fps; vid_gen_params.vae_tiling_params = params.vae_tiling_params; - if(wan_imgs.size()>0) - { - if(wan_imgs.size()>=1) - { + if (wan_imgs.size() > 0) { + if (wan_imgs.size() >= 2) { vid_gen_params.init_image = wan_imgs[0]; - } - if(wan_imgs.size()>=2) - { - vid_gen_params.end_image = wan_imgs[1]; + vid_gen_params.end_image = wan_imgs[1]; + } else if (wan_imgs.size() == 1) { + if (inputs.reverse_refimg) { + vid_gen_params.end_image = wan_imgs[0]; + } else { + vid_gen_params.init_image = wan_imgs[0]; + } } } if(!sd_is_quiet && sddebugmode==1)