Skip to content

Draw every emoji of Noto Color Emoji in a snapshot (#76) - #304

Closed
jakejackson1 wants to merge 1 commit into
feature/76-colrv1from
feature/76-noto-snapshot
Closed

jakejackson1 wants to merge 1 commit into
feature/76-colrv1from
feature/76-noto-snapshot

Conversation

@jakejackson1

@jakejackson1 jakejackson1 commented Sep 22, 2026

Copy link
Copy Markdown
Member

Part of #76. Stacked on #299 (COLRv1). A snapshot of every emoji in Noto Color Emoji, drawn through the COLRv1 source.

What it draws

  • Font: Noto-COLRv1.ttf from noto-emoji v2.051 (the latest release), which is the build Google Fonts serves.
  • Sequences: every fully-qualified sequence and component in Unicode 17.0's emoji-test.txt, as a paragraph per group under a DejaVu heading, at 16pt:
    • 3953 sequences;
    • HarfBuzz shapes each one to a single Noto colour glyph, with no misses.
  • "Drawn alone": the 26 regional indicators and U+20E3, which the font also draws on their own.
  • What's left out: of Noto's other colour glyphs, the digits, # and * stay in DejaVu, which has them. One glyph has no character mapped to it.
  • Committed beside the font:
    • its OFL licence, Noto-COLRv1-OFL.txt;
    • emoji-test.txt, unchanged, with its Unicode terms of use at the top.

Size

  • The snapshot is compressed, unlike the others. It's 27.7 MB this way; uncompressed it's 83 MB, over GitHub's 50 MB warning and close to its 100 MB limit.

    • The comparison inflates streams, so a failure still diffs object by object.
    • A different zlib build writes different bytes. Those fall through to the object comparison and pass, with a note to refresh.
  • The font adds 5 MB and emoji-test.txt 670 KB. Each future refresh of the snapshot adds about another 27 MB to the history.

  • Where the size goes (uncompressed):

    • 58 MB of glyph content streams;
    • 23 MB of form XObjects (the groups composites are drawn in).

    Two things I haven't changed here would shrink this for users too:

    • Coordinates are written to three decimal places, and whole numbers in font units would do.
    • A composite draws the source outline again inside its group.

Checked

  • Poppler and Ghostscript draw the same pages:
    • Ghostscript needs -dGraphicsAlphaBits=4 for this. Without antialiasing, at low DPI, Noto's thin outline layers make faces look darker.
    • Every group looks complete, keycaps and flags included.
  • Premultiplied gradients (Draw a COLR version 1 font in colour (#76) #299's spec fixes): the snapshot includes them. Compared with the first version of this snapshot, the only pixels that change are in gradients that fade out in colour, e.g. the comet's tail keeps its blue rather than washing to grey.
  • Logging: rendering all 3953 sequences logs no warning.
    • Noto uses only SRC_IN and SOFT_LIGHT composites, and PAD colour lines.
    • It uses no sweep, PaintColrGlyph or Var paints.
  • Cost: generating and comparing the snapshot takes about 4 s and 370 MB.

🤖 Generated with Claude Code

The COLRv1 build of Noto Color Emoji 2.051, as Google Fonts serves it, draws each fully-qualified
sequence and component of Unicode 17.0's emoji-test.txt, a paragraph per group, and the regional
indicators and U+20E3 on their own. Each of the 3953 sequences shapes to one of the font's colour
glyphs. The font's licence and emoji-test.txt, unchanged, are committed beside it.

This snapshot's streams are compressed, unlike the others: uncompressed it is 83 MB.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jakejackson1
jakejackson1 force-pushed the feature/76-noto-snapshot branch from bf13d33 to 7cde3dd Compare September 22, 2026 02:01
@jakejackson1

Copy link
Copy Markdown
Member Author

Not going to merge. Was just a test to verify all emojis from Noto Color Emoji can be successfully rendered.

@jakejackson1 jakejackson1 added the invalid This doesn't seem right label Sep 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

invalid This doesn't seem right

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant