From ab9bc6f2ae806c4fa7f05a0755fd075fe1210985 Mon Sep 17 00:00:00 2001 From: Concedo <39025047+LostRuins@users.noreply.github.com> Date: Sat, 13 Dec 2025 09:20:00 +0800 Subject: [PATCH] zimage cfg clamp is opt out with remove_limits --- expose.h | 1 + koboldcpp.py | 7 +++++-- otherarch/sdcpp/sdtype_adapter.cpp | 22 ++++++++++++---------- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/expose.h b/expose.h index 67b428867..6d616639a 100644 --- a/expose.h +++ b/expose.h @@ -213,6 +213,7 @@ struct sd_generation_inputs const int clip_skip = -1; const int vid_req_frames = 1; const int vid_req_avi = 0; + const bool remove_limits = false; }; struct sd_generation_outputs { diff --git a/koboldcpp.py b/koboldcpp.py index b6a775404..aa262cf77 100755 --- a/koboldcpp.py +++ b/koboldcpp.py @@ -332,7 +332,8 @@ class sd_generation_inputs(ctypes.Structure): ("scheduler", ctypes.c_char_p), ("clip_skip", ctypes.c_int), ("vid_req_frames", ctypes.c_int), - ("vid_req_avi", ctypes.c_int)] + ("vid_req_avi", ctypes.c_int), + ("remove_limits", ctypes.c_bool)] class sd_generation_outputs(ctypes.Structure): _fields_ = [("status", ctypes.c_int), @@ -1878,7 +1879,7 @@ def sd_process_meta_fields(fields): } fields_dict = {aliases.get(k, k): v for k, v in fields} # whitelist accepted parameters - whitelist = ['scheduler', 'shifted_timestep', 'distilled_guidance', 'sampler_name', 'cfg_scale', 'add_sd_step_limit', 'add_sd_cfg_limit'] + whitelist = ['scheduler', 'shifted_timestep', 'distilled_guidance', 'sampler_name', 'cfg_scale', 'add_sd_step_limit', 'add_sd_cfg_limit', 'remove_limits'] fields_dict = {k: v for k, v in fields_dict.items() if k in whitelist} return fields_dict @@ -1926,6 +1927,7 @@ def sd_generate(genparams): forced_posprompt = adapter_obj.get("add_sd_prompt", "") forced_steplimit = tryparseint(adapter_obj.get("add_sd_step_limit", genparams.get("add_sd_step_limit",80)),80) forced_maxcfg = tryparsefloat(adapter_obj.get("add_sd_cfg_limit", genparams.get("add_sd_cfg_limit",25)),25) + allow_remove_limits = tryparseint(adapter_obj.get("remove_limits", genparams.get("remove_limits",0)),0) prompt = genparams.get("prompt", "high quality") negative_prompt = genparams.get("negative_prompt", "") @@ -2007,6 +2009,7 @@ def sd_generate(genparams): inputs.clip_skip = clip_skip inputs.vid_req_frames = vid_req_frames inputs.vid_req_avi = vid_req_avi + inputs.remove_limits = allow_remove_limits ret = handle.sd_generate(inputs) outstr = "" animated = False diff --git a/otherarch/sdcpp/sdtype_adapter.cpp b/otherarch/sdcpp/sdtype_adapter.cpp index 0c0fb42fb..460d0029a 100644 --- a/otherarch/sdcpp/sdtype_adapter.cpp +++ b/otherarch/sdcpp/sdtype_adapter.cpp @@ -109,6 +109,7 @@ static std::string sdmodelfilename = ""; static bool photomaker_enabled = false; static bool is_vid_model = false; +static bool remove_limits = false; static int get_loaded_sd_version(sd_ctx_t* ctx) { @@ -784,16 +785,16 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs) } } - // if(loadedsdver == SDVersion::VERSION_Z_IMAGE) - // { - // if(sd_params->cfg_scale > 3.0f) - // { - // if (!sd_is_quiet && sddebugmode) { - // printf("Z-Image: clamping CFG Scale to 3.0 to preserve quality\n"); - // } - // sd_params->cfg_scale = 3.0f; - // } - // } + if(!remove_limits && loadedsdver == SDVersion::VERSION_Z_IMAGE) + { + if(sd_params->cfg_scale > 3.0f) + { + if (!sd_is_quiet && sddebugmode) { + printf("Z-Image: clamping CFG Scale to 3.0 to preserve quality\n"); + } + sd_params->cfg_scale = 3.0f; + } + } if(is_wan && extra_image_data.size()==0 && is_img2img) { @@ -985,6 +986,7 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs) int vid_req_frames = inputs.vid_req_frames; int vid_req_avi = inputs.vid_req_avi; int generated_num_results = 1; + remove_limits = inputs.remove_limits; if(is_vid_model) {