@@ -109,6 +109,7 @@ struct SDParams {
109109 float apg_eta = 1 .0f ;
110110 float apg_momentum = 0 .0f ;
111111 float apg_norm_threshold = 0 .0f ;
112+ float apg_norm_smoothing = 0 .0f ;
112113
113114 bool chroma_use_dit_mask = true ;
114115 bool chroma_use_t5_mask = false ;
@@ -211,6 +212,8 @@ void print_usage(int argc, const char* argv[]) {
211212 printf (" --apg-eta VALUE parallel projected guidance scale for APG (default: 1.0, recommended: between 0 and 1)\n " );
212213 printf (" --apg-momentum VALUE CFG update direction momentum for APG (default: 0, recommended: around -0.5)\n " );
213214 printf (" --apg-nt, --apg-rescale VALUE CFG update direction norm threshold for APG (default: 0 = disabled, recommended: 4-15)\n " );
215+ printf (" --apg-nt-smoothing VALUE EXPERIMENTAL! Norm threshold smoothing for APG (default: 0 = disabled)\n " );
216+ printf (" (replaces saturation with a smooth approximation)\n " );
214217 printf (" --slg-scale SCALE skip layer guidance (SLG) scale, only for DiT models: (default: 0)\n " );
215218 printf (" 0 means disabled, a value of 2.5 is nice for sd3.5 medium\n " );
216219 printf (" --eta SCALE eta in DDIM, only for DDIM and TCD: (default: 0)\n " );
@@ -675,6 +678,9 @@ std::string get_image_params(SDParams params, int64_t seed) {
675678 }
676679 if (params.apg_norm_threshold != 0 ) {
677680 parameter_string += " CFG normalization threshold: " + std::to_string (params.apg_norm_threshold ) + " , " ;
681+ if (params.apg_norm_smoothing != 0 ) {
682+ parameter_string += " CFG normalization threshold: " + std::to_string (params.apg_norm_smoothing ) + " , " ;
683+ }
678684 }
679685 if (params.slg_scale != 0 && params.skip_layers .size () != 0 ) {
680686 parameter_string += " SLG scale: " + std::to_string (params.cfg_scale ) + " , " ;
0 commit comments