diff --git a/tests/test_converters.py b/tests/test_converters.py
index 15c396a4..59b54cca 100644
--- a/tests/test_converters.py
+++ b/tests/test_converters.py
@@ -502,6 +502,96 @@ class TestDoclingLocalConverter:
assert isinstance(md_bo, MarkdownBackendOptions)
assert md_bo.source_uri is None
+ @pytest.mark.asyncio
+ async def test_convert_text_html_mixed_img_sources(self, config, monkeypatch):
+ """End-to-end: HTML with a mix of remote http, data:, broken http, and
+ file:// `` sources. Remote and data: URIs land as picture bytes;
+ broken URLs and file:// stay as placeholder pictures. Models the
+ wix-style ingest where most images are remote URLs with a handful of
+ broken or local-only references mixed in."""
+ import base64
+
+ from docling.backend import html_backend as html_backend_module
+
+ canned_png = base64.b64decode(
+ "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk"
+ "+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
+ )
+ good_url = "https://cdn.example.com/static/cat.png"
+ broken_url = "https://cdn.example.com/missing.png"
+
+ def fake_load_image_data(self, src_loc: str):
+ if src_loc == good_url:
+ return canned_png
+ if src_loc == broken_url:
+ # Simulate a 404: docling's _create_image_ref swallows HTTPError
+ # via its except clause and returns None for the picture.
+ import requests
+
+ resp = requests.Response()
+ resp.status_code = 404
+ raise requests.HTTPError(response=resp)
+ return None # data: and file:// fall back to docling's own path
+
+ # Wrap rather than replace so data: URIs still decode through the real
+ # `_load_image_data`. Only intercept when src is one of our test URLs.
+ original = html_backend_module.HTMLDocumentBackend._load_image_data
+
+ def wrapped(self, src_loc: str):
+ if src_loc in (good_url, broken_url):
+ return fake_load_image_data(self, src_loc)
+ return original(self, src_loc)
+
+ monkeypatch.setattr(
+ html_backend_module.HTMLDocumentBackend, "_load_image_data", wrapped
+ )
+
+ png_b64 = (
+ "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk"
+ "+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
+ )
+ html = (
+ "