- Introduced new image model picker component for selecting models and qualities.
- Updated image model utilities to handle new models and quality options.
- Implemented backend logic for validating image model options and handling requests.
- Added tests for image model selection, quality handling, and API interactions.
- Adjusted existing tests to accommodate new model features and ensure compatibility.
- Introduced new motion transitions for dialogs and overlays to improve user experience.
- Added `overlayIn`, `overlayOut`, `dialogIn`, and `dialogOut` animations in motion.ts.
- Updated various components (AccessGate, ConfirmDialog, EditGalleryDialog, etc.) to utilize the new animations.
- Ensured accessibility and usability with reduced motion preferences.
- Enhanced visual feedback for user interactions with overlays and dialogs.
- Added background options ('auto', 'opaque', 'transparent') to the prompt form.
- Updated the EditSourcePicker component for improved styling and user experience.
- Refactored the GalleryGrid component to utilize Lucide icons for better visual consistency.
- Enhanced the PromptForm layout for better organization and clarity.
- Introduced a new gallery job events handling mechanism for improved job status management.
- Updated translations for new background options in English and Chinese.
- Improved the theme store initialization to prevent flash of incorrect theme on load.
- Adjusted tests to validate new background options and UI changes.
- Created error context files for multiple failed tests related to gallery functionality.
- Each file includes instructions, test info, and detailed error logs to assist in debugging.
- Tests covered include:
- AI batch analysis using SSE without status polling
- Thumbnails ready state handling
- Batch upload cancellation and result retention
- Selection of filtered results through a batch token
- Handling legacy responses without filenames
- Metadata retention without reverse prompt action
- Add settings drawer test for saving NodeImage API key reference.
- Update mock API to include NodeImage settings and upload handling.
- Implement gallery tests for uploading images to NodeImage and handling results.
- Create NodeImage integration module with API client for image uploads.
- Define schemas for NodeImage upload responses.
- Add contract tests for NodeImage upload success and error handling.
- Implement NodeImage result dialog component for displaying upload results.
- Create settings section for NodeImage configuration in the UI.
- Introduce Svelte store for managing NodeImage upload results.
- Introduced ADMIN_KEY in .env.example and README.md for settings management step-up.
- Updated app_state.py to enforce ADMIN_KEY validation and log warnings if it matches ACCESS_KEY.
- Refactored access.py to utilize database operations for access failure tracking and lockout management.
- Enhanced prompt.py and settings.py to support asynchronous operations and validation.
- Implemented async validation for R2 endpoint URLs and upstream URLs across various modules.
- Added database schema for access failures and corresponding migration.
- Updated tests to cover new ADMIN_KEY functionality and access lockout persistence.
- Adjusted docker-compose.yml to include ADMIN_KEY environment variable.
- Introduced asynchronous database operation handling in job_executor.py to prevent blocking the event loop.
- Replaced synchronous calls with async counterparts in job scheduling and job queue services.
- Added a new blocking.py module to manage bounded executors for database and image processing tasks.
- Enhanced runtime metrics collection with new runtime_metrics.py for better observability.
- Updated Docker configuration to include new environment variables for performance tuning.
- Improved test coverage for performance regressions and database connection handling.
- Adjusted version check logic to utilize process caching for efficiency.
fix: update assistant health check to conditionally use API key
refactor: change gallery cache control to private and no-store
fix: update gallery job response to include cache control
feat: implement import upload reservation release in gallery jobs
fix: enhance job webhook URL validation for signing secret length
feat: add sensitive text redaction for webhook service errors
test: enhance contract tests for CSRF protection and secret registry
chore: update docker image to version 1.3.3
feat: extend API key source options in common types
feat: add secret ID field to various settings types
feat: implement admin access gate in workspace settings
refactor: update gallery store to use new search body structure
feat: add CDN signing secret handling for media URLs
feat: implement secret registry for managing sensitive values
test: add tests for secret registry functionality and error handling
- Added loading and error handling for original images in the Lightbox component.
- Introduced thumbnail previews while the original image loads.
- Updated translations for loading and error messages in English and Chinese.
- Added an end-to-end test to verify Lightbox behavior during image loading.
- Created a design system configuration file for consistent UI components.
- Documented design principles and product overview in new markdown files.
- Introduced `GalleryFilterToolbar` for filtering gallery items based on various criteria.
- Added `GalleryPagination` for navigating through gallery pages.
- Created settings sections for AI Assistant, Prompt Optimizer, and R2 Backup with appropriate input fields and health check functionality.
- Implemented lazy loading utility to handle component loading with retry logic.
- Enhanced existing tests to cover new features and ensure UI consistency across viewports.
- Removed unused function `get_generate_job_webhooks` from `generate.py`.
- Updated `update_overall_config` to use `normalize_secret_override` for better secret handling.
- Integrated `load_api_settings` in multiple settings routes to ensure fresh configurations are loaded.
- Enhanced `OverallConfig` to enforce secret management and added new configuration options for import limits.
- Improved validation for private IPs in `validators.py` to block non-global address space.
- Added new functions in `storage.py` for managing auxiliary state cleanup and generate job webhook handling.
- Implemented error sanitization for upstream error messages in `upstream_client.py`.
- Added tests for new functionality including import entry limits and generate job webhook persistence.
- Updated Docker Compose to include new environment variables for import limits.
- Changed `include_prompt` in `AssistantJobDiagnoseRequest` to `False` by default.
- Added tests for AI assistant request concurrency limit and response field truncation.
- Enhanced batch analysis job handling with concurrency limits and error handling.
- Updated Docker configuration to include new environment variables for concurrency and batch limits.
- Refactored frontend components to manage loading states and abort signals for assistant requests.
- Improved E2E tests for prompt optimizer drag functionality and bounding box checks.
- Implemented backend functionality for AI Assistant in `assistant_client.py`, including JSON request handling and response parsing.
- Created a new Svelte component `AiAssistantPanel.svelte` for user interaction with the AI Assistant, allowing prompt rewriting, checking, and optimization.
- Developed a Svelte store `assistant.ts` to manage state and API interactions for the AI Assistant features, including loading states and error handling.
- Added cursor-based pagination support in the gallery API, allowing for efficient navigation through large datasets.
- Introduced public image and thumbnail base URLs for easier access to generated images and thumbnails.
- Updated gallery entry schema to include optional image_url and thumbnail_url fields.
- Modified frontend components to utilize new image_url and thumbnail_url properties for improved image handling.
- Implemented tests to ensure the correctness of pagination and public URL features.
- Refactored storage and repository layers to support new functionality while maintaining backward compatibility.
- Introduced R2_SYNC_CONCURRENCY setting to control concurrent R2 HEAD/upload workers.
- Updated overall_config.py and settings.py to include new concurrency setting.
- Enhanced r2_sync.py to utilize ThreadPoolExecutor for concurrent processing of remote keys.
- Implemented batching for local sync candidates to optimize uploads.
- Added database support for tracking R2 sync state with new r2_sync_state table.
- Created functions to manage R2 sync state and determine changes for incremental sync.
- Updated frontend gallery actions to support native file saving for large downloads.
- Added tests to validate R2 sync state filtering and incremental candidate detection.
- Implement SQLite-backed SSE connection limiter to enforce global and per-IP subscriber caps.
- Update metrics snapshot to include worker-specific metrics and runtime coordination data.
- Add new database tables for managing SSE slots and worker metric snapshots.
- Introduce functions for acquiring, refreshing, and releasing SSE slots with appropriate error handling.
- Enhance observability metrics to track worker snapshots and connection states.
- Update overall configuration to include new Granian runtime parameters.
- Add tests for SSE slot management and background lease completion to ensure proper functionality.
- Added new database tables for image job units and worker heartbeats.
- Introduced functions to create, update, and manage image job units.
- Implemented heartbeat tracking for workers to monitor active units.
- Updated gallery and generate routers to handle multi-worker scenarios.
- Enhanced settings to configure image job unit lease and polling intervals.
- Modified Docker Compose to include new environment variables for image job management.
- Implemented R2 backup settings in the frontend, including UI elements for configuration and health checks.
- Added sync functionality for gallery images to Cloudflare R2, including progress tracking and error handling.
- Enhanced the backend with R2 sync logic, including health checks and object management.
- Updated tests to cover new R2 sync features and ensure proper functionality.
- Added boto3 dependency for R2 integration.
- Introduced functions for resolving and validating environment variable references.
- Updated API key, SOCKS5 proxy, and webhook URL handling to prefer environment variable references over plaintext.
- Added a configuration option to allow plaintext secrets with appropriate validation.
- Enhanced security by setting strict permissions on data directories and database files.
- Updated tests to ensure proper handling of environment variables and plaintext secrets.
- Modified frontend to clear prompt filter in gallery URL state management.
- Updated the prompt optimizer endpoint validation to normalize the API URL.
- Refactored health API URL validation to use a new normalization function and removed unnecessary checks.
- Changed image upload validation to utilize a new header-based validation method.
- Introduced new settings for maximum JSON body size and image pixel limits.
- Enhanced the image validation process to handle Pillow image limits and added checks for unsupported formats.
- Updated request models to enforce stricter validation rules and added field length constraints.
- Improved error handling for oversized JSON requests and invalid image uploads.
- Modified Nginx configuration to include security headers and proxy settings.
- Updated Docker Compose to include new environment variables for public origin and allowed hosts.
- Added a new endpoint for optimizing prompts at /api/prompt/optimize.
- Created a prompt optimizer client to handle requests to the external optimizer API.
- Introduced a PromptHelperPanel component for users to append common prompt tags.
- Defined prompt tag categories and their respective tags for enhanced user experience.
- Updated backend schemas to include prompt optimization request and response models.
- Enhanced settings management to support prompt optimizer configurations.
- Implemented frontend logic to utilize the new prompt optimizer and helper features.
- Added comprehensive documentation for the new functionality and its usage.
- Refactored `deliver_webhook` function in `webhook_service.py` to improve error handling and retry logic.
- Updated `docker-compose.yml` to allow dynamic configuration of `MAX_FILE_SIZE_MB` environment variable.
- Added new environment variables related to proxy settings in `ambient.d.ts` for SvelteKit.
- Enhanced error handling in `apiFetch` function in `client.ts` to include action context in thrown errors.
- Optimized `formatBeijingTime` function in `format.ts` by caching the date formatter.
- Simplified the main page layout in `+page.svelte` by integrating `PromptForm` and `EditSourcePicker` components.
- Introduced new `image_files.py` and `thumbnails.py` repositories for handling image file operations and thumbnail generation.
- Created `EditSourcePicker` and `PromptForm` components to streamline user input handling in the frontend.
- Added `ToastHost` component for displaying toast notifications in the UI.
- Introduced functionality to configure a global SOCKS5 proxy for upstream API requests.
- Added validation and normalization for SOCKS5 proxy URLs.
- Updated settings model to include upstream SOCKS5 proxy configuration.
- Enhanced API settings persistence to handle SOCKS5 proxy values.
- Modified API request handling to utilize the configured SOCKS5 proxy.
- Implemented masking for sensitive SOCKS5 proxy credentials in responses.
- Updated frontend components to manage and display SOCKS5 proxy settings.
- Added tests to ensure proper handling of SOCKS5 proxy configurations and validations.
- Created requirements-dev.txt for development dependencies including httpx and pytest.
- Established requirements.txt for backend dependencies such as FastAPI, Uvicorn, and Pydantic.
- Added nginx.conf to configure Nginx for serving the application, including API proxying and health check handling.