diff --git a/build.py b/build.py index 26fad61..f2aea5e 100644 --- a/build.py +++ b/build.py @@ -31,7 +31,7 @@ def build(): build_date = datetime.now().strftime("%Y%m%d%H%M%S") build_date_version = datetime.now().strftime("%Y-%m-%d %H:%M:%S") site_vars = load_yaml(SITE_FILE) - gallery_sections = load_yaml(GALLERY_FILE) + gallery_vars = load_yaml(GALLERY_FILE) build_section = site_vars.get("build", {}) theme_name = site_vars.get("build", {}).get("theme", "default") theme_vars, theme_dir = load_theme_config(theme_name, THEMES_DIR) @@ -63,8 +63,8 @@ def build(): logging.info(f"[~] convert_images = {convert_images}") logging.info(f"[~] resize_images = {resize_images}") - hero_images = site_vars.get("hero", {}).get("images", []) - gallery_images = [img for section in gallery_sections for img in section["images"]] if isinstance(gallery_sections, list) else gallery_sections.get("images", []) + hero_images = gallery_vars.get("hero", {}).get("images", []) + gallery_images = gallery_vars.get("gallery", {}).get("images", []) if convert_images: process_images(hero_images, resize_images, IMG_DIR, BUILD_DIR) @@ -73,6 +73,9 @@ def build(): copy_original_images(hero_images, IMG_DIR, BUILD_DIR) copy_original_images(gallery_images, IMG_DIR, BUILD_DIR) + if "hero" not in site_vars: + site_vars["hero"] = {} # Initialize an empty hero section + # Adding menu menu_html = "\n".join( f'' diff --git a/config/gallery.yaml b/config/gallery.yaml index d2396ec..6826862 100644 --- a/config/gallery.yaml +++ b/config/gallery.yaml @@ -1,2 +1,7 @@ -# Use gallery.py to automatically add photos stored in your /config/photos/gallery folder. -images: [] \ No newline at end of file +# Use gallery.py to automatically add photos stored in your /config/photos/gallery folder +# Add tags to your photos as shown below +# remove the # before [] if you removed all images to use gallery.py again +hero: + images: [] +gallery: + images: [] \ No newline at end of file diff --git a/config/photos/gallery/almos-bechtold-3402kvtHhOo-unsplash.jpg b/config/photos/gallery/almos-bechtold-3402kvtHhOo-unsplash.jpg deleted file mode 100644 index 46c580c..0000000 Binary files a/config/photos/gallery/almos-bechtold-3402kvtHhOo-unsplash.jpg and /dev/null differ diff --git a/config/photos/gallery/arthur-savary-nLfAqmZ2hJo-unsplash.jpg b/config/photos/gallery/arthur-savary-nLfAqmZ2hJo-unsplash.jpg deleted file mode 100644 index 7d45057..0000000 Binary files a/config/photos/gallery/arthur-savary-nLfAqmZ2hJo-unsplash.jpg and /dev/null differ diff --git a/config/photos/gallery/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg b/config/photos/gallery/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg deleted file mode 100644 index fa9d8f9..0000000 Binary files a/config/photos/gallery/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg and /dev/null differ diff --git a/config/photos/gallery/gilley-aguilar-ywGDhTlf93E-unsplash.jpg b/config/photos/gallery/gilley-aguilar-ywGDhTlf93E-unsplash.jpg deleted file mode 100644 index 8ac743e..0000000 Binary files a/config/photos/gallery/gilley-aguilar-ywGDhTlf93E-unsplash.jpg and /dev/null differ diff --git a/config/photos/gallery/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg b/config/photos/gallery/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg deleted file mode 100644 index a7a1ca2..0000000 Binary files a/config/photos/gallery/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg and /dev/null differ diff --git a/config/photos/gallery/jonas-degener-LueP5EdWGFY-unsplash.jpg b/config/photos/gallery/jonas-degener-LueP5EdWGFY-unsplash.jpg deleted file mode 100644 index aa323ea..0000000 Binary files a/config/photos/gallery/jonas-degener-LueP5EdWGFY-unsplash.jpg and /dev/null differ diff --git a/config/photos/gallery/michiel-annaert-M27pZnHV6M0-unsplash.jpg b/config/photos/gallery/michiel-annaert-M27pZnHV6M0-unsplash.jpg deleted file mode 100644 index b4543d5..0000000 Binary files a/config/photos/gallery/michiel-annaert-M27pZnHV6M0-unsplash.jpg and /dev/null differ diff --git a/config/photos/gallery/nir-himi-AjecvkfSHxA-unsplash.jpg b/config/photos/gallery/nir-himi-AjecvkfSHxA-unsplash.jpg deleted file mode 100644 index aa74bae..0000000 Binary files a/config/photos/gallery/nir-himi-AjecvkfSHxA-unsplash.jpg and /dev/null differ diff --git a/config/photos/gallery/rachel-mcdermott-0fN7Fxv1eWA-unsplash.jpg b/config/photos/gallery/rachel-mcdermott-0fN7Fxv1eWA-unsplash.jpg deleted file mode 100644 index f92dc7c..0000000 Binary files a/config/photos/gallery/rachel-mcdermott-0fN7Fxv1eWA-unsplash.jpg and /dev/null differ diff --git a/config/photos/gallery/tianlei-wu-g5o6T-PWT3g-unsplash.jpg b/config/photos/gallery/tianlei-wu-g5o6T-PWT3g-unsplash.jpg deleted file mode 100644 index 0f04e21..0000000 Binary files a/config/photos/gallery/tianlei-wu-g5o6T-PWT3g-unsplash.jpg and /dev/null differ diff --git a/config/photos/gallery/we-care-wild-zLweeVLU9Fo-unsplash.jpg b/config/photos/gallery/we-care-wild-zLweeVLU9Fo-unsplash.jpg deleted file mode 100644 index 8918425..0000000 Binary files a/config/photos/gallery/we-care-wild-zLweeVLU9Fo-unsplash.jpg and /dev/null differ diff --git a/config/photos/gallery/y-s-z90w7yStOkk-unsplash.jpg b/config/photos/gallery/y-s-z90w7yStOkk-unsplash.jpg deleted file mode 100644 index fff36c5..0000000 Binary files a/config/photos/gallery/y-s-z90w7yStOkk-unsplash.jpg and /dev/null differ diff --git a/config/photos/hero/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg b/config/photos/hero/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg deleted file mode 100644 index fa9d8f9..0000000 Binary files a/config/photos/hero/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg and /dev/null differ diff --git a/config/photos/hero/gilley-aguilar-ywGDhTlf93E-unsplash.jpg b/config/photos/hero/gilley-aguilar-ywGDhTlf93E-unsplash.jpg deleted file mode 100644 index 8ac743e..0000000 Binary files a/config/photos/hero/gilley-aguilar-ywGDhTlf93E-unsplash.jpg and /dev/null differ diff --git a/config/photos/hero/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg b/config/photos/hero/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg deleted file mode 100644 index a7a1ca2..0000000 Binary files a/config/photos/hero/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg and /dev/null differ diff --git a/config/site.yaml b/config/site.yaml index 27bb8a8..b3211f4 100644 --- a/config/site.yaml +++ b/config/site.yaml @@ -10,16 +10,12 @@ info: social: instagram_url: thumbnail: - + menu: items: - label: Home href: / -hero: - # Use gallery.py to automatically add images from config/photos/hero folder - images: [] - footer: copyright: Copyright © 2025 legal_link: '/legals/' diff --git a/demo/config/gallery.yaml b/demo/config/gallery.yaml index 1ed4308..329528b 100644 --- a/demo/config/gallery.yaml +++ b/demo/config/gallery.yaml @@ -1,30 +1,36 @@ -# Source your photos here -# Relative path is set from built img folder -# You can also use gallery.py to automatically add photos stored in your /config/photos/gallery folder +# Use gallery.py to automatically add photos stored in your /config/photos/gallery folder # Add tags to your photos as shown below -# remove the # before [] if you removed all images to use gallery.py -images: #[] -- src: gallery/almos-bechtold-3402kvtHhOo-unsplash.jpg - tags: ["portrait"] -- src: gallery/arthur-savary-nLfAqmZ2hJo-unsplash.jpg - tags: ["portrait", "sunset", "boat"] -- src: gallery/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg - tags: ["landscape", "sea", "beach", "sand"] -- src: gallery/gilley-aguilar-ywGDhTlf93E-unsplash.jpg - tags: ["landscape", "sky", "cloud", "mountains"] -- src: gallery/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg - tags: ["lanscape", "sunset", "mountains"] -- src: gallery/jonas-degener-LueP5EdWGFY-unsplash.jpg - tags: ["landscape", "mountains", "fog"] -- src: gallery/michiel-annaert-M27pZnHV6M0-unsplash.jpg - tags: ["flowers", "nature"] -- src: gallery/nir-himi-AjecvkfSHxA-unsplash.jpg - tags: ["landscape", "mountains", "sky"] -- src: gallery/rachel-mcdermott-0fN7Fxv1eWA-unsplash.jpg - tags: ["portrait", "black and white"] -- src: gallery/tianlei-wu-g5o6T-PWT3g-unsplash.jpg - tags: ["cat", "animals"] -- src: gallery/we-care-wild-zLweeVLU9Fo-unsplash.jpg - tags: ["bison", "animals"] -- src: gallery/y-s-z90w7yStOkk-unsplash.jpg - tags: ["frog", "green", "animals"] +# remove the # before [] if you removed all images to use gallery.py again + +hero: + images: #[] + - src: hero/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg + - src: hero/gilley-aguilar-ywGDhTlf93E-unsplash.jpg + - src: hero/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg + +gallery: + images: #[] + - src: gallery/almos-bechtold-3402kvtHhOo-unsplash.jpg + tags: [portrait] + - src: gallery/arthur-savary-nLfAqmZ2hJo-unsplash.jpg + tags: [portrait, sunset, boat] + - src: gallery/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg + tags: [landscape, sea, beach, sand] + - src: gallery/gilley-aguilar-ywGDhTlf93E-unsplash.jpg + tags: [landscape, sky, cloud, mountains] + - src: gallery/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg + tags: [lanscape, sunset, mountains] + - src: gallery/jonas-degener-LueP5EdWGFY-unsplash.jpg + tags: [landscape, mountains, fog] + - src: gallery/michiel-annaert-M27pZnHV6M0-unsplash.jpg + tags: [flowers, nature] + - src: gallery/nir-himi-AjecvkfSHxA-unsplash.jpg + tags: [landscape, mountains, sky] + - src: gallery/rachel-mcdermott-0fN7Fxv1eWA-unsplash.jpg + tags: [portrait, black and white] + - src: gallery/tianlei-wu-g5o6T-PWT3g-unsplash.jpg + tags: [cat, animals] + - src: gallery/we-care-wild-zLweeVLU9Fo-unsplash.jpg + tags: [bison, animals] + - src: gallery/y-s-z90w7yStOkk-unsplash.jpg + tags: [frog, green, animals] diff --git a/demo/config/site.yaml b/demo/config/site.yaml index a0d5494..aaaf312 100644 --- a/demo/config/site.yaml +++ b/demo/config/site.yaml @@ -27,16 +27,6 @@ menu: - label: Animals href: /?tag=animals -hero: - # Source your hero carrousel images here. - # Root folder is img. - # You can also use gallery.py to automatically add images from config/photos/hero folder - # remove the # before [] if you removed all images to use gallery.py - images: #[] - - src: hero/francesco-ungaro-Zbc9Ka8msdI-unsplash.jpg - - src: hero/gilley-aguilar-ywGDhTlf93E-unsplash.jpg - - src: hero/jacob-reinikainen-nGG6m3RbjSk-unsplash.jpg - footer: copyright: Copyright © 2025 – Lumeex legal_link: '/legals/' diff --git a/gallery.py b/gallery.py index aecc3a8..54d815d 100644 --- a/gallery.py +++ b/gallery.py @@ -4,7 +4,6 @@ from pathlib import Path # YAML file paths GALLERY_YAML = "config/gallery.yaml" -SITE_YAML = "config/site.yaml" # Image directories GALLERY_DIR = Path("config/photos/gallery") @@ -17,7 +16,7 @@ def load_yaml(path): return {} with open(path, "r", encoding="utf-8") as f: data = yaml.safe_load(f) or {} - images = data.get("images") or [] + images = data.get("images", []) or [] print(f"[✓] Loaded {len(images)} image(s) from {path}") return data @@ -34,47 +33,80 @@ def get_all_image_paths(directory): ]) def update_gallery(): - print("\n=== Updating gallery.yaml ===") + print("\n=== Updating gallery.yaml (gallery section) ===") gallery = load_yaml(GALLERY_YAML) - gallery_images = gallery.get("images") or [] - known = {img["src"] for img in gallery_images} - all_images = get_all_image_paths(GALLERY_DIR) + # Access the 'gallery' section within the gallery data, or initialize it if it doesn't exist + gallery_section = gallery.get("gallery", {}) + + # Access the 'images' list within the 'gallery' section, or initialize it if it doesn't exist + gallery_images = gallery_section.get("images", []) + + all_images = set(get_all_image_paths(GALLERY_DIR)) + known_images = {img["src"] for img in gallery_images} + + # Add new images new_images = [ {"src": path, "tags": []} for path in all_images - if path not in known + if path not in known_images ] - if new_images: gallery_images.extend(new_images) - gallery["images"] = gallery_images - save_yaml(gallery, GALLERY_YAML) - print(f"[✓] Added {len(new_images)} new image(s) to gallery.yaml") - else: - print("[✓] No new images to add to gallery.yaml") + print(f"[✓] Added {len(new_images)} new image(s) to gallery.yaml (gallery)") + + # Remove deleted images + deleted_images = known_images - all_images + if deleted_images: + gallery_images = [img for img in gallery_images if img["src"] not in deleted_images] + print(f"[✓] Removed {len(deleted_images)} deleted image(s) from gallery.yaml (gallery)") + + # Update the 'gallery' section with the modified 'images' list + gallery_section["images"] = gallery_images + gallery["gallery"] = gallery_section + + save_yaml(gallery, GALLERY_YAML) + + if not new_images and not deleted_images: + print("[✓] No changes to gallery.yaml (gallery)") def update_hero(): - print("\n=== Updating site.yaml (hero section) ===") - site = load_yaml(SITE_YAML) - hero_section = site.get("hero", {}) - hero_images = hero_section.get("images") or [] - known = {img["src"] for img in hero_images} - all_images = get_all_image_paths(HERO_DIR) + print("\n=== Updating gallery.yaml (hero section) ===") + gallery = load_yaml(GALLERY_YAML) + # Access the 'hero' section within the gallery data, or initialize it if it doesn't exist + hero_section = gallery.get("hero", {}) + + # Access the 'images' list within the 'hero' section, or initialize it if it doesn't exist + hero_images = hero_section.get("images", []) + + all_images = set(get_all_image_paths(HERO_DIR)) + known_images = {img["src"] for img in hero_images} + + # Add new images new_images = [ {"src": path} for path in all_images - if path not in known + if path not in known_images ] - if new_images: hero_images.extend(new_images) - site["hero"]["images"] = hero_images - save_yaml(site, SITE_YAML) - print(f"[✓] Added {len(new_images)} new image(s) to site.yaml (hero)") - else: - print("[✓] No new images to add to site.yaml") + print(f"[✓] Added {len(new_images)} new image(s) to gallery.yaml (hero)") + + # Remove deleted images + deleted_images = known_images - all_images + if deleted_images: + hero_images = [img for img in hero_images if img["src"] not in deleted_images] + print(f"[✓] Removed {len(deleted_images)} deleted image(s) from gallery.yaml (hero)") + + # Update the 'hero' section with the modified 'images' list + hero_section["images"] = hero_images + gallery["hero"] = hero_section + + save_yaml(gallery, GALLERY_YAML) + + if not new_images and not deleted_images: + print("[✓] No changes to gallery.yaml (hero)") if __name__ == "__main__": update_gallery()