ASCII art is also known as "computer text art". It involves the smart placement of typed special characters or letters to make a visual shape that is spread over multiple lines of text. ART is a Python lib for text converting to ASCII art fancy. ;-)
Open Hub | |
PyPI Counter | |
Font Counter | 672 |
1-Line-Art Counter | 710 |
Decor Counter | 218 |
⚠️ ART 6.1 is the last version to support Python 3.5 officially
⚠️ ART 4.4 is the last version to support Python 2.7 & Python 3.4 officially
⚠️ PyPI support of these versions will be removed in a future release
pip install art==6.4
Need root access pip install .
conda install -c conda-forge ascii-art
conda install -c sepandhaghighi art
pip install art
or pip3 install art
Need root access>> pyversion PYTHON_EXECUTABLE_FULL_PATH
Quick Start
⚠️ Some environments don't support all 1-Line arts
⚠️ ART 4.6 is the last version to support Bipartite art
This function return 1-line art as str in normal mode and raise artError in exception
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | >>> from art import * >>> art_1=art("coffee") # return art as str in normal mode >>> print(art_1) c[_] >>> art_2=art("woman",number=2) # return multiple art as str >>> print(art_2) ▓⚗_⚗▓ ▓⚗_⚗▓ >>> art("coffee", number=3, space=5) 'c[_] c[_] c[_]' >>> art("random") # random 1-line art mode '(っ◕‿◕)っ ' >>> art("rand") # random 1-line art mode 't(-_-t) ' >>> art(22,number=1) # raise artError Traceback (most recent call last): ... art.art.artError: The 'artname' type must be str. |
This function print 1-line art in normal mode (return None) and raise artError in exception
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> aprint("butterfly") # print art Ƹ̵̡Ӝ̵̨̄Ʒ >>> aprint("happy") # print art ۜ\(סּںסּَ` )/ۜ >>> aprint("coffee", number=3, space=5) c[_] c[_] c[_] >>> aprint("random") # random 1-line art mode '(っ◕‿◕)っ ' >>> aprint("rand") # random 1-line art mode 't(-_-t) ' >>> aprint("woman",number="22") # raise artError Traceback (most recent call last): ... art.art.artError: The 'number' type must be int. |
randart
function is added in Version 2.2
as art("random")
shortcut.
1 2 3 4 | >>> randart() 'ዞᏜ℘℘Ꮍ ℬℹℛʈዞᗬᏜᎽ ' >>> randart() '✌(◕‿-)✌ ' |
Note1 : Use ART_NAMES
to access all arts name list (new in Version 4.2
)
Note2 : Use NON_ASCII_ARTS
to access all Non-ASCII arts name list (new in Version 4.6
)
⚠️ Some fonts don't support all characters
⚠️ From Version 3.3
Non-ASCII fonts added (These fonts are not compatible with some environments)
⚠️ From Version 5.3
\n
is used as the default line separator instead of \r\n
(Use sep
parameter if needed)
This function return ASCII text as str in normal mode and raise artError in exception
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | >>> Art=text2art("art") # Return ASCII text (default font) and default chr_ignore=True >>> print(Art) _ __ _ _ __ | |_ / _` || '__|| __| | (_| || | | |_ \__,_||_| \__| >>> Art=text2art("art",font='block',chr_ignore=True) # Return ASCII text with block font >>> print(Art) .----------------. .----------------. .----------------. | .--------------. || .--------------. || .--------------. | | | __ | || | _______ | || | _________ | | | | / \ | || | |_ __ \ | || | | _ _ | | | | | / /\ \ | || | | |__) | | || | |_/ | | \_| | | | | / ____ \ | || | | __ / | || | | | | | | | _/ / \ \_ | || | _| | \ \_ | || | _| |_ | | | ||____| |____|| || | |____| |___| | || | |_____| | | | | | || | | || | | | | '--------------' || '--------------' || '--------------' | '----------------' '----------------' '----------------' >>> Art=text2art("test","random") # random font mode >>> print(Art) | | ~|~/~/(~~|~ | \/__) | >>> Art=text2art("test","rand") # random font mode >>> print(Art) ___ ____ ____ ___ | |___ [__ | | |___ ___] | >>> print(text2art("test", space=10)) _ _ | |_ ___ ___ | |_ | __| / _ \ / __| | __| | |_ | __/ \__ \ | |_ \__| \___| |___/ \__| >>> print(text2art('''Lorem ipsum dolor''', font="small")) # Multi-line print _ | | ___ _ _ ___ _ __ | |__ / _ \| '_|/ -_)| ' \ |____|\___/|_| \___||_|_|_| _ (_) _ __ ___ _ _ _ __ | || '_ \(_-<| || || ' \ |_|| .__//__/ \_,_||_|_|_| |_| _ _ __| | ___ | | ___ _ _ / _` |/ _ \| |/ _ \| '_| \__,_|\___/|_|\___/|_| >>> print(text2art("test","white_bubble")) # Non-ASCII font example ⓣⓔⓢⓣ >>> text2art("art",font="fancy5",decoration="barcode1") # decoration parameter is added in Version 4.6 '▌│█║▌║▌║ ᏗᏒᏖ ║▌║▌║█│▌' >>> text2art("seسسس",font=DEFAULT_FONT,chr_ignore=False) # raise artError in exception Traceback (most recent call last): ... art.art.artError: س is invalid. |
This function print ASCII text in normal mode (return None) and raise artError in exception
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | >>> tprint("art") # print ASCII text (default font) _ __ _ _ __ | |_ / _` || '__|| __| | (_| || | | |_ \__,_||_| \__| >>> tprint("art",font="block",chr_ignore=True) # print ASCII text (block font) .----------------. .----------------. .----------------. | .--------------. || .--------------. || .--------------. | | | __ | || | _______ | || | _________ | | | | / \ | || | |_ __ \ | || | | _ _ | | | | | / /\ \ | || | | |__) | | || | |_/ | | \_| | | | | / ____ \ | || | | __ / | || | | | | | | | _/ / \ \_ | || | _| | \ \_ | || | _| |_ | | | ||____| |____|| || | |____| |___| | || | |_____| | | | | | || | | || | | | | '--------------' || '--------------' || '--------------' | '----------------' '----------------' '----------------' >>> tprint('testسس') # chr_ignore flag ==True (Default) _ _ | |_ ___ ___ | |_ | __| / _ \/ __|| __| | |_ | __/\__ \| |_ \__| \___||___/ \__| >>> tprint("test","random") # random font mode | | ~|~/~/(~~|~ | \/__) | >>> tprint("test","rand") # random font mode ___ ____ ____ ___ | |___ [__ | | |___ ___] | >>> tprint("test", space=10) _ _ | |_ ___ ___ | |_ | __| / _ \ / __| | __| | |_ | __/ \__ \ | |_ \__| \___| |___/ \__| >>> tprint('testسس',chr_ignore=False) # raise artError in exception Traceback (most recent call last): ... art.art.artError: س is invalid. >>> tprint('''Lorem ipsum dolor''', font="cybermedium") # Multi-line print _ ____ ____ ____ _ _ | | | |__/ |___ |\/| |___ |__| | \ |___ | | _ ___ ____ _ _ _ _ | |__] [__ | | |\/| | | ___] |__| | | ___ ____ _ ____ ____ | \ | | | | | |__/ |__/ |__| |___ |__| | \ >>> tprint("art",font="fancy5",decoration="barcode1") # decoration parameter is added in Version 4.6 ▌│█║▌║▌║ ᏗᏒᏖ ║▌║▌║█│▌ >>> tprint("art",font="fancy5",decoration="random") # decoration random mode is added in Version 5.0 •]•·✦º✦·»ᏗᏒᏖ«·✦º✦·•[• |
This function return dict in normal and exception mode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | >>> Response=tsave("art",filename="test.txt") # save ASCII text in test.txt file with save message (print_status==True), return dict Saved! Filename: test.txt >>> Response["Message"] 'OK' >>> Response=tsave("art",filename="test.txt",print_status=False) # save ASCII text in test.txt file without save message (print_status==False) >>> Response["Message"] 'OK' >>> Response["Status"] True >>> tsave(22,font=DEFAULT_FONT,filename="art",chr_ignore=True,print_status=True) {'Status': False, 'Message': "'int' object has no attribute 'split'"} >>> Response=tsave("art",filename="test.txt",overwrite=True) # overwrite parameter is added in Version 4.0 Saved! Filename: test.txt >>> Response=tsave("art",filename="test.txt",decoration="barcode1") # decoration parameter is added in Version 4.6 Saved! Filename: test.txt >>> Response=tsave("art",filename="test.txt",sep="\r\n") # sep parameter is added in Version 5.3 Saved! Filename: test.txt >>> Response=tsave("art",filename="test.txt",space=5) # space parameter is added in Version 6.0 Saved! Filename: test.txt |
Note1 : Use FONT_NAMES
to access all fonts name list (new in Version 4.2
)
Note2 : Use NON_ASCII_FONTS
to access all Non-ASCII fonts name list (new in Version 4.4
)
This function prints a grid (length by height) of any given character in normal mode and raise artError in exception.
1 2 3 | >>> lprint(length=15, height=2, char="*") *************** *************** |
⚠️ New in Version 6.4
⚠️ The default values are length=15
, height=1
, char='#'
This function returns a grid (length by height) of any given character as str in normal mode and raise artError in exception.
1 2 | >>> line(length=15, height=2, char="*") '***************\n***************' |
⚠️ New in Version 6.4
⚠️ The default values are length=15
, height=1
, char='#'
⚠️ Some environments don't support all decorations
This function return decoration as str
in normal mode and raise artError
in exception.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | >>> decor("barcode1") '▌│█║▌║▌║ ' >>> decor("barcode1",reverse=True) ' ║▌║▌║█│▌' >>> decor("barcode1") + text2art(" art ",font="fancy42") + decor("barcode1",reverse=True) '▌│█║▌║▌║ ąяţ ║▌║▌║█│▌' >>> decor("barcode1",both=True) # both parameter is added in Version 5.0 ['▌│█║▌║▌║ ', ' ║▌║▌║█│▌'] >>> decor("random",both=True) # random mode is added in Version 5.0 ['「(◔ω◔「)三', '三三三ʅ(;◔౪◔)ʃ'] >>> decor("rand",both=True) # random mode is added in Version 5.0 ['‹–…·´`·…–›', '‹–…·´`·…–›'] >>> decor(None) Traceback (most recent call last): ... art.art.artError: The 'decoration' type must be str. |
Note : Use DECORATION_NAMES
to access all decorations name list (new in Version 4.6
)
These modes are available for text2art
, tprint
& tsave
.
⚠️ Some fonts don't support all characters
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> tprint("art",font="block",chr_ignore=True) .----------------. .----------------. .----------------. | .--------------. || .--------------. || .--------------. | | | __ | || | _______ | || | _________ | | | | / \ | || | |_ __ \ | || | | _ _ | | | | | / /\ \ | || | | |__) | | || | |_/ | | \_| | | | | / ____ \ | || | | __ / | || | | | | | | | _/ / \ \_ | || | _| | \ \_ | || | _| |_ | | | ||____| |____|| || | |____| |___| | || | |_____| | | | | | || | | || | | | | '--------------' || '--------------' || '--------------' | '----------------' '----------------' '----------------' |
Randomly select from all fonts.
Keywords : random
, rand
& rnd
1 2 3 4 5 | >>> tprint("test",font="random") | | ~|~/~/(~~|~ | \/__) | |
Randomly select from small fonts.
Keywords : rnd-small
, random-small
& rand-small
Note : New in Version 2.8
1 2 3 4 5 | >>> tprint("test",font="rnd-small") _/ _ _ _/ / (- _) / |
Randomly select from medium fonts.
Keywords : rnd-medium
, random-medium
& rand-medium
Note : New in Version 2.8
1 2 3 4 5 6 7 8 9 10 | >>> tprint("test",font="rnd-medium") , , || || =||= _-_ _-_, =||= || || \\ ||_. || || ||/ ~ || || \\, \\,/ ,-_- \\, |
Randomly select from large fonts.
Keywords : rnd-large
, random-large
& rand-large
Note : New in Version 2.8
1 2 3 4 5 6 7 8 9 10 11 12 | >>> tprint("test",font="rnd-large") 8888888 8888888888 8 8888888888 d888888o. 8888888 8888888888 8 8888 8 8888 .`8888:' `88. 8 8888 8 8888 8 8888 8.`8888. Y8 8 8888 8 8888 8 8888 `8.`8888. 8 8888 8 8888 8 888888888888 `8.`8888. 8 8888 8 8888 8 8888 `8.`8888. 8 8888 8 8888 8 8888 `8.`8888. 8 8888 8 8888 8 8888 8b `8.`8888. 8 8888 8 8888 8 8888 `8b. ;8.`8888 8 8888 8 8888 8 888888888888 `Y8888P ,88P' 8 8888 |
Randomly select from xlarge fonts.
Keywords : rnd-xlarge
, random-xlarge
& rand-xlarge
Note : New in Version 2.8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | >>> tprint("test","rnd-xlarge") _____ _____ _____ _____ /\ \ /\ \ /\ \ /\ \ /::\ \ /::\ \ /::\ \ /::\ \ \:::\ \ /::::\ \ /::::\ \ \:::\ \ \:::\ \ /::::::\ \ /::::::\ \ \:::\ \ \:::\ \ /:::/\:::\ \ /:::/\:::\ \ \:::\ \ \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ \:::\ \ /::::\ \ /::::\ \:::\ \ \:::\ \:::\ \ /::::\ \ /::::::\ \ /::::::\ \:::\ \ ___\:::\ \:::\ \ /::::::\ \ /:::/\:::\ \ /:::/\:::\ \:::\ \ /\ \:::\ \:::\ \ /:::/\:::\ \ /:::/ \:::\____\/:::/__\:::\ \:::\____\/::\ \:::\ \:::\____\ /:::/ \:::\____\ /:::/ \::/ /\:::\ \:::\ \::/ /\:::\ \:::\ \::/ / /:::/ \::/ / /:::/ / \/____/ \:::\ \:::\ \/____/ \:::\ \:::\ \/____/ /:::/ / \/____/ /:::/ / \:::\ \:::\ \ \:::\ \:::\ \ /:::/ / /:::/ / \:::\ \:::\____\ \:::\ \:::\____\ /:::/ / \::/ / \:::\ \::/ / \:::\ /:::/ / \::/ / \/____/ \:::\ \/____/ \:::\/:::/ / \/____/ \:::\ \ \::::::/ / \:::\____\ \::::/ / \::/ / \::/ / \/____/ \/____/ |
This mode consider length of input text to select font.
☑️ Support of 95 ASCII characters guaranteed
Keywords : wizard
, wiz
& magic
Note : New in Version 2.9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | >>> tprint("1","wizard") 88 ,d88 888888 88 88 88 88 88 88 88 >>> tprint("1"*5,"wizard") d88 d88 d88 d88 d88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 d88P d88P d88P d88P d88P >>> tprint("1"*15,"wizard") # # # # # # # # # # # # # # # ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## |
Randomly select from Non-ASCII fonts.
Keywords : random-na
, rand-na
& rnd-na
Note : New in Version 3.4
1 2 3 4 5 | >>> tprint("test","random-na") ₮Ɇ₴₮ >>> tprint("test","random-na") ʇsǝʇ |
Randomly mix Non-ASCII fonts.
Keywords : mix
Note : New in Version 3.7
1 2 3 4 5 6 7 8 | >>> tprint("test","mix") †Ɛѕ† >>> tprint("test","mix") tᏋѕt >>> tprint("test","mix") ꓄єร꓄ |
⚠️ Non-ASCII fonts are only available in Font name
, Random Non-ASCII
and Mix Non-ASCII
modes
Levenshtein distance used in this project. (>Version 0.9
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | >>> Art=art("loveyou",number=1,text="test") # correct --> art("love_you",number=1,text="test"), error < |artname|/2 >>> print(Art) »-(¯`·.·´¯)->test<-(¯`·.·´¯)-« >>> aprint("happi") # correct --> aprint("happy"), error < |artname|/2 ۜ\(סּںסּَ` )/ۜ >>> Art=art("birds2222222",number=1) # correct --> Art=art("birds",number=1), error >= |artname|/2 Traceback (most recent call last): ... art.art.artError: Invalid art name >>> aprint("happi231") # correct --> aprint("happy"), error < |artname|/2 ⎦˚◡˚⎣ >>> aprint("happi2312344") # correct --> aprint("happy"), error >= |artname|/2 Traceback (most recent call last): ... art.art.artError: Invalid art name >>> Art=text2art("test",font="black") # correct --> Art=text2art("test",font="block") >>> print(Art) .----------------. .----------------. .----------------. .----------------. | .--------------. || .--------------. || .--------------. || .--------------. | | | _________ | || | _________ | || | _______ | || | _________ | | | | | _ _ | | || | |_ ___ | | || | / ___ | | || | | _ _ | | | | | |_/ | | \_| | || | | |_ \_| | || | | (__ \_| | || | |_/ | | \_| | | | | | | | || | | _| _ | || | '.___`-. | || | | | | | | | _| |_ | || | _| |___/ | | || | |`\____) | | || | _| |_ | | | | |_____| | || | |_________| | || | |_______.' | || | |_____| | | | | | || | | || | | || | | | | '--------------' || '--------------' || '--------------' || '--------------' | '----------------' '----------------' '----------------' '----------------' >>> tprint("test",font="cybermedum") # correct --> tprint("test",font="cybermedium") ___ ____ ____ ___ | |___ [__ | | |___ ___] | |
set_default
function is added in Version 2.2
in order to change default values.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | >>> help(set_default) Help on function set_default in module art.art: set_default(font='standard', chr_ignore=True, filename='art', print_status=True, overwrite=False, decoration=None) Change text2art, tprint and tsave default values. :param font: input font :type font:str :param chr_ignore: ignore not supported character :type chr_ignore:bool :param filename: output file name (only tsave) :type filename:str :param print_status : save message print flag (only tsave) :type print_status:bool :param overwrite : overwrite the saved file if true (only tsave) :type overwrite:bool :param decoration: input decoration :type decoration:str :return: None >>> tprint("test") _ _ | |_ ___ ___ | |_ | __| / _ \/ __|| __| | |_ | __/\__ \| |_ \__| \___||___/ \__| >>> set_default(font="italic") >>> tprint("test") _/ _ _ _/ / (- _) / |
* Functions error response updated in Version 0.8
Function | Normal | Error |
decor | str | raise artError |
art | str | raise artError |
aprint | None | raise artError |
tprint | None | raise artError |
tsave | {"Status":bool,"Message":str} | {"Status":bool,"Message":str} |
text2art | str | raise artError |
art test
art test2
⚠️ [Backward Compatibility] ART 5.9 is the last version to support this CLI structure
⚠️ You can use art
or python -m art
to run this mode
art list
or art arts
art fonts
art text [yourtext] [fontname(optional)]
art shape [artname]
or art art [artname]
art save [yourtext] [fontname(optional)]
art all [yourtext]
* Open FontList.ipynb
, ArtList.ipynb
and DecorList.ipynb
Give a ⭐️ if this project helped you!
Some parts of the infrastructure for this project are supported by:
Python Software Foundation (PSF) grants ART library from version 6.3 to 6.6. PSF is the organization behind Python. Their mission is to promote, protect, and advance the Python programming language and to support and facilitate the growth of a diverse and international community of Python programmers.