Miscellaneous
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 | |
Github Stars | |
Font Counter | 672 |
1-Line-Art Counter | 710 |
Decor Counter | 218 |
Branch | master | dev |
CI |
Code Quality |
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.
>>> 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.
>>> 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.
>>> randart()
'ዞᏜ℘℘Ꮍ ℬℹℛʈዞᗬᏜᎽ '
>>> randart()
'✌(◕‿-)✌ '
ℹ️ Use ART_NAMES
to access all arts name list (new in Version 4.2
)
ℹ️ Use NON_ASCII_ARTS
to access all Non-ASCII arts name list (new in Version 4.6
)
ℹ️ Use ASCII_ARTS
to access all ASCII arts name list (new in Version 5.7
)
⚠️ 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.
>>> 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.
>>> 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.
>>> 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
ℹ️ Use FONT_NAMES
to access all fonts name list (new in Version 4.2
)
ℹ️ Use NON_ASCII_FONTS
to access all Non-ASCII fonts name list (new in Version 4.4
)
ℹ️ Use ASCII_FONTS
to access all ASCII fonts name list (new in Version 5.7
)
This function prints a grid (length
by height
) of any given character in normal mode and raise artError
in exception.
>>> 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.
>>> 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.
>>> 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.
ℹ️ 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
>>> tprint("art",font="block",chr_ignore=True)
.----------------. .----------------. .----------------.
| .--------------. || .--------------. || .--------------. |
| | __ | || | _______ | || | _________ | |
| | / \ | || | |_ __ \ | || | | _ _ | | |
| | / /\ \ | || | | |__) | | || | |_/ | | \_| | |
| | / ____ \ | || | | __ / | || | | | | |
| | _/ / \ \_ | || | _| | \ \_ | || | _| |_ | |
| ||____| |____|| || | |____| |___| | || | |_____| | |
| | | || | | || | | |
| '--------------' || '--------------' || '--------------' |
'----------------' '----------------' '----------------'
>>> tprint("art","white_bubble")
ⓐⓡⓣ
Randomly select from all fonts.
Keywords : random
, rand
& rnd
>>> tprint("test",font="random")
| |
~|~/~/(~~|~
| \/__) |
Randomly select from small fonts.
Keywords : rnd-small
, random-small
& rand-small
ℹ️ New in Version 2.8
>>> tprint("test",font="rnd-small")
_/ _ _ _/
/ (- _) /
Randomly select from medium fonts.
Keywords : rnd-medium
, random-medium
& rand-medium
ℹ️ New in Version 2.8
>>> tprint("test",font="rnd-medium")
, ,
|| ||
=||= _-_ _-_, =||=
|| || \\ ||_. ||
|| ||/ ~ || ||
\\, \\,/ ,-_- \\,
Randomly select from large fonts.
Keywords : rnd-large
, random-large
& rand-large
ℹ️ New in Version 2.8
>>> 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
ℹ️ New in Version 2.8
>>> tprint("test","rnd-xlarge")
_____ _____ _____ _____
/\ \ /\ \ /\ \ /\ \
/::\ \ /::\ \ /::\ \ /::\ \
\:::\ \ /::::\ \ /::::\ \ \:::\ \
\:::\ \ /::::::\ \ /::::::\ \ \:::\ \
\:::\ \ /:::/\:::\ \ /:::/\:::\ \ \:::\ \
\:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ \:::\ \
/::::\ \ /::::\ \:::\ \ \:::\ \:::\ \ /::::\ \
/::::::\ \ /::::::\ \:::\ \ ___\:::\ \:::\ \ /::::::\ \
/:::/\:::\ \ /:::/\:::\ \:::\ \ /\ \:::\ \:::\ \ /:::/\:::\ \
/:::/ \:::\____\/:::/__\:::\ \:::\____\/::\ \:::\ \:::\____\ /:::/ \:::\____\
/:::/ \::/ /\:::\ \:::\ \::/ /\:::\ \:::\ \::/ / /:::/ \::/ /
/:::/ / \/____/ \:::\ \:::\ \/____/ \:::\ \:::\ \/____/ /:::/ / \/____/
/:::/ / \:::\ \:::\ \ \:::\ \:::\ \ /:::/ /
/:::/ / \:::\ \:::\____\ \:::\ \:::\____\ /:::/ /
\::/ / \:::\ \::/ / \:::\ /:::/ / \::/ /
\/____/ \:::\ \/____/ \:::\/:::/ / \/____/
\:::\ \ \::::::/ /
\:::\____\ \::::/ /
\::/ / \::/ /
\/____/ \/____/
This mode consider length of input text to select font
☑️ Support of 95 ASCII characters guaranteed
Keywords : wizard
, wiz
& magic
ℹ️ New in Version 2.9
>>> 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
ℹ️ New in Version 3.4
>>> tprint("test","random-na")
₮Ɇ₴₮
>>> tprint("test","random-na")
ʇsǝʇ
Randomly mix Non-ASCII fonts.
Keywords : mix
ℹ️ New in Version 3.7
>>> 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
modes
Levenshtein distance used in this project. (Version
>0.9)
>>> 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.
>>> 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, sep='\n')
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
:param sep: line separator char
:type sep: str
:return: None
>>> tprint("test")
_ _
| |_ ___ ___ | |_
| __| / _ \/ __|| __|
| |_ | __/\__ \| |_
\__| \___||___/ \__|
>>> set_default(font="italic")
>>> tprint("test")
_/ _ _ _/
/ (- _) /
ℹ️ Functions error response updated in Version 0.8
Function | Normal Output | 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 |
lprint | None | raise artError |
line | str | raise artError |
set_default | None | raise artError |
art test
art test2
⚠️ [Backward Compatibility] ART 5.9 is the last version to support this CLI structure officially
⚠️ 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]
Just send your text to one of these bots. 👇👇👇👇
FontList.ipynb
, ArtList.ipynb
and DecorList.ipynb
Give a ⭐️ if this project helped you!
If you do like our project and we hope that you do, can you please support us? Our project is not and is never going to be working for profit. We need the money just so we can continue doing what we do ;-) .
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.