Skip to content

feat(markdown): emit asset:N hrefs for embedded images - #70

Open
alexiskowalski wants to merge 13 commits into
firecrawl:mainfrom
alexiskowalski:feat/markdown-asset-refs-63
Open

feat(markdown): emit asset:N hrefs for embedded images#70
alexiskowalski wants to merge 13 commits into
firecrawl:mainfrom
alexiskowalski:feat/markdown-asset-refs-63

Conversation

@alexiskowalski

Copy link
Copy Markdown

Summary

Fixes #63: embedded assets already appear as Inline::Image { source: Asset(id) } in the document model, but Markdown dropped them to alt text only (or nothing when alt was empty), so to_markdown_bytes() lost positional image markers.

Changes

  • Render ImageSource::Asset as ![alt](asset:N), where N is the index into Document.assets.
  • Keep ImageSource::Unavailable as alt-text-only (no bytes to reference).
  • Document the asset:N scheme in the README.
  • Update Markdown snapshots that previously collapsed embedded images to bare alt text.

Callers can rewrite asset:N after writing asset files out, or keep using the document model for the bytes. This is complementary to approaches that inject resolved URLs.

Test plan

  • Unit tests for asset href rendering (with and without alt).
  • Snapshot updates for docx/odt/rtf/doc/epub fixtures that embed pictures.
  • cargo test --locked render::markdown
  • cargo test --locked --test snapshots
  • CI

f1vwpbleiia7ie added 13 commits August 8, 2026 22:55
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
Signed-off-by: f1vwpbleiia7ie <f1vwpbleiia7ie@users.noreply.github.com>
@mirabilitum

Copy link
Copy Markdown

cargo test --locked --test snapshots fails with this PR as-is — five snapshots are missing or incorrect (ole, odp, pptx-order, rich's OLE line, and epub has the wrong content: one image + text tiny dot, not two images). This patch fixes all five; git apply from the repo root:

diff --git a/tests/snapshots/snapshots__docx__handmade-ole.docx.snap b/tests/snapshots/snapshots__docx__handmade-ole.docx.snap
index c9626e8..b9e155d 100644
--- a/tests/snapshots/snapshots__docx__handmade-ole.docx.snap
+++ b/tests/snapshots/snapshots__docx__handmade-ole.docx.snap
@@ -4,4 +4,4 @@ expression: output
 ---
 Before the object
 
-Embedded object: Excel.Sheet.12
+![Embedded object: Excel.Sheet.12](asset:0)
diff --git a/tests/snapshots/snapshots__docx__handmade-rich.docx.snap b/tests/snapshots/snapshots__docx__handmade-rich.docx.snap
index 38580ca..9114d99 100644
--- a/tests/snapshots/snapshots__docx__handmade-rich.docx.snap
+++ b/tests/snapshots/snapshots__docx__handmade-rich.docx.snap
@@ -17,6 +17,6 @@ Rich objects follow.
 
 ![tiny dot image](asset:0)
 
-Embedded object: Excel.Sheet.12
+![Embedded object: Excel.Sheet.12](asset:1)
 
 After the objects.
diff --git a/tests/snapshots/snapshots__epub__book.epub.snap b/tests/snapshots/snapshots__epub__book.epub.snap
index c0dd0de..96bbaa9 100644
--- a/tests/snapshots/snapshots__epub__book.epub.snap
+++ b/tests/snapshots/snapshots__epub__book.epub.snap
@@ -26,7 +26,7 @@ A list of things:
 
 See [Chapter Two](#epub-text-ch002-xhtml-chapter-two) for the table, or jump straight to [the marked paragraph](#epub-text-ch002-xhtml-markpoint).
 
-![tiny dot](asset:0) ![tiny dot](asset:0)
+![tiny dot](asset:0) tiny dot
 
 <a id="epub-text-ch002-xhtml-chapter-two"></a>
 
diff --git a/tests/snapshots/snapshots__odp__pres.odp.snap b/tests/snapshots/snapshots__odp__pres.odp.snap
index d46d347..e70d94b 100644
--- a/tests/snapshots/snapshots__odp__pres.odp.snap
+++ b/tests/snapshots/snapshots__odp__pres.odp.snap
@@ -17,6 +17,8 @@ Numbers Slide
 | --- | --- |
 | North | 42 |
 
+![](asset:0)
+
 Grouped shapes below.
 
 Inside a group shape.
diff --git a/tests/snapshots/snapshots__pptx__handmade-order.pptx.snap b/tests/snapshots/snapshots__pptx__handmade-order.pptx.snap
index 782ed77..652da2e 100644
--- a/tests/snapshots/snapshots__pptx__handmade-order.pptx.snap
+++ b/tests/snapshots/snapshots__pptx__handmade-order.pptx.snap
@@ -8,4 +8,4 @@ Kicker before the title
 
 Body after the title
 
-Quarterly numbers
+![Quarterly numbers](asset:0)

With it applied, cargo test --locked is green (210 unit + 8 snapshot tests).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Expose embedded image assets in markdown output

2 participants