Add PokeDB sprite downloading (100x100 WebP)

Download pokemon sprites from PokeDB CDN during import, cached locally
as {pokeapi_id}.webp. Replaces PokeAPI GitHub sprite URLs. ~4.6MB for
all 1119 unique sprites.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Julian Tabel
2026-02-11 10:24:43 +01:00
parent d80c59047c
commit 29b954726a
4 changed files with 105 additions and 4 deletions

View File

@@ -19,6 +19,7 @@ from pathlib import Path
from .loader import load_pokedb_data, load_seed_config
from .mappings import PokemonMapper, LocationMapper, build_version_map, map_encounter_method
from .processing import filter_encounters_for_game, process_encounters, build_routes
from .sprites import download_sprites
SEEDS_DIR_CANDIDATES = [
Path("backend/src/app/seeds"), # from repo root
@@ -131,8 +132,11 @@ def main(argv: list[str] | None = None) -> None:
print(f" - {m}", file=sys.stderr)
# Spot-check pokemon mapping on actual encounter data
form_ids_in_encounters = {e.get("pokemon_form_identifier", "") for e in pokedb.encounters}
form_ids_in_encounters.discard("")
form_ids_in_encounters: set[str] = set()
for e in pokedb.encounters:
fid = e.get("pokemon_form_identifier")
if fid:
form_ids_in_encounters.add(fid)
mapped_forms = 0
for fid in form_ids_in_encounters:
if pokemon_mapper.lookup(fid) is not None:
@@ -182,6 +186,12 @@ def main(argv: list[str] | None = None) -> None:
print(f" Routes: {total_routes}")
print(f" Encounter entries: {total_enc}")
# Download sprites for all encountered pokemon
print("\nDownloading sprites...")
sprites_dir = output_dir / "sprites"
sprite_map = download_sprites(pokemon_mapper, form_ids_in_encounters, sprites_dir)
print(f" Sprite map covers {len(sprite_map)} forms")
print("\nProcessing complete. Output not yet written (subtask gkcy).")