Skip to content

Embed and subset fonts in SVG rendering#58

Merged
HalFrgrd merged 2 commits into
masterfrom
svg-embed-fonts-16076179123429280778
May 21, 2026
Merged

Embed and subset fonts in SVG rendering#58
HalFrgrd merged 2 commits into
masterfrom
svg-embed-fonts-16076179123429280778

Conversation

@HalFrgrd
Copy link
Copy Markdown
Owner

This PR updates the SVG renderer to parse, subset, and embed the font faces directly into the SVG's <style> tag, ensuring consistent text rendering regardless of the user's local installed fonts.

The fonts are loaded as WOFF2 format from disk, decompressed to TTF using woff2_patched, subsetted using the subsetter crate with the unique characters extracted from the Recording frames, and encoded as base64 TTF fonts into the generated <style> block.


PR created automatically by Jules for task 16076179123429280778 started by @HalFrgrd

- SVG outputs now embed the glyphs of the fonts they use
  in a `<style>` block via data URIs to ensure consistent rendering.
- Embedded fonts are initially WOFF2 files, which are decompressed
  to TTF, subset using `ttf_parser` and `subsetter` based on characters
  present in the recording frames, and re-encoded in base64.
- Since a pure-Rust WOFF2 encoder is currently unavailable, the final
  subsetted font data is embedded as `font/ttf` instead of WOFF2.
- Unused glyphs are stripped to keep the SVG file size manageable.

Co-authored-by: HalFrgrd <4559349+HalFrgrd@users.noreply.github.com>
@google-labs-jules
Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

- SVG outputs now embed the glyphs of the fonts they use
  in a `<style>` block via data URIs to ensure consistent rendering.
- Embedded fonts are initially WOFF2 files, which are decompressed
  to TTF, subset using `ttf_parser` and `subsetter` based on characters
  present in the recording frames, and re-encoded in base64.
- Since a pure-Rust WOFF2 encoder is currently unavailable, the final
  subsetted font data is embedded as `font/ttf` instead of WOFF2.
- Unused glyphs are stripped to keep the SVG file size manageable.

Co-authored-by: HalFrgrd <4559349+HalFrgrd@users.noreply.github.com>
@HalFrgrd HalFrgrd merged commit 153277e into master May 21, 2026
2 checks passed
@HalFrgrd HalFrgrd deleted the svg-embed-fonts-16076179123429280778 branch May 21, 2026 15:55
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.

1 participant