Skip to content

Commit c9f5c25

Browse files
committed
Merge branch 'concedo_experimental' into esocrok
2 parents 4a516b5 + 4b1c89c commit c9f5c25

File tree

6 files changed

+1322
-74
lines changed

6 files changed

+1322
-74
lines changed

expose.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,9 @@ struct sd_load_model_inputs
167167
const int threads = 0;
168168
const int quant = 0;
169169
const bool flash_attention = false;
170+
const bool offload_cpu = false;
171+
const bool vae_cpu = false;
172+
const bool clip_cpu = false;
170173
const bool diffusion_conv_direct = false;
171174
const bool vae_conv_direct = false;
172175
const bool taesd = false;
@@ -200,6 +203,8 @@ struct sd_generation_inputs
200203
const int seed = 0;
201204
const char * sample_method = nullptr;
202205
const int clip_skip = -1;
206+
const int vid_req_frames = 1;
207+
const int vid_req_avi = 0;
203208
};
204209
struct sd_generation_outputs
205210
{

kcpp_sdui.embd

Lines changed: 60 additions & 60 deletions
Large diffs are not rendered by default.

koboldcpp.py

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,9 @@ class sd_load_model_inputs(ctypes.Structure):
289289
("threads", ctypes.c_int),
290290
("quant", ctypes.c_int),
291291
("flash_attention", ctypes.c_bool),
292+
("offload_cpu", ctypes.c_bool),
293+
("vae_cpu", ctypes.c_bool),
294+
("clip_cpu", ctypes.c_bool),
292295
("diffusion_conv_direct", ctypes.c_bool),
293296
("vae_conv_direct", ctypes.c_bool),
294297
("taesd", ctypes.c_bool),
@@ -320,7 +323,9 @@ class sd_generation_inputs(ctypes.Structure):
320323
("height", ctypes.c_int),
321324
("seed", ctypes.c_int),
322325
("sample_method", ctypes.c_char_p),
323-
("clip_skip", ctypes.c_int)]
326+
("clip_skip", ctypes.c_int),
327+
("vid_req_frames", ctypes.c_int),
328+
("vid_req_avi", ctypes.c_int)]
324329

325330
class sd_generation_outputs(ctypes.Structure):
326331
_fields_ = [("status", ctypes.c_int),
@@ -1723,6 +1728,9 @@ def sd_load_model(model_filename,vae_filename,lora_filename,t5xxl_filename,clipl
17231728
inputs.threads = thds
17241729
inputs.quant = args.sdquant
17251730
inputs.flash_attention = args.sdflashattention
1731+
inputs.offload_cpu = args.sdoffloadcpu
1732+
inputs.vae_cpu = args.sdvaecpu
1733+
inputs.clip_cpu = args.sdclipcpu
17261734
sdconvdirect = sd_convdirect_option(args.sdconvdirect)
17271735
inputs.diffusion_conv_direct = sdconvdirect == 'full'
17281736
inputs.vae_conv_direct = sdconvdirect in ['vaeonly', 'full']
@@ -1830,6 +1838,9 @@ def sd_generate(genparams):
18301838
seed = random.randint(100000, 999999)
18311839
sample_method = genparams.get("sampler_name", "k_euler_a")
18321840
clip_skip = tryparseint(genparams.get("clip_skip", -1),-1)
1841+
vid_req_frames = tryparseint(genparams.get("frames", 1),1)
1842+
vid_req_frames = 1 if (not vid_req_frames or vid_req_frames < 1) else vid_req_frames
1843+
vid_req_avi = 1 if genparams.get("avi_video", False) else 0
18331844
extra_images_arr = genparams.get("extra_images", [])
18341845
extra_images_arr = ([] if not extra_images_arr else extra_images_arr)
18351846
extra_images_arr = [img for img in extra_images_arr if img not in (None, "")]
@@ -1861,6 +1872,8 @@ def sd_generate(genparams):
18611872
inputs.seed = seed
18621873
inputs.sample_method = sample_method.lower().encode("UTF-8")
18631874
inputs.clip_skip = clip_skip
1875+
inputs.vid_req_frames = vid_req_frames
1876+
inputs.vid_req_avi = vid_req_avi
18641877
ret = handle.sd_generate(inputs)
18651878
outstr = ""
18661879
if ret.status==1:
@@ -5697,6 +5710,9 @@ def hide_tooltip(event):
56975710
sd_clipg_var = ctk.StringVar()
56985711
sd_photomaker_var = ctk.StringVar()
56995712
sd_flash_attention_var = ctk.IntVar(value=0)
5713+
sd_offload_cpu_var = ctk.IntVar(value=0)
5714+
sd_vae_cpu_var = ctk.IntVar(value=0)
5715+
sd_clip_cpu_var = ctk.IntVar(value=0)
57005716
sd_vaeauto_var = ctk.IntVar(value=0)
57015717
sd_tiled_vae_var = ctk.StringVar(value=str(default_vae_tile_threshold))
57025718
sd_convdirect_var = ctk.StringVar(value=str(sd_convdirect_choices[0]))
@@ -6451,13 +6467,13 @@ def togglehorde(a,b,c):
64516467
makefileentry(images_tab, "Image Gen. Model (safetensors/gguf):", "Select Image Gen Model File", sd_model_var, 1, width=280, singlecol=True, filetypes=[("*.safetensors *.gguf","*.safetensors *.gguf")], tooltiptxt="Select a .safetensors or .gguf Image Generation model file on disk to be loaded.")
64526468
makelabelentry(images_tab, "Clamp Resolution Limit (Hard):", sd_clamped_var, 4, 50, padx=190,singleline=True,tooltip="Limit generation steps and output image size for shared use.\nSet to 0 to disable, otherwise value is clamped to the max size limit (min 512px).")
64536469
makelabelentry(images_tab, "(Soft):", sd_clamped_soft_var, 4, 50, padx=290,singleline=True,tooltip="Square image size restriction, to protect the server against memory crashes.\nAllows width-height tradeoffs, eg. 640 allows 640x640 and 512x768\nLeave at 0 for the default value: 832 for SD1.5/SD2, 1024 otherwise.",labelpadx=250)
6454-
makelabelentry(images_tab, "Image Threads:" , sd_threads_var, 8, 50,padx=290,singleline=True,tooltip="How many threads to use during image generation.\nIf left blank, uses same value as threads.")
6470+
makelabelentry(images_tab, "ImgThreads:" , sd_threads_var, 8, 50,padx=290,singleline=True,tooltip="How many threads to use during image generation.\nIf left blank, uses same value as threads.",labelpadx=210)
64556471
sd_model_var.trace_add("write", gui_changed_modelfile)
6456-
makelabelcombobox(images_tab, "Compress Weights (Saves Memory): ", sd_quant_var, 10, width=60, padx=220, labelpadx=8, tooltiptxt="Quantizes the SD model weights to save memory.\nHigher levels save more memory, and cause more quality degradation.", values=sd_quant_choices)
6472+
makelabelcombobox(images_tab, "Compress Weights: ", sd_quant_var, 8, width=60, padx=126, labelpadx=8, tooltiptxt="Quantizes the SD model weights to save memory.\nHigher levels save more memory, and cause more quality degradation.", values=sd_quant_choices)
64576473
sd_quant_var.trace_add("write", changed_gpulayers_estimate)
64586474

6459-
makefileentry(images_tab, "Image LoRA (safetensors/gguf):", "Select SD lora file",sd_lora_var, 20, width=280, singlecol=True, filetypes=[("*.safetensors *.gguf", "*.safetensors *.gguf")],tooltiptxt="Select a .safetensors or .gguf SD LoRA model file to be loaded. Should be unquantized!")
6460-
makelabelentry(images_tab, "Image LoRA Multiplier:" , sd_loramult_var, 22, 50,padx=290,singleline=True,tooltip="What mutiplier value to apply the SD LoRA with.")
6475+
makefileentry(images_tab, "Image LoRA:", "Select SD lora file",sd_lora_var, 20, width=160, singlerow=True, filetypes=[("*.safetensors *.gguf", "*.safetensors *.gguf")],tooltiptxt="Select a .safetensors or .gguf SD LoRA model file to be loaded. Should be unquantized!")
6476+
makelabelentry(images_tab, "Multiplier:" , sd_loramult_var, 20, 50,padx=390,singleline=True,tooltip="What mutiplier value to apply the SD LoRA with.",labelpadx=330)
64616477

64626478
makefileentry(images_tab, "T5-XXL File:", "Select Optional T5-XXL model file (SD3 or flux)",sd_t5xxl_var, 24, width=280, singlerow=True, filetypes=[("*.safetensors *.gguf","*.safetensors *.gguf")],tooltiptxt="Select a .safetensors t5xxl file to be loaded.")
64636479
makefileentry(images_tab, "Clip-L File:", "Select Optional Clip-L model file (SD3 or flux)",sd_clipl_var, 26, width=280, singlerow=True, filetypes=[("*.safetensors *.gguf","*.safetensors *.gguf")],tooltiptxt="Select a .safetensors t5xxl file to be loaded.")
@@ -6478,7 +6494,10 @@ def toggletaesd(a,b,c):
64786494
makecheckbox(images_tab, "TAE SD (AutoFix Broken VAE)", sd_vaeauto_var, 42,command=toggletaesd,tooltiptxt="Replace VAE with TAESD. May fix bad VAE.")
64796495
makelabelcombobox(images_tab, "Conv2D Direct:", sd_convdirect_var, row=42, labelpadx=220, padx=310, width=90, tooltiptxt="Use Conv2D Direct operation. May save memory or improve performance.\nMight crash if not supported by the backend.\n", values=sd_convdirect_choices)
64806496
makelabelentry(images_tab, "VAE Tiling Threshold:", sd_tiled_vae_var, 44, 50, padx=144,singleline=True,tooltip="Enable VAE Tiling for images above this size, to save memory.\nSet to 0 to disable VAE tiling.")
6481-
makecheckbox(images_tab, "SD Flash Attention", sd_flash_attention_var, 46, tooltiptxt="Enable Flash Attention for image diffusion. May save memory or improve performance.")
6497+
makecheckbox(images_tab, "SD Flash Attention", sd_flash_attention_var, 44,padx=230, tooltiptxt="Enable Flash Attention for image diffusion. May save memory or improve performance.")
6498+
makecheckbox(images_tab, "Model CPU Offload", sd_offload_cpu_var, 50,padx=8, tooltiptxt="Offload image weights in RAM to save VRAM, swap into VRAM when needed.")
6499+
makecheckbox(images_tab, "VAE on CPU", sd_vae_cpu_var, 50,padx=160, tooltiptxt="Force VAE to CPU only for image generation.")
6500+
makecheckbox(images_tab, "CLIP on CPU", sd_clip_cpu_var, 50,padx=280, tooltiptxt="Force CLIP to CPU only for image generation.")
64826501

64836502
# audio tab
64846503
audio_tab = tabcontent["Audio"]
@@ -6722,6 +6741,12 @@ def export_vars():
67226741

67236742
if sd_flash_attention_var.get()==1:
67246743
args.sdflashattention = True
6744+
if sd_offload_cpu_var.get()==1:
6745+
args.sdoffloadcpu = True
6746+
if sd_vae_cpu_var.get()==1:
6747+
args.sdvaecpu = True
6748+
if sd_clip_cpu_var.get()==1:
6749+
args.sdclipcpu = True
67256750
args.sdthreads = (0 if sd_threads_var.get()=="" else int(sd_threads_var.get()))
67266751
args.sdclamped = (0 if int(sd_clamped_var.get())<=0 else int(sd_clamped_var.get()))
67276752
args.sdclampedsoft = (0 if int(sd_clamped_soft_var.get())<=0 else int(sd_clamped_soft_var.get()))
@@ -6964,6 +6989,9 @@ def import_vars(dict):
69646989
sd_threads_var.set(str(dict["sdthreads"]) if ("sdthreads" in dict and dict["sdthreads"]) else str(default_threads))
69656990
sd_quant_var.set(sd_quant_choices[(dict["sdquant"] if ("sdquant" in dict and dict["sdquant"]>=0 and dict["sdquant"]<len(sd_quant_choices)) else 0)])
69666991
sd_flash_attention_var.set(1 if ("sdflashattention" in dict and dict["sdflashattention"]) else 0)
6992+
sd_offload_cpu_var.set(1 if ("sdoffloadcpu" in dict and dict["sdoffloadcpu"]) else 0)
6993+
sd_vae_cpu_var.set(1 if ("sdvaecpu" in dict and dict["sdvaecpu"]) else 0)
6994+
sd_clip_cpu_var.set(1 if ("sdclipcpu" in dict and dict["sdclipcpu"]) else 0)
69676995
sd_convdirect_var.set(sd_convdirect_option(dict.get("sdconvdirect")))
69686996
sd_vae_var.set(dict["sdvae"] if ("sdvae" in dict and dict["sdvae"]) else "")
69696997
sd_t5xxl_var.set(dict["sdt5xxl"] if ("sdt5xxl" in dict and dict["sdt5xxl"]) else "")
@@ -8832,6 +8860,9 @@ def range_checker(arg: str):
88328860
sdparsergroup.add_argument("--sdclipg", metavar=('[filename]'), help="Specify a Clip-G safetensors model for use in SD3. Leave blank if prebaked or unused.", default="")
88338861
sdparsergroup.add_argument("--sdphotomaker", metavar=('[filename]'), help="PhotoMaker is a model that allows face cloning. Specify a PhotoMaker safetensors model which will be applied replacing img2img. SDXL models only. Leave blank if unused.", default="")
88348862
sdparsergroup.add_argument("--sdflashattention", help="Enables Flash Attention for image generation.", action='store_true')
8863+
sdparsergroup.add_argument("--sdoffloadcpu", help="Offload image weights in RAM to save VRAM, swap into VRAM when needed.", action='store_true')
8864+
sdparsergroup.add_argument("--sdvaecpu", help="Force VAE to CPU only for image generation.", action='store_true')
8865+
sdparsergroup.add_argument("--sdclipcpu", help="Force CLIP to CPU only for image generation.", action='store_true')
88358866
sdparsergroup.add_argument("--sdconvdirect", help="Enables Conv2D Direct. May improve performance or reduce memory usage. Might crash if not supported by the backend. Can be 'off' (default) to disable, 'full' to turn it on for all operations, or 'vaeonly' to enable only for the VAE.", type=sd_convdirect_option, choices=sd_convdirect_choices, default=sd_convdirect_choices[0])
88368867
sdparsergroupvae = sdparsergroup.add_mutually_exclusive_group()
88378868
sdparsergroupvae.add_argument("--sdvae", metavar=('[filename]'), help="Specify an image generation safetensors VAE which replaces the one in the model.", default="")

0 commit comments

Comments
 (0)