A package to automate making beautiful code snippets using Carbon
Project description
PyBites Carbon
A small utility to generate beautiful code images using the awesome carbon service.
Install
You can get it from PyPI:
pip install pybites-carbon
Required driver
You need to download the ChromeDriver (same version as your Chrome browser) and make it available in your environment:
export CHROMEDRIVER_PATH=$HOME/bin/chromedriver
To run this automatically upon starting a new shell, add this line to your .zshrc
or .bashrc
file.
Slow internet
If you have a slow internet connection you can optionally internet connection you can optionally set SECONDS_SLEEP_BEFORE_DOWNLOAD
to a value higher than the default 3
. This is the time the script waits between clicking on "export image" and closing the driver connection to the carbon site (ending the script).
export SECONDS_SLEEP_BEFORE_DOWNLOAD=10
Usage
You can load in code from a file, the clipboard or a snippet. You can change the language, the image background and theme. You can also provide a different directory to store the image. Lastly, this tool uses Selenium in headless mode, to see what it does in the foreground, use -i
(or --interactive
).
usage: carbon [-h] (-f FILE | -c | -s SNIPPET) [-i] [-l LANGUAGE] [-b BACKGROUND] [-t THEME] [-d DESTINATION]
Create a carbon code image
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE File with code
-c, --clipboard Use code on clipboard
-s SNIPPET, --snippet SNIPPET
Code snippet
-i, --interactive Run Selenium in interactive (not headless) mode
-l LANGUAGE, --language LANGUAGE
Programming language
-b BACKGROUND, --background BACKGROUND
Background color
-t THEME, --theme THEME
Name of the theme
-d DESTINATION, --destination DESTINATION
Specify folder where image should be stored (defaults to current directory)
Examples
-
Make a hello world snippet carbon image:
$ carbon -s 'print("hello world")'
Resulting image:
-
Make a code image of a file, let's pick a FastAPI app I am working on:
$ cat $HOME/code/infinite-scroll/main.py from fastapi import FastAPI, Query from sqlmodel import select, Session from youtube.models import YouTube, YouTubeRead from youtube.db import engine app = FastAPI() @app.get("/videos/", response_model=list[YouTubeRead]) def read_videos(offset: int = 0, limit: int = Query(default=100, lte=100)): with Session(engine) as session: videos = session.exec( select(YouTube).offset(offset).limit(limit) ).all() return videos
Run the script with the
-f
option:carbon -f $HOME/code/infinite-scroll/main.py
Resulting image:
-
Copying the following lines to the clipboard:
Here is my favorite feature: make an image from code I currently have on my OS clipboard (thanks
pyperclip
):Try it out, copy this code:
from time import sleep sleep(2)
Then run the script with
-c
:$ carbon -c
Resulting image:
Useful shell aliases
I added some aliases to my .zshrc
to make it even easier (last two are for our career and mindset tips)
(Actually I created this image with: carbon -c -l application/x-sh -t monokai -b #D7D7BE
)
Developer setup
Make a virtual environment and install the requirements-dev.txt
file or just run make setup
.
Download the ChromeDriver, and extract it in a folder, then set it's full path in .env
, for example:
echo "CHROMEDRIVER_PATH=$HOME/bin/chromedriver" > .env
Again you can increase the time the script takes to download the image, in case you have a slower internet connection:
echo "SECONDS_SLEEP_BEFORE_DOWNLOAD=10" >> .env
(>>
means append (not override) to an existing file)
The script uses Selenium in headless mode. The resulting carbon.png
image will be downloaded to your computer unless you specify a different destination directory using -d
(or --destination
).
To run the tests, type pytest
or make test
(it uses pytesseract
- in the dev requirements - to read the text from the generated carbon image file).
Enjoy and feel free to mention me or PyBites when you post one of the created images on Twitter.
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
Built Distribution
Hashes for pybites_carbon-0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c3a27d4b5cbbe384affe4b65e93f57f432862a8ef116724bae9475363f29189 |
|
MD5 | 193c8dc2b22de1af59fb10de94dc5449 |
|
BLAKE2b-256 | 126f83a863531ddcccd38489d68f4a69b4c5435179715a5a1b193373c20c5198 |