
Security News
MCP Steering Committee Launches Official MCP Registry in Preview
The MCP Steering Committee has launched the official MCP Registry in preview, a central hub for discovering and publishing MCP servers.
Favicon generator for Python 3 with strongly typed sync & async APIs, CLI, & HTML generation.
pip3 install favicons
More docs are coming. Remember, this is a work in progress.
$ favicons --help
Usage: favicons [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
generate Generate Favicons
html Get favicons as HTML.
json Get favicons as JSON.
names Get favicon file names.
generate
Generate Favicons from the command line:
Usage: favicons generate [OPTIONS]
Generate Favicons
Options:
--source PATH Source Image [required]
--output-directory PATH Output Directory [required]
--background-color TEXT Background Color [default: #000000]
--transparent / --no-transparent Transparent Background [default: True]
--base-url TEXT Base URL for HTML output [default: /]
--help Show this message and exit.
html
Generate HTML elements (same options as generate
).
json
Generate JSON array of favicon objects (same options as generate
).
names
Generate list of favicon file names (same options as generate
).
from favicons import Favicons
YOUR_ICON = "/home/user/icon.jpg"
WEB_SERVER_ROOT = "/var/www/html"
with Favicons(YOUR_ICON, WEB_SERVER_ROOT) as favicons:
favicons.generate()
for icon in favicons.filenames():
print(icon)
# favicon.ico
# favicon-16x16.png
# favicon-32x32.png
# favicon-64x64.png
# favicon-96x96.png
# favicon-180x180.png
# apple-touch-icon-57x57.png
# apple-touch-icon-60x60.png
# apple-touch-icon-72x72.png
# apple-touch-icon-76x76.png
# apple-touch-icon-114x114.png
# apple-touch-icon-120x120.png
# apple-touch-icon-144x144.png
# apple-touch-icon-152x152.png
# apple-touch-icon-167x167.png
# apple-touch-icon-180x180.png
# mstile-70x70.png
# mstile-270x270.png
# mstile-310x310.png
# mstile-310x150.png
# favicon-196x196.png
from favicons import Favicons
YOUR_ICON = "/home/user/icon.jpg"
WEB_SERVER_ROOT = "/var/www/html"
async with Favicons(YOUR_ICON, WEB_SERVER_ROOT) as favicons:
await favicons.generate()
for icon in favicons.filenames():
print(icon)
# favicon.ico
# favicon-16x16.png
# favicon-32x32.png
# favicon-64x64.png
# favicon-96x96.png
# favicon-180x180.png
# apple-touch-icon-57x57.png
# apple-touch-icon-60x60.png
# apple-touch-icon-72x72.png
# apple-touch-icon-76x76.png
# apple-touch-icon-114x114.png
# apple-touch-icon-120x120.png
# apple-touch-icon-144x144.png
# apple-touch-icon-152x152.png
# apple-touch-icon-167x167.png
# apple-touch-icon-180x180.png
# mstile-70x70.png
# mstile-270x270.png
# mstile-310x310.png
# mstile-310x150.png
# favicon-196x196.png
Get HTML elements for each generated favicon:
from favicons import Favicons
YOUR_ICON = "/home/user/icon.jpg"
WEB_SERVER_ROOT = "/var/www/html"
async with Favicons(YOUR_ICON, WEB_SERVER_ROOT) as favicons:
await favicons.generate()
# As generator
html = favicons.html_gen()
# As tuple
html = favicons.html()
print(html)
# (
# '<link rel="None" type="image/ico" href="/favicon.ico" />',
# '<link rel="icon" type="image/png" href="/favicon-16x16.png" />',
# '<link rel="icon" type="image/png" href="/favicon-32x32.png" />',
# '<link rel="icon" type="image/png" href="/favicon-64x64.png" />',
# '<link rel="icon" type="image/png" href="/favicon-96x96.png" />',
# '<link rel="icon" type="image/png" href="/favicon-180x180.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-57x57.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-60x60.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-72x72.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-76x76.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-114x114.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-120x120.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-144x144.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-152x152.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-167x167.png" />',
# '<link rel="apple-touch-icon" type="image/png" '
# 'href="/apple-touch-icon-180x180.png" />',
# '<link rel="None" type="image/png" href="/mstile-70x70.png" />',
# '<link rel="None" type="image/png" href="/mstile-270x270.png" />',
# '<link rel="None" type="image/png" href="/mstile-310x310.png" />',
# '<link rel="None" type="image/png" href="/mstile-310x150.png" />',
# '<link rel="shortcut icon" type="image/png" href="/favicon-196x196.png" />'
# )
Get a Python tuple containing each generated favicon's properties:
from favicons import Favicons
YOUR_ICON = "/home/user/icon.jpg"
WEB_SERVER_ROOT = "/var/www/html"
async with Favicons(YOUR_ICON, WEB_SERVER_ROOT) as favicons:
await favicons.generate()
as_tuple = favicons.formats()
print(as_tuple)
# (
# {
# 'dimensions': (64, 64),
# 'image_format': 'ico',
# 'prefix': 'favicon',
# 'rel': None
# },
# {
# 'dimensions': (16, 16),
# 'image_format': 'png',
# 'prefix': 'favicon',
# 'rel': 'icon'
# },
# {
# 'dimensions': (32, 32),
# 'image_format': 'png',
# 'prefix': 'favicon',
# 'rel': 'icon'
# },
# {
# 'dimensions': (64, 64),
# 'image_format': 'png',
# 'prefix': 'favicon',
# 'rel': 'icon'
# },
# {
# 'dimensions': (96, 96),
# 'image_format': 'png',
# 'prefix': 'favicon',
# 'rel': 'icon'
# },
# {
# 'dimensions': (180, 180),
# 'image_format': 'png',
# 'prefix': 'favicon',
# 'rel': 'icon'
# },
# {
# 'dimensions': (57, 57),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (60, 60),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (72, 72),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (76, 76),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (114, 114),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (120, 120),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (144, 144),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (152, 152),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (167, 167),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (180, 180),
# 'image_format': 'png',
# 'prefix': 'apple-touch-icon',
# 'rel': 'apple-touch-icon'
# },
# {
# 'dimensions': (70, 70),
# 'image_format': 'png',
# 'prefix': 'mstile',
# 'rel': None
# },
# {
# 'dimensions': (270, 270),
# 'image_format': 'png',
# 'prefix': 'mstile',
# 'rel': None
# },
# {
# 'dimensions': (310, 310),
# 'image_format': 'png',
# 'prefix': 'mstile',
# 'rel': None
# },
# {
# 'dimensions': (310, 150),
# 'image_format': 'png',
# 'prefix': 'mstile',
# 'rel': None
# },
# {
# 'dimensions': (196, 196),
# 'image_format': 'png',
# 'prefix': 'favicon',
# 'rel': 'shortcut icon'
# }
# )
Get a JSON array containing each generated favicon's properties:
from favicons import Favicons
YOUR_ICON = "/home/user/icon.jpg"
WEB_SERVER_ROOT = "/var/www/html"
async with Favicons(YOUR_ICON, WEB_SERVER_ROOT) as favicons:
await favicons.generate()
as_json = favicons.json(indent=2)
print(as_json)
# [
# {
# "image_format": "ico",
# "dimensions": [
# 64,
# 64
# ],
# "prefix": "favicon",
# "rel": null
# },
# {
# "image_format": "png",
# "dimensions": [
# 16,
# 16
# ],
# "prefix": "favicon",
# "rel": "icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 32,
# 32
# ],
# "prefix": "favicon",
# "rel": "icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 64,
# 64
# ],
# "prefix": "favicon",
# "rel": "icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 96,
# 96
# ],
# "prefix": "favicon",
# "rel": "icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 180,
# 180
# ],
# "prefix": "favicon",
# "rel": "icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 57,
# 57
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 60,
# 60
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 72,
# 72
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 76,
# 76
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 114,
# 114
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 120,
# 120
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 144,
# 144
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 152,
# 152
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 167,
# 167
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 180,
# 180
# ],
# "prefix": "apple-touch-icon",
# "rel": "apple-touch-icon"
# },
# {
# "image_format": "png",
# "dimensions": [
# 70,
# 70
# ],
# "prefix": "mstile",
# "rel": null
# },
# {
# "image_format": "png",
# "dimensions": [
# 270,
# 270
# ],
# "prefix": "mstile",
# "rel": null
# },
# {
# "image_format": "png",
# "dimensions": [
# 310,
# 310
# ],
# "prefix": "mstile",
# "rel": null
# },
# {
# "image_format": "png",
# "dimensions": [
# 310,
# 150
# ],
# "prefix": "mstile",
# "rel": null
# },
# {
# "image_format": "png",
# "dimensions": [
# 196,
# 196
# ],
# "prefix": "favicon",
# "rel": "shortcut icon"
# }
# ]
FAQs
Favicon generator for Python 3 with strongly typed sync & async APIs, CLI, & HTML generation.
We found that favicons demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The MCP Steering Committee has launched the official MCP Registry in preview, a central hub for discovering and publishing MCP servers.
Product
Socket’s new Pull Request Stories give security teams clear visibility into dependency risks and outcomes across scanned pull requests.
Research
/Security News
npm author Qix’s account was compromised, with malicious versions of popular packages like chalk-template, color-convert, and strip-ansi published.