diff --git a/src/model/vae/vae.hpp b/src/model/vae/vae.hpp index 8b8c46ded..b97aecee0 100644 --- a/src/model/vae/vae.hpp +++ b/src/model/vae/vae.hpp @@ -133,7 +133,11 @@ struct VAE : public GGMLRunner { int64_t H = input.shape()[1] / scale_factor; float tile_overlap; int tile_size_x, tile_size_y; - get_tile_sizes(tile_size_x, tile_size_y, tile_overlap, tiling_params, W, H, 1.30539f); + // Image VAE encode is more sensitive to tile boundary context than decode. + // Keep the smaller legacy factor for video VAEs, but default image encode + // tiles to 64 latent pixels so a 512px SD image is encoded as one tile. + const float encode_tile_factor = (sd_version_is_wan(version) || sd_version_is_ltxav(version)) ? 1.30539f : 2.0f; + get_tile_sizes(tile_size_x, tile_size_y, tile_overlap, tiling_params, W, H, encode_tile_factor); LOG_DEBUG("VAE Tile size: %dx%d", tile_size_x, tile_size_y); output = tiled_compute(input, n_threads,