You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
# organize_thumbnails.py (fixed)
|
|
import os
|
|
import hashlib
|
|
import shutil
|
|
|
|
OLD_THUMB_DIR = "static/thumbnails"
|
|
HASHED_DIR = "static/thumbnails_hashed"
|
|
|
|
def hashed_path(video_id: str) -> str:
|
|
"""Return hashed path based on video ID (no extension)."""
|
|
h = hashlib.md5(video_id.encode()).hexdigest()
|
|
sub1, sub2 = h[:2], h[2:4]
|
|
return os.path.join(HASHED_DIR, sub1, sub2, f"{video_id}.webp")
|
|
|
|
def organize_thumbnails():
|
|
os.makedirs(HASHED_DIR, exist_ok=True)
|
|
moved_count = 0
|
|
|
|
for root, _, files in os.walk(OLD_THUMB_DIR):
|
|
for file in files:
|
|
video_id = os.path.splitext(file)[0] # strip extension
|
|
src_path = os.path.join(root, file)
|
|
dest_path = hashed_path(video_id)
|
|
|
|
os.makedirs(os.path.dirname(dest_path), exist_ok=True)
|
|
|
|
if not os.path.exists(dest_path):
|
|
shutil.move(src_path, dest_path)
|
|
moved_count += 1
|
|
else:
|
|
print(f"[SKIP] Exists: {dest_path}")
|
|
|
|
print(f"\n✅ Done! Organized {moved_count} thumbnails into hashed structure.")
|
|
|
|
if __name__ == "__main__":
|
|
organize_thumbnails() |