{"id":17989075,"url":"https://github.com/poomsmart/emojifonts","last_synced_at":"2026-03-10T04:09:42.800Z","repository":{"id":65428243,"uuid":"461105239","full_name":"PoomSmart/EmojiFonts","owner":"PoomSmart","description":"Python scripts to backport and theme Apple Color Emoji font.","archived":false,"fork":false,"pushed_at":"2026-02-21T04:41:05.000Z","size":4944,"stargazers_count":156,"open_issues_count":3,"forks_count":6,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-02-21T11:31:13.967Z","etag":null,"topics":["apple","emoji","font","ios","theme","unicode"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PoomSmart.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-02-19T06:18:35.000Z","updated_at":"2026-02-21T04:41:08.000Z","dependencies_parsed_at":"2023-02-12T20:33:34.415Z","dependency_job_id":"2589af2a-34f2-4987-b9d9-b37e84d55525","html_url":"https://github.com/PoomSmart/EmojiFonts","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/PoomSmart/EmojiFonts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PoomSmart%2FEmojiFonts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PoomSmart%2FEmojiFonts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PoomSmart%2FEmojiFonts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PoomSmart%2FEmojiFonts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PoomSmart","download_url":"https://codeload.github.com/PoomSmart/EmojiFonts/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PoomSmart%2FEmojiFonts/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30324186,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T01:36:58.598Z","status":"online","status_checked_at":"2026-03-10T02:00:06.579Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apple","emoji","font","ios","theme","unicode"],"created_at":"2024-10-29T19:13:32.459Z","updated_at":"2026-03-10T04:09:42.792Z","avatar_url":"https://github.com/PoomSmart.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EmojiFonts\n\nPython and shell scripts to backport and theme [Apple Color Emoji font](https://en.wikipedia.org/wiki/Apple_Color_Emoji).\n\n# Prerequisites\n\nThe following tools are required to build and theme the font.\n\n### System Tools\n* **Bash 5+**\n* **[uv](https://github.com/astral-sh/uv)** (Recommended for managing Python environment and dependencies)\n* **[pngquant](https://pngquant.org)** \u0026 **[oxipng](https://github.com/shssoichiro/oxipng)** (For PNG optimization)\n* **For Theming**: [ImageMagick](https://imagemagick.org/), [librsvg](https://wiki.gnome.org/Projects/LibRsvg), and [svgo](https://github.com/svg/svgo)\n\n**Install all system tools with Homebrew:**\n```bash\nbrew install bash uv pngquant oxipng imagemagick librsvg svgo\n```\n\n### Python Dependencies\nPython 3.11+ is required. All Python dependencies are automatically managed by `uv` and defined in `pyproject.toml`:\n* `afdko`, `fonttools[repacker]`, `pillow`, and `pyliblzfse`.\n\nThese will be installed automatically into a virtual environment when you run `uv sync`.\n\n# Before anything\n\n1. Copy `Apple Color Emoji.ttc` from `/System/Library/Fonts` of your macOS instance to the root of this repository and rename it to `AppleColorEmoji_macOS.ttc`.\n2. Copy AppleColorEmoji font from your iOS instance to the root of this repository and rename it to `AppleColorEmoji_iOS.ttc`. Read [here](https://poomsmart.github.io/emojiport) for the exact file path.\n3. Execute `uv sync` to activate/synchronize the Python virtual environment.\n4. Execute `./prepare.sh` to create emoji TTF files and tables. Run this once.\n\n# Building Apple Color Emoji font\n\nBuild format: `./apple-prepare.sh \u003cOS\u003e \u0026\u0026 ./apple.sh [HD]`\n\nReplace `\u003cOS\u003e` with `macOS` (if you have both macOS and iOS fonts) or `iOS` (if you only have iOS font).\n\nReplace `[HD]` with `HD` if you want to build HD version (160x160 image set included), or leave it blank for normal version.\n\nExecuting `./apple-prepare.sh \u003cOS\u003e \u0026\u0026 ./apple.sh` will get `AppleColorEmoji@2x.ttc` (for iOS 10 and above) and `AppleColorEmoji@2x.ttf` (for iOS 9 and below) for you under `apple` directory.\n\n# Notable Python Scripts\n\nEmojiFonts deals with certain font tables; mainly `GDEF` and `sbix`.\n\n`shift-multi.py` (or CLI alias `emojifonts-shift-multi`) resizes and shifts the multi-skinned emojis that pair up as one, including couples and handshake, to have them displayed on iOS 13 and below correctly where there is no render logic to automatically place the pair close together.\n\n`GDEF` table which maps each of paired emojis to a certain class, is modified by the scripts. This is for the easiest backward-compatible solution for the emoji font. In this table, emojis with class `1` and `3` represent `left` and `right`, respectively. With those present, the text render engine on iOS 14+ will try to place the pair close together again even when we applied `shift-multi.py` to the font. Another script `remove-class3.py` ensures that there are no class `1` and `3` emojis that will otherwise be visible to the users.\n\n`extractor.py` (CLI alias `emojifonts-extract`) extracts PNG emoji images from the font. This opens up the possibility to theme the emoji font.\n\nAlso in `extractor.py`, it detects glyphs of type `flip`, reads the actual image glyph ID that they reference to, programmatically flips them and then extracts them. `flip` glyphs are present in iOS 17.4 version of Apple Color Emoji font and not supported by any lower OS versions. They are for directional emojis - Apple has a single image for each direction, and the font uses `flip` glyphs to render the correct image.\n\n`apple.py` (CLI alias `emojifonts-apple`) swaps in PNG assets extracted with the previous step back into the sbix table.\n\n`remove-class3.py` (CLI alias `emojifonts-remove-class3`) trims class 3 glyph assignments from the Apple GDEF table.\n\n# PNG Optimization\n\n`pngquant` and `oxipng` are used to optimize the images with little to none changes to the quality. The Apple emoji font sizes are reduced by 50% using this method. The simpler the emoji images, the more size reduction is achieved.\n\n# Verification\n\n- Run `uv run pytest` to ensure the extractor, class trimming, and metric overrides behave as expected against the bundled fixtures.\n- Run `uv run ruff check .` to lint the Python toolchain, or `uv run ruff format .` to auto-format when needed.\n- After running `emojifonts-extract`, spot-check output with `open apple/images/64/u1F600.png` (or any glyph) and verify flipped glyphs are emitted.\n- After `emojifonts-apple`, diff the sbix table with `ttx -o - apple/AppleColorEmoji@2x.ttc | grep -c '\u003cglyph'` to confirm the strike counts remain unchanged.\n\n# Troubleshooting\n\n- `Flip glyph references unknown glyph`: regenerate TTX tables with `./prepare.sh` to keep sbix data in sync with recent Apple font updates.\n- `Overrides refer to missing glyph metrics`: re-run `emojifonts-shift-multi` against the freshly exported `hmtx.ttx`; stale files from earlier releases omit the new handshake glyphs.\n- `pngquant: command not found`: install the dependency via `brew install pngquant` (or remove the optimizer by setting `PNGQUANT=0` before invoking shell helpers).\n\n# Theming\n\nTheming scripts for all emojis vendors produce the font in TTC format. The font may be used by EmojiFontManager iOS tweak, and is guaranteed to work on iOS 6 and higher. Ensure that you executed `./apple-prepare.sh \u003cOS\u003e \u0026\u0026 ./apple.sh HD` before following instructions below.\n\nIt is recommended to limit the depth of clone to `1` (`git clone --depth 1 git@github.com:PoomSmart/EmojiFonts.git`) because of a long history of commits.\n\n## Blobmoji Emoji\n\n1. Clone [blobmoji2](https://github.com/DavidBerdik/blobmoji2) and place its folder alongside this project.\n2. Execute `cd blobmoji \u0026\u0026 ./blobmoji-noto.sh` to create themed font, output at `blobmoji/blobmoji.ttc`.\n\n## Facebook Emoji\n\n1. Clone [facebook-emojis](https://github.com/PoomSmart/facebook-emojis) and place its folder alongside this project.\n3. Execute `cd facebook \u0026\u0026 ./facebook.sh` to create them themed font, output at `facebook/facebook.ttc`.\n\n## FluentUI Emoji\n\n1. Clone [fluentui-emoji](https://github.com/microsoft/fluentui-emoji) and place its folder alongside this project.\n2. Execute `cd fluentui \u0026\u0026 ./fluentui.sh STYLE` (where `STYLE` is one of this list: `Color, Flat, High Contrast`) to create themed font, output at `fluentui/fluentui-STYLE.ttc`.\n\n## Google Noto Color Emoji\n\n1. Clone [noto-emoji](https://github.com/googlefonts/noto-emoji) and place its folder alongside this project.\n2. Execute `cd noto-emoji \u0026\u0026 ./noto-emoji.sh` to create the themed font, output at `noto-emoji/noto-emoji.ttc`.\n\n## JoyPixels Emoji\n\n1. Clone [emoji-assets](https://github.com/joypixels/emoji-assets) and place its folder alongside this project.\n2. Execute `cd joypixels \u0026\u0026 ./joypixels.sh` to create themed font, output at `joypixels/joypixels.ttc`.\n\n## OpenMoji Emoji\n\n1. Clone [openmoji](https://github.com/hfg-gmuend/openmoji) and place its folder alongside this project.\n2. Execute `cd openmoji \u0026\u0026 ./openmoji.sh` to create themed font, output at `openmoji/openmoji.ttc`.\n\n## Samsung One UI Emoji\n\n1. Retrieve `SamsungColorEmoji.ttf` with Samsung One UI emojis somehow and place that in `oneui` folder.\n2. Execute `cd oneui \u0026\u0026 ./oneui.sh` to create themed font, output at `oneui/oneui.ttc`.\n\n## Toss Face Emoji\n\n1. Download `TossFaceFontMac.ttf` from [tossface GitHub Releases](https://github.com/toss/tossface) and place that in `tossface` folder.\n2. Execute `cd tossface \u0026\u0026 ./tossface.sh` to create themed font, output at `tossface/tossface.ttc`.\n\n## Twitter Twemoji\n\n1. Clone [twemoji](https://github.com/jdecked/twemoji) and place its folder alongside this project.\n2. Execute `cd twemoji \u0026\u0026 ./twemoji.sh` to create the themed font, output at `twemoji/twemoji.ttc`.\n\n## WhatsApp Emoji\n\n1. Clone [whatsapp-emoji-linux](https://github.com/dmlls/whatsapp-emoji-linux) and place its folder alongside this project.\n2. Execute `cd whatsapp \u0026\u0026 ./whatsapp.sh` to create themed font, output at `whatsapp/whatsapp.ttc`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpoomsmart%2Femojifonts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpoomsmart%2Femojifonts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpoomsmart%2Femojifonts/lists"}