diff --git a/mautrix_telegram/config.py b/mautrix_telegram/config.py index 8752f048..5093f02c 100644 --- a/mautrix_telegram/config.py +++ b/mautrix_telegram/config.py @@ -138,6 +138,7 @@ class Config(BaseBridgeConfig): copy("bridge.invite_link_resolve") copy("bridge.inline_images") copy("bridge.image_as_file_size") + copy("bridge.image_as_file_pixels") copy("bridge.max_document_size") copy("bridge.parallel_file_transfer") copy("bridge.federate_rooms") diff --git a/mautrix_telegram/example-config.yaml b/mautrix_telegram/example-config.yaml index 054156fb..1789cfc5 100644 --- a/mautrix_telegram/example-config.yaml +++ b/mautrix_telegram/example-config.yaml @@ -214,6 +214,8 @@ bridge: inline_images: false # Maximum size of image in megabytes before sending to Telegram as a document. image_as_file_size: 10 + # Maximum number of pixels in an image before sending to Telegram as a document. Defaults to 1280x1280 = 1638400. + image_as_file_pixels: 1638400 # Maximum size of Telegram documents in megabytes to bridge. max_document_size: 100 # Enable experimental parallel file transfer, which makes uploads/downloads much faster by diff --git a/mautrix_telegram/portal.py b/mautrix_telegram/portal.py index 31f25117..b4fa3db8 100644 --- a/mautrix_telegram/portal.py +++ b/mautrix_telegram/portal.py @@ -1516,6 +1516,7 @@ class Portal(DBPortal, BasePortal): w = h = None file_name = content["net.maunium.telegram.internal.filename"] max_image_size = self.config["bridge.image_as_file_size"] * 1000**2 + max_image_pixels = self.config["bridge.image_as_file_pixels"] if self.config["bridge.parallel_file_transfer"] and content.url: file_handle, file_size = await util.parallel_transfer_to_telegram( @@ -1548,12 +1549,14 @@ class Portal(DBPortal, BasePortal): file_size = len(file) file_handle.name = file_name + force_document = file_size >= max_image_size attributes = [DocumentAttributeFilename(file_name=file_name)] if w and h: attributes.append(DocumentAttributeImageSize(w, h)) + force_document = force_document or w * h >= max_image_pixels - if (mime == "image/png" or mime == "image/jpeg") and file_size < max_image_size: + if (mime == "image/png" or mime == "image/jpeg") and not force_document: media = InputMediaUploadedPhoto(file_handle) else: media = InputMediaUploadedDocument(