""" Generator PSD — Pudełko na pieniądze z życzeniami (Chrzest, dziewczynka, Aniołek). Makieta A3 — jedno pudełko, 6 ścianek (KL/KP + GL/GP + DL/DP). Data jest w jednym miejscu: KP. DP nie ma daty (tylko imię i tytuł). Wymaga: uruchomiony Adobe Photoshop, pakiet photoshop-python-api. Użycie: python pudelko_chrzest_dziewczynka_aniolek.py --klient "Anna Kowalska" \\ --imie "Lenka" --data "19.04.2026" --od-kogo "Babcia Anna" """ import argparse import os import photoshop.api as ps PROJEKT_DIR = os.path.join( r"d:\pomysloweprezenty.pl\projekty\chrzest - pudełka na pieniądze", "Pudełko na pieniądze z życzeniami na Chrzest - Aniołek dziewczynka HDF UV", ) SZABLON_PATH = os.path.join(PROJEKT_DIR, "pudełka na chrzest - makieta A3 CMYK.psd") GOTOWE_DIR = os.path.join(PROJEKT_DIR, "_gotowe") def set_text(layer, new_text): """Zmienia tekst warstwy zachowując środek bounding boxa (kompensacja dla wycentrowanych warstw — patrz uwagi w innych skryptach).""" b = [float(x) for x in layer.bounds] cx, cy = (b[0] + b[2]) / 2, (b[1] + b[3]) / 2 layer.textItem.contents = new_text b2 = [float(x) for x in layer.bounds] cx2, cy2 = (b2[0] + b2[2]) / 2, (b2[1] + b2[3]) / 2 dx, dy = cx - cx2, cy - cy2 if dx or dy: layer.translate(dx, dy) def set_layer_text(container, layer_name, new_text): if new_text is None: return layer = container.artLayers[layer_name] old = layer.textItem.contents set_text(layer, new_text) print(f' {layer_name}: "{old}" -> "{new_text}"') def generate(klient, imie, data, od_kogo, zyczenia=None, naglowek=None, tytul=None): os.makedirs(GOTOWE_DIR, exist_ok=True) output_path = os.path.join(GOTOWE_DIR, f"{klient}.psd") app = ps.Application() doc = app.open(SZABLON_PATH) print(f"Otwarto szablon: {doc.name}") # KP — data (jedno źródło prawdy dla daty w całym projekcie) print(" [KP] data:") set_layer_text(doc.layerSets["KP"], "data", data) # GL — życzenia (Layer 2 → dane) print(" [GL] życzenia:") gl_dane = doc.layerSets["GL"].layerSets["dane"] set_layer_text(gl_dane, "od_kogo", od_kogo) set_layer_text(gl_dane, "naglowek", naglowek) set_layer_text(gl_dane, "zyczenia", zyczenia) # GP — imię + tytuł (Layer 1 kopia → dane); brak daty na ściance print(" [GP] imię/tytuł:") gp_dane = doc.layerSets["GP"].layerSets["dane"] set_layer_text(gp_dane, "imie", imie) set_layer_text(gp_dane, "tytul", tytul) # DL — życzenia (warstwy bezpośrednio w secie) print(" [DL] życzenia:") dl = doc.layerSets["DL"] set_layer_text(dl, "od_kogo", od_kogo) set_layer_text(dl, "naglowek", naglowek) set_layer_text(dl, "zyczenia", zyczenia) # DP — imię + tytuł; brak daty na ściance print(" [DP] imię/tytuł:") dp = doc.layerSets["DP"] set_layer_text(dp, "imie", imie) set_layer_text(dp, "tytul", tytul) psd_opts = ps.PhotoshopSaveOptions() doc.saveAs(output_path, psd_opts, True) print(f"Zapisano: {output_path}") doc.close(ps.SaveOptions.DoNotSaveChanges) print("Gotowe!") return output_path def main(): parser = argparse.ArgumentParser( description="Generator PSD - pudełko na pieniądze (Chrzest, dziewczynka Aniołek)" ) parser.add_argument("--klient", required=True, help="Nazwa pliku wyjściowego") parser.add_argument("--imie", required=True, help="Odmienione imię dziecka") parser.add_argument("--data", required=True, help="Data uroczystości (DD.MM.YYYY)") parser.add_argument("--od-kogo", dest="od_kogo", required=True, help="Kto składa życzenia") parser.add_argument("--zyczenia", default=None, help="Treść życzeń (opcjonalnie, domyślnie z szablonu)") parser.add_argument("--naglowek", default=None, help="Nagłówek życzeń (opcjonalnie, domyślnie z szablonu)") parser.add_argument("--tytul", default=None, help="Tytuł (opcjonalnie, domyślnie z szablonu)") args = parser.parse_args() generate( klient=args.klient, imie=args.imie, data=args.data, od_kogo=args.od_kogo, zyczenia=args.zyczenia, naglowek=args.naglowek, tytul=args.tytul, ) if __name__ == "__main__": main()