Skip to content

Commit fea1c8e

Browse files
committed
Allow setting the VAE tile size using --vae-tile-size wxh
1 parent 1e054cb commit fea1c8e

4 files changed

Lines changed: 34 additions & 3 deletions

File tree

include/image_generator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ class ImageGenerator {
113113
// SD context parameters from CLI
114114
bool vae_on_cpu_;
115115
bool vae_tiling_;
116+
std::string vae_tile_size_;
116117
bool offload_to_cpu_;
117118
bool diffusion_fa_;
118119
bool control_net_cpu_;

include/server.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ struct ServerParams {
1616
std::shared_ptr<ModelManager> model_manager;
1717
bool vae_on_cpu = false;
1818
bool vae_tiling = false;
19+
std::string vae_tile_size;
1920
bool offload_to_cpu = false;
2021
bool diffusion_fa = false;
2122
bool control_net_cpu = false;

src/image_generator.cpp

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <cstring>
44
#include <stdexcept>
5+
#include <string>
56

67
#define STB_IMAGE_WRITE_IMPLEMENTATION
78
#define STB_IMAGE_WRITE_STATIC
@@ -84,6 +85,7 @@ ImageGenerator::ImageGenerator(std::shared_ptr<TaskStateManager> task_state_mana
8485
interrupted_(false),
8586
vae_on_cpu_(server_params.vae_on_cpu),
8687
vae_tiling_(server_params.vae_tiling),
88+
vae_tile_size_(server_params.vae_tile_size),
8789
offload_to_cpu_(server_params.offload_to_cpu),
8890
diffusion_fa_(server_params.diffusion_fa),
8991
control_net_cpu_(server_params.control_net_cpu),
@@ -202,12 +204,33 @@ std::vector<std::string> ImageGenerator::generateInternal(const ImageGenerationP
202204
// VAE tiling (if enabled via CLI)
203205
if (vae_tiling_) {
204206
gen_params.vae_tiling_params.enabled = true;
205-
gen_params.vae_tiling_params.tile_size_x = 512; // Default tile size
206-
gen_params.vae_tiling_params.tile_size_y = 512;
207+
208+
// Parse tile size
209+
int tile_size_x = 256;
210+
int tile_size_y = 256;
211+
if (!vae_tile_size_.empty()) {
212+
size_t x_pos = vae_tile_size_.find('x');
213+
try {
214+
if (x_pos != std::string::npos) {
215+
std::string tile_x_str = vae_tile_size_.substr(0, x_pos);
216+
std::string tile_y_str = vae_tile_size_.substr(x_pos + 1);
217+
tile_size_x = std::stoi(tile_x_str);
218+
tile_size_y = std::stoi(tile_y_str);
219+
} else {
220+
tile_size_x = tile_size_y = std::stoi(vae_tile_size_);
221+
}
222+
} catch (const std::exception& e) {
223+
LOG_WARNING("Invalid VAE tile size '%s', using default 256x256", vae_tile_size_.c_str());
224+
tile_size_x = tile_size_y = 256;
225+
}
226+
}
227+
228+
gen_params.vae_tiling_params.tile_size_x = tile_size_x;
229+
gen_params.vae_tiling_params.tile_size_y = tile_size_y;
207230
gen_params.vae_tiling_params.target_overlap = 0.5f;
208231
gen_params.vae_tiling_params.rel_size_x = 1.0f;
209232
gen_params.vae_tiling_params.rel_size_y = 1.0f;
210-
LOG_INFO("VAE tiling enabled with tile size 512x512");
233+
LOG_INFO("VAE tiling enabled with tile size %dx%d", tile_size_x, tile_size_y);
211234
}
212235

213236
// Generate images

src/main.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ struct CommandLineArgs {
9191
std::string text_encoder_dir;
9292
bool vae_on_cpu = false;
9393
bool vae_tiling = false;
94+
std::string vae_tile_size;
9495
bool offload_to_cpu = false;
9596
bool diffusion_fa = false;
9697
bool control_net_cpu = false;
@@ -117,6 +118,8 @@ void print_usage(const char* program_name) {
117118
std::cerr << " --text-encoder-dir <path> Text encoder models directory" << std::endl;
118119
std::cerr << " --vae-on-cpu Keep VAE on CPU (default: false)" << std::endl;
119120
std::cerr << " --vae-tiling Enable VAE tiling (default: false)" << std::endl;
121+
std::cerr << " --vae-tile-size <size> VAE tile size (in pixels), format [X]x[Y] (default: 256x256)"
122+
<< std::endl;
120123
std::cerr << " --offload-to-cpu Offload parameters to CPU (default: false)" << std::endl;
121124
std::cerr << " --diffusion-fa Enable diffusion flash attention (default: false)" << std::endl;
122125
std::cerr << " --control-net-cpu Keep ControlNet on CPU (default: false)" << std::endl;
@@ -171,6 +174,8 @@ CommandLineArgs parse_args(int argc, char* argv[]) {
171174
args.vae_on_cpu = true;
172175
} else if (arg == "--vae-tiling") {
173176
args.vae_tiling = true;
177+
} else if (arg == "--vae-tile-size" && i + 1 < argc) {
178+
args.vae_tile_size = argv[++i];
174179
} else if (arg == "--offload-to-cpu") {
175180
args.offload_to_cpu = true;
176181
} else if (arg == "--diffusion-fa") {
@@ -255,6 +260,7 @@ int main(int argc, char* argv[]) {
255260
server_params.model_manager = model_manager;
256261
server_params.vae_on_cpu = args.vae_on_cpu;
257262
server_params.vae_tiling = args.vae_tiling;
263+
server_params.vae_tile_size = args.vae_tile_size;
258264
server_params.offload_to_cpu = args.offload_to_cpu;
259265
server_params.diffusion_fa = args.diffusion_fa;
260266
server_params.control_net_cpu = args.control_net_cpu;

0 commit comments

Comments
 (0)