summaryrefslogtreecommitdiff
path: root/searx
diff options
context:
space:
mode:
authorBnyro <bnyro@tutanota.com>2026-06-16 20:59:53 +0200
committerBnyro <bnyro@tutanota.com>2026-06-29 10:19:19 +0200
commit13962657746d9b5fd31ddf9cf28fc8d5d5ed1ff9 (patch)
tree80e2c30aae0a0221db1bae469a072ac675187c0d /searx
parent0fd40d5f2948f158047450ba4b27e0a7a5e2a9f0 (diff)
[feat] engines: add magnific images engine
Diffstat (limited to 'searx')
-rw-r--r--searx/engines/magnific.py62
-rw-r--r--searx/settings.yml5
2 files changed, 67 insertions, 0 deletions
diff --git a/searx/engines/magnific.py b/searx/engines/magnific.py
new file mode 100644
index 000000000..ddec8dfa4
--- /dev/null
+++ b/searx/engines/magnific.py
@@ -0,0 +1,62 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""Magnific_ is a database for images.
+
+.. _Magnific: https://www.magnific.com
+"""
+
+from urllib.parse import urlencode
+
+import typing as t
+
+from searx.result_types import EngineResults
+
+if t.TYPE_CHECKING:
+ from searx.extended_types import SXNG_Response
+ from searx.search.processors import OnlineParams
+
+
+about = {
+ "website": "https://www.magnific.com",
+ "wikidata_id": "Q104211654",
+ "official_api_documentation": None,
+ "use_official_api": False,
+ "require_api_key": False,
+ "results": "JSON",
+}
+
+base_url = "https://www.magnific.com"
+
+categories = ["images"]
+paging = True
+
+free_images_only = True
+"""
+Whether to only load images that may be used for free, without a Magnific account.
+"""
+
+
+def request(query: str, params: "OnlineParams") -> None:
+ args = {"term": query, "filters[ai-generated][excluded]": 1, "page": params["pageno"], "locale": "en"}
+ if free_images_only:
+ args["filters[license]"] = "free"
+
+ params["headers"]["Referer"] = f"{base_url}/search"
+ params["url"] = f"{base_url}/api/regular/search?{urlencode(args)}"
+
+
+def response(resp: "SXNG_Response"):
+ res = EngineResults()
+
+ result: dict[str, t.Any] # TBH: dict[str, t.Any]
+ for result in resp.json()["items"]:
+ res.add(
+ res.types.Image(
+ title=result["name"],
+ url=result["url"],
+ thumbnail_src=result["preview"]["url"],
+ img_src=result["preview"]["url"],
+ resolution=f"{result['preview']['width']}x{result['preview']['height']}",
+ )
+ )
+
+ return res
diff --git a/searx/settings.yml b/searx/settings.yml
index 352b3cdb0..4254fa1ae 100644
--- a/searx/settings.yml
+++ b/searx/settings.yml
@@ -1585,6 +1585,11 @@ engines:
disabled: true
inactive: true
+ - name: magnific
+ engine: magnific
+ shortcut: mag
+ disabled: true
+
- name: marginalia
engine: marginalia
shortcut: mar