diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c91fc7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +bin/ +images/ +include/ +lib/ +lib64/ +local/ +share/ + +config.toml +__pycache__/ \ No newline at end of file diff --git a/app.py b/app.py new file mode 100644 index 0000000..407abb2 --- /dev/null +++ b/app.py @@ -0,0 +1,209 @@ +from flask import Flask, request, jsonify, render_template, redirect, url_for, flash, session, send_from_directory +from werkzeug.utils import secure_filename +from models import Session as DBSession, Photo +from config import load_or_create_config +import os +from datetime import datetime +from PIL import Image, ExifTags +from apscheduler.schedulers.background import BackgroundScheduler +import random +from colorthief import ColorThief +import colorsys +app = Flask(__name__) +app.secret_key = os.urandom(24) +config = load_or_create_config() + +UPLOAD_FOLDER = config['directories']['upload'] +THUMBNAIL_FOLDER = config['directories']['thumbnail'] +ALLOWED_EXTENSIONS = {'jpg', 'jpeg', 'png', 'gif'} +THUMBNAIL_SIZES = [256, 512, 768, 1024, 1536, 2048] + +# Create upload and thumbnail directories if they don't exist +os.makedirs(UPLOAD_FOLDER, exist_ok=True) +os.makedirs(THUMBNAIL_FOLDER, exist_ok=True) + +app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER +app.config['THUMBNAIL_FOLDER'] = THUMBNAIL_FOLDER +app.config['MAX_CONTENT_LENGTH'] = 80 * 1024 * 1024 # 80MB limit + +scheduler = BackgroundScheduler() +scheduler.start() + +def allowed_file(filename): + return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS + +def get_highlight_color(image_path): + color_thief = ColorThief(image_path) + palette = color_thief.get_palette(color_count=6, quality=1) + + # Convert RGB to HSV and find the color with the highest saturation + highlight_color = max(palette, key=lambda rgb: colorsys.rgb_to_hsv(*rgb)[1]) + + return '#{:02x}{:02x}{:02x}'.format(*highlight_color) + +def generate_thumbnails(filename): + original_path = os.path.join(UPLOAD_FOLDER, filename) + thumb_dir = os.path.join(THUMBNAIL_FOLDER, os.path.splitext(filename)[0]) + os.makedirs(thumb_dir, exist_ok=True) + + for size in THUMBNAIL_SIZES: + thumb_path = os.path.join(thumb_dir, f"{size}_{filename}") + if not os.path.exists(thumb_path): + with Image.open(original_path) as img: + # Extract EXIF data + exif_data = None + if "exif" in img.info: + exif_data = img.info["exif"] + + # Resize image + img.thumbnail((size, size), Image.LANCZOS) + + # Save image with EXIF data + if exif_data: + img.save(thumb_path, exif=exif_data, optimize=True, quality=85) + else: + img.save(thumb_path, optimize=True, quality=85) + +def generate_all_thumbnails(): + for filename in os.listdir(UPLOAD_FOLDER): + if allowed_file(filename): + generate_thumbnails(filename) + +scheduler.add_job(generate_all_thumbnails, 'interval', minutes=5) +scheduler.add_job(generate_all_thumbnails, 'date', run_date=datetime.now()) # Run once at startup + +@app.route('/') +def index(): + return render_template('index.html') + +@app.route('/api/images') +def get_images(): + page = int(request.args.get('page', 1)) + per_page = 20 + db_session = DBSession() + photos = db_session.query(Photo).order_by(Photo.date_taken.desc()).offset((page - 1) * per_page).limit(per_page).all() + + images = [] + for photo in photos: + factor = random.randint(2, 3) + if photo.height < 4000 or photo.width < 4000: + factor = 1 + if photo.orientation == 6 or photo.orientation == 8: + width, height = photo.height, photo.width + else: + width, height = photo.width, photo.height + images.append({ + 'imgSrc': f'/static/thumbnails/{os.path.splitext(photo.input_filename)[0]}/1536_{photo.input_filename}', + 'width': width / factor, + 'height': height / factor, + 'caption': photo.input_filename, + 'date': photo.date_taken.strftime('%y %m %d'), + 'technicalInfo': f"{photo.focal_length}MM | F/{photo.aperture} | {photo.shutter_speed} | ISO{photo.iso}", + 'highlightColor': photo.highlight_color + }) + + has_more = db_session.query(Photo).count() > page * per_page + db_session.close() + + return jsonify({'images': images, 'hasMore': has_more}) + +@app.route('/admin') +def admin(): + if 'logged_in' not in session: + return redirect(url_for('admin_login')) + + db_session = DBSession() + photos = db_session.query(Photo).order_by(Photo.date_taken.desc()).all() + db_session.close() + + return render_template('admin.html', photos=photos) + +@app.route('/admin/login', methods=['GET', 'POST']) +def admin_login(): + if request.method == 'POST': + if request.form['password'] == config['admin']['password']: + session['logged_in'] = True + return redirect(url_for('admin')) + else: + flash('Invalid password') + return render_template('admin_login.html') + +@app.route('/admin/upload', methods=['POST']) +def admin_upload(): + if 'logged_in' not in session: + return redirect(url_for('admin_login')) + + if 'file' not in request.files: + flash('No file part') + return redirect(url_for('admin')) + + file = request.files['file'] + if file.filename == '': + flash('No selected file') + return redirect(url_for('admin')) + + if file and allowed_file(file.filename): + filename = secure_filename(file.filename) + file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) + file.save(file_path) + + # Generate thumbnails + generate_thumbnails(filename) + + # Extract EXIF data + exif = None + with Image.open(file_path) as img: + width, height = img.size + exif = { + ExifTags.TAGS[k]: v + for k, v in img._getexif().items() + if k in ExifTags.TAGS + } + + # Get image dimensions + with Image.open(file_path) as img: + width, height = img.size + + exposure_time = exif['ExposureTime'] + if isinstance(exposure_time, tuple): + exposure_fraction = f"{exposure_time[0]}/{exposure_time[1]}" + else: + exposure_fraction = f"1/{int(1/float(exposure_time))}" + + # Create database entry + db_session = DBSession() + new_photo = Photo( + input_filename=filename, + thumbnail_filename=f"{os.path.splitext(filename)[0]}/256_{filename}", + focal_length=str(exif.get('FocalLengthIn35mmFilm', exif.get('FocalLength', ''))), + aperture=str(exif.get('FNumber', '')), + shutter_speed=exposure_fraction, + date_taken=datetime.strptime(str(exif.get('DateTime', '1970:01:01 00:00:00')), '%Y:%m:%d %H:%M:%S'), + iso=int(exif.get('ISOSpeedRatings', 0)), + orientation=int(exif.get('Orientation', 1)), + width=width, + height=height, + highlight_color=get_highlight_color(THUMBNAIL_FOLDER + f"{os.path.splitext(filename)[0]}/256_{filename}") + ) + db_session.add(new_photo) + db_session.commit() + db_session.close() + + flash('File uploaded successfully') + return redirect(url_for('admin')) + + flash('Invalid file type') + return redirect(url_for('admin')) + +@app.route('/admin/logout') +def admin_logout(): + session.pop('logged_in', None) + flash('You have been logged out') + return redirect(url_for('admin_login')) + +@app.route('/static/thumbnails/<path:filename>') +def serve_thumbnail(filename): + return send_from_directory(THUMBNAIL_FOLDER, filename) + +if __name__ == '__main__': + app.run(debug=True, port=5002, host='0.0.0.0') diff --git a/config.py b/config.py new file mode 100644 index 0000000..b929a5b --- /dev/null +++ b/config.py @@ -0,0 +1,25 @@ +import toml +import os +import secrets + +CONFIG_FILE = 'config.toml' + +def load_or_create_config(): + if not os.path.exists(CONFIG_FILE): + admin_password = secrets.token_urlsafe(16) + config = { + 'admin': { + 'password': admin_password + }, + 'directories': { + 'upload': 'uploads', + 'thumbnail': 'thumbnails' + } + } + with open(CONFIG_FILE, 'w') as f: + toml.dump(config, f) + print(f"Generated new config file with admin password: {admin_password}") + else: + with open(CONFIG_FILE, 'r') as f: + config = toml.load(f) + return config diff --git a/models.py b/models.py new file mode 100644 index 0000000..58df87c --- /dev/null +++ b/models.py @@ -0,0 +1,25 @@ +from sqlalchemy import create_engine, Column, Integer, String, DateTime, Float +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker + +Base = declarative_base() + +class Photo(Base): + __tablename__ = 'photos' + + id = Column(Integer, primary_key=True, autoincrement=True) + input_filename = Column(String, nullable=False) + thumbnail_filename = Column(String, nullable=False) + focal_length = Column(String) + aperture = Column(String) + shutter_speed = Column(String) + date_taken = Column(DateTime) + iso = Column(Integer) + width = Column(Integer) + height = Column(Integer) + highlight_color = Column(String) + orientation = Column(Integer) + +engine = create_engine('sqlite:///photos.db') +Base.metadata.create_all(engine) +Session = sessionmaker(bind=engine) diff --git a/templates/admin.html b/templates/admin.html new file mode 100644 index 0000000..ae11af1 --- /dev/null +++ b/templates/admin.html @@ -0,0 +1,58 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Admin Interface</title> + <style> + table { + border-collapse: collapse; + width: 100%; + } + th, td { + border: 1px solid #ddd; + padding: 8px; + text-align: left; + } + th { + background-color: #f2f2f2; + } + </style> +</head> +<body> + <h1>Admin Interface</h1> + {% with messages = get_flashed_messages() %} + {% if messages %} + <ul> + {% for message in messages %} + <li>{{ message }}</li> + {% endfor %} + </ul> + {% endif %} + {% endwith %} + <h2>Upload New Image</h2> + <form action="{{ url_for('admin_upload') }}" method="POST" enctype="multipart/form-data"> + <input type="file" name="file" accept=".jpg,.jpeg,.png,.gif" required> + <input type="submit" value="Upload"> + </form> + <h2>Uploaded Images</h2> + <table> + <tr> + <th>ID</th> + <th>Thumbnail</th> + <th>Filename</th> + <th>Date Taken</th> + <th>Technical Info</th> + </tr> + {% for photo in photos %} + <tr> + <td>{{ photo.id }}</td> + <td><img src="{{ url_for('static', filename='thumbnails/' + photo.thumbnail_filename) }}" alt="Thumbnail" width="100"></td> + <td>{{ photo.input_filename }}</td> + <td>{{ photo.date_taken.strftime('%Y-%m-%d %H:%M:%S') }}</td> + <td>{{ photo.focal_length }}mm f/{{ photo.aperture }} {{ photo.shutter_speed }}s ISO{{ photo.iso }}</td> + </tr> + {% endfor %} + </table> +</body> +</html> diff --git a/templates/admin_login.html b/templates/admin_login.html new file mode 100644 index 0000000..fca4dac --- /dev/null +++ b/templates/admin_login.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Admin Login</title> +</head> +<body> + <h1>Admin Login</h1> + {% with messages = get_flashed_messages() %} + {% if messages %} + <ul> + {% for message in messages %} + <li>{{ message }}</li> + {% endfor %} + </ul> + {% endif %} + {% endwith %} + <form method="POST"> + <input type="password" name="password" required> + <input type="submit" value="Login"> + </form> +</body> +</html> diff --git a/thumbs/1024_1.JPG b/thumbs/1024_1.JPG deleted file mode 100644 index 0025609..0000000 Binary files a/thumbs/1024_1.JPG and /dev/null differ diff --git a/thumbs/1024_2.JPG b/thumbs/1024_2.JPG deleted file mode 100644 index a46c9ae..0000000 Binary files a/thumbs/1024_2.JPG and /dev/null differ diff --git a/thumbs/1024_3.JPG b/thumbs/1024_3.JPG deleted file mode 100644 index 405c3af..0000000 Binary files a/thumbs/1024_3.JPG and /dev/null differ diff --git a/thumbs/1024_4.JPG b/thumbs/1024_4.JPG deleted file mode 100644 index d7763bd..0000000 Binary files a/thumbs/1024_4.JPG and /dev/null differ diff --git a/thumbs/1024_DSC00131.JPG b/thumbs/1024_DSC00131.JPG deleted file mode 100644 index 5aa3827..0000000 Binary files a/thumbs/1024_DSC00131.JPG and /dev/null differ diff --git a/thumbs/1024_DSC03199.JPG b/thumbs/1024_DSC03199.JPG deleted file mode 100644 index 12b4517..0000000 Binary files a/thumbs/1024_DSC03199.JPG and /dev/null differ diff --git a/thumbs/1024_DSC03327.JPG b/thumbs/1024_DSC03327.JPG deleted file mode 100644 index 4679664..0000000 Binary files a/thumbs/1024_DSC03327.JPG and /dev/null differ diff --git a/thumbs/1024_DSC03355.JPG b/thumbs/1024_DSC03355.JPG deleted file mode 100644 index d12744a..0000000 Binary files a/thumbs/1024_DSC03355.JPG and /dev/null differ diff --git a/thumbs/1024_DSC04974.JPG b/thumbs/1024_DSC04974.JPG deleted file mode 100644 index 5c2b51d..0000000 Binary files a/thumbs/1024_DSC04974.JPG and /dev/null differ diff --git a/thumbs/1024_DSC05239.JPG b/thumbs/1024_DSC05239.JPG deleted file mode 100644 index 5a278eb..0000000 Binary files a/thumbs/1024_DSC05239.JPG and /dev/null differ diff --git a/thumbs/1024_DSC06113.JPG b/thumbs/1024_DSC06113.JPG deleted file mode 100644 index 2d79f52..0000000 Binary files a/thumbs/1024_DSC06113.JPG and /dev/null differ diff --git a/thumbs/1024_DSC07322.JPG b/thumbs/1024_DSC07322.JPG deleted file mode 100644 index fe639f6..0000000 Binary files a/thumbs/1024_DSC07322.JPG and /dev/null differ diff --git a/thumbs/1024_DSC07471.JPG b/thumbs/1024_DSC07471.JPG deleted file mode 100644 index c976b9e..0000000 Binary files a/thumbs/1024_DSC07471.JPG and /dev/null differ diff --git a/thumbs/1536_1.JPG b/thumbs/1536_1.JPG deleted file mode 100644 index 47a768f..0000000 Binary files a/thumbs/1536_1.JPG and /dev/null differ diff --git a/thumbs/1536_2.JPG b/thumbs/1536_2.JPG deleted file mode 100644 index 9c76bee..0000000 Binary files a/thumbs/1536_2.JPG and /dev/null differ diff --git a/thumbs/1536_3.JPG b/thumbs/1536_3.JPG deleted file mode 100644 index 3ef4525..0000000 Binary files a/thumbs/1536_3.JPG and /dev/null differ diff --git a/thumbs/1536_4.JPG b/thumbs/1536_4.JPG deleted file mode 100644 index c28755a..0000000 Binary files a/thumbs/1536_4.JPG and /dev/null differ diff --git a/thumbs/1536_DSC00131.JPG b/thumbs/1536_DSC00131.JPG deleted file mode 100644 index d61a8ce..0000000 Binary files a/thumbs/1536_DSC00131.JPG and /dev/null differ diff --git a/thumbs/1536_DSC03199.JPG b/thumbs/1536_DSC03199.JPG deleted file mode 100644 index 956e068..0000000 Binary files a/thumbs/1536_DSC03199.JPG and /dev/null differ diff --git a/thumbs/1536_DSC03327.JPG b/thumbs/1536_DSC03327.JPG deleted file mode 100644 index 6579f9f..0000000 Binary files a/thumbs/1536_DSC03327.JPG and /dev/null differ diff --git a/thumbs/1536_DSC03355.JPG b/thumbs/1536_DSC03355.JPG deleted file mode 100644 index d18d086..0000000 Binary files a/thumbs/1536_DSC03355.JPG and /dev/null differ diff --git a/thumbs/1536_DSC04974.JPG b/thumbs/1536_DSC04974.JPG deleted file mode 100644 index f3374fe..0000000 Binary files a/thumbs/1536_DSC04974.JPG and /dev/null differ diff --git a/thumbs/1536_DSC05239.JPG b/thumbs/1536_DSC05239.JPG deleted file mode 100644 index 76ff5f9..0000000 Binary files a/thumbs/1536_DSC05239.JPG and /dev/null differ diff --git a/thumbs/1536_DSC06113.JPG b/thumbs/1536_DSC06113.JPG deleted file mode 100644 index cbe7bb8..0000000 Binary files a/thumbs/1536_DSC06113.JPG and /dev/null differ diff --git a/thumbs/1536_DSC07322.JPG b/thumbs/1536_DSC07322.JPG deleted file mode 100644 index 5fb465e..0000000 Binary files a/thumbs/1536_DSC07322.JPG and /dev/null differ diff --git a/thumbs/1536_DSC07471.JPG b/thumbs/1536_DSC07471.JPG deleted file mode 100644 index 9d589e9..0000000 Binary files a/thumbs/1536_DSC07471.JPG and /dev/null differ diff --git a/thumbs/2048_1.JPG b/thumbs/2048_1.JPG deleted file mode 100644 index a6a78ff..0000000 Binary files a/thumbs/2048_1.JPG and /dev/null differ diff --git a/thumbs/2048_2.JPG b/thumbs/2048_2.JPG deleted file mode 100644 index 0a8ba56..0000000 Binary files a/thumbs/2048_2.JPG and /dev/null differ diff --git a/thumbs/2048_3.JPG b/thumbs/2048_3.JPG deleted file mode 100644 index 0528d0d..0000000 Binary files a/thumbs/2048_3.JPG and /dev/null differ diff --git a/thumbs/2048_4.JPG b/thumbs/2048_4.JPG deleted file mode 100644 index 353a07a..0000000 Binary files a/thumbs/2048_4.JPG and /dev/null differ diff --git a/thumbs/2048_DSC00131.JPG b/thumbs/2048_DSC00131.JPG deleted file mode 100644 index 8c76d17..0000000 Binary files a/thumbs/2048_DSC00131.JPG and /dev/null differ diff --git a/thumbs/2048_DSC03199.JPG b/thumbs/2048_DSC03199.JPG deleted file mode 100644 index 2fe077e..0000000 Binary files a/thumbs/2048_DSC03199.JPG and /dev/null differ diff --git a/thumbs/2048_DSC03327.JPG b/thumbs/2048_DSC03327.JPG deleted file mode 100644 index cd3446c..0000000 Binary files a/thumbs/2048_DSC03327.JPG and /dev/null differ diff --git a/thumbs/2048_DSC03355.JPG b/thumbs/2048_DSC03355.JPG deleted file mode 100644 index 0998f6a..0000000 Binary files a/thumbs/2048_DSC03355.JPG and /dev/null differ diff --git a/thumbs/2048_DSC04974.JPG b/thumbs/2048_DSC04974.JPG deleted file mode 100644 index 9ce0d7f..0000000 Binary files a/thumbs/2048_DSC04974.JPG and /dev/null differ diff --git a/thumbs/2048_DSC05239.JPG b/thumbs/2048_DSC05239.JPG deleted file mode 100644 index 64c12cc..0000000 Binary files a/thumbs/2048_DSC05239.JPG and /dev/null differ diff --git a/thumbs/2048_DSC06113.JPG b/thumbs/2048_DSC06113.JPG deleted file mode 100644 index 1a1962d..0000000 Binary files a/thumbs/2048_DSC06113.JPG and /dev/null differ diff --git a/thumbs/2048_DSC07322.JPG b/thumbs/2048_DSC07322.JPG deleted file mode 100644 index d184443..0000000 Binary files a/thumbs/2048_DSC07322.JPG and /dev/null differ diff --git a/thumbs/2048_DSC07471.JPG b/thumbs/2048_DSC07471.JPG deleted file mode 100644 index 1c2e059..0000000 Binary files a/thumbs/2048_DSC07471.JPG and /dev/null differ diff --git a/thumbs/256_1.JPG b/thumbs/256_1.JPG deleted file mode 100644 index 36aa764..0000000 Binary files a/thumbs/256_1.JPG and /dev/null differ diff --git a/thumbs/256_2.JPG b/thumbs/256_2.JPG deleted file mode 100644 index 9dac7bf..0000000 Binary files a/thumbs/256_2.JPG and /dev/null differ diff --git a/thumbs/256_3.JPG b/thumbs/256_3.JPG deleted file mode 100644 index 325fad3..0000000 Binary files a/thumbs/256_3.JPG and /dev/null differ diff --git a/thumbs/256_4.JPG b/thumbs/256_4.JPG deleted file mode 100644 index b7a7be4..0000000 Binary files a/thumbs/256_4.JPG and /dev/null differ diff --git a/thumbs/256_DSC00131.JPG b/thumbs/256_DSC00131.JPG deleted file mode 100644 index fc22db9..0000000 Binary files a/thumbs/256_DSC00131.JPG and /dev/null differ diff --git a/thumbs/256_DSC03199.JPG b/thumbs/256_DSC03199.JPG deleted file mode 100644 index 1f7e0f4..0000000 Binary files a/thumbs/256_DSC03199.JPG and /dev/null differ diff --git a/thumbs/256_DSC03327.JPG b/thumbs/256_DSC03327.JPG deleted file mode 100644 index 44ca744..0000000 Binary files a/thumbs/256_DSC03327.JPG and /dev/null differ diff --git a/thumbs/256_DSC03355.JPG b/thumbs/256_DSC03355.JPG deleted file mode 100644 index d9953e0..0000000 Binary files a/thumbs/256_DSC03355.JPG and /dev/null differ diff --git a/thumbs/256_DSC04974.JPG b/thumbs/256_DSC04974.JPG deleted file mode 100644 index 1ec06e0..0000000 Binary files a/thumbs/256_DSC04974.JPG and /dev/null differ diff --git a/thumbs/256_DSC05239.JPG b/thumbs/256_DSC05239.JPG deleted file mode 100644 index 8959051..0000000 Binary files a/thumbs/256_DSC05239.JPG and /dev/null differ diff --git a/thumbs/256_DSC06113.JPG b/thumbs/256_DSC06113.JPG deleted file mode 100644 index f719cbc..0000000 Binary files a/thumbs/256_DSC06113.JPG and /dev/null differ diff --git a/thumbs/256_DSC07322.JPG b/thumbs/256_DSC07322.JPG deleted file mode 100644 index 4023c5c..0000000 Binary files a/thumbs/256_DSC07322.JPG and /dev/null differ diff --git a/thumbs/256_DSC07471.JPG b/thumbs/256_DSC07471.JPG deleted file mode 100644 index 1b35314..0000000 Binary files a/thumbs/256_DSC07471.JPG and /dev/null differ diff --git a/thumbs/512_1.JPG b/thumbs/512_1.JPG deleted file mode 100644 index 62c8bcb..0000000 Binary files a/thumbs/512_1.JPG and /dev/null differ diff --git a/thumbs/512_2.JPG b/thumbs/512_2.JPG deleted file mode 100644 index e0d3435..0000000 Binary files a/thumbs/512_2.JPG and /dev/null differ diff --git a/thumbs/512_3.JPG b/thumbs/512_3.JPG deleted file mode 100644 index b7995d8..0000000 Binary files a/thumbs/512_3.JPG and /dev/null differ diff --git a/thumbs/512_4.JPG b/thumbs/512_4.JPG deleted file mode 100644 index 2b5d611..0000000 Binary files a/thumbs/512_4.JPG and /dev/null differ diff --git a/thumbs/512_DSC00131.JPG b/thumbs/512_DSC00131.JPG deleted file mode 100644 index 241e0c7..0000000 Binary files a/thumbs/512_DSC00131.JPG and /dev/null differ diff --git a/thumbs/512_DSC03199.JPG b/thumbs/512_DSC03199.JPG deleted file mode 100644 index f48b8c5..0000000 Binary files a/thumbs/512_DSC03199.JPG and /dev/null differ diff --git a/thumbs/512_DSC03327.JPG b/thumbs/512_DSC03327.JPG deleted file mode 100644 index 223ac8f..0000000 Binary files a/thumbs/512_DSC03327.JPG and /dev/null differ diff --git a/thumbs/512_DSC03355.JPG b/thumbs/512_DSC03355.JPG deleted file mode 100644 index c3fb778..0000000 Binary files a/thumbs/512_DSC03355.JPG and /dev/null differ diff --git a/thumbs/512_DSC04974.JPG b/thumbs/512_DSC04974.JPG deleted file mode 100644 index b4eddb5..0000000 Binary files a/thumbs/512_DSC04974.JPG and /dev/null differ diff --git a/thumbs/512_DSC05239.JPG b/thumbs/512_DSC05239.JPG deleted file mode 100644 index fe7ec41..0000000 Binary files a/thumbs/512_DSC05239.JPG and /dev/null differ diff --git a/thumbs/512_DSC06113.JPG b/thumbs/512_DSC06113.JPG deleted file mode 100644 index 5b7d963..0000000 Binary files a/thumbs/512_DSC06113.JPG and /dev/null differ diff --git a/thumbs/512_DSC07322.JPG b/thumbs/512_DSC07322.JPG deleted file mode 100644 index 8e911a0..0000000 Binary files a/thumbs/512_DSC07322.JPG and /dev/null differ diff --git a/thumbs/512_DSC07471.JPG b/thumbs/512_DSC07471.JPG deleted file mode 100644 index 1aa70c3..0000000 Binary files a/thumbs/512_DSC07471.JPG and /dev/null differ diff --git a/thumbs/768_1.JPG b/thumbs/768_1.JPG deleted file mode 100644 index 73960f8..0000000 Binary files a/thumbs/768_1.JPG and /dev/null differ diff --git a/thumbs/768_2.JPG b/thumbs/768_2.JPG deleted file mode 100644 index 45e0a9f..0000000 Binary files a/thumbs/768_2.JPG and /dev/null differ diff --git a/thumbs/768_3.JPG b/thumbs/768_3.JPG deleted file mode 100644 index f28bb3a..0000000 Binary files a/thumbs/768_3.JPG and /dev/null differ diff --git a/thumbs/768_4.JPG b/thumbs/768_4.JPG deleted file mode 100644 index 10a2872..0000000 Binary files a/thumbs/768_4.JPG and /dev/null differ diff --git a/thumbs/768_DSC00131.JPG b/thumbs/768_DSC00131.JPG deleted file mode 100644 index 82e875d..0000000 Binary files a/thumbs/768_DSC00131.JPG and /dev/null differ diff --git a/thumbs/768_DSC03199.JPG b/thumbs/768_DSC03199.JPG deleted file mode 100644 index c5071b9..0000000 Binary files a/thumbs/768_DSC03199.JPG and /dev/null differ diff --git a/thumbs/768_DSC03327.JPG b/thumbs/768_DSC03327.JPG deleted file mode 100644 index db2f031..0000000 Binary files a/thumbs/768_DSC03327.JPG and /dev/null differ diff --git a/thumbs/768_DSC03355.JPG b/thumbs/768_DSC03355.JPG deleted file mode 100644 index 7cb1763..0000000 Binary files a/thumbs/768_DSC03355.JPG and /dev/null differ diff --git a/thumbs/768_DSC04974.JPG b/thumbs/768_DSC04974.JPG deleted file mode 100644 index 0be6734..0000000 Binary files a/thumbs/768_DSC04974.JPG and /dev/null differ diff --git a/thumbs/768_DSC05239.JPG b/thumbs/768_DSC05239.JPG deleted file mode 100644 index d99446e..0000000 Binary files a/thumbs/768_DSC05239.JPG and /dev/null differ diff --git a/thumbs/768_DSC06113.JPG b/thumbs/768_DSC06113.JPG deleted file mode 100644 index 757579d..0000000 Binary files a/thumbs/768_DSC06113.JPG and /dev/null differ diff --git a/thumbs/768_DSC07322.JPG b/thumbs/768_DSC07322.JPG deleted file mode 100644 index 4ef579a..0000000 Binary files a/thumbs/768_DSC07322.JPG and /dev/null differ diff --git a/thumbs/768_DSC07471.JPG b/thumbs/768_DSC07471.JPG deleted file mode 100644 index 9b5dfee..0000000 Binary files a/thumbs/768_DSC07471.JPG and /dev/null differ