From bfe47faffe037be321e0d98e9dc2551b9a46578e Mon Sep 17 00:00:00 2001 From: vmobilis <75476228+vmobilis@users.noreply.github.com> Date: Tue, 25 Aug 2026 04:23:23 +0300 Subject: [PATCH 1/2] main.cpp: configurable compression --- examples/cli/main.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/examples/cli/main.cpp b/examples/cli/main.cpp index 1cc7a7af4..953a44e9d 100644 --- a/examples/cli/main.cpp +++ b/examples/cli/main.cpp @@ -36,6 +36,7 @@ struct SDCliParams { SDMode mode = IMG_GEN; std::string output_path = "output.png"; int output_begin_idx = -1; + int compression_quality = 90; std::string image_path; std::string metadata_format = "text"; @@ -99,6 +100,10 @@ struct SDCliParams { "--output-begin-idx", "starting index for output image sequence, must be non-negative (default 0 if specified %d in output path, 1 otherwise)", &output_begin_idx}, + {"", + "--compression-quality", + "compression quality of video and JPEG / WebP images (90 by default)", + &compression_quality}, }; options.bool_options = { @@ -383,11 +388,13 @@ void step_callback(int step, int frame_count, sd_image_t* image, bool is_noisy, image->data, image->width, image->height, - image->channel)) { + image->channel, + "", + cli_params->compression_quality)) { LOG_ERROR("save preview image to '%s' failed", cli_params->preview_path.c_str()); } } else { - if (create_video_from_sd_images(cli_params->preview_path.c_str(), image, frame_count, cli_params->preview_fps) != 0) { + if (create_video_from_sd_images(cli_params->preview_path.c_str(), image, frame_count, cli_params->preview_fps, cli_params->compression_quality) != 0) { LOG_ERROR("save preview video to '%s' failed", cli_params->preview_path.c_str()); } } @@ -486,7 +493,7 @@ bool save_results(const SDCliParams& cli_params, std::string params = gen_params.embed_image_metadata ? get_image_params(ctx_params, gen_params, metadata_seed, cli_params.mode) : ""; - const bool ok = write_image_to_file(path.string(), img.data, img.width, img.height, img.channel, params, 90); + const bool ok = write_image_to_file(path.string(), img.data, img.width, img.height, img.channel, params, cli_params.compression_quality); LOG_INFO("save result image %d to '%s' (%s)", idx, path.string().c_str(), ok ? "success" : "failure"); return ok; }; @@ -532,7 +539,7 @@ bool save_results(const SDCliParams& cli_params, std::string final_ext_lower = ext.string(); std::transform(final_ext_lower.begin(), final_ext_lower.end(), final_ext_lower.begin(), ::tolower); const bool mux_audio = generated_audio != nullptr && (final_ext_lower == ".avi" || final_ext_lower == ".webm"); - if (create_video_from_sd_images(video_path.string().c_str(), results, num_results, gen_params.fps, 90, mux_audio ? generated_audio : nullptr) == 0) { + if (create_video_from_sd_images(video_path.string().c_str(), results, num_results, gen_params.fps, cli_params.compression_quality, mux_audio ? generated_audio : nullptr) == 0) { LOG_INFO("save result video to '%s'", video_path.string().c_str()); if (generated_audio != nullptr && !mux_audio) { fs::path wav_path = video_path; From 8ed23f763a166db3e91d9936e6a10a885c3e9cfd Mon Sep 17 00:00:00 2001 From: vmobilis <75476228+vmobilis@users.noreply.github.com> Date: Tue, 25 Aug 2026 04:26:11 +0300 Subject: [PATCH 2/2] media_io.cpp: notice about changed user compression --- examples/common/media_io.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/common/media_io.cpp b/examples/common/media_io.cpp index 812a8c80e..9ebd0b5a1 100644 --- a/examples/common/media_io.cpp +++ b/examples/common/media_io.cpp @@ -835,6 +835,9 @@ std::vector create_mjpg_avi_from_sd_images_to_vector(sd_image_t* images const uint32_t audio_byte_rate = has_audio ? static_cast(audio->sample_rate * audio_block_align) : 0; const uint32_t audio_data_size = has_audio ? static_cast(audio_pcm.size()) : 0; + if (mjpg_quality != quality) + LOG_DEBUG("create_mjpg_avi...(): compression quality was limited from %i to %i", quality, mjpg_quality); + std::vector avi_data; avi_data.reserve(static_cast(num_images) * 1024);