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)