Crystal Renderer
SVG and 3D visualization for crystal geometries. Renders crystal structures from CDL notation with export to multiple formats including SVG, STL, and glTF.
Part of the Gemmology Project.
Installation
pip install crystal-renderer
For raster image export (PNG, JPG):
pip install crystal-renderer[raster]
Quick Start
from crystal_renderer import generate_cdl_svg
# Generate SVG from CDL notation
generate_cdl_svg("cubic[m3m]:{111}@1.0 + {100}@1.3", "crystal.svg")
# Export to 3D formats
from crystal_geometry import create_octahedron
from crystal_renderer import export_stl, export_gltf
geom = create_octahedron()
export_stl(geom.vertices, geom.faces, "octahedron.stl")
export_gltf(geom.vertices, geom.faces, "octahedron.gltf")
Features
- CDL Visualization: Generate SVG images from Crystal Description Language notation
- Multi-Format Export: SVG, PNG, JPG, STL, glTF
- Customizable Rendering: Face colors, axes, grid, labels
- Info Panels: FGA-style property panels on visualizations
- 3D Projection: Configurable elevation and azimuth angles
- Color Schemes: System-based and form-based coloring
API Reference
High-Level Visualization
from crystal_renderer import generate_cdl_svg, generate_geometry_svg
# From CDL string
generate_cdl_svg(
cdl_string="cubic[m3m]:{111}@1.0",
output_path="crystal.svg",
show_axes=True,
elev=30,
azim=-45,
color_by_form=False,
show_grid=True,
face_labels=False
)
# From raw geometry
generate_geometry_svg(
vertices=geom.vertices,
faces=geom.faces,
output_path="geometry.svg",
face_color='#81D4FA',
edge_color='#0277BD'
)
3D Export
from crystal_renderer import export_stl, export_gltf
# STL for 3D printing
export_stl(vertices, faces, "model.stl", binary=True)
# glTF for web/AR
export_gltf(
vertices, faces, "model.gltf",
color=(0.5, 0.7, 0.9, 0.8), # RGBA
name="crystal"
)
Format Conversion
from crystal_renderer import convert_svg_to_raster, generate_with_format
# Convert existing SVG to PNG
convert_svg_to_raster("input.svg", "output.png", scale=2.0)
# Generate directly to raster format
generate_with_format(
generator_func=generate_cdl_svg,
output_path="crystal.png",
output_format="png",
cdl_string="cubic[m3m]:{111}"
)
Info Panels
from crystal_renderer import render_info_panel, create_fga_info_panel
# On a matplotlib axes
properties = {
'name': 'Ruby',
'chemistry': 'Al2O3',
'hardness': '9',
'ri': '1.762-1.770'
}
render_info_panel(ax, properties, position='top-right', style='compact')
# Create FGA-style panel from mineral data
fga_props = create_fga_info_panel(mineral_data)
Color Constants
from crystal_renderer import (
AXIS_COLOURS, # a, b, c axis colors
ELEMENT_COLOURS, # Per-element colors
HABIT_COLOURS, # Per-crystal-system colors
FORM_COLORS, # Colors for multi-form rendering
)
# Get element color
from crystal_renderer import get_element_colour
color = get_element_colour('Si') # '#F0C8A0'
Projection Utilities
from crystal_renderer import (
calculate_view_direction,
calculate_axis_origin,
calculate_vertex_visibility,
is_face_visible,
)
# Calculate which vertices are front-facing
visibility = calculate_vertex_visibility(vertices, faces, elev=30, azim=-45)
Output Formats
| Format | Extension | Description |
|---|---|---|
| SVG | .svg |
Vector graphics, scalable |
| PNG | .png |
Raster with transparency |
| JPG | .jpg |
Compressed raster |
| STL | .stl |
3D printing format |
| glTF | .gltf |
Web/AR 3D format |
Requirements
- Python >= 3.10
- numpy >= 1.20.0
- matplotlib >= 3.5.0
- cdl-parser >= 1.0.0
- crystal-geometry >= 1.0.0
Optional
cairosvg- SVG to raster conversionPillow- Image processingase- Atomic structure visualization
Documentation
See crystal-renderer.gemmology.dev for full documentation.
License
MIT License - see LICENSE for details.
Related Packages
- cdl-parser - Crystal Description Language parser
- crystal-geometry - 3D geometry engine
- mineral-database - Mineral preset database
Metadata
Release files for gemmology-crystal-renderer 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| gemmology_crystal_renderer-2.0.0.tar.gz | 32.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gemmology_crystal_renderer-2.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 62.6 kB
Release files / gemmology_crystal_renderer-2.0.0.tar.gz
| Download URL | gemmology_crystal_renderer-2.0.0.tar.gz |
|---|---|
| Size | 32.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e4f631e0e0a173b1ddb1ebe3f728811027bfac91ca81487f9b4cb6960517f4a7
|
|
BLAKE2b-256 checksum How to use checksums |
6127f621468b4faf0e00559c0a5ed75ebcc872a35275cd4fbb2c3d00d53444cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 16, 2026.
Transparency logRelease files / gemmology_crystal_renderer-2.0.0-py3-none-any.whl
| Download URL | gemmology_crystal_renderer-2.0.0-py3-none-any.whl |
|---|---|
| Size | 30.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
329583d569b650c96fbf23968592a270218fc5577b4b9abaaa9c8a459940bc86
|
|
BLAKE2b-256 checksum How to use checksums |
68da4d2afa44c588cf35feb1399851dc482f34c96dad53e99642e9e0ad166bf3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 16, 2026.
Transparency log