Generate beautiful images of code with syntax highlighting in a stylish terminal window.
Project description
PyCheese
PyCheese is a Python-based tool for generating beautiful, high-quality images of code with syntax highlighting, rendered in a macOS-style terminal window. Built for automation and easy customization, it can be easily integrated into scripts or pipelines.
Features
- Syntax Highlighting – Utilizes Pygments with support for dozens of languages.
- macOS-style Terminal UI – Recreates the terminal header and shadow.
- Fonts – Use any TTF font, comes with JetBrains Mono for elegant, readable code.
- Fully Scriptable – Designed to run headlessly from scripts, CI pipelines, or other Python apps.
- Easily Customizable – Modify themes, fonts, window styles, and more in plain Python.
- Self-contained – No need for browsers or servers. Everything runs locally.
Installation
pip install pycheese
Command Line Usage
Render the code in test.py in a default 80x24 window. By default, the window scrolls with the code and only the last 24 rows will be shown if the code does not fit into the window.
pycheese tests/sample_code.py
Use the --columns and --rows options to extend the window.
pycheese --columns 45 tests/sample_code.py
Programmatic Usage
from pycheese import PyCheese, PyCheeseConfig
tool = PyCheese()
tool.render_code_to_file(
code='print("Hello, world!")',
output_path='hello_world.png'
)
A slightly more custom way to call the tool is to create a RenderConfig to overwrite specific parameters.
config = PyCheeseConfig(
shadow_offset = 20,
shadow_blur = 3,
shadow_color = "purple",
shadow_alpha = 220,
)
renderer = PyCheese(
code='print("Hello, world!")',
config=config,
)
renderer.render() # render all layers
renderer.final_image.show() # access PIL image object
PyCheese renders four distinct layers: background, shadow, text, and title bar. They are composited into the final image. This approach allows the modification of individual layers for an animation without having to re-render any other layers.
renderer.bg_layer
renderer.shadow_layer
renderer.text_layer
renderer.titlebar_layer
renderer.final_image
It's possible to efficiently generate an animation by only modifying the layer that is changing.
code='print("Hello, world!")',
for style in ["monokai", ""]:
renderer.render_text_layer(code=code, style=style)
renderer.render()
renderer.final_image.show()
print(color)
Fonts
The tool comes with the JetBrainsMono font. Direct the tool to your fonts folder for more font choices.
Styles
PyCheese uses the Pygments library which comes with a range of styles that can be selected with the --style options. The complete list can be found here.
Some dark styles:
- monokai
- zenburn
- nord
- dracula
- gruvbox-dark
Some light styles:
- solarized-light
- gruvbox-light
- friendly
- friendly_grayscale
- murphy
Line Wrapping
The line wrapping can be independently applied using the linewrap.py script.
hatch run python src/pycheese/utils/linewrap.py --columns 20 tests/sample_code.py
Alternatives
Font License
JetBrains Mono typeface is available under the OFL-1.1 License and can be used free of charge, for both commercial and non-commercial purposes. You do not need to give credit to JetBrains, although we will appreciate it very much if you do. See JetBrainsMono License
License
With the exception of the font files, the code and assets contained in this repository are licensed under GNU General Public License v3.0 as detailed in the LICENSE file.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pycheese-0.2.5.tar.gz.
File metadata
- Download URL: pycheese-0.2.5.tar.gz
- Upload date:
- Size: 628.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
044a7fffeb51b698b2972ad1d83b49fedb6d1982ec13ab7ac5f336cce9df78b6
|
|
| MD5 |
da5972038ad377e72489db4863260faf
|
|
| BLAKE2b-256 |
06799cb349c455a5f70a0ff5b574ee77a57d555f40852003262ca3c11b89f423
|
File details
Details for the file pycheese-0.2.5-py3-none-any.whl.
File metadata
- Download URL: pycheese-0.2.5-py3-none-any.whl
- Upload date:
- Size: 566.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0729cf1c6fcfebbd66d45022b799f7b82130c8d306def9c36a5bdbff1e148056
|
|
| MD5 |
596c33e6dd23b92bb5c02ea92767f36f
|
|
| BLAKE2b-256 |
5fb9fd7f168c72ffdcbd894f073cf324171a45b7270f85c594b24f4d9081d39b
|