I have been using Signal a lot and, besides the privacy features, I have come to really enjoy custom sticker packs. Naturally, this led me to upload and maintain a lot of them. To keep things under control I wrote packpath, a small command line utility to easily upload and update Signal sticker packs from a simple config file.

A collage of different stickers I have added to my Signal app using packpath

Although the Signal stickers API is only kinda public, some developers have written libraries to interact with it. Concretely, signalstickers.com maintainer Romain Ricard, has written signalstickers-client, a Python library to interact with the sticker API.

Thanks to signalstickers-client doing all of the heavy lifting, I was able to write packpath, a simple command line utility to create and publish sticker packs based on a simple YAML configuration file. It's already available as packpath in PyPI:

$ pip3 install packpath

To use packpath, you need to create a directory with your sticker images and a config.yaml file. The YAML format is available in packpath --help, but it's actually very simple:

pack:
  title: Ketnipz
  author: Harry Hambley
  cover: ketnipz_001.webp

stickers:
  ketnipz_001.webp: 💓️
  ketnipz_002.webp: 💃️
  ketnipz_003.webp: 💕️
  ketnipz_004.webp: 😐️
  ketnipz_005.webp: 🙃️

You'll need your Signal "user and password", which are available on the desktop app through the web developer tools (window.reduxStore.getState().items.uuid_id and window.reduxStore.getState().items.password). See details on signalstickers-client README.

You can then call packpath on the directory:

$ packpath --user UUID --password PASS path/to/sticker/pack

You will get a progress report, and the "secret" URL to share your sticker pack:

$ packpath --user UUID --password PASS path/to/sticker/pack
[packpath] Configuring sticker pack Ketnipz by Harry Hambley
[packpath] Adding: 💓️ for ketnipz_001.webp
[packpath] Adding: 💃️ for ketnipz_002.webp
[packpath] Adding: 💕️ for ketnipz_003.webp
[packpath] Adding: 😐️ for ketnipz_004.webp
[packpath] Adding: 🙃️ for ketnipz_005.webp
Pack uploaded!

Pack uploaded. You can install it by visiting:
https://signal.art/addstickers/#pack_id=NNNNN&pack_key=MMMMM

You can also preview your pack at signalstickers.com:
https://signalstickers.com/pack/NNNNN?key=MMMMM

Note that visiting the above URL will (technically) make the pack ID and key visible to signalstickers.com server logs.
This will NOT add your pack to signalstickers.com, see https://signalstickers.com/contribute for that.

The code is licensed as AGPL-3.0-only, and you can check it out in the packpath repo in GitHub.

Many thanks to Romain for writing signalstickers-client, which actually made this tool possible.