@@ -475,8 +475,7 @@ struct SDContextParams {
475475 prediction_t prediction = PREDICTION_COUNT;
476476 lora_apply_mode_t lora_apply_mode = LORA_APPLY_AUTO;
477477
478- sd_tiling_params_t vae_tiling_params = {false , 0 , 0 , 0 .5f , 0 .0f , 0 .0f };
479- bool force_sdxl_vae_conv_scale = false ;
478+ bool force_sdxl_vae_conv_scale = false ;
480479
481480 float flow_shift = INFINITY;
482481
@@ -576,18 +575,9 @@ struct SDContextParams {
576575 &chroma_t5_mask_pad},
577576 };
578577
579- options.float_options = {
580- {" " ,
581- " --vae-tile-overlap" ,
582- " tile overlap for vae tiling, in fraction of tile size (default: 0.5)" ,
583- &vae_tiling_params.target_overlap },
584- };
578+ options.float_options = {};
585579
586580 options.bool_options = {
587- {" " ,
588- " --vae-tiling" ,
589- " process vae in tiles to reduce memory usage" ,
590- true , &vae_tiling_params.enabled },
591581 {" " ,
592582 " --force-sdxl-vae-conv-scale" ,
593583 " force use of conv scale on sdxl vae" ,
@@ -724,52 +714,6 @@ struct SDContextParams {
724714 return 1 ;
725715 };
726716
727- auto on_tile_size_arg = [&](int argc, const char ** argv, int index) {
728- if (++index >= argc) {
729- return -1 ;
730- }
731- std::string tile_size_str = argv[index];
732- size_t x_pos = tile_size_str.find (' x' );
733- try {
734- if (x_pos != std::string::npos) {
735- std::string tile_x_str = tile_size_str.substr (0 , x_pos);
736- std::string tile_y_str = tile_size_str.substr (x_pos + 1 );
737- vae_tiling_params.tile_size_x = std::stoi (tile_x_str);
738- vae_tiling_params.tile_size_y = std::stoi (tile_y_str);
739- } else {
740- vae_tiling_params.tile_size_x = vae_tiling_params.tile_size_y = std::stoi (tile_size_str);
741- }
742- } catch (const std::invalid_argument&) {
743- return -1 ;
744- } catch (const std::out_of_range&) {
745- return -1 ;
746- }
747- return 1 ;
748- };
749-
750- auto on_relative_tile_size_arg = [&](int argc, const char ** argv, int index) {
751- if (++index >= argc) {
752- return -1 ;
753- }
754- std::string rel_size_str = argv[index];
755- size_t x_pos = rel_size_str.find (' x' );
756- try {
757- if (x_pos != std::string::npos) {
758- std::string rel_x_str = rel_size_str.substr (0 , x_pos);
759- std::string rel_y_str = rel_size_str.substr (x_pos + 1 );
760- vae_tiling_params.rel_size_x = std::stof (rel_x_str);
761- vae_tiling_params.rel_size_y = std::stof (rel_y_str);
762- } else {
763- vae_tiling_params.rel_size_x = vae_tiling_params.rel_size_y = std::stof (rel_size_str);
764- }
765- } catch (const std::invalid_argument&) {
766- return -1 ;
767- } catch (const std::out_of_range&) {
768- return -1 ;
769- }
770- return 1 ;
771- };
772-
773717 options.manual_options = {
774718 {" " ,
775719 " --type" ,
@@ -796,14 +740,6 @@ struct SDContextParams {
796740 " but it usually offers faster inference speed and, in some cases, lower memory usage. "
797741 " The at_runtime mode, on the other hand, is exactly the opposite." ,
798742 on_lora_apply_mode_arg},
799- {" " ,
800- " --vae-tile-size" ,
801- " tile size for vae tiling, format [X]x[Y] (default: 32x32)" ,
802- on_tile_size_arg},
803- {" " ,
804- " --vae-relative-tile-size" ,
805- " relative tile size for vae tiling, format [X]x[Y], in fraction of image size if < 1, in number of tiles per dim if >=1 (overrides --vae-tile-size)" ,
806- on_relative_tile_size_arg},
807743 };
808744
809745 return options;
@@ -917,13 +853,6 @@ struct SDContextParams {
917853 << " chroma_t5_mask_pad: " << chroma_t5_mask_pad << " ,\n "
918854 << " prediction: " << sd_prediction_name (prediction) << " ,\n "
919855 << " lora_apply_mode: " << sd_lora_apply_mode_name (lora_apply_mode) << " ,\n "
920- << " vae_tiling_params: { "
921- << vae_tiling_params.enabled << " , "
922- << vae_tiling_params.tile_size_x << " , "
923- << vae_tiling_params.tile_size_y << " , "
924- << vae_tiling_params.target_overlap << " , "
925- << vae_tiling_params.rel_size_x << " , "
926- << vae_tiling_params.rel_size_y << " },\n "
927856 << " force_sdxl_vae_conv_scale: " << (force_sdxl_vae_conv_scale ? " true" : " false" ) << " \n "
928857 << " }" ;
929858 return oss.str ();
@@ -1061,6 +990,8 @@ struct SDGenerationParams {
1061990
1062991 int64_t seed = 42 ;
1063992
993+ sd_tiling_params_t vae_tiling_params = {false , 0 , 0 , 0 .5f , 0 .0f , 0 .0f };
994+
1064995 // Photo Maker
1065996 std::string pm_id_images_dir;
1066997 std::string pm_id_embed_path;
@@ -1251,6 +1182,10 @@ struct SDGenerationParams {
12511182 " --vace-strength" ,
12521183 " wan vace strength" ,
12531184 &vace_strength},
1185+ {" " ,
1186+ " --vae-tile-overlap" ,
1187+ " tile overlap for vae tiling, in fraction of tile size (default: 0.5)" ,
1188+ &vae_tiling_params.target_overlap },
12541189 };
12551190
12561191 options.bool_options = {
@@ -1264,6 +1199,10 @@ struct SDGenerationParams {
12641199 " disable auto resize of ref images" ,
12651200 false ,
12661201 &auto_resize_ref_image},
1202+ {" " ,
1203+ " --vae-tiling" ,
1204+ " process vae in tiles to reduce memory usage" ,
1205+ true , &vae_tiling_params.enabled },
12671206 };
12681207
12691208 auto on_seed_arg = [&](int argc, const char ** argv, int index) {
@@ -1460,6 +1399,52 @@ struct SDGenerationParams {
14601399 return 1 ;
14611400 };
14621401
1402+ auto on_tile_size_arg = [&](int argc, const char ** argv, int index) {
1403+ if (++index >= argc) {
1404+ return -1 ;
1405+ }
1406+ std::string tile_size_str = argv[index];
1407+ size_t x_pos = tile_size_str.find (' x' );
1408+ try {
1409+ if (x_pos != std::string::npos) {
1410+ std::string tile_x_str = tile_size_str.substr (0 , x_pos);
1411+ std::string tile_y_str = tile_size_str.substr (x_pos + 1 );
1412+ vae_tiling_params.tile_size_x = std::stoi (tile_x_str);
1413+ vae_tiling_params.tile_size_y = std::stoi (tile_y_str);
1414+ } else {
1415+ vae_tiling_params.tile_size_x = vae_tiling_params.tile_size_y = std::stoi (tile_size_str);
1416+ }
1417+ } catch (const std::invalid_argument&) {
1418+ return -1 ;
1419+ } catch (const std::out_of_range&) {
1420+ return -1 ;
1421+ }
1422+ return 1 ;
1423+ };
1424+
1425+ auto on_relative_tile_size_arg = [&](int argc, const char ** argv, int index) {
1426+ if (++index >= argc) {
1427+ return -1 ;
1428+ }
1429+ std::string rel_size_str = argv[index];
1430+ size_t x_pos = rel_size_str.find (' x' );
1431+ try {
1432+ if (x_pos != std::string::npos) {
1433+ std::string rel_x_str = rel_size_str.substr (0 , x_pos);
1434+ std::string rel_y_str = rel_size_str.substr (x_pos + 1 );
1435+ vae_tiling_params.rel_size_x = std::stof (rel_x_str);
1436+ vae_tiling_params.rel_size_y = std::stof (rel_y_str);
1437+ } else {
1438+ vae_tiling_params.rel_size_x = vae_tiling_params.rel_size_y = std::stof (rel_size_str);
1439+ }
1440+ } catch (const std::invalid_argument&) {
1441+ return -1 ;
1442+ } catch (const std::out_of_range&) {
1443+ return -1 ;
1444+ }
1445+ return 1 ;
1446+ };
1447+
14631448 options.manual_options = {
14641449 {" -s" ,
14651450 " --seed" ,
@@ -1511,6 +1496,14 @@ struct SDGenerationParams {
15111496 " --scm-policy" ,
15121497 " SCM policy: 'dynamic' (default) or 'static'" ,
15131498 on_scm_policy_arg},
1499+ {" " ,
1500+ " --vae-tile-size" ,
1501+ " tile size for vae tiling, format [X]x[Y] (default: 32x32)" ,
1502+ on_tile_size_arg},
1503+ {" " ,
1504+ " --vae-relative-tile-size" ,
1505+ " relative tile size for vae tiling, format [X]x[Y], in fraction of image size if < 1, in number of tiles per dim if >=1 (overrides --vae-tile-size)" ,
1506+ on_relative_tile_size_arg},
15141507
15151508 };
15161509
@@ -1946,6 +1939,13 @@ struct SDGenerationParams {
19461939 << " seed: " << seed << " ,\n "
19471940 << " upscale_repeats: " << upscale_repeats << " ,\n "
19481941 << " upscale_tile_size: " << upscale_tile_size << " ,\n "
1942+ << " vae_tiling_params: { "
1943+ << vae_tiling_params.enabled << " , "
1944+ << vae_tiling_params.tile_size_x << " , "
1945+ << vae_tiling_params.tile_size_y << " , "
1946+ << vae_tiling_params.target_overlap << " , "
1947+ << vae_tiling_params.rel_size_x << " , "
1948+ << vae_tiling_params.rel_size_y << " },\n "
19491949 << " }" ;
19501950 free (sample_params_str);
19511951 free (high_noise_sample_params_str);
0 commit comments