mirror of
https://github.com/LostRuins/koboldcpp.git
synced 2026-09-20 01:31:42 +02:00
support for downloading AVI from sdui
This commit is contained in:
+58
-58
File diff suppressed because one or more lines are too long
@@ -213,7 +213,7 @@ struct sd_generation_inputs
|
||||
const char * scheduler = nullptr;
|
||||
const int clip_skip = -1;
|
||||
const int vid_req_frames = 1;
|
||||
const int vid_req_avi = 0;
|
||||
const int video_output_type = 0; //0=gif, 1=avi, 2=both
|
||||
const bool remove_limits = false;
|
||||
};
|
||||
struct sd_generation_outputs
|
||||
@@ -221,6 +221,7 @@ struct sd_generation_outputs
|
||||
int status = -1;
|
||||
int animated = 0;
|
||||
const char * data = "";
|
||||
const char * data_extra = "";
|
||||
};
|
||||
|
||||
struct whisper_load_model_inputs
|
||||
|
||||
+12
-8
@@ -334,13 +334,14 @@ 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),
|
||||
("video_output_type", ctypes.c_int),
|
||||
("remove_limits", ctypes.c_bool)]
|
||||
|
||||
class sd_generation_outputs(ctypes.Structure):
|
||||
_fields_ = [("status", ctypes.c_int),
|
||||
("animated", ctypes.c_int),
|
||||
("data", ctypes.c_char_p)]
|
||||
("data", ctypes.c_char_p),
|
||||
("data_extra", ctypes.c_char_p)]
|
||||
|
||||
class whisper_load_model_inputs(ctypes.Structure):
|
||||
_fields_ = [("model_filename", ctypes.c_char_p),
|
||||
@@ -1977,7 +1978,7 @@ def sd_generate(genparams):
|
||||
clip_skip = tryparseint(genparams.get("clip_skip", -1),-1)
|
||||
vid_req_frames = tryparseint(genparams.get("frames", 1),1)
|
||||
vid_req_frames = 1 if (not vid_req_frames or vid_req_frames < 1) else vid_req_frames
|
||||
vid_req_avi = 1 if genparams.get("avi_video", False) else 0
|
||||
video_output_type = genparams.get("video_output_type", 0)
|
||||
extra_images_arr = genparams.get("extra_images", [])
|
||||
extra_images_arr = ([] if not extra_images_arr else extra_images_arr)
|
||||
extra_images_arr = [img for img in extra_images_arr if img not in (None, "")]
|
||||
@@ -2020,15 +2021,17 @@ def sd_generate(genparams):
|
||||
inputs.scheduler = scheduler.encode("UTF-8")
|
||||
inputs.clip_skip = clip_skip
|
||||
inputs.vid_req_frames = vid_req_frames
|
||||
inputs.vid_req_avi = vid_req_avi
|
||||
inputs.video_output_type = video_output_type
|
||||
inputs.remove_limits = allow_remove_limits
|
||||
ret = handle.sd_generate(inputs)
|
||||
outstr = ""
|
||||
data_main = ""
|
||||
data_extra = ""
|
||||
animated = False
|
||||
if ret.status==1:
|
||||
outstr = ret.data.decode("UTF-8","ignore")
|
||||
data_main = ret.data.decode("UTF-8","ignore")
|
||||
data_extra = ret.data_extra.decode("UTF-8","ignore")
|
||||
animated = True if ret.animated else False
|
||||
return {"animated": animated, "data":outstr}
|
||||
return {"animated": animated, "data":data_main, "data_extra":data_extra}
|
||||
|
||||
|
||||
def whisper_load_model(model_filename):
|
||||
@@ -4642,6 +4645,7 @@ Change Mode<br>
|
||||
gen = sd_generate(genparams)
|
||||
gendat = gen["data"]
|
||||
genanim = gen["animated"]
|
||||
gendatextra = gen["data_extra"]
|
||||
genresp = None
|
||||
if is_comfyui_imggen:
|
||||
if gendat:
|
||||
@@ -4652,7 +4656,7 @@ Change Mode<br>
|
||||
elif is_oai_imggen:
|
||||
genresp = (json.dumps({"created":int(time.time()),"data":[{"b64_json":gendat}],"background":"opaque","output_format":"png","size":"1024x1024","quality":"medium"}).encode())
|
||||
else:
|
||||
genresp = (json.dumps({"images":[gendat],"parameters":{},"info":"","animated":genanim}).encode())
|
||||
genresp = (json.dumps({"images":[gendat],"parameters":{},"info":"","animated":genanim,"extra_data":gendatextra}).encode())
|
||||
self.send_response(200)
|
||||
self.send_header('content-length', str(len(genresp)))
|
||||
self.end_headers(content_type='application/json')
|
||||
|
||||
@@ -99,6 +99,7 @@ static SDParams * sd_params = nullptr;
|
||||
static sd_ctx_t * sd_ctx = nullptr;
|
||||
static int sddebugmode = 0;
|
||||
static std::string recent_data = "";
|
||||
static std::string recent_data2 = ""; //for cases when we have 2 outputs
|
||||
static uint8_t * input_image_buffer = NULL;
|
||||
static uint8_t * input_mask_buffer = NULL;
|
||||
static std::vector<uint8_t *> input_extraimage_buffers;
|
||||
@@ -736,6 +737,7 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs)
|
||||
{
|
||||
printf("\nWarning: KCPP image generation not initialized!\n");
|
||||
output.data = "";
|
||||
output.data_extra = "";
|
||||
output.animated = 0;
|
||||
output.status = 0;
|
||||
return output;
|
||||
@@ -999,7 +1001,7 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs)
|
||||
|
||||
//the below params are only used in video models. May move into standalone object in future
|
||||
int vid_req_frames = inputs.vid_req_frames;
|
||||
int vid_req_avi = inputs.vid_req_avi;
|
||||
int video_output_type = inputs.video_output_type;
|
||||
int generated_num_results = 1;
|
||||
remove_limits = inputs.remove_limits;
|
||||
|
||||
@@ -1082,6 +1084,7 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs)
|
||||
if (params.width <= 0 || params.width % 64 != 0 || params.height <= 0 || params.height % 64 != 0) {
|
||||
printf("\nKCPP SD: bad request image dimensions!\n");
|
||||
output.data = "";
|
||||
output.data_extra = "";
|
||||
output.animated = 0;
|
||||
output.status = 0;
|
||||
return output;
|
||||
@@ -1098,6 +1101,7 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs)
|
||||
if (!input_image_buffer) {
|
||||
printf("\nKCPP SD: load image from memory failed!\n");
|
||||
output.data = "";
|
||||
output.data_extra = "";
|
||||
output.animated = 0;
|
||||
output.status = 0;
|
||||
return output;
|
||||
@@ -1165,6 +1169,7 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs)
|
||||
if (results == NULL) {
|
||||
printf("\nKCPP SD generate failed!\n");
|
||||
output.data = "";
|
||||
output.data_extra = "";
|
||||
output.animated = 0;
|
||||
output.status = 0;
|
||||
return output;
|
||||
@@ -1182,42 +1187,50 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs)
|
||||
{
|
||||
if(!sd_is_quiet && sddebugmode==1)
|
||||
{
|
||||
printf("\nSaving video buffer, AVI=%d...",vid_req_avi);
|
||||
printf("\nSaving video buffer, VIDEO_OUTPUT_TYPE=%d...",video_output_type);
|
||||
}
|
||||
uint8_t * out_data = nullptr;
|
||||
uint8_t * out_data2 = nullptr;
|
||||
size_t out_len = 0;
|
||||
size_t out_len2 = 0;
|
||||
int status = 0;
|
||||
int status2 = 0;
|
||||
wasanim = true;
|
||||
|
||||
if(vid_req_avi==1)
|
||||
if(video_output_type==0 || video_output_type==2)
|
||||
{
|
||||
status = create_mjpg_avi_membuf_from_sd_images(results, generated_num_results, 16, 40, &out_data,&out_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
status = create_gif_buf_from_sd_images_msf(results, generated_num_results, 16, &out_data,&out_len);
|
||||
if(!sd_is_quiet && sddebugmode==1)
|
||||
{
|
||||
printf("Video Output Size: %zu\n",out_len);
|
||||
}
|
||||
}
|
||||
if(video_output_type==1 || video_output_type==2)
|
||||
{
|
||||
status2 = create_mjpg_avi_membuf_from_sd_images(results, generated_num_results, 16, 40, &out_data2,&out_len2);
|
||||
}
|
||||
|
||||
if(!sd_is_quiet && sddebugmode==1)
|
||||
{
|
||||
if(status==0)
|
||||
printf("Video Output Sizes: GIF=%zu AVI=%zu\n",out_len,out_len2);
|
||||
if(status==0 && status2==0)
|
||||
{
|
||||
printf("Video Saved (Len %zu)!\n",out_len);
|
||||
}else{
|
||||
printf("Video(s) Saved (Len %zu)!\n",out_len);
|
||||
} else {
|
||||
printf("Save Failed!\n");
|
||||
}
|
||||
|
||||
}
|
||||
if(status==0)
|
||||
recent_data = "";
|
||||
recent_data2 = "";
|
||||
if(status==0 && out_len>0)
|
||||
{
|
||||
recent_data = kcpp_base64_encode(out_data, out_len);
|
||||
free(out_data);
|
||||
}
|
||||
if (status2 == 0 && out_len2 > 0) {
|
||||
if (recent_data == "") {
|
||||
recent_data = kcpp_base64_encode(out_data2, out_len2);
|
||||
} else {
|
||||
recent_data2 = kcpp_base64_encode(out_data2, out_len2);
|
||||
}
|
||||
free(out_data2);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1226,6 +1239,7 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs)
|
||||
if (png != NULL)
|
||||
{
|
||||
recent_data = kcpp_base64_encode(png,out_data_len);
|
||||
recent_data2 = "";
|
||||
free(png);
|
||||
}
|
||||
}
|
||||
@@ -1236,6 +1250,7 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs)
|
||||
|
||||
free(results);
|
||||
output.data = recent_data.c_str();
|
||||
output.data_extra = recent_data2.c_str();
|
||||
output.animated = (wasanim?1:0);
|
||||
output.status = 1;
|
||||
total_img_gens += 1;
|
||||
|
||||
Reference in New Issue
Block a user