Skip to main content

Batch-pack sticker images into .wastickers files for WhatsApp — auto-resize, split, pad, and generate installable packs

Project description


pack sticker images into .wastickers nun for WhatsApp
easily recover stickers when moving phones into installable packs

Python 3.8+ License: MIT PyPI PyPI Downloads GitHub Stars Tests Platform


pip install wastickers-packer

wastickers-packer path/to/stickers -o ./packs

Transfer the .wastickers to your phone, open it with Sticker Maker Studio (iOS) or WAStickerApps (Android), and tap Add to WhatsApp.


Features

  • One command converts a folder of images into WhatsApp-ready sticker packs
  • Handles WhatsApp's 3–30 sticker limit — pads small packs, splits large ones
  • Auto-resizes to 512×512, converts to WebP, enforces ≤100 KB (static) / ≤500 KB (animated)
  • Generates 96×96 tray icon from the first sticker
  • HTML preview gallery--report flag generates a mobile-friendly index page
  • Works on Windows, macOS, Linux

Table of Contents


Installation

pip install wastickers-packer

Requires Python 3.8+. The Pillow dependency is installed automatically.


Usage

Flat folder — all images become one pack

wastickers-packer stickers/ -o ./packs

Over 30 images? Packs split automatically ("My Pack 1", "My Pack 2", …).
Under 3? Stickers are duplicated to reach 3.

Subfolder mode — one pack per subfolder

stickers/
├── animals/       → "Animals" pack
│   ├── cat.webp
│   └── dog.webp
├── food/          → "Food" pack
│   ├── pizza.png
│   └── taco.jpg
└── reactions/     → "Reactions" pack
    ├── hug.gif
    └── wave.gif
wastickers-packer stickers/ -o ./packs

Each subfolder is a named pack. Max 30 per subfolder (error if exceeded).
Below 3? Padded automatically.

HTML preview

wastickers-packer path/to/stickers -o ./packs --report

Why and for Who?

While moving from an Android device to an iOS one, I encountered this stupid issue using MoveToIOS (as the process is not annoying and error prone as is) — among other things, WhatsApp Stickers do not transfer in the move to the new phone for some reason!

On Android at least it is possible to access them via:

Internal Storage/Android/media/com.whatsapp/WhatsApp/Media/WhatsApp Stickers/

Now hear me out, I'm a bit of sticker hoarder, and even after filtering and copying them out I was still left with 300+ stickers, not in packs nor organized of course.

So I started researching a way to just dump and install them on my new phone, and I came to the sad conclusion that there is no real way to batch up the process — and the sadder conclusion — I am the only human with that much stickers that reached this issue.

So I decided to streamline this as much as I can.

Basically just grab the WhatsApp Stickers folder from the app's files and run this tool on them to create packs out of all your stickers, send them to yourself and open them with a third-party WhatsApp Sticker app to install.


Why a helper app is required (iOS) & Dead End Research

I wanted to streamline this completely and have no dependency on third-parties — upon my research a way that looked promising and was commonly talked about was leveraging the Pasteboard + whatsapp://stickerPack

  • via file
  • via url

There were conflicting views all over and no one place with an answer — so TLDR — there is no way to do this.

WhatsApp iOS only accepts sticker packs through a native Sticker Provider extension — an App Store app that registers with WhatsApp via Apple's framework. There is no supported web-based, file-based, or URL-scheme installation path.

The old whatsapp://stickerPack pasteboard API (2018) required a custom UTI type (net.whatsapp.third-party.sticker-pack) and binary NSJSONSerialization data — neither of which can be produced from a browser or file.

Even on its last working versions, the URL scheme was fragile and frequently broken by iOS updates, WhatsApp Business conflicts, and Apple's clipboard security model (blocked on file:// URLs entirely). Modern WhatsApp versions have removed support for it altogether.

Hopefully this serves someone.


Options

Flag Default Description
-o, --output output/ Output directory
--name folder name (title-cased) Pack name for flat folders
--publisher WhatsApp Sticker Tool Publisher name in metadata
--report False Generate HTML preview gallery

WhatsApp Limitations (and how we handle them)

Limitation Our approach
3–30 stickers per pack Below 3 → pad. Above 30 → split (flat mode).
≤100 KB per static sticker Quality-tuned WebP export hits the target.
≤500 KB per animated sticker Same, with the higher animated limit.
Frame duration 10–500 ms (>8ms) Clamped automatically; 0ms → 100ms.
Total animation ≤10 s Scaled proportionally if exceeded.
No mixing static & animated Says not allowed — iOS app accepts mixed packs.
512×512 pixels Auto-resized and centre-cropped.
96×96 PNG tray icon Generated from the first sticker.

Output Structure

packs/
├── animals.wastickers          ← open on phone to install
├── food.wastickers
├── reactions.wastickers
├── index.html                  ← preview page (with --report)
├── animals/
│   ├── tray.png
│   ├── sticker_01.webp
│   └── ...
├── food/
│   ├── tray.png
│   └── ...
└── reactions/
    └── ...

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wastickers_packer-0.1.1.tar.gz (18.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wastickers_packer-0.1.1-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file wastickers_packer-0.1.1.tar.gz.

File metadata

  • Download URL: wastickers_packer-0.1.1.tar.gz
  • Upload date:
  • Size: 18.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for wastickers_packer-0.1.1.tar.gz
Algorithm Hash digest
SHA256 8d57a6a3f34b9a00a2e31ff47d101f6ef8d3e889fac82e5943f1060b4a1bb8f6
MD5 52622a27f4b746a59c83688ac2ec09ed
BLAKE2b-256 ebd9db6f0b61e3c19e2d58861f21e4781688d8b1e6125e2ae16e9968dfffcde1

See more details on using hashes here.

Provenance

The following attestation bundles were made for wastickers_packer-0.1.1.tar.gz:

Publisher: release.yml on Yuxni/wastickers-packer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wastickers_packer-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for wastickers_packer-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ef9b7452c60818a11db397cc4e011c46ba20478869c14c5ad19692af3e0b7770
MD5 0e0d84dc36ba91725f13e4e3f9287e2d
BLAKE2b-256 7917a5856407fa4e39fd8677eb121b8634ef385a203dc03955c4ffd7555917da

See more details on using hashes here.

Provenance

The following attestation bundles were made for wastickers_packer-0.1.1-py3-none-any.whl:

Publisher: release.yml on Yuxni/wastickers-packer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page