- Replace localStorage-based dev mode with VITE_DEVELOPER_MODE env var
- Remove setDeveloperMode function and localStorage logic
- Update Settings page to show status instead of toggle
- Add VITE_DEVELOPER_MODE to vite-env.d.ts type definitions
- Update .env_example with developer mode documentation
Developer mode is now controlled by setting VITE_DEVELOPER_MODE=true
in admin-frontend/.env file (requires rebuild to take effect)
- Add debug mode support for encoding statistics in API responses
- Debug info includes encoding length, min/max/mean/std, and first 10 values
- Frontend logs encoding stats to browser console when debug enabled
- Identify page enables debug mode by default
- Implement distance-based confidence thresholds for stricter matching
- Borderline distances require higher confidence (70-95% vs 50%)
- Applied when use_distance_based_thresholds=True (auto-match)
- Reduces false positives for borderline matches
- Dual tolerance system for auto-match
- Default tolerance 0.6 for regular browsing (more lenient)
- Run auto-match button uses 0.5 tolerance with distance-based thresholds (stricter)
- Auto-accept threshold updated to 85% (from 70%)
- Enhance pose detection with single-eye detection
- Profile threshold reduced from 30° to 15° (stricter)
- Detect single-eye visibility for extreme profile views
- Infer profile direction from landmark visibility
- Improved face width threshold (20px vs 10px)
- Clean up debug code
- Remove test photo UUID checks from production code
- Remove debug print statements
- Replace print statements with proper logging
backend/config.py - Added MIN_AUTO_MATCH_FACE_SIZE_RATIO = 0.005
backend/services/face_service.py - Multiple changes:
Added load_face_encoding() function (supports float32 and float64)
Added _calculate_face_size_ratio() function
Updated find_similar_faces() to filter small faces
Updated find_auto_match_matches() to exclude small reference faces
Fixed reference face quality calculation (use actual quality, not hardcoded 0.5)
Fixed duplicate detection (exclude faces from same photo)
Updated confidence threshold from 40% to 50%
Updated confidence calibration (moderate version)
backend/api/faces.py - Updated default tolerance to 0.5 for auto-match endpoints
backend/schemas/faces.py - Updated default tolerance to 0.5
admin-frontend/src/pages/AutoMatch.tsx - Updated default tolerance to 0.5
admin-frontend/src/api/faces.ts - Added tolerance parameter support
- Added functionality to create new tags and update existing tags in bulk.
- Implemented local state management for tags to improve user experience.
- Updated UI to allow users to enter new tag names alongside selecting existing ones.
- Ensured tags are reloaded in the parent component after creation for synchronization.
- Backend: Updated list_people_with_faces to search by first_name, middle_name, last_name, and maiden_name
- Frontend: Updated Modify page search UI and API client to support extended search
- Frontend: Updated Help page documentation for new search capabilities
- Infrastructure: Added start-api.sh wrapper script to prevent port 8000 binding conflicts
- Infrastructure: Updated PM2 config with improved kill_timeout and restart_delay settings
- Added new logging scripts for quick access to service logs and troubleshooting.
- Updated job streaming API to support authentication via query parameters for EventSource.
- Improved photo upload process to capture and validate EXIF dates and original modification times.
- Enhanced error handling for file uploads and EXIF extraction failures.
- Introduced new configuration options in ecosystem.config.js to prevent infinite crash loops.
- Local mode: Use File System Access API (Chrome/Edge/Safari) or webkitdirectory (Firefox) to read folders from browser
- Local mode: Browser reads files and uploads them via HTTP (no server-side filesystem access needed)
- Network mode: Type network paths or use Browse Network button for server-side scanning
- Add 'Start Scanning' button for local mode (separate from folder selection)
- Update API client to handle FormData uploads correctly (remove Content-Type header)
- Update Help page documentation with new scan mode options
- Add progress tracking for local file uploads"
- Introduced the exifread library to improve reliability in extracting EXIF date from images.
- Updated the extract_exif_date function to prioritize exifread for date extraction.
- Enhanced logging for successful and failed date extractions.
- Added validation for extracted dates to ensure they fall within a valid range.
- Improved logging for EXIF date extraction process, including success and failure messages.
- Updated methods to access EXIF data using modern and deprecated APIs.
- Added validation for extracted dates to ensure they fall within a valid range.
- Enhanced error handling for various exceptions during EXIF data access and date parsing.
- Add `browseDirectory` API endpoint to list directory contents.
- Create `FolderBrowser` component for user interface to navigate directories.
- Update `Scan` page to integrate folder browsing feature.
- Define `DirectoryItem` and `BrowseDirectoryResponse` schemas for API responses.
- Add Step 11 with Caddy and nginx configuration examples
- Update Step 2.2 to explain VITE_API_URL setup for proxy vs direct access
- Add common fix for API requests returning HTML instead of JSON
- Document the critical requirement to route /api/* before static files
This documents the fixes for HTTPS proxy deployment where API requests
were being served as HTML instead of being forwarded to the backend.
- Refactored video thumbnail generation logic to fetch thumbnails from the backend instead of generating them locally.
- Removed unused placeholder generation code for remote video URLs.
- Improved error handling for backend thumbnail fetch failures, returning appropriate responses.
- Enhanced caching strategy for fetched thumbnails to optimize performance.
These changes streamline the video thumbnail process and improve the overall user experience in the viewer interface.
- Added media_type to PhotoSearchResult interface to distinguish between images and videos.
- Updated PhotoViewer component to support video playback, including URL handling and preloading logic.
- Modified openPhoto function in Search page to open videos correctly.
- Enhanced backend API to serve video files with range request support for better streaming experience.
These changes improve the user experience by allowing seamless viewing of both images and videos in the application.
- Update API client to use relative paths when VITE_API_URL is empty
- Fix EventSource URLs to use window.location.origin for proxy compatibility
- Update image/video URL construction to use relative paths
- Add debug logging for API response troubleshooting
- All API calls now work correctly when served through HTTPS proxy
This fixes mixed content errors and allows the admin frontend to work
when accessed via HTTPS domain with reverse proxy (Caddy/nginx).
Reviewed-on: #7
## Changes
### Admin Frontend
- Fixed image URLs in multiple pages to use absolute backend URLs (port 8000)
- Added SPA routing support with --single flag in serve.sh
- Fixed photo links in Tags page to open in new window
### Viewer Frontend
- Fixed tag display in TagSelectionDialog to handle serialized tag names
- Fixed Prisma field names in tag-linkages route
- Created upload directory structure for pending photos
- Added a new API method to fetch photo images as blobs, enabling direct image retrieval.
- Updated image source paths in multiple components to use the base URL from the API client for consistency.
- Implemented cleanup for blob URLs in the ReportedPhotos component to prevent memory leaks.
- Improved user experience by displaying loading states for images in the ReportedPhotos component.
These changes improve the efficiency and reliability of photo handling in the admin interface.
This commit enhances the CI workflow by adding retry logic for package installation in the Debian environment. It addresses transient issues with Debian mirror sync by allowing up to three attempts to install necessary packages, improving the reliability of the CI process. Additionally, it cleans the apt cache before retrying to ensure a fresh attempt.
Also, it removes unused local patterns configuration from the Next.js setup and adds an unoptimized prop to the PhotoGrid component for better image handling based on the URL state.
- Implemented GET endpoint to retrieve photo details by ID, including associated faces and tags.
- Added GET endpoint for fetching adjacent photos based on date taken.
- Created POST endpoint to toggle favorites for photos, including user authentication checks.
- Developed POST and GET endpoints for reporting photos, with caching for report statuses.
- Introduced POST endpoint for bulk toggling of favorites.
- Implemented batch processing for checking report statuses.
- Added endpoint for managing tag linkages, including validation and error handling.
- Created upload endpoint for handling photo uploads with size and type validation.
These changes enhance the photo management capabilities of the application, allowing users to interact with photos more effectively.
- Add database connection health checks every 10 photos
- Add session refresh logic to recover from connection errors
- Improve error handling for database disconnections/timeouts
- Add explicit image cleanup to prevent memory leaks
- Add connection error detection throughout processing pipeline
- Gracefully handle database connection failures instead of crashing
Fixes issue where server would crash during long-running photo processing
tasks when database connections were lost or timed out.
This commit updates the .gitignore file to include the PM2 ecosystem configuration file, ensuring that server-specific paths are ignored during version control. This change helps maintain a cleaner repository by excluding environment-specific configurations.
This commit introduces a new `DEPLOYMENT_CHECKLIST.md` file that outlines the necessary steps for configuring server-specific settings after pulling from Git. It includes instructions for environment files, PM2 configuration, firewall rules, database setup, and building frontends. Additionally, it adds an example `ecosystem.config.js.example` file for PM2 configuration, providing a template for users to customize for their deployment environment. The `.gitignore` file is updated to include the new PM2 ecosystem config file.
This commit improves the CI workflow by modifying the output handling for linting and type-checking processes. It ensures that the results are captured correctly and displayed only if there are errors or warnings, enhancing clarity in the CI logs. Additionally, it updates the flake8 output section to provide a summary when no issues are found, further improving the visibility of code quality checks.
This commit updates the CI workflow to provide more comprehensive output for linting and type-checking processes. It modifies the commands to capture and display results, including error and warning counts, improving visibility into code quality issues. Additionally, it adds new flake8 error codes to ignore in the Python linting command, ensuring a more robust linting process.
This commit updates the Python linting rules by adding additional flake8 error codes to ignore in both the CI workflow and the Python linting command in package.json. It also modifies the ESLint configuration for the admin frontend to streamline the linting process by removing the max-warnings restriction.
This commit enhances the linting configurations by adding additional flake8 error codes to ignore in both the CI workflow and the Python linting command in package.json. It also modifies the ESLint configuration for the admin frontend to remove the report for unused disable directives, streamlining the linting process and reducing false positives.