Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

Darkscribes Community

  1. Home
  2. Uncategorized
  3. As someone who has developed several #ActivityPub software implementations ([Fedify], [Hollo], [BotKit], and [Hackers' Pub]), I believe one of the most frustrating features to implement in the #fediverse is #custom_emoji.

As someone who has developed several #ActivityPub software implementations ([Fedify], [Hollo], [BotKit], and [Hackers' Pub]), I believe one of the most frustrating features to implement in the #fediverse is #custom_emoji.

Scheduled Pinned Locked Moved Uncategorized
fedidevfediverseactivitypubcustomemojiaccessibility
43 Posts 9 Posters 0 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • thisismissem@hachyderm.ioT [email protected]

    @hongminhee I know there's a FEP for emoji reactions, but I don't think there's ever been one for custom emojis? https://codeberg.org/fediverse/fep/src/branch/main/fep/c0e0/fep-c0e0.md

    hongminhee@hollo.socialH This user is from outside of this forum
    hongminhee@hollo.socialH This user is from outside of this forum
    [email protected]
    wrote on last edited by
    #10

    @[email protected] You're right, I don't believe there's a specific FEP for custom emojis yet. If one were to be created, accessibility through proper alt text would definitely need to be a core requirement. The current state where emoji codes like :blob_wave: become the alt text creates significant barriers for screen reader users—especially for non-English speakers, who face an additional language barrier when trying to understand these codes. A proper standard should address how to provide meaningful descriptions that actually convey what the emoji represents in multiple languages.

    silverpill@mitra.socialS 1 Reply Last reply
    0
    • silverpill@mitra.socialS [email protected]

      @hongminhee I plan to write a FEP documenting existing implementations (it is needed to finalize my emoji reactions FEP).

      >Most implementations simply use the emoji code (like :party_blob:) as the alt text, which provides no meaningful information to screen reader users

      Do you know implementations that provide alt text for custom emojis?

      julian@community.nodebb.orgJ This user is from outside of this forum
      julian@community.nodebb.orgJ This user is from outside of this forum
      [email protected]
      wrote on last edited by
      #11

      [email protected] I personally didn't find integrating custom emoji to be difficult at all.

      However NodeBB did already have custom emoji support (so it was fairly straightforward to add the outbound federation support), and as for inbound, the short code is defined in the payload and a simple regex replace handles it ok.

      Sure, some emoji might look weird if they have different aspect ratios, but that's something outside the scope of what I'd want. All remote emoji are reduced down to a small square (or technically I think it's maybe max width and height of 1rem or similar), inline with the text and that honestly works with like 99% of the emoji I see.

      cc [email protected]

      julian@community.nodebb.orgJ 1 Reply Last reply
      0
      • julian@community.nodebb.orgJ [email protected]

        [email protected] I personally didn't find integrating custom emoji to be difficult at all.

        However NodeBB did already have custom emoji support (so it was fairly straightforward to add the outbound federation support), and as for inbound, the short code is defined in the payload and a simple regex replace handles it ok.

        Sure, some emoji might look weird if they have different aspect ratios, but that's something outside the scope of what I'd want. All remote emoji are reduced down to a small square (or technically I think it's maybe max width and height of 1rem or similar), inline with the text and that honestly works with like 99% of the emoji I see.

        cc [email protected]

        julian@community.nodebb.orgJ This user is from outside of this forum
        julian@community.nodebb.orgJ This user is from outside of this forum
        [email protected]
        wrote on last edited by
        #12

        That said an FEP would be nice so I'd be able to verify that my implementation checks all the boxes.

        silverpill@mitra.socialS 1 Reply Last reply
        0
        • hongminhee@hollo.socialH [email protected]

          As someone who has developed several #ActivityPub software implementations (Fedify, Hollo, BotKit, and Hackers' Pub), I believe one of the most frustrating features to implement in the #fediverse is #custom_emoji.

          The challenges are numerous:

          First, there's no standardization. ActivityPub specifications don't define how custom emoji should work, leading to inconsistent implementations across different servers like Mastodon and Misskey.

          Rendering is particularly problematic. Emojis must display properly across different contexts (in text, as reactions, in emoji pickers) while maintaining quality at various sizes. Animated emojis add another layer of complexity.

          Perhaps most concerning is the poor #accessibility. Most implementations simply use the emoji code (like :party_blob:) as the alt text, which provides no meaningful information to screen reader users (in particular, non-English speakers) about what the emoji actually depicts or means.

          What really dampens my motivation to implement this feature is knowing I'm investing significant effort into something that ultimately creates accessibility barriers. It's disheartening to work hard on a feature that excludes part of the community.

          #fedidev

          hongminhee@hollo.socialH This user is from outside of this forum
          hongminhee@hollo.socialH This user is from outside of this forum
          [email protected]
          wrote on last edited by
          #13

          Another annoying thing about the current custom emoji spec in the fediverse: the type is just called Emoji instead of CustomEmoji. Such a small detail, but it creates unnecessary ambiguity between Unicode emojis and custom ones. I ran into this while implementing BotKit and had type name collisions with Emoji—had to use awkward namespacing to work around it. These little inconsistencies make implementation more tedious than it needs to be.

          silverpill@mitra.socialS 1 Reply Last reply
          0
          • julian@community.nodebb.orgJ [email protected]

            That said an FEP would be nice so I'd be able to verify that my implementation checks all the boxes.

            silverpill@mitra.socialS This user is from outside of this forum
            silverpill@mitra.socialS This user is from outside of this forum
            [email protected]
            wrote on last edited by
            #14

            @julian @hongminhee

            Started writing it

            https://codeberg.org/silverpill/feps/src/branch/main/9098/fep-9098.md

            Listed requirements for the Emoji object.
            I should probably describe the microsynax there as well, and how custom emojis are rendered.

            liaizon@social.wake.stL 1 Reply Last reply
            0
            • hongminhee@hollo.socialH [email protected]

              Another annoying thing about the current custom emoji spec in the fediverse: the type is just called Emoji instead of CustomEmoji. Such a small detail, but it creates unnecessary ambiguity between Unicode emojis and custom ones. I ran into this while implementing BotKit and had type name collisions with Emoji—had to use awkward namespacing to work around it. These little inconsistencies make implementation more tedious than it needs to be.

              silverpill@mitra.socialS This user is from outside of this forum
              silverpill@mitra.socialS This user is from outside of this forum
              [email protected]
              wrote on last edited by
              #15

              @hongminhee Why there are collisions? Do you generate Emoji objects for unicode emojis too?

              1 Reply Last reply
              0
              • silverpill@mitra.socialS [email protected]

                @julian @hongminhee

                Started writing it

                https://codeberg.org/silverpill/feps/src/branch/main/9098/fep-9098.md

                Listed requirements for the Emoji object.
                I should probably describe the microsynax there as well, and how custom emojis are rendered.

                liaizon@social.wake.stL This user is from outside of this forum
                liaizon@social.wake.stL This user is from outside of this forum
                [email protected]
                wrote on last edited by
                #16

                @silverpill @julian @hongminhee you have listed "Image is a square" but is definitely not true for Misskey. And Mastodon renders Misskeys long emojos just fine.
                Actually mastodon does fine with long emojos now too

                julian@community.nodebb.orgJ silverpill@mitra.socialS 2 Replies Last reply
                0
                • liaizon@social.wake.stL [email protected]

                  @silverpill @julian @hongminhee you have listed "Image is a square" but is definitely not true for Misskey. And Mastodon renders Misskeys long emojos just fine.
                  Actually mastodon does fine with long emojos now too

                  julian@community.nodebb.orgJ This user is from outside of this forum
                  julian@community.nodebb.orgJ This user is from outside of this forum
                  [email protected]
                  wrote on last edited by
                  #17

                  [email protected] oh fun, NodeBB handles the long emoji fine as well.

                  I can't wait for this to be abused 🤣

                  1 Reply Last reply
                  0
                  • liaizon@social.wake.stL [email protected]

                    @silverpill @julian @hongminhee you have listed "Image is a square" but is definitely not true for Misskey. And Mastodon renders Misskeys long emojos just fine.
                    Actually mastodon does fine with long emojos now too

                    silverpill@mitra.socialS This user is from outside of this forum
                    silverpill@mitra.socialS This user is from outside of this forum
                    [email protected]
                    wrote on last edited by
                    #18

                    @liaizon @julian @hongminhee

                    Requirements in that section are meant for those who want maximum compatibility. For example, JPEGs and images larger than 256 KB are supported by Pleroma and others, but Mastodon doesn't allow them.

                    Non-square emojis are a bit more complicated. They are not rejected by most servers, but might not be displayed properly by clients.

                    I just visited your instance and made a screenshot of how emoji is rendered by web UI (attached). The emoji is present, but I can't tell what is depicted there. Some clients enlarge custom emojis on hover, but not Mastodon, so I have to open the image in a new browser tab, or zoom in the page. This is no ideal, hence the recommendation in the FEP.

                    liaizon@social.wake.stL 1 Reply Last reply
                    0
                    • hongminhee@hollo.socialH [email protected]

                      @[email protected] You're right, I don't believe there's a specific FEP for custom emojis yet. If one were to be created, accessibility through proper alt text would definitely need to be a core requirement. The current state where emoji codes like :blob_wave: become the alt text creates significant barriers for screen reader users—especially for non-English speakers, who face an additional language barrier when trying to understand these codes. A proper standard should address how to provide meaningful descriptions that actually convey what the emoji represents in multiple languages.

                      silverpill@mitra.socialS This user is from outside of this forum
                      silverpill@mitra.socialS This user is from outside of this forum
                      [email protected]
                      wrote on last edited by
                      #19

                      @hongminhee @thisismissem

                      I think we can use summary property on Emoji object. It's one of those properties for which the spec allows multi-language mappings:

                      https://www.w3.org/TR/activitystreams-vocabulary/#dfn-summary

                      tesaguri@fedibird.comT 1 Reply Last reply
                      0
                      • hongminhee@hollo.socialH [email protected]

                        As someone who has developed several #ActivityPub software implementations (Fedify, Hollo, BotKit, and Hackers' Pub), I believe one of the most frustrating features to implement in the #fediverse is #custom_emoji.

                        The challenges are numerous:

                        First, there's no standardization. ActivityPub specifications don't define how custom emoji should work, leading to inconsistent implementations across different servers like Mastodon and Misskey.

                        Rendering is particularly problematic. Emojis must display properly across different contexts (in text, as reactions, in emoji pickers) while maintaining quality at various sizes. Animated emojis add another layer of complexity.

                        Perhaps most concerning is the poor #accessibility. Most implementations simply use the emoji code (like :party_blob:) as the alt text, which provides no meaningful information to screen reader users (in particular, non-English speakers) about what the emoji actually depicts or means.

                        What really dampens my motivation to implement this feature is knowing I'm investing significant effort into something that ultimately creates accessibility barriers. It's disheartening to work hard on a feature that excludes part of the community.

                        #fedidev

                        ozoramore@social.t2arc.netO This user is from outside of this forum
                        ozoramore@social.t2arc.netO This user is from outside of this forum
                        [email protected]
                        wrote on last edited by
                        #20

                        @hongminhee
                        Fedibird seems to have a feature that lets you see details about emojis, which may also contribute to accessibility.
                        https://fedibird.com/@noellabo/113876564190790916

                        noellabo@fedibird.comN 1 Reply Last reply
                        0
                        • silverpill@mitra.socialS [email protected]

                          @hongminhee @thisismissem

                          I think we can use summary property on Emoji object. It's one of those properties for which the spec allows multi-language mappings:

                          https://www.w3.org/TR/activitystreams-vocabulary/#dfn-summary

                          tesaguri@fedibird.comT This user is from outside of this forum
                          tesaguri@fedibird.comT This user is from outside of this forum
                          [email protected]
                          wrote on last edited by
                          #21

                          @silverpill @hongminhee @thisismissem

                          `summary` could represent *some* kind of accessible information, but it's not obvious to me which kind exactly: should it be an accessible name (<https://developer.mozilla.org/en-US/docs/Glossary/Accessible_name>) or an accessible description (<https://developer.mozilla.org/en-US/docs/Glossary/Accessible_description>)? (Or even an HTML `title` attribute?)

                          (I think it's unfortunate that we need to reinvent an accessibility tree representation, when an AS2 `content` is just an HTML, which has already been equipped with a feature-rich and battle-tested accessibility framework called ARIA, but I digress.)

                          thisismissem@hachyderm.ioT 1 Reply Last reply
                          0
                          • tesaguri@fedibird.comT [email protected]

                            @silverpill @hongminhee @thisismissem

                            `summary` could represent *some* kind of accessible information, but it's not obvious to me which kind exactly: should it be an accessible name (<https://developer.mozilla.org/en-US/docs/Glossary/Accessible_name>) or an accessible description (<https://developer.mozilla.org/en-US/docs/Glossary/Accessible_description>)? (Or even an HTML `title` attribute?)

                            (I think it's unfortunate that we need to reinvent an accessibility tree representation, when an AS2 `content` is just an HTML, which has already been equipped with a feature-rich and battle-tested accessibility framework called ARIA, but I digress.)

                            thisismissem@hachyderm.ioT This user is from outside of this forum
                            thisismissem@hachyderm.ioT This user is from outside of this forum
                            [email protected]
                            wrote on last edited by
                            #22

                            @tesaguri @silverpill @hongminhee wouldn't it just be the alt text?

                            1 Reply Last reply
                            0
                            • silverpill@mitra.socialS [email protected]

                              @liaizon @julian @hongminhee

                              Requirements in that section are meant for those who want maximum compatibility. For example, JPEGs and images larger than 256 KB are supported by Pleroma and others, but Mastodon doesn't allow them.

                              Non-square emojis are a bit more complicated. They are not rejected by most servers, but might not be displayed properly by clients.

                              I just visited your instance and made a screenshot of how emoji is rendered by web UI (attached). The emoji is present, but I can't tell what is depicted there. Some clients enlarge custom emojis on hover, but not Mastodon, so I have to open the image in a new browser tab, or zoom in the page. This is no ideal, hence the recommendation in the FEP.

                              liaizon@social.wake.stL This user is from outside of this forum
                              liaizon@social.wake.stL This user is from outside of this forum
                              [email protected]
                              wrote on last edited by
                              #23

                              @silverpill @julian @hongminhee ugh mastodon android squishes this. These are both Mastodon bugs as far as I am concerned. I think as long as you specify what you are making maximum compatibility with that seems OK but long emojos are INCREDIBLY popular on all the misskey and misskey adjacent fediverse areas. So I would argue that usage should be spelled out in the FEP as well.

                              silverpill@mitra.socialS 1 Reply Last reply
                              0
                              • ozoramore@social.t2arc.netO [email protected]

                                @hongminhee
                                Fedibird seems to have a feature that lets you see details about emojis, which may also contribute to accessibility.
                                https://fedibird.com/@noellabo/113876564190790916

                                noellabo@fedibird.comN This user is from outside of this forum
                                noellabo@fedibird.comN This user is from outside of this forum
                                [email protected]
                                wrote on last edited by
                                #24

                                @hongminhee @silverpill @ozoramore @julian @liaizon @tesaguri

                                (This is in Japanese. Please use machine translation.)

                                カスタム絵文字については以前から問題意識があって、Fedibirdの実装を通じて解決策を模索してきました。

                                FEPを検討しているなら、ぜひ拾い上げてください。ひとまず概要を。

                                ・スクエアではない絵文字の取り扱い

                                ・アクセシビリティと多言語対応

                                ・コピー許可と権利情報

                                ・センシティブの扱い

                                ・画像形式やサイズ、アニメーションの互換性やガイドライン

                                以下は、カスタム絵文字に付与可能な属性をできるだけ記載したサンプルです。

                                添付画像は、画像化されたテキストを中心とする絵文字に対し、代替テキストが設定され、ツールチップ表示されているサンプルです。

                                この絵文字のObject表現(JSON)はこちら。
                                https://fedibird.com/emojis/prohibits_importing_to_other_servers_ja.json

                                人間向けの公開ページはこちら。
                                https://fedibird.com/emojis/prohibits_importing_to_other_servers_ja

                                Fedibirdのcustom_emojis APIのエンティティ
                                https://fedibird.com/api/v1/custom_emojis/prohibits_importing_to_other_servers_ja

                                noellabo@fedibird.comN 1 Reply Last reply
                                0
                                • noellabo@fedibird.comN [email protected]

                                  @hongminhee @silverpill @ozoramore @julian @liaizon @tesaguri

                                  (This is in Japanese. Please use machine translation.)

                                  カスタム絵文字については以前から問題意識があって、Fedibirdの実装を通じて解決策を模索してきました。

                                  FEPを検討しているなら、ぜひ拾い上げてください。ひとまず概要を。

                                  ・スクエアではない絵文字の取り扱い

                                  ・アクセシビリティと多言語対応

                                  ・コピー許可と権利情報

                                  ・センシティブの扱い

                                  ・画像形式やサイズ、アニメーションの互換性やガイドライン

                                  以下は、カスタム絵文字に付与可能な属性をできるだけ記載したサンプルです。

                                  添付画像は、画像化されたテキストを中心とする絵文字に対し、代替テキストが設定され、ツールチップ表示されているサンプルです。

                                  この絵文字のObject表現(JSON)はこちら。
                                  https://fedibird.com/emojis/prohibits_importing_to_other_servers_ja.json

                                  人間向けの公開ページはこちら。
                                  https://fedibird.com/emojis/prohibits_importing_to_other_servers_ja

                                  Fedibirdのcustom_emojis APIのエンティティ
                                  https://fedibird.com/api/v1/custom_emojis/prohibits_importing_to_other_servers_ja

                                  noellabo@fedibird.comN This user is from outside of this forum
                                  noellabo@fedibird.comN This user is from outside of this forum
                                  [email protected]
                                  wrote on last edited by
                                  #25

                                  @hongminhee @silverpill @ozoramore @julian @liaizon @tesaguri When reconsidering the specifications of custom emoji, it would be a good idea to also take into account the information provided by emojis defined in Unicode.

                                  Unicode emojis provide a string that describes what kind of image is depicted, as well as a translation string, so I think it would be better to use them while taking compatibility and consistency into consideration.

                                  noellabo@fedibird.comN 1 Reply Last reply
                                  0
                                  • noellabo@fedibird.comN [email protected]

                                    @hongminhee @silverpill @ozoramore @julian @liaizon @tesaguri When reconsidering the specifications of custom emoji, it would be a good idea to also take into account the information provided by emojis defined in Unicode.

                                    Unicode emojis provide a string that describes what kind of image is depicted, as well as a translation string, so I think it would be better to use them while taking compatibility and consistency into consideration.

                                    noellabo@fedibird.comN This user is from outside of this forum
                                    noellabo@fedibird.comN This user is from outside of this forum
                                    [email protected]
                                    wrote on last edited by
                                    #26

                                    @hongminhee @silverpill @ozoramore @julian @liaizon @tesaguri For non-square custom emojis, you should provide width and height in the API response (entity).

                                    This will help client app developers recognize and support non-square emojis.

                                    This is actually very useful, as it improves the user experience by allowing efficient layout before fetching the image.

                                    This may not be necessary for ActivityPub S2S, but it may be useful if you have a case where you can use a dummy image as a placeholder when you can't handle the emoji image.

                                    noellabo@fedibird.comN 1 Reply Last reply
                                    0
                                    • noellabo@fedibird.comN [email protected]

                                      @hongminhee @silverpill @ozoramore @julian @liaizon @tesaguri For non-square custom emojis, you should provide width and height in the API response (entity).

                                      This will help client app developers recognize and support non-square emojis.

                                      This is actually very useful, as it improves the user experience by allowing efficient layout before fetching the image.

                                      This may not be necessary for ActivityPub S2S, but it may be useful if you have a case where you can use a dummy image as a placeholder when you can't handle the emoji image.

                                      noellabo@fedibird.comN This user is from outside of this forum
                                      noellabo@fedibird.comN This user is from outside of this forum
                                      [email protected]
                                      wrote on last edited by
                                      #27

                                      @hongminhee @silverpill @ozoramore @julian @liaizon @tesaguri @thisismissem Fedibird currently provides the following information to help users understand the content of custom emojis:

                                      - alternateName (alternate_name)

                                      - ruby

                                      - description

                                      alternateName is not a shortcode that serves as a handle, but an alternative expression or name for the emoji content in text.

                                      ruby is equivalent to the ruby ​​element in HTML. It is also useful as an index when selecting a custom emoji from a picker, especially in CJKV.

                                      noellabo@fedibird.comN 1 Reply Last reply
                                      0
                                      • noellabo@fedibird.comN [email protected]

                                        @hongminhee @silverpill @ozoramore @julian @liaizon @tesaguri @thisismissem Fedibird currently provides the following information to help users understand the content of custom emojis:

                                        - alternateName (alternate_name)

                                        - ruby

                                        - description

                                        alternateName is not a shortcode that serves as a handle, but an alternative expression or name for the emoji content in text.

                                        ruby is equivalent to the ruby ​​element in HTML. It is also useful as an index when selecting a custom emoji from a picker, especially in CJKV.

                                        noellabo@fedibird.comN This user is from outside of this forum
                                        noellabo@fedibird.comN This user is from outside of this forum
                                        [email protected]
                                        wrote on last edited by
                                        #28

                                        @hongminhee @silverpill @ozoramore @julian @liaizon @tesaguri @thisismissem description provides detailed information that explains the content of the custom emoji, but it may contain unnecessary content and may not be appropriate for screen readers. alternateName may not provide enough information, but I think it will be sufficient in many cases.

                                        noellabo@fedibird.comN 1 Reply Last reply
                                        0
                                        • noellabo@fedibird.comN [email protected]

                                          @hongminhee @silverpill @ozoramore @julian @liaizon @tesaguri @thisismissem description provides detailed information that explains the content of the custom emoji, but it may contain unnecessary content and may not be appropriate for screen readers. alternateName may not provide enough information, but I think it will be sufficient in many cases.

                                          noellabo@fedibird.comN This user is from outside of this forum
                                          noellabo@fedibird.comN This user is from outside of this forum
                                          [email protected]
                                          wrote on last edited by
                                          #29

                                          @hongminhee @silverpill @ozoramore @julian @liaizon @tesaguri @thisismissem The server can register and store information in other languages ​​and provide it based on the user's preferred language.

                                          However, it is difficult to expect all custom emoji providers to fill in this information in multiple languages, so we will have to rely on machine translation to some extent.

                                          noellabo@fedibird.comN 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          Powered by NodeBB Contributors
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups