packpath: A command line utility to upload Signal stickers from a simple config file

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.

Consider this mosaic a far more interesting screenshot than a terminal running 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.