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'
{item["label"]}'
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()