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.0.tar.gz (5.1 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.0-py3-none-any.whl (5.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sbl_optimizer-0.1.0.tar.gz
  • Upload date:
  • Size: 5.1 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.0.tar.gz
Algorithm Hash digest
SHA256 c33c28d58863a07c1c9e4c029f75fca4ab3f68e641756cb30e3b5b96e0b15fe0
MD5 95f9f34417a8dda4c22f7bbd589b139d
BLAKE2b-256 ae725aca871f040b65ce4758315dd04592691a0e5712e0e6c5e48e764c3d80a8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sbl_optimizer-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 5.0 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 34687da6803a193f1e8732ce7f25e451581f5d470aa6f25956091105c5c12219
MD5 21d266a42842142c1269ca82cf80272e
BLAKE2b-256 97a916477eeff2a782704ba55fe498b433be68b32d475b9b7ca1d38c407b95da

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