MatteoGuadrini
fontpreview
Python

Python library for font previews

Last updated Apr 22, 2026
83
Stars
6
Forks
0
Issues
0
Stars/day
Attention Score
1
Language breakdown
Python 100.0%
β–Έ Files click to expand
README

fontpreview package

Codacy Badge CircleCI

fontpreview: Python library for font previews

This is a library that allows you to create preview images from one or more selected fonts.

Full docs is here: ReadTheDocs

Test

If you want to test the package before installing, use the test:

$ git clone https://github.com/MatteoGuadrini/fontpreview.git $ cd fontpreview $ python -m unittest test_fp.py

Installation

Use Pypi:

$ pip install --user fontpreview

Note: If you want to use the command line tool, you need to install the system-wide library: pip install fontpreview

Simple usage

Preview example:

from fontpreview import FontPreview

fp = FontPreview('/tmp/noto.ttf') fp.save('/tmp/fp.png')

FontPreview object

Banner example:

from fontpreview import FontBanner

fb = FontBanner('/tmp/noto.ttf', 'landscape', bg_color=(153, 153, 255), mode='fontname') fb.save('/tmp/fb.png')

FontBanner object

Logo example:

from fontpreview import FontLogo

fl = FontLogo('/tmp/noto.ttf', 'Fp') fl.save('/tmp/fl.png')

FontLogo object

Font wall example:

from fontpreview import FontBanner, FontWall

Define the various parts of wall

fb = FontBanner('/tmp/noto.ttf', 'landscape' , mode='fontname') fb2 = FontBanner('/tmp/noto.ttf', 'landscape' , mode='alpha') fb3 = FontBanner('/tmp/noto.ttf', 'landscape' , mode='letter') fb4 = FontBanner('/tmp/noto.ttf', 'landscape' , mode='paragraph') fw = FontWall([fb,fb2,fb3,fb4]) fw.save('/tmp/fw.png')
FontWall object

Font page example:

from fontpreview import FontPage, FontBanner

Define the various parts of page

header = FontBanner('/tmp/noto.ttf', 'landscape' , mode='fontname') body = FontBanner('/tmp/noto.ttf', 'landscape' , mode='paragraph') footer = FontBanner('/tmp/noto.ttf', 'landscape' , mode='letter')

Create FontPage object

fpage = FontPage() fpage.set_header(header) fpage.set_body(body) fpage.set_footer(footer)

Design all parts

fpage.draw() fpage.save('/tmp/fpage.png')
FontPage object

Font page with template example:

from fontpreview import FontPage, FontPageTemplate, FontBanner

Define the various parts of page

header = FontBanner('/tmp/noto.ttf', 'landscape' , mode='fontname') body = FontBanner('/tmp/noto.ttf', 'landscape' , mode='paragraph') footer = FontBanner('/tmp/noto.ttf', 'landscape' , mode='letter')

Create font page template

template = FontPageTemplate(3508) template.set_body(170, 1, 'lcenter') template.set_footer(100, 4, 'lcenter')

Create FontPage object

fpage = FontPage(template=template) fpage.set_header(header) fpage.set_body(body) fpage.set_footer(footer)

Design all parts

fpage.draw() fpage.save('/tmp/fpage_template.png')
FontPage with template object

Font booklet example:

from fontpreview import FontPage, FontBanner, FontBooklet

Define the various parts of page

header = FontBanner('/tmp/noto.ttf', 'landscape' , mode='fontname') body = FontBanner('/tmp/noto.ttf', 'landscape' , mode='paragraph') footer = FontBanner('/tmp/noto.ttf', 'landscape' , mode='letter')

Create FontPage object

fpage1 = FontPage(header=header, body=body, footer=footer) fpage2 = FontPage(header=header, body=body, footer=footer)

Design all parts

fpage1.draw() fpage2.draw()

Create book

book = FontBooklet(fpage1, fpage2) book.save('/tmp/notobook/') # save page1.png, page2.png in /tmp/notobook/ folder

Advanced usage

Below is an example of various previews of the "Fira Code regular" font. Does it remind you of anything? Fira code original

# FIRA CODE WALL from fontpreview import FontBanner, FontWall fira_code = '/tmp/firacode.ttf' 

RGB group = ('background', 'FIRA COD color', 'Ligature color', 'E color background')

colors_group = [ ('black', (0, 143, 0), (0, 236, 236), (255, 0, 255)), ('black', (166, 47, 123), (81, 208, 93), (11, 179, 248)), ((13, 21, 43), (112, 204, 84), (226, 110, 34), (223, 245, 90)), ((43, 6, 42), (136, 126, 135), (4, 150, 153), (147, 103, 145)), ((39, 57, 85), (255, 241, 208), (208, 84, 0), (209, 215, 227)), ((31, 63, 89), (248, 248, 242), (230, 219, 117), (166, 226, 51)), ((1, 47, 80), (224, 202, 52), (73, 217, 38), (255, 125, 158)), ((0, 0, 170), (75, 224, 245), (255, 255, 85), (0, 170, 170)), ('white', 'black', 'black', 'black'), ((247, 247, 247), (167, 29, 93), (121, 93, 163), (0, 134, 179)), ((239, 240, 243), (15, 131, 207), (208, 84, 0), (105, 40, 122)), ((239, 231, 212), (218, 116, 53), (0, 142, 212), (186, 136, 0)), ((39, 40, 34), (132, 214, 45), (249, 39, 114), (174, 129, 255)), ((43, 48, 59), (180, 142, 173), (143, 161, 179), (152, 190, 140)), ((32, 32, 32), (171, 130, 84), (160, 171, 127), (216, 127, 98)), ((0, 43, 54), (0, 160, 153), (126, 143, 3), (218, 66, 130)) ] banners = []

Create banners

for colors in colors_group: # Create a FontBanner objects fb = FontBanner(fira_code, (413, 240)) liga = FontBanner(fira_code, (413, 240)) E = FontBanner(fira_code, (40, 70)) # Set background colors fb.bgcolor = liga.bgcolor = colors[0] E.bg_color = colors[3] # Set foreground colors fb.fg_color = colors[1] liga.fg_color = colors[2] E.fg_color = colors[0] # Set text fb.font_text = 'FIRA COD' liga.font_text = "!=->>++:=" E.font_text = 'E' # Set text position E.settextposition('ltop') fb.settextposition((25, 60)) liga.settextposition('top') # Adding image on fb fb.add_image(liga, (0, 122)) fb.add_image(E, (339, 60)) # Add to list of banners banners.append(fb)

Create a wall

fw = FontWall(banners, max_tile=4) fw.save('/tmp/fira_code.png')
Fira code wall

Command line interface

Along with the package, a command line tool based on this python package is installed. The class used for command line previews is FontPreview. For all the options of this tool, see the docs, otherwise run fp -h.
$ fp /tmp/noto.ttf

This command save a fontpreview.png in a current directory.

FontPreview object

Open source

fontpreview is a open source project. Any contribute, It's welcome.

A great thanks.

For donations, press this

For me

paypal

For Telethon

The Telethon Foundation is a non-profit organization recognized by the Ministry of University and Scientific and Technological Research. They were born in 1990 to respond to the appeal of patients suffering from rare diseases. Come today, we are organized to dare to listen to them and answers, every day of the year.

Telethon

Adopt the future

Acknowledgments

Thanks to Mark Lutz for writing the Learning Python and Programming Python books that make up my python foundation.

Thanks to Kenneth Reitz and Tanya Schlusser for writing the The Hitchhiker’s Guide to Python books.

Thanks to Dane Hillard for writing the Practices of the Python Pro books.

Special thanks go to my wife, who understood the hours of absence for this development. Thanks to my children, for the daily inspiration they give me and to make me realize, that life must be simple.

Thanks Python!

Β© 2026 GitRepoTrend Β· MatteoGuadrini/fontpreview Β· Updated daily from GitHub