Skip to main content

Thermal swell pattern optimizer

Project description

sbl-optimizer

License: MIT PyPI version
HomepagePaperPyPIGitHub

Thermal swell pattern optimizer for “Swell by Light”: an approachable technique for freeform raised textures on paper and other materials.
Generates improved print patterns that considers heat diffusion, resulting in swell patterns similar to those of the original image.


Table of Contents


Features

  • Adaptive heat‐pattern optimization
    Compensates for heat diffusion to produce raised textures that match your design.
  • Simple CLI
    One‐command execution, with JSON‐based configuration and image input.
  • Built on Python
    Uses NumPy, Pillow, and Matplotlib for fast, portable computations and visualizations.

Installation

We recommend using a virtual environment to manage dependencies cleanly and avoid conflicts:

Using a Virtual Environment (Optional)

# Create a virtual environment
python -m venv .venv

# Activate it
# On macOS/Linux:
source .venv/bin/activate

# On Windows:
.venv\Scripts\activate

# Then install the package
pip install sbl-optimizer

Install sbl-optimizer in two easy ways:

1. From PyPI

The simplest method—just pip:

pip install sbl-optimizer

2. From Source

Clone the repository and install locally:

git clone https://github.com/sosucat/sbl-optimizer.git
cd sbl-optimizer
pip install .

Requirements

Ensure you have Python and dependencies:

Libraries Versions
Python 3.9 – 3.11
NumPy 1.24 - 2.2
Pillow 9.5 - 11.x
Matplotlib 3.7 - 3.10

You can also install dependencies manually:

pip install numpy pillow matplotlib

Quick Start

  1. If you are NOT in the project's root directory,
    change the directory to the project's root directory:

    cd sbl_optimizer
    

    Note: make sure you are at sbl_optimizer not sbl_optimizer/sbl_optimizer

  2. Run the optimizer to generate an optimized pattern that accounts for heat diffusion:

    python -m sbl_optimizer.main sample.jpg
    
  3. Locate the generated optimized pattern sample_opt.pdf in the project's root directory.

  4. Check the simulated heat distribution sample_temperature.png and swell pattern sample_swell.png.

  5. Print the sample_opt.pdf on paper, apply paste, and expose to a strong LED spotlight. Darker printed regions absorb more heat and swell.

  6. Try optimizing your own pattern.

    python -m sbl_optimizer.main path/to/your_image
    

Configuration

Some parameters can be customized via a JSON file (default: config.json shipped with the package).

config.json

{
  "swell_temperature": 145.0,
  "light_power": 100.0,
  "light_diameter": 0.06,
  "alpha": 5e-07
}
Key Type Description
swell_temperature float Target swelling temperature (°C).
light_power float Light source power (W).
light_diameter float Diameter of the light circle on paper (m).
alpha float Thermal diffusivity of paper (m²/s).

To override defaults:

python -m sbl_optimizer.main <IMAGE> --config path/to/your_config.json

Command Line Interface

Usage

python -m sbl_optimizer.main [OPTIONS] <IMAGE>

Arguments

<IMAGE>
Path to the input image (JPG, PNG, etc.)

Options

Option Description
-c, --config <FILE> Path to JSON config file
-h, --help Show help message and exit

Examples

  1. Use default settings on sample.jpg in the project's root directory.

    python -m sbl_optimizer.main sample.jpg
    
  2. Use custom settings

    python -m sbl_optimizer.main sample.jpg --config my_config.json
    
  3. Save only error logs (disable plotting)
    Edit main.py:

    • comment out save_plots, uncomment save_errors

Output files (in same folder as input image sample.jpg):

File Description
sample_opt.pdf Optimized pattern to be printed.
sample_temperature.png Simulated temperature distribution.
sample_swell.png Simulated swell pattern.

Citation

If you use sbl-optimizer in your research or projects, please cite:

@inproceedings{10.1145/3689050.3704420,
author = {Ichihashi, Sosuke and Howell, Noura and Oh, HyunJoo},
title = {Swell by Light: An Approachable Technique for Freeform Raised Textures},
year = {2025},
isbn = {9798400711978},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3689050.3704420},
doi = {10.1145/3689050.3704420},
booktitle = {Proceedings of the Nineteenth International Conference on Tangible, Embedded, and Embodied Interaction},
articleno = {45},
numpages = {16},
keywords = {2.5D fabrication, Personal fabrication, tactile rendering},
location = {Bordeaux / Talence, France},
series = {TEI '25}
}

See the paper and project page for more details.


Contributing

Contributions, issues, and feature requests are welcome!

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/foo)
  3. Commit your changes (git commit -am 'Add foo')
  4. Push to the branch (git push origin feature/foo)
  5. Open a Pull Request

Please follow the existing code style and write tests for new functionality.


License

This project is licensed under the MIT License.

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

sbl_optimizer-0.1.2.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

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

sbl_optimizer-0.1.2-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file sbl_optimizer-0.1.2.tar.gz.

File metadata

  • Download URL: sbl_optimizer-0.1.2.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.0

File hashes

Hashes for sbl_optimizer-0.1.2.tar.gz
Algorithm Hash digest
SHA256 2f809c29fb24304f5178e87d33a8ba68db9f8120a611038928fd71fbdf14332e
MD5 75cc0eaf8b63e5f1f8f3cccf8b968af7
BLAKE2b-256 17427d436de189bbab83fac1429fe481d854591e2f74ac5a9c498e00d662c16a

See more details on using hashes here.

File details

Details for the file sbl_optimizer-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: sbl_optimizer-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 5.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.0

File hashes

Hashes for sbl_optimizer-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2847d1c56b3c7c51d11b8d72a8e7599ae892c9dbc42185ef3d1b540217558370
MD5 5449f313c09448feaf199d1c1a545ac7
BLAKE2b-256 868ba4cca1b98c8d43b610a9e761ba980cb8ba8bb62da745ccd51b6c9151e958

See more details on using hashes here.

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