@@ -814,11 +814,24 @@ def write_flash(
814814 "Security features enabled, so not changing any flash settings."
815815 )
816816 calcmd5 = hashlib .md5 (image ).hexdigest ()
817- uncsize = len (image )
817+ uncsize = image_size = len (image )
818818 if compress :
819- uncimage = image
820- image = zlib .compress (uncimage , 9 )
821- compsize = len (image )
819+ compressed_image = zlib .compress (image , 9 )
820+ compsize = len (compressed_image )
821+ # Only use compression if it actually reduces the file size
822+ if compsize < uncsize :
823+ image = compressed_image
824+ image_size = compsize
825+ else :
826+ # Compression didn't help, disable it for this file
827+ source = "input image" if name is None else f"file '{ name } '"
828+ log .note (
829+ f"Cannot compress { source } more than the original size, "
830+ "will flash uncompressed. "
831+ f"Compressed size { compsize } bytes >= uncompressed { uncsize } bytes."
832+ )
833+ compress = False
834+
822835 original_image = image # Save the whole image in case retry is needed
823836 # Try again if reconnect was successful
824837 log .stage ()
@@ -829,7 +842,7 @@ def write_flash(
829842 # to dynamically calculate the timeout based on the real write size
830843 decompress = zlib .decompressobj ()
831844 esp .flash_defl_begin (
832- uncsize , compsize , address , encrypted_write = encrypted
845+ uncsize , image_size , address , encrypted_write = encrypted
833846 )
834847 else :
835848 esp .flash_begin (uncsize , address , encrypted_write = encrypted )
@@ -839,7 +852,6 @@ def write_flash(
839852 t = time .time ()
840853
841854 timeout = DEFAULT_TIMEOUT
842- image_size = compsize if compress else uncsize
843855 while len (image ) >= 0 :
844856 if not no_progress :
845857 log .progress_bar (
0 commit comments