Skip to main content

pycht_logo

Street art by clustering.

Pics by @alys.cheshire

⚡️ Quick start

Take a nice picture :

Generate a 5 colors stencil model :

>>> import pycht

>>> pycht.stencil('cat.jpg', 5)
Stencil 1 stencil 2 stencil 3 stencil 4 stencil 5

Final result rendering with all stencils :

Cut it, paint it, stare at it. Enjoy !

📚 Documentation

The full documentation for this project is available at:

👉 https://tlentali.github.io/pycht/

It includes installation instructions, usage examples, and the API reference.

🛠 Installation

🐍 You need to install Python 3.12 or above.

Installation can be done by using pip. There are wheels available for Linux, MacOS, and Windows.

pip install pycht

You can also install the latest development version as so:

pip install git+https://github.com/tlentali/pycht

# Or, through SSH:
pip install git+ssh://git@github.com/tlentali/pycht.git

🥄 How Does It Work?

Imagine pycht as your personal digital street artist. Here's what happens under the hood, step-by-step:

  1. 🖼️ Image loading pycht grabs your input image and flattens it like a pancake — every pixel becomes a 3-value row (B, G, R) in a giant NumPy array. Think of it as turning your photo into a spreadsheet of colors.

  2. 🎯 K-Means clustering Then comes the science. Using Scikit-Learn’s kmeans, we ask: “Hey, what are the N most dominant colors in this image?” The algorithm groups similar pixels into nb_colors clusters and assigns each one a centroid — like reducing a rainbow into just a few paint buckets.

  3. 🎨 Color mapping Every pixel in your image is replaced by its cluster's centroid. Boom — you've got a stylized version of your image with just N bold, poster-style colors.

  4. 🔍 Color separation Now the magic: for each color, pycht creates a mask. All pixels that don’t belong to the current color cluster are set to black (and later transparent). Each color gets its own PNG file — like cutting stencils for spray-painting layers IRL.

  5. 📁 File drop Your output includes:

    • output.png → The clustered image
    • stencil_1.png, stencil_2.png, ... → Transparent layers, one per color

It's like building silkscreen layers, but with Python, pixels, and zero mess.

Ready to turn your cat photo into street art? Let pycht paint it.

🧑‍💻 Development

You can use pip or uv. From the pycht root folder, do:

  • uv venv --python /path/to/3.12.x/python. Tips: you can use pyenv to manage and install multiple Python versions. You can find a specific version at ~/.pyenv/versions/3.12.2/bin/python for instance.
  • source .venv/bin/activate to activate the virtualenv .venv created by uv
  • uv sync --inexact to install all dependencies
  • pre-commit install (just one time). The pre-commit hook will run black, isort and pylint before your commit :)

You're ready to hack!

🧰 Command-Line Interface (CLI)

You can use pycht as a command-line tool to generate stencil layers from an image — perfect for street art, posters, or digital illustration.

🖥️ Installation

Install in editable mode (dev mode) with uv or pip:

uv pip install -e .

Make sure you have the required dependencies listed in pyproject.toml.

🚀 Usage

pycht <input-img> [OPTIONS]

Arguments:

  • <input-img>: Path to the input image (JPEG, PNG, etc.)

Options:

  • --output-path TEXT – Directory where output layers will be saved (default: ./output)
  • --nb-colors INTEGER – Number of stencil layers to generate (default: 3)

✅ Example

pycht misc/cat.jpg --nb-colors 4 --output-path .

This will create 4 stencil layers and save them in the current folder.

🖖 Contributing

Feel free to contribute in any way you like, we're always open to new ideas and approaches. If you want to contribute to the code base please check out the CONTRIBUTING.md file. Also take a look at the issue tracker and see if anything takes your fancy.

This project follows the all-contributors specification. Again, contributions of any kind are welcome!

📜 License

pycht is free and open-source software licensed under the MIT license.

Metadata

Release files for pycht 0.1.25

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pycht 0.1.25
File Size Uploaded
pycht-0.1.25.tar.gz 8.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pycht 0.1.25
File Interpreter ABI Platform
pycht-0.1.25-py3-none-any.whl Python 3 none any Details

Total release size: 17.3 kB

Release files / pycht-0.1.25.tar.gz

Download URL pycht-0.1.25.tar.gz
Size 8.8 kB
Tags Source
SHA-256 checksum
How to use checksums
ffab2dfb4bee82f2e8ddb627c41f7acb9ee85ff8d627522238c275e9f5a76058
BLAKE2b-256 checksum
How to use checksums
1ca8e45122b31393ddf2cef69989b5831f2b0ed70b5f1c71864d1ea4a26f5e7e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / pycht-0.1.25-py3-none-any.whl

Download URL pycht-0.1.25-py3-none-any.whl
Size 8.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5c27f92ccd85639a7d8821342c1835939b5b5c1b4f11bdc42295d3032fbed933
BLAKE2b-256 checksum
How to use checksums
936d212c301a07ff2bcd95d2401d4f27cc77f9e1d60caf710ad687d522eb487c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

0.1.25 This release

2 release files

0.1.24

2 release files

0.1.23

2 release files

0.1.22

2 release files

0.1.21

2 release files

0.1.20

2 release files

0.1.19

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.1

2 release files

0.1

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page