PNG crests (139x181px) for every club in the top 25 European leagues, with history back to 2021/2022. Forked from luukhopman/football-logos, which is where the crests and the per-league folders come from.
Upstream stores a crest at logos/<league>/<club>.png, or
history/<season>/<league>/<club>.png for older seasons. That is the right shape
for browsing and the wrong shape for using. To draw a crest next to a fixture you
would have to know which league the club is in, which season you are asking
about, and then list a directory to find the exact file name. Arsenal against
Sporting means two leagues; Arsenal against Coventry last season means two
seasons.
So this fork flattens all of it:
teams/one file per club,teams/<slug>.png, whatever league or season it came from. The slug is the club name lowercased with spaces turned into underscores, soBrighton & Hove Albionbecomesteams/brighton_&_hove_albion.png.docs/list.mdevery club with its league, the seasons it appears in, and a direct raw URL.docs/teams.jsonthe same table for code that would rather not parse markdown.
The URL is now derivable from the club name alone:
https://raw.githubusercontent.com/bhaumikmistry/football-logos/refs/heads/master/teams/<slug>.png
No traversal, no league lookup, no season to pick. If a club leaves the covered leagues its file stays where it is, so links that worked yesterday still work.
| Path | What is in it |
|---|---|
logos/ |
Current season, by league. From upstream. |
history/ |
One folder per season back to 2021-22, by league. From upstream. |
teams/ |
Every club, flat, one file each. Generated. |
docs/ |
list.md and teams.json. Generated. |
scripts/ |
build_index.py, which generates the two above. |
git remote add upstream https://github.com/luukhopman/football-logos.git # once
git fetch upstream
git rebase upstream/master
python3 scripts/build_index.py
The script copies the newest crest for each club into teams/, so a club that
changed badge or moved league picks up the current version, and it rewrites
docs/list.md and docs/teams.json. It never deletes a crest. Only the standard
library is used, so there is nothing to install.