Files
Beakfx-mbq/image_folder.py
T
Beak d816fec234 Base commit - viewer working
got the basic working idea. Need to safety before adding features.
2025-09-15 20:34:17 -07:00

65 lines
1.8 KiB
Python

from pathlib import Path
from datetime import datetime
class ImageFolder:
SUPPORTED_EXTS = {".png", ".jpg", ".jpeg", ".bmp", ".gif"}
def __init__(self, folder_path, start_file=None):
"""
folder_path: Path to scan for images
start_file: optional file path to set as the initial index
"""
self.folder_path = Path(folder_path)
self.files = []
self.index = 0
self.scan_folder()
# If a specific start file was given, set index to that
if start_file:
try:
self.index = [f["path"] for f in self.files].index(str(Path(start_file)))
except ValueError:
pass # if not found, just leave at 0
def scan_folder(self):
"""Populate self.files with image metadata"""
if not self.folder_path.exists():
self.files = []
return
all_files = [
f for f in self.folder_path.iterdir()
if f.suffix.lower() in self.SUPPORTED_EXTS and f.is_file()
]
self.files = [
{
"path": str(f),
"name": f.name,
"size": f.stat().st_size,
"modified": datetime.fromtimestamp(f.stat().st_mtime),
"chunks": {}, # placeholder for PNG/genAI metadata
}
for f in sorted(all_files, key=lambda x: x.name.lower())
]
self.index = 0
def current(self):
if self.files:
return self.files[self.index]
return None
def next(self):
if not self.files:
return None
self.index = (self.index + 1) % len(self.files)
return self.current()
def prev(self):
if not self.files:
return None
self.index = (self.index - 1) % len(self.files)
return self.current()