From adb2e96e3ca56074bbdc0f90f4efcb3c3785ae86 Mon Sep 17 00:00:00 2001
From: Concedo <39025047+LostRuins@users.noreply.github.com>
Date: Mon, 6 Jul 2026 23:33:33 +0800
Subject: [PATCH] allow viewing last generated image with the correct genkey
---
koboldcpp.py | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/koboldcpp.py b/koboldcpp.py
index 1c5e3df3b..b6ba4a3a7 100644
--- a/koboldcpp.py
+++ b/koboldcpp.py
@@ -97,6 +97,8 @@ musicName = None
imageName = None
mmprojName = None
lastgeneratedcomfyimg = b''
+lastgeneratedcachedimg = b''
+lastgeneratedcachedimgkey = b''
lastuploadedcomfyimg = b''
fullsdmodelpath = "" #if empty, it's not initialized
password = "" #if empty, no auth key required
@@ -6098,7 +6100,7 @@ Change Mode
def do_GET(self):
global embedded_kailite, embedded_kcpp_docs, embedded_kcpp_sdui, embedded_kailite_gz, embedded_kcpp_docs_gz, embedded_kcpp_sdui_gz, embedded_lcpp_ui_gz, embedded_musicui, embedded_musicui_gz
global last_req_time, start_time, cached_chat_template, cached_sd_info, has_vision_support, has_audio_support, has_whisper, friendlymodelname
- global savedata_obj, has_multiplayer, multiplayer_turn_major, multiplayer_turn_minor, multiplayer_story_data_compressed, multiplayer_dataformat, multiplayer_lastactive, maxctx, maxhordelen, friendlymodelname, lastuploadedcomfyimg, lastgeneratedcomfyimg, KcppVersion, totalgens, preloaded_story, exitcounter, currentusergenkey, friendlysdmodelname, fullsdmodelpath, password, friendlyembeddingsmodelname, voicelist
+ global savedata_obj, has_multiplayer, multiplayer_turn_major, multiplayer_turn_minor, multiplayer_story_data_compressed, multiplayer_dataformat, multiplayer_lastactive, maxctx, maxhordelen, friendlymodelname, lastuploadedcomfyimg, lastgeneratedcomfyimg, lastgeneratedcachedimg, lastgeneratedcachedimgkey, KcppVersion, totalgens, preloaded_story, exitcounter, currentusergenkey, friendlysdmodelname, fullsdmodelpath, password, friendlyembeddingsmodelname, voicelist
global autoswapmode, textName, sttName, ttsName, embedName, musicName, imageName, mmprojName
clean_path = self.path.split("?")[0] #for cases where we do not want query params
@@ -6351,6 +6353,15 @@ Change Mode
elif clean_path=='/view' or clean_path=='/view.png' or clean_path=='/api/view' or clean_path.startswith('/view_image'): #emulate comfyui
content_type = 'image/png'
response_body = lastgeneratedcomfyimg
+ elif clean_path.startswith('/sdapi/v1/get_last.png'):
+ parsed_url = urllib.parse.urlparse(self.path)
+ parsed_dict = urllib.parse.parse_qs(parsed_url.query)
+ genkey = parsed_dict.get('genkey', [''])[0]
+ if genkey and genkey==lastgeneratedcachedimgkey and lastgeneratedcachedimg:
+ content_type = 'image/png'
+ response_body = lastgeneratedcachedimg
+ else:
+ response_body = None
elif clean_path=='/history' or clean_path=='/api/history' or clean_path.startswith('/api/history/') or clean_path.startswith('/history/'): #emulate comfyui
modelNameToReturn = friendlysdmodelname
if autoswapmode and imageName is not None:
@@ -6486,7 +6497,7 @@ Change Mode
def do_POST(self):
global thinkformats
- global modelbusy, batched_request_runner_count, requestsinqueue, currentusergenkey, totalgens, pendingabortkey, lastuploadedcomfyimg, lastgeneratedcomfyimg, multiplayer_turn_major, multiplayer_turn_minor, multiplayer_story_data_compressed, multiplayer_dataformat, multiplayer_lastactive, net_save_slots, has_vision_support, savestate_limit, mcp_lock
+ global modelbusy, batched_request_runner_count, requestsinqueue, currentusergenkey, totalgens, pendingabortkey, lastuploadedcomfyimg, lastgeneratedcomfyimg, lastgeneratedcachedimg, lastgeneratedcachedimgkey, multiplayer_turn_major, multiplayer_turn_minor, multiplayer_story_data_compressed, multiplayer_dataformat, multiplayer_lastactive, net_save_slots, has_vision_support, savestate_limit, mcp_lock
global autoswapmode, textName, sttName, ttsName, embedName, musicName, imageName, mmprojName
contlenstr = self.headers['content-length']
content_length = 0
@@ -7447,6 +7458,8 @@ Change Mode
return
elif is_imggen: #image gen
try:
+ lastgeneratedcachedimg = b''
+ lastgeneratedcachedimgkey = ''
if is_comfyui_imggen:
lastgeneratedcomfyimg = b''
genparams = sd_comfyui_tranform_params(genparams)
@@ -7465,6 +7478,11 @@ Change Mode
genfinalframe = gen["final_frame"]
geninfo = json.dumps(gen["info"]) # sdapi really expects a stringified JSON
genresp = None
+ if gendat:
+ lastgeneratedcachedimg = base64.b64decode(gendat)
+ lastgeneratedcachedimgkey = genparams.get('genkey', '')
+ else:
+ lastgeneratedcachedimg = b''
if is_comfyui_imggen:
if gendat:
lastgeneratedcomfyimg = base64.b64decode(gendat)