From 952896d29e1fdea8d2be89bf656c97036979f059 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Tue, 16 Jun 2026 22:15:53 +0200 Subject: [PATCH] [feat] image results: automatically guess mimetype based on path --- searx/result_types/image.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/searx/result_types/image.py b/searx/result_types/image.py index c98fa2c73..d75498de9 100644 --- a/searx/result_types/image.py +++ b/searx/result_types/image.py @@ -14,6 +14,7 @@ template. # pylint: disable=too-few-public-methods __all__ = ["Image", "ImageRef"] +import mimetypes import types import typing as t from collections.abc import Callable @@ -71,7 +72,7 @@ class Image(MainResult, kw_only=True): """The resolution of the image (e.g. ``1920 x 1080`` pixel)""" img_format: str = "" - """The format of the image (e.g. ``png``).""" + """The format of the image :py:obj:`.MainResult.img_src` (e.g. ``png``).""" source: str = "" """Source of the image.""" @@ -83,6 +84,19 @@ class Image(MainResult, kw_only=True): formats: list[ImageRef] = [] """List of links to alternative image formats.""" + def __post_init__(self): + super().__post_init__() + + if not self.img_format: + # automatically guess the image format based on the path of the image + mimetype = mimetypes.guess_type(self.img_src)[0] + if mimetype: + subtype = mimetype.split("/")[-1] + if subtype in MIMESUB: + self.img_format = MIMESUB[subtype] + else: + self.img_format = subtype.upper() + def filter_urls(self, filter_func: "Callable[[Result | LegacyResult, str, str], str | bool ]"): for _ref in self.formats[:]: