Skip to main content

Convert SMILES chemical notation to molecular structure images

Project description

SMILEStoImage

A Python library for converting SMILES (Simplified Molecular Input Line Entry System) chemical notation to molecular structure images.

Overview

SMILEStoImage provides a programmatic interface for generating 2D molecular structure visualizations from SMILES strings. The library is built on RDKit and supports multiple output formats suitable for web services, data processing pipelines, and cheminformatics applications.

Features

  • Convert SMILES notation to molecular structure images
  • Multiple output formats: PNG, JPEG, SVG
  • Flexible return types: raw bytes or PIL Image objects
  • Configurable image dimensions
  • Command-line interface for batch processing
  • Minimal dependencies

Installation

Requirements

  • Python 3.8 or higher
  • RDKit 2023.9.1 or higher
  • Pillow 10.0.0 or higher

From PyPI

pip install smiles-to-image

From Source

git clone https://github.com/tsiyukino/SMILEStoImage.git
cd SMILEStoImage
pip install -r requirements.txt
pip install -e .

Usage

Python API

Basic Conversion

from smiles_to_image import smiles_to_image, smiles_to_file

# Save directly to file
smiles_to_file("CCO", "ethanol.png")

# Get image as bytes
img_bytes = smiles_to_image("c1ccccc1", "PNG")

# Get PIL Image object for further processing
img = smiles_to_image("CCO", "PNG", return_pil=True)
img.save("output.png")

Advanced Usage

# Specify custom image size
smiles_to_file("c1ccccc1", "benzene.png", img_size=(800, 800))

# Convert to different formats
smiles_to_file("CCO", "ethanol.jpg", img_format="JPEG")
smiles_to_file("CCO", "ethanol.svg", img_format="SVG")

# Get bytes for network transmission
img_bytes = smiles_to_image("CC(=O)O", "PNG", img_size=(500, 500))

Command-Line Interface

The library includes a command-line tool for standalone usage and batch processing.

Basic Usage

# Convert single SMILES string
smiles2img "CCO" -o ethanol.png

# Specify format and size
smiles2img "c1ccccc1" -o benzene.jpg -f JPEG -s 600 600

# Output to stdout
smiles2img "CCO" -f PNG --stdout > molecule.png

Batch Processing

# Create input file with one SMILES per line
cat > molecules.txt << EOF
CCO
c1ccccc1
CC(=O)O
EOF

# Process batch
smiles2img --batch molecules.txt -o output_directory -f PNG

API Reference

smiles_to_image()

smiles_to_image(smiles, img_format="PNG", img_size=(300, 300), return_pil=False)

Convert a SMILES string to a molecular structure image.

Parameters:

  • smiles (str): SMILES string representation of the molecule.
  • img_format (str): Output format (PNG, JPEG, SVG). Default: "PNG".
  • img_size (tuple): Image dimensions as (width, height) in pixels. Default: (300, 300).
  • return_pil (bool): Return PIL Image object instead of bytes. Default: False.

Returns:

  • bytes or PIL.Image.Image: Image data in specified format (bytes by default).

Raises:

  • ValueError: If SMILES string is invalid.

smiles_to_file()

smiles_to_file(smiles, output_path, img_format=None, img_size=(300, 300))

Convert a SMILES string to an image file.

Parameters:

  • smiles (str): SMILES string representation of the molecule.
  • output_path (str): File path for the output image.
  • img_format (str, optional): Output format. If None, inferred from file extension.
  • img_size (tuple): Image dimensions as (width, height) in pixels. Default: (300, 300).

Returns:

  • str: Path to the saved file.

Raises:

  • ValueError: If SMILES string is invalid or format cannot be determined.

Integration Examples

Web Service Integration

from flask import Flask, send_file
from io import BytesIO
from smiles_to_image import smiles_to_image

app = Flask(__name__)

@app.route('/molecule/<smiles>')
def get_molecule(smiles):
    img_bytes = smiles_to_image(smiles, "PNG")
    return send_file(BytesIO(img_bytes), mimetype='image/png')

Batch Processing

from smiles_to_image import smiles_to_file

molecules = [
    ("CCO", "ethanol"),
    ("c1ccccc1", "benzene"),
    ("CC(=O)O", "acetic_acid")
]

for smiles, name in molecules:
    smiles_to_file(smiles, f"{name}.png", img_size=(400, 400))

Data Pipeline Integration

from smiles_to_image import smiles_to_image

# Generate fixed-size images for machine learning applications
training_data = []
for smiles in smiles_list:
    img_bytes = smiles_to_image(smiles, "PNG", img_size=(224, 224))
    training_data.append(img_bytes)

Common SMILES Examples

Molecule SMILES
Ethanol CCO
Benzene c1ccccc1
Acetic acid CC(=O)O
Caffeine CN1C=NC2=C1C(=O)N(C(=O)N2C)C
Aspirin CC(=O)Oc1ccccc1C(=O)O

Project Structure

SMILEStoImage/
├── smiles_to_image/
│   ├── __init__.py       # Package initialization
│   ├── converter.py      # Core conversion logic
│   └── cli.py           # Command-line interface
├── examples/            # Integration examples
├── tests/              # Unit tests
├── setup.py            # Package configuration
└── requirements.txt    # Dependencies

Development

Running Tests

pip install pytest
pytest tests/

Installing in Development Mode

pip install -e .

Technical Details

Image Generation

The library uses RDKit's molecular visualization capabilities to generate 2D structure diagrams. For raster formats (PNG, JPEG), the conversion pipeline is:

  1. Parse SMILES string using RDKit
  2. Generate 2D coordinates
  3. Render to PIL Image
  4. Convert to requested format

For SVG output, RDKit's native SVG renderer is used directly.

Format-Specific Handling

  • PNG: Direct PIL output with transparency support
  • JPEG: RGBA to RGB conversion with white background
  • SVG: Vector output using RDKit's SVG drawer

License

MIT License. See LICENSE file for details.

Contributing

Contributions are welcome. Please ensure that:

  1. Code follows existing style conventions
  2. All tests pass
  3. New features include appropriate tests
  4. Documentation is updated accordingly

Support

For bug reports and feature requests, please use the GitHub issue tracker.

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

smiles_to_image-0.1.2.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

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

smiles_to_image-0.1.2-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: smiles_to_image-0.1.2.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for smiles_to_image-0.1.2.tar.gz
Algorithm Hash digest
SHA256 afd8b870434075502cfecabbfcaba5749754515d51a9e330a61657c4c55fc5cf
MD5 64c7d21ba92db03908b222bcf15ffe5a
BLAKE2b-256 0bb79c22fe91b5aa7b71fa66bf4182b7f199530cdd017fb52d753ab1f51c0ec3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for smiles_to_image-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 24ba5ff641a30b24329482a2fe99afbf246e28849c2b61fd76fdccb4403894f0
MD5 07427e7c3584e3f6e8ac1796b88e2f19
BLAKE2b-256 f60fcd4ecfe15e835a736df5719ce41341d2f511f342baf3a6634938364e283f

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