tvlogo.monstertvlogo.monster ☀ Light

Python package

One pip install, one call: client.resolve("CTV.ca@CKYDT") returns the logo URL.

tvlogo.monster on PyPI v0.1.1released 2026-10-25Python >=3.9MIT · one dependency (httpx) · typed

Install

the distribution is tvlogo.monster (pip also accepts tvlogo-monster); the import name is tvlogo
pip install tvlogo.monster
The tvlogo.monster mascot with a blue and yellow python wrapped around his raised foot

Quickstart

the same code the search page's code panel generates
from tvlogo import Client

client = Client()   # one client per program, no API key needed

# tvg-id, epg.monster id, call sign or channel name
logo = client.resolve("CTV.ca@CKYDT", mode="national")

if logo is None:
    raise SystemExit("no logo for this key")
print(logo.image_url)        # https://i.tvlogo.monster/<id>.png
print(logo.resolved_level)   # station, brand, network or channel

More calls

logo = client.resolve("CKY-DT", namespace="call_sign", theme="dark", size=128)
logo.url(256)                                   # same image, other size
client.download("CBCTelevision.ca", "logos/")   # saves logos/<id>.png
client.search("Citytv", limit=5)
client.stats()

from tvlogo import image_url, parse_tvg_id      # offline helpers
image_url("tZtP9", 64)                          # https://i.tvlogo.monster/tZtP9-64.png
parse_tvg_id("CTV.ca@CKYDT")                    # channel CTV.ca, feed CKYDT

Async code uses AsyncClient with the same methods. 429 rate limits are retried after Retry-After; resolve() returns None when there is no logo. Options and values are the same as the HTTP API.

Version 0.1.1 has no station search call yet: use plain HTTP for /v1/stations and /v1/affiliates (the search page's code panel writes it for you when filters are set).

Command line

$ tvlogo resolve CTV.ca@CKYDT --mode national
https://i.tvlogo.monster/<id>.png
$ tvlogo resolve CKY-DT --theme dark --size 128 --json
$ tvlogo search CBC --limit 5
$ tvlogo download CBCTelevision.ca logos/ --size 256
$ tvlogo url tZtP9 --size 64
$ tvlogo stats

python -m tvlogo … works too. Exit code 1 means “no logo”, 2 means an error.

Links