add image copying script for galaxypedia assets
This commit is contained in:
parent
e9bbef2d8a
commit
1a85ad210f
1 changed files with 157 additions and 0 deletions
157
scripts/py/image_script.py
Executable file
157
scripts/py/image_script.py
Executable file
|
@ -0,0 +1,157 @@
|
|||
#! /usr/bin/env nix-shell
|
||||
#! nix-shell /etc/nixos/scripts/nix/python.nix -i python
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
from PIL import Image # type: ignore
|
||||
|
||||
image_path = Path("/home/cswimr/galaxypedia-image-export/consolidated/images")
|
||||
target_path = Path("/home/cswimr/Projects/Galaxypedia/assets/images/ships")
|
||||
name_separator_regex = r"[-|_|\s]?"
|
||||
|
||||
|
||||
def copy_images(ship_name: str, fuzzy: bool = False) -> None:
|
||||
ship_target_path = target_path / ship_name.replace(name_separator_regex, " ")
|
||||
ship_target_path.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
potential_image_tags: dict[str, str] = {
|
||||
"icon": "icon",
|
||||
"overview": "overview",
|
||||
"trails": "trails",
|
||||
"trails2": "trails2",
|
||||
"trails3": "trails3",
|
||||
"trails4": "trails4",
|
||||
"trails5": "trails5",
|
||||
"side": "side",
|
||||
f"side{name_separator_regex}profile": "side",
|
||||
"left": "left",
|
||||
f"left{name_separator_regex}side": "left",
|
||||
"right": "right",
|
||||
f"right{name_separator_regex}side": "right",
|
||||
"front": "front",
|
||||
"back": "back",
|
||||
"rear": "back",
|
||||
"top": "top",
|
||||
"topview": "top",
|
||||
f"top{name_separator_regex}profile": "top",
|
||||
"bottom": "bottom",
|
||||
f"bottom{name_separator_regex}profile": "bottom",
|
||||
"bott": "bottom",
|
||||
f"under{name_separator_regex}profile": "bottom",
|
||||
"warp": "warp",
|
||||
"interior": "interior",
|
||||
"int": "interior",
|
||||
f"interior{name_separator_regex}alt": "interior-alt",
|
||||
"interioralt": "interior-alt",
|
||||
"interior1": "interior1",
|
||||
"interior01": "interior1",
|
||||
"interior2": "interior2",
|
||||
"interior02": "interior2",
|
||||
"interior3": "interior3",
|
||||
"interior03": "interior3",
|
||||
"interior4": "interior4",
|
||||
"interior04": "interior4",
|
||||
"interior5": "interior5",
|
||||
"interior05": "interior5",
|
||||
f"interior{name_separator_regex}left": "interior-left",
|
||||
"interiorleft": "interior-left",
|
||||
f"interior{name_separator_regex}right": "interior-right",
|
||||
"interiorright": "interior-right",
|
||||
f"interior{name_separator_regex}side1": "interior-side1",
|
||||
f"interior{name_separator_regex}side2": "interior-side2",
|
||||
f"interior{name_separator_regex}side3": "interior-side3",
|
||||
f"interior{name_separator_regex}side4": "interior-side4",
|
||||
f"interior{name_separator_regex}side5": "interior-side5",
|
||||
f"bridge{name_separator_regex}side": "bridge-side",
|
||||
"bridgeside": "bridge-side",
|
||||
f"bridge{name_separator_regex}side1": "bridge-side1",
|
||||
f"bridge{name_separator_regex}side2": "bridge-side2",
|
||||
f"bridge{name_separator_regex}side3": "bridge-side3",
|
||||
f"bridge{name_separator_regex}side4": "bridge-side4",
|
||||
f"bridge{name_separator_regex}side5": "bridge-side5",
|
||||
"hangaralt": "bay-alt",
|
||||
"hangar": "bay",
|
||||
"recolored": "recolored",
|
||||
f"fighter{name_separator_regex}bay": "bay",
|
||||
"bay1": "bay1",
|
||||
"bay2": "bay2",
|
||||
"bay3": "bay3",
|
||||
"bay4": "bay4",
|
||||
"bay5": "bay5",
|
||||
"pilot": "pilot",
|
||||
"pilotseat": "pilot",
|
||||
"cockpit": "pilot",
|
||||
"pilotroom": "pilotroom",
|
||||
"hall": "hallway",
|
||||
"hallway": "hallway",
|
||||
"spinals": "spinals",
|
||||
"torpedos": "spinals",
|
||||
"torpedeos": "spinals",
|
||||
}
|
||||
|
||||
pattern = re.compile(
|
||||
rf"{'^' if not fuzzy else ''}(galaxy_)?{ship_name.lower()}{name_separator_regex}(?P<tag>{'|'.join(potential_image_tags.keys())})\.(png|webp|jpg|jpeg)$"
|
||||
)
|
||||
for image in image_path.glob("*"):
|
||||
match = pattern.search(image.name.lower())
|
||||
if match:
|
||||
tag = potential_image_tags[
|
||||
match.group("tag")
|
||||
.lower()
|
||||
.replace("-", "_")
|
||||
.replace(" ", "_")
|
||||
.replace("_", name_separator_regex)
|
||||
]
|
||||
with Image.open(image) as img:
|
||||
if image.suffix.lower() in (".jpg", ".jpeg"):
|
||||
print(f"{image.name} is lossy, skipping conversion!")
|
||||
resulting_filename = f"{tag}.jpg"
|
||||
img.save(ship_target_path / resulting_filename)
|
||||
elif not image.suffix == ".webp":
|
||||
resulting_filename = f"{tag}.webp"
|
||||
img.save(
|
||||
ship_target_path / resulting_filename,
|
||||
format="WEBP",
|
||||
lossless=True,
|
||||
)
|
||||
else:
|
||||
resulting_filename = f"{tag}.webp"
|
||||
img.save(ship_target_path / resulting_filename)
|
||||
print(
|
||||
f"Copied {image.name} to {ship_name.replace(name_separator_regex, ' ')}/{resulting_filename}"
|
||||
)
|
||||
dir_length = len(os.listdir(ship_target_path))
|
||||
if dir_length == 0:
|
||||
print(
|
||||
f"No images found for {ship_name.replace(name_separator_regex, ' ')}, removing directory"
|
||||
)
|
||||
ship_target_path.rmdir()
|
||||
else:
|
||||
print(f"Copied {dir_length} images to {ship_target_path}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(
|
||||
prog=os.path.basename(__file__),
|
||||
description="Copy images from the galaxypedia image export to the hugopedia assets directory.",
|
||||
epilog=f"Example usage: {os.path.basename(__file__)} Deity",
|
||||
)
|
||||
parser.add_argument(
|
||||
"ship_name",
|
||||
help="The ship name to grab images for.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--fuzzy",
|
||||
"-f",
|
||||
help="The path to the image directory to copy from.",
|
||||
action="store_true",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
copy_images(
|
||||
ship_name=args.ship_name.replace(" ", name_separator_regex), fuzzy=args.fuzzy
|
||||
)
|
Loading…
Reference in a new issue