Skip to content

Upload custom emojis from a ZIP file #686

Description

@nove-b

It would be useful to upload a ZIP file through the admin dashboard to register multiple custom emojis at once.

I’m considering using the folder name inside the ZIP as the category and the image filename as the shortcode. For example, animals/cat.png would be registered under the animals category with the shortcode :cat:.

I’ve built a local prototype of this behavior. What do you think about adding this feature?

For transparency, I consulted Codex during implementation and received code examples and implementation advice. I made the changes to the repository myself.

Image Image

Activity

  1. added theissue type on Oct 26, 2026
  2. added this to the Hollo 0.10 milestone on Oct 26, 2026
  3. aliceif commented on Oct 26, 2026

    @aliceif
    Contributor

    I would recommend supporting at least one of the common emoji package formats in use on fedi instead of rolling something new that may not work with existing tooling:
    Mastodon uses plain .tar.gz archives, for example: https://docs.joinmastodon.org/admin/tootctl/#emoji-import
    Misskey uses a .zip archive with a manifest file for more in-depth configuration: https://misskey-hub.net/en/docs/for-admin/features/managing-emojis/#packed-emoji-format

  4. dahlia commented on Oct 26, 2026

    @dahlia
    Member

    Thanks for working on this! I'd welcome a PR.

    I agree with @aliceif that supporting an existing package format would be useful. I'd suggest starting with Misskey's packed emoji format, since it already uses ZIP and includes emoji names and categories in its manifest. Mastodon's format would be a welcome addition if you have time, but it doesn't need to be part of the first PR.

    Please run extraction and import through Fedify's custom background tasks, which Hollo already uses for other jobs, so the HTTP request doesn't have to wait for the import to finish. The uploaded archive should be stored privately somewhere the worker can access, with only a job ID passed through the queue. Please also show the job's status and a summary of imported, skipped, and failed entries.

    A few other things to account for:

    • Skip duplicate shortcodes by default, including duplicates across categories, without overwriting existing images. Retrying a partially completed job should also be safe.
    • Limit the archive's extracted size and entry count, validate the actual image contents, and reject unsafe archive paths.
    • Clean up uploaded archives once they're no longer needed, as well as any image files left behind by failed registrations.
  5. dahlia commented on Oct 26, 2026

    @dahlia
    Member

    One more thing: please include a changelog fragment under changes.d/ in your PR. Hollo uses Sacho to manage changelogs; Sacho's everyday workflow guide explains how to add a fragment.

    Also credit yourself at the end of the entry with [[#686], [#XXX] by nove-b], replacing XXX with your PR number. Run sacho resolve-links to pin the issue and PR links, then mise run fmt to format the fragment and update CHANGES.md.

  6. nove-b commented on Oct 27, 2026

    @nove-b
    Author

    @aliceif @dahlia

    Thank you both for your feedback!

    I'll go with Misskey's packed emoji format to ensure compatibility with existing tools.

    I also appreciate the detailed implementation guidance and considerations. I'll keep these points in mind as I work on the PR.

  7. nove-b commented on Nov 2, 2026

    @nove-b
    Author

    @dahlia

    #688

    I've submitted a pull request. I'd appreciate it if you could take a look when you have a chance!

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

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Fields

Priority

None yet

Effort

None yet

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions