develop
13
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
21105b5e05 |
feat/Resource monitor/CU 86b7mzbtx (#33)
* docs(AGENTS.md): add guidance on using Chrome DevTools MCP tool for UI changes to improve development process and ensure accuracy in modifications * feat(docs): add Resource Monitor documentation and initial implementation details for the restart button feature docs(docs): update README.md to include Resource Monitor link and overview feat(resource_monitor.js): add resource monitor extension with restart button to ComfyUI top bar This extension enhances the user interface by integrating a resource monitor similar to Crystools, allowing for future CPU/RAM/GPU/VRAM monitoring capabilities. * feat: remove restart button extension and associated styles from Swiss Army Knife * feat(resource_monitor.js): implement restart functionality for ComfyUI server with user notification and error handling * fix(resource_monitor.js): change reload timeout from 2 seconds to 5 seconds to allow more time for reconnection feat(resource_monitor.js): use hard reload to bypass cache when reloading the page for better resource updates * feat(monitor): add resource monitor service and API endpoints for hardware monitoring feat(monitor): initialize resource monitor service in __init__.py and register API routes chore(monitor): create utility modules for hardware and GPU information handling feat(gpu_info.py): add GPU information collector to monitor VRAM, utilization, and temperature This new module collects GPU metrics using pynvml and torch, providing detailed information about available GPUs and their performance. It enhances monitoring capabilities for applications utilizing GPU resources. feat(monitoring): add hardware information collector and monitoring service to gather and broadcast system metrics - Introduce `hardware_info.py` to collect CPU, RAM, and disk usage metrics. - Implement `monitor_service.py` to periodically collect and broadcast hardware metrics. - Update `requirements.txt` to include necessary dependencies: psutil, pynvml, and py-cpuinfo. feat(tests): add test script for resource monitor backend to verify hardware monitoring functionality * docs(Resource Monitor Testing): add comprehensive testing guide for resource monitor implementation to ensure proper functionality and user experience feat(resource_monitor.js): enhance resource monitoring with dynamic display and color coding for CPU, RAM, and GPU metrics - Add styles for resource monitor display and labels. - Create functions to format and update monitor values. - Implement dynamic creation of monitor elements based on available hardware. - Fetch initial status and listen for updates via WebSocket to keep metrics current. * refactor(resource_monitor.js): move restart button to be added after monitors for better UI flow * feat(resource_monitor.js): enhance server restart process with health checks and user feedback style(resource_monitor.js): improve button styles and layout for better UX refactor(resource_monitor.js): extract GPU model name for clearer display in UI fix(resource_monitor.js): update formatting for memory and CPU display values * feat(resource_monitor): update UI to a floating HUD with live telemetry and inline restart workflow * docs(RESOURCE_MONITOR): update roadmap section with near-term enhancements and ProfilerX parity plan * style(resource_monitor.js): enhance restart button styles for improved UI aesthetics and usability * style(resource_monitor.js): update font size and line height for better readability in the restart button styles * style(resource_monitor.js): update CSS styles for swissarmyknife-monitor class to enhance layout and readability * docs(RESOURCE_MONITOR.md): update the ProfilerX Parity Plan section to include detailed implementation hooks and phases for better clarity and guidance style(resource_monitor.js): improve CSS styles for monitor content and labels to enhance readability and layout consistency * feat(resource_monitor.js): add background progress bar to monitor display for better visual feedback refactor(resource_monitor.js): update percentage thresholds for color changes in progress bar for improved clarity * style(resource_monitor.js): adjust divider styles for better alignment and visibility in resource monitor UI * style(resource_monitor.js): update styles for the restart button to enhance appearance and usability * style(resource_monitor.js): update styles for restart button to use flexbox for better alignment refactor(resource_monitor.js): simplify GPU and VRAM display labels for consistency and clarity * style(resource_monitor.js): update button styles to center content and adjust padding for better layout * style(resource_monitor.js): update restart button class for consistent styling * feat(profiler): implement profiling hooks and API for workflow performance tracking * feat(profiler): add workflow profiling functionality with UI integration - Implemented NodeProfile and WorkflowProfile classes for tracking execution time, VRAM/RAM usage, and cache hits. - Created ProfilerManager as a singleton to manage profiling sessions and history. - Added methods for starting and ending workflows and nodes, including VRAM and RAM tracking. - Introduced a new button in the resource monitor UI to access the profiler. - Developed a popup interface to display profiling statistics and node performance. - Implemented fetching and displaying of profiler data with retry logic. - Styled the profiler UI components for better user experience. - Added functionality to clear profiler history and view full history in a modal. * feat(prompt_builder): add Prompt Builder node for custom prompt composition feat(resource_monitor): enhance resource monitor UI with action button group and improved button styles * feat(profiler): enhance workflow profiling with console logging and data fetching improvements * feat(profiler): add execution time logging for node profiling and adjust popup positioning * feat(prompt_builder): add Prompt Builder node documentation and quick reference guide feat(media_describe): update override fields for backward compatibility and clarity * feat(media_describe): rename 'override_movement' to 'override_action' for consistency * feat(prompt_builder): update MediaDescribeOverrides documentation and add Prompt Builder node details * feat(prompt_builder): import Prompt Builder node and update mappings * feat(profiler): enhance profiling with VRAM tracking and execution timing for nodes * feat(prompt_builder): update Prompt Builder node to streamline input parameters and enhance documentation * feat(lora_info_extractor): add LoRA Info Extractor node for enriched metadata extraction and CivitAI lookup * feat(lora_info_extractor): integrate LoRA Info Extractor node and update documentation * refactor(civit_metadata_helper.py): improve code readability and structure by reformatting input types and updating docstrings feat(civit_metadata_helper.py): enhance metadata collection with structured outputs for better CivitAI submissions refactor(civit_metadata_helper.py): restructure collect_metadata method for better readability and maintainability feat(civit_metadata_helper.py): add type hints to method signatures for improved clarity and type safety chore(civit_metadata_helper.py): clean up code by removing commented-out sections and improving prompt handling * feat(civit_metadata_helper): add input normalization for metadata collection to handle various data types * feat(config_api.py): add profiler_enabled setting to configuration for enhanced performance tracking feat(prestartup.py): integrate profiler_enabled check to conditionally enable profiling functionality feat(swiss-army-knife.js): add UI option for enabling/disabling workflow profiler and sync with backend settings * feat(resource_monitor.js): enhance hard reload functionality with multiple methods for better browser compatibility style(resource_monitor.js): adjust popup positioning and styles for improved layout and user experience style(resource_monitor.js): update action button group to a vertical layout for better accessibility * feat(resource_monitor.js): refactor style injection to load external CSS for resource monitor and update monitor display logic * feat(resource_monitor): enhance documentation with known limitations and troubleshooting tips for profiling features * feat(profiler): add GPU model tracking and tooltip display for loaded models * feat(resource_monitor): add execution glow effect to monitor during workflow execution * feat(resource_monitor): enhance workflow execution glow effect with dual pseudo-elements for improved visual feedback * feat(resource_monitor): enhance duration formatting for total execution time in profiler stats * feat(resource_monitor): enhance monitor layout with inner wrapper for improved telemetry display * feat: Implement GPU memory scanning and enhanced model detection - Added direct GPU memory scanning in `profiler_core.py` to track loaded models using Python's garbage collector. - Removed fragile node-name tracking and implemented a caching mechanism for model scans. - Introduced comprehensive debug logging in `resource_monitor.js` for better troubleshooting. - Enhanced model grouping by extracting metadata from safetensors files, allowing for user-friendly model names and accurate VRAM reporting. - Implemented a five-phase approach to identify top-level models, calculate VRAM, and match with metadata. - Improved performance with caching strategies and optimized scanning logic to limit results to top 10 models per GPU. - Added tests and validation steps to ensure accurate model detection and reporting. * feat(resource_monitor): enhance logging with color-coded messages and improve VRAM tooltip functionality * feat(resource_monitor): implement OOM diagnosis and prevention features with enhanced logging and tooltip updates * feat(prestartup.py): implement OOM detection and logging for PyTorch errors to enhance error handling and debugging capabilities feat(profiler_core.py): add out-of-memory (OOM) detection and tracking fields to NodeProfile and WorkflowProfile for better resource management feat(profiler_core.py): implement OOM statistics update logic in ProfilerManager to track OOM occurrences and their details fix(profiler_core.py): ensure VRAM usage is monitored before node execution to prevent OOM issues feat(profiler_core.py): add OOM statistics and analytics to ProfilerManager for better monitoring and recommendations fix(profiler_core.py): include OOM summary in archived workflows to enhance data insights * fix(profiler_core.py): update OOM event to calculate execution time from start and end times for better performance tracking * feat(resource_monitor): add OOM analysis UI with detailed statistics and recommendations * feat(resource_monitor): implement comprehensive OOM detection and analysis features with frontend UI enhancements * feat(profiler): enhance profiler popup interaction with hover and timeout logic * fix(prompt_builder.py): change join delimiter from single newline to double newline for better prompt formatting * feat(docs): add detailed character analysis system prompt to structured output documentation for clarity and usage guidance feat(llm_studio_structured.py): update system prompt to reflect character analysis focus and improve output consistency docs(LLMStudioStructuredDescribe.md): create new documentation file for structured description node with usage tips and input/output details * feat(docs): add comprehensive guidelines for custom node documentation using Markdown * refactor: Remove retired Media Describe, LLM Studio Describe Nodes * refactor: rename docs to dev-docs * docs: update developer documentation for clarity and structure * refactor: remove filename generator, update video metadata, show text and control panel overview nodes * feat: add NSFW field to schemas and prompts for structured output nodes * ♻️ (llm_studio_structured.py): refactor nsfw field type from boolean to string for better clarity and flexibility in handling NSFW content descriptions. * ♻️ (llm_studio_structured.py): refactor max_tokens configuration to increase max limit and change step size for better granularity in token generation settings * ✨ (prompt_builder.py): add support for NSFW text override in PromptBuilder to enhance prompt customization options * feat(media-selection): enhance media source options to include Redgifs and Gfycat URLs for better media retrieval fix(media-selection): update error messages to reflect new media source options for clarity fix(llm_studio_structured.py): increase max_tokens default value to accommodate larger inputs test(redgifs): add unit tests for downloading media from Redgifs to ensure functionality and error handling test: add tests for direct download functionality from Redgifs to ensure reliability and correctness of media selection docs: update MediaSelection documentation to include support for direct Redgifs URLs in media sourcing options * feat: add script to fix ComfyUI base64 payloads by locating JPEG start and writing preview * feat(nodes): add ParseStringToBBox node to parse JSON-style bbox strings into float coordinates feat(nodes): update NODE_CLASS_MAPPINGS and NODE_DISPLAY_NAME_MAPPINGS to include ParseStringToBBox test: add unit tests for ParseStringToBBox to validate correct parsing and error handling * feat(parse_string_to_bbox): update bbox parsing to return integer coordinates and dimensions for better usability test(parse_string_to_bbox): update tests to validate new integer output format and add new test for rounding behavior test(parse_string_to_bbox_ints): add new tests for parsing bbox strings to integer coordinates and validate error handling * feat(docs): add detailed documentation for ParseStringToBBox node including inputs, outputs, and usage tips * ✨ (llm_studio_structured.py): introduce new structured description features for subject appearance and video frames 📝 (llm_studio_structured.py): update documentation for new input types and prompts ♻️ (llm_studio_structured.py): refactor node registration to include new combined structured describe class * ✨ (llm_studio_structured.py): introduce new SUBJECT_APPEARANCE_SCHEMA and VIDEO_FRAME_ARCHITECT_SCHEMA to enhance media description capabilities with detailed attributes for subject appearance and video frame analysis. * ✨ (media_describe): add LMStudioCombinedStructuredDescribe to exports for enhanced functionality ✨ (nodes): include LMStudioCombinedStructuredDescribe in mappings for improved node support * 📝 (llm_studio_structured.py): update prompts for clarity and detail to enhance user guidance and output structure ♻️ (llm_studio_structured.py): refactor combined text generation to improve readability and maintainability by using list comprehension * ✨ (llm_studio_structured.py): update schema presets and default values to enhance functionality ♻️ (llm_studio_structured.py): refactor frame extraction to return metadata instead of paths for better data handling 💡 (llm_studio_structured.py): improve content building logic to allow custom content for structured output 📝 (llm_studio_structured.py): update comments for clarity and maintainability of the code * ✨ (llm_studio_structured.py): add 'subject' field to VIDEO_FRAME_ARCHITECT_SCHEMA for better video description ♻️ (llm_studio_structured.py): update required fields in schema to include 'subject' and 'summary' for improved validation ♻️ (llm_studio_structured.py): refactor conditionals to handle new schema preset 'video_frame_architect' for enhanced functionality * ♻️ (llm_studio_structured.py): remove subject field from VIDEO_FRAME_ARCHITECT_SCHEMA to simplify schema requirements ♻️ (llm_studio_structured.py): update field assignments in LLMStudioStructuredDescribe to reflect schema changes * ✨ (llm_studio_structured.py): enhance NSFW summary handling by adding support for structured notes and summaries to improve content description clarity * ✨ (llm_studio_structured.py): add formatted_response to return types and names for improved output structure ♻️ (llm_studio_structured.py): refactor NSFW handling to separate plain and formatted responses for better clarity 💡 (llm_studio_structured.py): enhance response formatting for better readability and organization of output sections * ✨ (llm_studio_structured.py): add minItems and maxItems constraints to frames array to enforce validation rules on video frame data * 📝 (llm_studio_structured.py): add 'subject' property to VIDEO_FRAME_ARCHITECT_SCHEMA for better metadata representation 📝 (llm_studio_structured.py): update descriptions for NSFW analysis and frame metadata for clarity 📝 (llm_studio_structured.py): modify required fields in schema to include 'subject' and adjust 'has_nsfw' to 'summary' * ✨ (llm_studio_structured.py): add 'timestamp_seconds' and 'frames' to required fields to ensure necessary data is provided for video frame descriptions * ♻️ (llm_studio_structured.py): refactor frame index calculation to improve handling of invalid fps and ensure proper frame extraction ✨ (llm_studio_structured.py): add fallback for fps and enhance frame index tracking for better frame management * 💡 (llm_studio_structured.py): add debug logging for frame indices and file details to assist in troubleshooting 🐛 (llm_studio_structured.py): improve verbose logging for base64 encoding to catch potential issues with short encodings * ✨ (azure_queue_publisher.py, .env.example, config_api.py, nodes.py, swiss-army-knife.js): introduce Azure Queue Publisher node to publish job events to Azure Storage Queue for event-driven architecture 📝 (requirements.txt): add azure-storage-queue dependency to support Azure Queue operations 🔧 (config_api.py): update config API to include Azure job events queue in settings 💡 (swiss-army-knife.js): add function to retrieve Azure job events queue from settings for better integration ♻️ (various files): refactor code for improved readability and maintainability, including consistent formatting and logging updates * ✨ (routes): add event routes for emitting events and health check to enhance API functionality 🐛 (azure_queue_publisher.py): add prompt_id as an optional parameter to improve event data structure ♻️ (azure_queue_publisher.py): change character_index condition to allow zero value for better logic 📝 (init.py): register new event routes in the application to ensure proper routing * ✨ (events.py): enhance event route registration to prefer PromptServer API 🐛 (events.py): add fallback to aiohttp router and improve error handling 💡 (events.py): add diagnostics logging for registered routes in debug mode * ✨ (events.py): enhance event route registration with best-effort fallbacks to improve reliability and diagnostics in case of registration failures * ✨ (routes/events.py): refactor event route registration to use ComfyUI's recommended pattern for better maintainability and clarity 📝 (init.py): update event route registration to auto-import events module for automatic route initialization and improve error handling * ♻️ (events.py): refactor to remove os dependency and use Swiss Army Knife config system for connection string and queue name retrieval to improve maintainability and flexibility * ✨ (execution_hooks): add execution hooks for automatic event publishing to Azure Queue during workflow execution 📝 (init.py): import execution hooks to register them into ComfyUI execution lifecycle and handle import exceptions gracefully * ✨ (execution_hooks.py): refactor execution hooks to integrate with PromptServer's message bus for improved event handling 🐛 (execution_hooks.py): update event handling methods to manage prompt lifecycle and error messages more effectively 📝 (execution_hooks.py): enhance module documentation for clarity on functionality and usage * 💡 (execution_hooks.py): add comments to clarify the behavior of execution events and their handling * ✨ (events.py): optimize JSON serialization by using custom separators for smaller payloads 💡 (events.py): add logging for published queue payload to improve traceability * ✨ (media_selection.py): add support for Azure Blob Storage as a media source with validation and downloading functionality * ✨ (docs, config_api, media_describe): add support for configurable LM Studio base URL to enhance flexibility and usability 📝 (docs): update documentation to reflect changes in base_url input and its usage ♻️ (config_api, media_describe): refactor code to resolve LM Studio base URL from settings or environment variables for better maintainability * 📝 (STRUCTURED_OUTPUT_IMPLEMENTATION.md): update documentation to clarify LM Studio endpoint usage and remove base_url parameter from input definitions for consistency ♻️ (llm_studio_structured.py): refactor code to remove base_url parameter from describe_image and describe_video methods, relying on global LM Studio endpoint configuration ✨ (swiss-army-knife.js): add debug logging for model dropdown interactions to enhance traceability and debugging capabilities in the UI * ✨ (azure_queue_publisher.py, execution_hooks.py, events.py): add audit logging for event publishing to track success and failure 💡 (execution_hooks.py): refactor logging logic into a separate method for clarity and reuse 📝 (azure_queue_publisher.py, execution_hooks.py, events.py): improve code comments for better understanding of audit logging functionality * ♻️ (init.py, azure_queue_publisher.py, execution_hooks.py, events.py): refactor import paths to ensure package root is discoverable for modules 💡 (init.py, azure_queue_publisher.py, execution_hooks.py, events.py): add comments to clarify the purpose of modifying sys.path for module loading * ♻️ (init.py, azure_queue_publisher.py, execution_hooks.py, events.py): refactor import statements to use relative imports for better module organization and maintainability * ✨ (audit_logger_loader.py): introduce a helper module to load audit_logger 🐛 (azure_queue_publisher.py, execution_hooks.py, events.py): update import paths to use the new audit_logger_loader for better module management * ✨ (init.py): introduce dynamic loading of the lib package to handle hyphenated module names and improve import reliability ♻️ (audit_logger_loader.py): remove redundant audit logger loader module as its functionality is now integrated into __init__.py 🔧 (azure_queue_publisher.py, execution_hooks.py, events.py): update imports to reference the new lib package structure for audit logger * ✨ (audit_logger): introduce AuditLogger class for structured logging of job audit events ♻️ (imports): refactor import statements to use relative imports for consistency 📝 (gitignore): update .gitignore to exclude specific directories and files 🔧 (pyproject.toml): update package configuration to include "routes" package 📝 (init.py): remove unused code and clean up __init__.py for better readability * ✨ (app_insights.py): add Application Insights logging and tracing support to monitor application performance and errors ♻️ (events.py): integrate Application Insights logger into event emission process for better observability of events and errors * ♻️ (azure_queue_publisher.py, execution_hooks.py, audit_logger.py, events.py): refactor timestamp formatting to use 'Z' instead of '+00:00' for better compatibility with ISO 8601 ♻️ (azure_queue_publisher.py, execution_hooks.py, audit_logger.py): refactor JSON serialization to use custom separators for more compact output * ♻️ (execution_hooks.py, events.py): refactor queue name retrieval to use a fallback with or operator for better clarity and consistency * ✨ (azure_queue_publisher.py, execution_hooks.py, audit_logger.py, events.py): add TextBase64EncodePolicy to QueueClient initialization for better message encoding 💡 (azure_queue_publisher.py, execution_hooks.py, audit_logger.py, events.py): update timestamp formatting to include seconds for improved precision * ✨ (civit_metadata_helper.py): add optional JSON fields for subject and video prompts to enhance metadata collection * ✨ (civit_metadata_helper.py): add JSON parsing for subject and video prompts to handle structured data inputs 📝 (civit_metadata_helper.py): update return structure to include parsed subject and video prompts for better data handling * ✨ (init.py, config_api.py, upload_job_to_azure.py): introduce Upload Job to Azure node to upload files to Azure Blob Storage and create job documents in CosmosDB ♻️ (init.py): rename Azure Storage Upload node to Upload Job to Azure for clarity 📝 (upload-job-to-azure.md): add documentation for Upload Job to Azure node detailing its purpose, inputs, outputs, and configuration 🔧 (config_api.py): add configuration settings for Azure Cosmos DB connection and job container 🐛 (azure_storage_upload.py): remove obsolete Azure Storage Upload node code as it is replaced by the new Upload Job to Azure node * ✨ (execution_hooks.py, llm_studio_structured.py, cosmos_utils.py): add functionality to push structured analysis results to CosmosDB for job tracking 📝 (execution_hooks.py): add get_current_prompt_id function to retrieve the current job ID ♻️ (llm_studio_structured.py): refactor code to utilize current job ID for metadata updates in CosmosDB 📝 (cosmos_utils.py): add utility functions for interacting with Azure CosmosDB and Blob Storage * ♻️ (cosmos_utils.py): refactor container name from "media" to "media-files" for better clarity and organization * ✨ (llm_studio_structured.py): update keys in cosmos_meta to use snake_case for consistency 📝 (cosmos_utils.py): replace logger.debug with print statements for better visibility of errors and status messages * ✨ (Dockerfile, requirements.txt, swiss-army-knife.js): add Azure Cosmos DB support to enhance data storage capabilities and improve integration with Azure services. * 💡 (cosmos_utils.py): add comments to clarify the use of 'id' as partition key ✅ (cosmos_utils.py): update replace_item method to include partition_key for consistency * 💡 (cosmos_utils.py): update comments to clarify the use of jobId field as partition key 🐛 (cosmos_utils.py): fix partition key usage in replace_item to use jobId field value for consistency * ✨ (cosmos_utils.py): add support for PartitionKey to handle undefined partition keys in CosmosDB 🐛 (cosmos_utils.py): improve error handling and logging for document queries and updates 💡 (cosmos_utils.py): clarify comments regarding partition key discrepancies and operations |
||
|
|
1808d2ca2a |
Feat/Update-Media-Describe-nodes-to-structured-json/CU-86b7myj40 (#32)
* ⬆️ (pyproject.toml): bump version from 2.0.1 to 2.0.2 to reflect new updates and improvements * ⬆️ (pyproject.toml): bump version from 2.0.2 to 2.0.3 to reflect new updates and improvements * ✨ (debug_civitai.py): enhance environment check with improved output formatting and clarity ♻️ (debug_civitai.py): refactor print statements for consistency and readability ♻️ (civitai_service.py): refactor debug print statements for clarity ♻️ (lora_hash_cache.py): refactor code for better readability and maintainability ♻️ (lora_manager): refactor various files for improved code structure and clarity 📝 (swiss-army-knife.js): add display widgets for dimensions in media processing results ✨ (swiss-army-knife.js): introduce functionality to update dimensions display after execution * ✨ (CivitAI Service Consolidation): consolidate two CivitAI service implementations into a single service for improved maintainability and functionality 📝 (CIVITAI_SERVICE_CONSOLIDATION.md): add documentation for the consolidation of CivitAI services, detailing the problem, solution, and benefits 📝 (CLEAR_VIDEO_PREVIEW_FUNCTION_ORDER_FIX.md): add documentation for fixing function order issue in clearVideoPreview method 📝 (DIMENSIONS_DISPLAY_TROUBLESHOOTING.md): add troubleshooting guide for dimensions display widget in GeminiUtilMediaDescribe node 📝 (DIMENSIONS_DISPLAY_WIDGET.md): add documentation for the new dimensions display widget in GeminiUtilMediaDescribe node ♻️ (civitai_service.py): refactor CivitAI service to include trigger word extraction methods and improve error handling ♻️ (lora_hash_cache.py): refactor hash calculation methods for better readability and maintainability 🐛 (swiss-army-knife.js): fix function definition order for clearVideoPreview to prevent TypeError 🐛 (web/js/swiss-army-knife.js): update dimensions display logic to handle multiple message structures and improve logging 🐛 (web/js/swiss-army-knife.js): ensure dimensions display widget updates correctly after node execution * refactor: move ./utils to ./nodes * ✨ (media_describe): introduce GeminiUtilOptions node for configuring Gemini API media analysis ♻️ (media_describe): refactor GeminiMediaDescribe to use GeminiUtilOptions for improved modularity 📝 (media_describe): update module documentation to reflect changes in node functionality * ✨ (swiss-army-knife.js): add functionality to persist and restore reddit_url widget value for better user experience 💡 (swiss-army-knife.js): add debug logs for tracking reddit_url widget value during persistence and restoration * ♻️ (swiss-army-knife.js): refactor reddit_url restoration logic to store and restore it separately for better clarity and maintainability * ✨ (init.py, config_api.py, swiss-army-knife.js): add DEBUG mode support to control console logging via environment variable 📝 (DEBUG_MODE_IMPLEMENTATION.md): document the implementation details and usage of DEBUG mode 🔧 (init.py): register config API routes to expose DEBUG setting to frontend ♻️ (swiss-army-knife.js): refactor console logging to use conditional debugLog function for cleaner output * ✨ (media_describe): add GeminiMediaDescribe class for media analysis using Gemini API 📝 (media_describe): update __init__.py to include GeminiMediaDescribe in exports ♻️ (nodes): refactor nodes.py to remove unused imports and classes, improving code clarity and maintainability * ♻️ (media_describe): refactor class name from GeminiMediaDescribe to MediaDescribe for consistency and clarity 📝 (media_describe): update __all__ exports to reflect the new class name in the module * ✨ Update documentation and rename GeminiMediaDescribe to MediaDescribe - Renamed the class `GeminiMediaDescribe` to `MediaDescribe` for better clarity and organization. - Updated all references in the codebase and documentation to reflect the new class name. - Ensured backward compatibility by keeping the ComfyUI node ID as `GeminiUtilMediaDescribe`. - Improved logging messages to use the new class name for consistency. * 📝 (nodes.py): update NODE_DISPLAY_NAME_MAPPINGS to use simplified node title for better clarity and consistency * ✨ (GEMINI_API_RETRY_LOGIC.md): add documentation for new retry logic implementation for Gemini API to handle overload errors ♻️ (mediia_describe.py): refactor image and video processing to use new retry logic for Gemini API calls, improving reliability and user experience during transient errors * ✨ (JAVASCRIPT_NODE_NAME_UPDATE.md, swiss-army-knife.js): update all JavaScript references from GeminiUtilMediaDescribe to MediaDescribe to align with Python backend changes and ensure proper functionality of widgets and event handlers. * ✨ (CACHE_VERIFICATION_SUMMARY.md): add cache verification summary to document the fix for the caching mechanism ✨ (CACHE_VERIFICATION_OCTOBER_2025.md): create detailed documentation for cache mechanism verification and findings 🐛 (mediia_describe.py): fix caching issue by including `replace_action_with_twerking` in cache options ✅ (test_cache_verification.py): add comprehensive test suite to verify caching mechanism functionality * ♻️ (config_api.py, mediia_describe.py): remove unnecessary blank lines to improve code readability ✨ (pyproject.toml): update version from 2.0.3 to 2.1.0 to reflect new features and improvements 📝 (test_cache_verification.py): update print statements for consistency and clarity in test outputs * ⬆️ (pyproject.toml): upgrade project version from 2.1.0 to 2.2.1 to reflect new changes and improvements * 📝 Update documentation: add critical instructions for activating the virtual environment before running Python commands to ensure proper setup and avoid errors during development and testing. * ✨ (control_panel): introduce Control Panel node to display workflow information 📝 (init.py): add import for Control Panel node and handle ImportError gracefully ♻️ (init.py): update NODE_CLASS_MAPPINGS and NODE_DISPLAY_NAME_MAPPINGS to include Control Panel node * ✨ (docs): add comprehensive documentation for the new `all_media_describe_data` output feature in MediaDescribe node to enhance usability and understanding 📝 (docs): create Cache Verification Summary to document the verification process and fixes applied to the caching mechanism 📝 (docs): add Control Panel Implementation documentation to detail the features and usage of the Control Panel node ♻️ (media_describe.py): refactor MediaDescribe node to include an aggregated output for better data presentation ♻️ (control_panel.py): refactor Control Panel node to support dynamic wildcard inputs and improve data display functionality 🗑️ (example_node.py): remove outdated example node file to clean up the project structure * ✨ (Control Panel): add documentation for JSON data format fix and update Control Panel layout ♻️ (mediia_describe.py): refactor MediaDescribe node to output structured JSON data instead of formatted string ♻️ (swiss-army-knife.js): refactor Control Panel to display data in a two-column layout for better organization and readability * ✨ (video preview): implement Video Preview node with Python backend and JavaScript widget for displaying video inputs with interactive controls 📝 (documentation): add comprehensive documentation for Video Preview node, including usage, features, and implementation details ♻️ (video preview): reorganize JavaScript widget into dedicated directory for better structure and scalability 🐛 (video preview): fix TypeError in Video Preview node by ensuring all return values are lists for ComfyUI compatibility ✅ (video preview): validate and test Video Preview node functionality, ensuring all features work as intended * Add Video Preview Widget implementation - Introduced a new Video Preview widget in `web/js/video_preview/` for ComfyUI. - Implemented the main functionality in `video_preview.js`, allowing for interactive video previews with auto-sizing, mute/unmute, and error handling. - Removed the old implementation from `web/video_preview/video_preview.js`. - Updated README.md to document the purpose, integration, features, and usage of the new widget. * ✨ (video_preview.js): add video controls and timeline scrubber for better user experience ♻️ (video_preview.js): refactor video preview container to use flexbox for layout 📝 (video_preview.js): update comments for clarity and maintainability * 💡 (video_preview.js): add debug mode for verbose logging to assist in troubleshooting and development * ⬆️ (pyproject.toml): upgrade project version from 2.2.1 to 2.3.0 to reflect new changes and improvements * Refactor video preview handling and path normalization - Removed the clearVideoPreview method as it was redundant and not utilized effectively in the media state clearing process. - Updated the clearAllMediaState method to directly clear video-related state without calling the removed method. - Enhanced video path normalization in video_preview.js to handle multiple possible prefixes, improving compatibility with different deployment environments. * ⬆️ (pyproject.toml): bump version from 2.3.0 to 2.3.1 to reflect new changes and improvements * ⬆️ (pyproject.toml): bump version from 2.3.1 to 2.3.2 to reflect new changes 💡 (video_preview.js): enable debug mode for verbose logging during development * ✨ (env.example, UNIFIED_DEBUG_SYSTEM.md, VIDEO_PREVIEW_PROGRESSIVE_LOADING.md, debug_utils.py, video_preview.js): introduce a unified debug logging system and progressive video loading to enhance user experience and debugging capabilities 📝 (env.example): add DEBUG environment variable to enable verbose logging 📝 (UNIFIED_DEBUG_SYSTEM.md): document the new centralized debug logging system and its usage 📝 (VIDEO_PREVIEW_PROGRESSIVE_LOADING.md): document the implementation of progressive video loading for improved user experience ♻️ (debug_utils.py, video_preview.js): refactor debug logging to use centralized utilities and implement progressive loading logic * ⬆️ (pyproject.toml): bump version from 2.3.2 to 2.3.3 to reflect new updates and improvements * feat(ui-widgets): Implement Control Panel JSON Data Format Fix - Resolved issue with Control Panel displaying concatenated string instead of individual fields from MediaDescribe node. - Updated backend to send structured JSON data instead of formatted string. - Enhanced frontend to parse JSON and display fields in a two-column layout for improved readability. fix(ui-widgets): Add Dimensions Display Widget Troubleshooting Guide - Created a comprehensive troubleshooting guide for the Dimensions Display Widget. - Included quick verification steps, common issues, and detailed testing procedures. docs(ui-widgets): Document Dimensions Display Widget Implementation - Added documentation for the Dimensions Display Widget, detailing its features and UI behavior. - Included examples and troubleshooting tips for users. fix(ui-widgets): Final String Widget Population Fix - Fixed issue where final_string widget was not being updated post-execution. - Implemented onExecuted methods to ensure widget reflects the generated description. docs(ui-widgets): Update README with UI Widgets Documentation - Compiled and organized documentation for various UI widgets. - Included links to related documentation and implementation patterns. feat(ui-widgets): Restore Seed Widget Functionality - Reintroduced seed widget for MediaDescribe node to enable randomization. - Added functionality to force re-execution based on seed changes. fix(ui-widgets): Address Widget Visibility Issues - Resolved issues with unwanted widgets appearing in MediaDescribe node. - Improved widget management to ensure correct visibility based on media type and source. fix(ui-widgets): Implement Widget State Persistence - Added serialization for widget visibility state in GeminiUtilMediaDescribe node. - Ensured UI state is preserved across workflow saves and reloads. * ✨ (copilot-instructions.md): add ComfyUI extension development guide to provide comprehensive instructions for backend and web extension development, documentation organization, and essential workflows. This enhances developer onboarding and ensures consistency in project contributions. * ✨ (video_preview_native.py): introduce Video Preview Node for displaying multiple video inputs side by side to enhance user experience and comparison capabilities * ✨ (Subreddit Randomization Feature): introduce a new feature to randomize media posts from subreddits to enhance user experience and content variety 📝 (SUBREDDIT_RANDOMIZATION_FEATURE.md): add documentation for the new subreddit randomization feature, detailing its usage, changes, and technical details ♻️ (mediia_describe.py): refactor media handling to include a new method for fetching random posts from subreddits, improving code organization and functionality 🔧 (ui-react_backup): remove outdated UI React backup files to clean up the project and reduce clutter * ♻️ (swiss-army-knife.js): refactor formatField function to add skipTruncate parameter for better control over value truncation ✨ (swiss-army-knife.js): update right column population to avoid truncation for final_string field for improved data visibility * ⬆️ (pyproject.toml): bump version from 2.3.3 to 2.3.4 to reflect new changes and improvements * ♻️ (swiss-army-knife.js): refactor Subreddit URL widget handling to improve widget management and visibility based on media source selection. This change enhances the user experience by ensuring that the Subreddit URL widget is dynamically shown or hidden according to the selected media source, allowing for a more intuitive interaction with the application. * ⬆️ (pyproject.toml): bump version from 2.3.4 to 2.3.5 to reflect new changes and improvements * ✨ (pyproject.toml): bump version from 2.3.5 to 2.3.6 to reflect new changes ✨ (swiss-army-knife.js): add subreddit_url widget handling for improved state persistence and restoration * feat: added overrides and updated system prompt for json output * chore: cleanup docs * chore: update docs * 📝 Update copilot-instructions.md: add detailed specifications for pyproject.toml to guide users in creating custom nodes ✨ Add requirements.txt: include essential dependencies for the project to ensure proper functionality and ease of setup * ⬆️ (pyproject.toml): bump version from 2.4.0 to 2.4.1 to reflect new changes and improvements * ⬆️ (pyproject.toml): bump version from 2.4.1 to 2.4.2 to reflect new changes 📝 (pyproject.toml): update license format to use file reference for clarity 📝 (pyproject.toml): add classifiers for better package categorization 🔧 (pyproject.toml): change dependencies to be dynamically loaded from requirements.txt for better management 💡 (pyproject.toml): update display name for improved branding and recognition * ✨ (install.py): add installation script for ComfyUI-SwissArmyKnife custom nodes to automate dependency installation ⬆️ (pyproject.toml): bump version from 2.4.2 to 2.5.0 to reflect new features and improvements * ✨ (media_selection): introduce new Media Selection nodes for advanced video processing workflows, including Media Selection, Frame Extractor, and Multi-Caption Combiner to enhance modularity and flexibility in media handling. 📝 (README): add comprehensive documentation for new nodes, including usage examples, workflow guides, and technical details to assist users in implementing the new features effectively. 🐛 (media_selection): fix issues with media type detection and improve error handling for media selection from Reddit and local paths to ensure robustness and user-friendly feedback. ✅ (test_nodes): add test script for Media Selection and Frame Extraction nodes to validate functionality and ensure reliability of the new features. 💡 (subreddit_randomization): implement a new feature for randomizing media selection from subreddits, enhancing user experience by providing more diverse media sources. ♻️ (frame_extractor): refactor frame extraction logic to support multiple extraction methods and improve performance and usability. 🔧 (configuration): update configuration files to accommodate new nodes and ensure compatibility with existing workflows. * ⬆️ (pyproject.toml): bump version from 2.5.0 to 2.5.1 to reflect new changes and improvements * ✨ (frame_extractor.py): add functionality to create a unique directory for frames 🐛 (frame_extractor.py): update return types and names to include frames_directory ⬆️ (pyproject.toml): bump version to 2.5.2 to reflect new features and fixes * ✨ (Dockerfile, docker-compose.yml): add httpx to requirements for enhanced HTTP requests support ✨ (Dockerfile, docker-compose.yml): update CMD to include --base-directory for better temp file management 📝 (TEMP_DIRECTORY_UTILS.md): add documentation for temporary directory utilities to explain usage and benefits ♻️ (temp_utils.py): create utility functions for ComfyUI-aware temporary file and directory management ♻️ (media_selection, media_describe, frame_extractor): refactor to use ComfyUI-aware temp utilities for better file handling 📝 (media-selection README, WORKFLOW_EXAMPLE.md, REDDIT_POST_MEDIA_SOURCE.md): update documentation to reflect changes in temp file management 💡 (media_selection): add comments to clarify the use of ComfyUI-aware temp directory functions * ⬆️ (pyproject.toml): bump version from 2.5.2 to 2.5.3 to reflect new updates and improvements * ✨ (UI_DYNAMIC_FIELDS.md): add documentation for Media Selection node's dynamic field visibility to enhance user understanding ⬆️ (pyproject.toml): bump version from 2.5.3 to 2.5.4 to reflect new features ♻️ (swiss-army-knife.js): implement dynamic field visibility for MediaSelection node to improve UI clarity and user experience * ✨ (swiss-army-knife.js): add image and video upload handlers with state clearing 💡 (swiss-army-knife.js): implement clearCurrentMediaState method to reset state before uploads 📝 (swiss-army-knife.js): improve user experience by providing feedback during uploads * ✨ (helper_nodes.py, gemini_util_options.py, media_describe_overrides.py, mediia_describe.py, prompt_breakdown.py, frame_extractor.py, media_selection.py, multi_caption_combiner.py, nodes.py, control_panel.py, video_preview.py, video_preview_native.py, swiss-army-knife.js): update categories to include "Swiss Army Knife 🔪" for better organization and clarity ♻️ (mediia_describe.py): refactor media processing logic to streamline handling of media paths and improve code readability 📝 (mediia_describe.py): update function signatures and documentation to reflect changes in parameters and improve clarity for future developers ✨ (swiss-army-knife.js.bak): add Swiss Army Knife extension with various media handling features to enhance user experience and functionality. This includes dynamic widget management, media upload capabilities, and improved logging for debugging. The extension aims to streamline media processing and provide a more interactive interface for users. * ✨ (media_selection.py): add image resizing functionality to MediaSelection class to enhance media processing capabilities 🔧 (pyproject.toml): update version to 2.5.5 to reflect new features and changes ✨ (swiss-army-knife.js): update extension version to 2.5.5 and improve debug logging for better traceability * ✨ (media-selection): add video resizing functionality to Media Selection node to enhance media processing capabilities 📝 (README.md): update documentation to include new resize options and modes for clarity 📝 (VIDEO_RESIZE_IMPLEMENTATION.md): create detailed implementation guide for video resizing feature 📝 (VIDEO_RESIZE_SUMMARY.md): add quick summary of video resizing functionality and usage examples ♻️ (media_selection.py): refactor video processing methods to support resizing and maintain code consistency ⬆️ (pyproject.toml): bump version to 2.5.6 to reflect new features 🔧 (swiss-army-knife.js): update extension version to match pyproject.toml version for consistency * ♻️ (mediia_describe.py): remove unused variables system_prompt and user_prompt to clean up code ⬆️ (pyproject.toml): bump version from 2.5.6 to 2.5.7 to reflect changes ♻️ (swiss-army-knife.js): simplify field formatting by removing prompt handling logic to enhance readability * ✨ (CivitMetadataHelper): introduce CivitAI metadata helper node to collect and format metadata for submissions 📝 (init.py): add import statements for CivitMetadataHelper node and handle import errors ♻️ (swiss-army-knife.js): update node registration to include CivitMetadataHelper and add metadata preview functionality ⬆️ (pyproject.toml): bump version to 2.5.8 to reflect new features and updates * ✨ (civit_metadata_helper.py): add seed parameter for random generation to enhance control over output 📝 (civit_metadata_helper.py): update documentation to include seed parameter in metadata collection 🔧 (pyproject.toml): bump version from 2.5.8 to 2.5.9 to reflect new feature addition ✨ (swiss-army-knife.js): integrate seed input value into the application for user configuration 💡 (swiss-army-knife.js): add seed display in preview output for better user feedback * ✨ (civit_metadata_helper.py): add control_after_generate field to metadata for better configuration options ⬆️ (pyproject.toml): bump version to 2.5.10 to reflect new features and changes * ✨ (control_panel.py, swiss-army-knife.js): enhance control panel layout to a three-column format for better organization of inputs and outputs 📝 (control_panel.py): update documentation to reflect new input fields and layout structure 💡 (swiss-army-knife.js): improve comments to clarify the purpose of each column in the control panel * 🚀 (pyproject.toml): bump version from 2.5.10 to 2.5.11 to release new features and improvements * ✨ (gemini_util_options.py): implement environment variable fallback for API key to enhance security ⬆️ (pyproject.toml): bump version to 2.5.12 to reflect recent changes ✨ (gemini_options_security.js): add security extension to prevent saving API keys in cleartext * ✨ (pyproject.toml): bump version from 2.5.12 to 2.5.13 to reflect updates ♻️ (swiss-army-knife.js): refactor layout of columns to improve UI structure and readability * ✨ Add restart button feature to ComfyUI topbar menu - Introduce a new API endpoint `/swissarmyknife/restart` to handle server restarts. - Modify `__init__.py` to register the new restart API routes. - Update `swiss-army-knife.js` to include a restart button in the topbar menu with a confirmation dialog and toast notifications. - Create a new CSS file for styling the restart button to enhance user experience. - Implement error handling for the restart process to inform users of any issues. This feature allows users to easily restart the ComfyUI server from the topbar, improving usability and control over the server process. * ✨ (AGENTS.md): add ComfyUI-SwissArmyKnife extension development guide to provide comprehensive instructions for developers 📝 (RESTART_BUTTON.md): document the implementation of a restart button feature for ComfyUI server, detailing files modified and user experience ♻️ (control_panel.py): refactor input types in ControlPanel class to simplify input handling by using all_media_describe_data instead of multiple individual fields * ✨ (control_panel.py): enhance display_info method to parse and return structured all_media_describe_data for UI display 🔧 (pyproject.toml): bump version to 2.5.14 to reflect recent changes and improvements * ✨ (CONTROL_PANEL_CHANGES.md): add documentation for control panel simplification changes to provide clarity on updates ♻️ (swiss-army-knife.js): refactor control panel to accept only `all_media_describe_data` as input for better usability 🔧 (pyproject.toml): update version to 2.5.15 to reflect recent changes and improvements * ✨ (Control Panel): add comprehensive debugging documentation for data population issues 🐛 (Control Panel): fix field name mismatch and message structure handling to ensure data displays correctly ♻️ (Control Panel): refactor data extraction logic to check multiple sources and improve clarity 🔧 (Control Panel): update display logic to show only essential metadata and reduce clutter ⬆️ (version): bump version to 2.6.0 for new features and fixes * ✨ (docs): add documentation for Control Panel Prompt Breakdown implementation to provide detailed information on its purpose, input, output, and implementation details ♻️ (control_panel.py): create ControlPanelPromptBreakdown class to handle prompt breakdown logic and refactor existing ControlPanel class for clarity ♻️ (swiss-army-knife.js): update frontend to support new ControlPanelPromptBreakdown node and ensure proper data handling and display ⬆️ (pyproject.toml): increment version to 2.6.1 to reflect new features and improvements * ✨ (docs): add JSON response format documentation for Gemini prompts to provide structured output details ✨ (docs): add Control Panel Prompt Breakdown documentation to detail JSON parsing updates and benefits ♻️ (nodes): simplify Media Describe module by removing legacy input and updating parsing logic for cleaner code ✨ (mediia_describe.py): enhance JSON support for image descriptions and improve parsing logic ♻️ (mediia_describe.py): refactor return values to include raw JSON output for better integration 📝 (mediia_describe.py): update docstrings to clarify functionality and output format 🔧 (nodes.py): remove MediaDescribePromptBreakdown class and related mappings to streamline codebase ✨ (control_panel.py): update input type from all_media_describe_data to raw_gemini_json for better clarity ♻️ (control_panel.py): refactor display_info method to parse structured JSON response from Gemini API 💡 (control_panel.py): enhance logging for better debugging and user feedback ♻️ (swiss-army-knife.js): remove MediaDescribePromptBreakdown node implementation to streamline code and improve maintainability * ✨ (Media Describe): add prompt_prefix to overrides and update final JSON structure for positive prompt integration * ✨ (docs): add JSON Field Order Standardization documentation to ensure consistency across codebase ♻️ (mediia_describe.py): standardize JSON field order in MediaDescribe class to improve maintainability and clarity ✨ (control_panel.py): update variable names for clarity and consistency ✨ (control_panel.py): enhance JSON parsing to support new input structure ✨ (swiss-army-knife.js): modify UI to display additional columns for prompt breakdown ⬆️ (pyproject.toml): bump version to 2.7.0 for new features and improvements * Initial plan * Rename ui-widgets to web-js and consolidate video-preview documentation Co-authored-by: sammykumar <1479861+sammykumar@users.noreply.github.com> * Consolidate video-metadata documentation (5 files → 1 file) Co-authored-by: sammykumar <1479861+sammykumar@users.noreply.github.com> * Update documentation structure - remove features dir, update AGENTS.md and docs/README.md Co-authored-by: sammykumar <1479861+sammykumar@users.noreply.github.com> * Add consolidation notes to remaining node READMEs Co-authored-by: sammykumar <1479861+sammykumar@users.noreply.github.com> * Add consolidation guide for future documentation work Co-authored-by: sammykumar <1479861+sammykumar@users.noreply.github.com> * Consolidate remaining 5 nodes documentation (54 files → 5 files) Co-authored-by: sammykumar <1479861+sammykumar@users.noreply.github.com> * ⬆️ (pyproject.toml): bump version from 2.7.0 to 2.7.1 to reflect new changes and updates in the project * ✨ (GEMINI_OPTIONS_SIMPLIFICATION.md): simplify Gemini Util - Options node by removing unnecessary input toggles to enhance user experience 📝 (SYSTEM_PROMPT_FIELD_STANDARDIZATION.md): standardize system prompt fields for Gemini to ensure consistent output structure across image and video processing ♻️ (gemini_util_options.py): refactor options creation logic to hardcode previously toggled fields as always enabled for improved workflow efficiency 📝 (mediia_describe.py): update JSON field descriptions to always include all 6 fields in consistent order for clarity and completeness ⬆️ (pyproject.toml): bump version from 2.7.1 to 2.7.2 to reflect recent changes and improvements * 📝 Update documentation: simplify Gemini Util - Options node by removing unnecessary input toggles to enhance user experience and streamline functionality. ✨ Introduce new file: add OPTIONS_VERIFICATION.md to document verification of the simplified options integration with the Media Describe node. ⬆️ Upgrade version: bump version number in pyproject.toml from 2.7.2 to 2.7.3 to reflect recent changes and improvements. * feat: add joycaption * feat: add node for llm studio * 📝 (LLM_STUDIO_IMPLEMENTATION_SUMMARY.md, LLM_STUDIO_MEDIA_DESCRIBE.md, LLM_STUDIO_QUICK_REFERENCE.md): update default base_url from 127.0.0.1 to 192.168.50.41 for better accessibility in local network 🔧 (pyproject.toml): bump version from 2.8.2 to 2.8.3 to reflect recent changes * ✨ (docs): rename LLM Studio Media Describe to LLM Studio Video Describe to reflect the node's functionality more accurately 📝 (docs): update documentation across multiple files to ensure consistency with the new node name and its features ♻️ (code): refactor class and variable names from LLMStudioMediaDescribe to LLMStudioVideoDescribe for clarity and to align with the updated documentation ✨ (llm_studio_picture_describe.py): add LLM Studio Picture Describe node for image analysis using vision-language models ♻️ (nodes.py): update node mappings to include LLMStudioPictureDescribe and LLMStudioVideoDescribe ⬆️ (pyproject.toml): bump version to 2.8.4 for new feature addition * 📝 (llm_studio_describe.py): update caption prompt to allow for a longer description and clarify language usage for better context ⬆️ (pyproject.toml): bump version from 2.8.4 to 2.8.5 to reflect recent changes and improvements * ✨ (media_describe): introduce LLMStudioPictureDescribe for image analysis ♻️ (llm_studio_describe): refactor LLMStudioVideoDescribe to remove max_caption_words parameter 📝 (llm_studio_describe): update documentation for clarity and accuracy 🔧 (init.py): consolidate imports for LLMStudioVideoDescribe and LLMStudioPictureDescribe 🚫 (llm_studio_picture_describe.py): remove LLMStudioPictureDescribe node as it is no longer needed ♻️ (nodes.py): update import statements to reflect the removal of LLMStudioPictureDescribe ⬆️ (pyproject.toml): bump version to 2.8.6 to reflect recent changes and updates * Initial plan * Add LLM Studio Options node and update MediaDescribe to support both Gemini and LLM Studio Co-authored-by: sammykumar <1479861+sammykumar@users.noreply.github.com> * Add comprehensive documentation for LLM Studio Options and updated MediaDescribe docs Co-authored-by: sammykumar <1479861+sammykumar@users.noreply.github.com> * Add implementation summary and complete validation testing Co-authored-by: sammykumar <1479861+sammykumar@users.noreply.github.com> * feat: add llm studio as option for media describe node * ✨ (media_describe.py): enhance critical notes to include prohibition of watermarks, logos, branding, and textual overlays for clearer guidelines on descriptions ♻️ (media_describe.py): refactor system prompts to consistently prohibit watermarks, logos, branding, and textual overlays for uniformity across instructions 🔧 (media_describe.py): update return types and names to include prompt_request for better clarity in function outputs ⬆️ (pyproject.toml): bump version from 2.8.7 to 2.8.9 to reflect recent changes and improvements in the project * ✨ (media_describe.py): add JSON output structure for Control Panel compatibility to enhance integration with Gemini and provide detailed analysis status * feat: combine cinematic aesthetic and stylization tone into visual style * bug: debugging upload media button * bug: fix upload image button * chore: remove joycaption nodes * ✨ (docs): add ComfyUI settings integration documentation for secure API key management 📝 (docs): update implementation status and README to reflect new settings integration 🔧 (docs): create SETTINGS_INTEGRATION.md and SETTINGS_INTEGRATION_SUMMARY.md for detailed implementation overview ✨ (civitai_service.py, config_api.py, gemini_util_options.py, nodes.py): implement API key management through ComfyUI settings instead of environment variables to enhance security and usability ♻️ (gemini_options_security.js): disable outdated security extension for API key handling as it is no longer needed ⬆️ (pyproject.toml): bump version to 2.9.0 to reflect recent changes and improvements ✨ (swiss-army-knife.js): update extension version to 2.8.11 for consistency ✨ (swiss-army-knife.js): add helper functions to retrieve API keys from settings ✨ (swiss-army-knife.js): implement sync function to send API keys to backend 💡 (swiss-army-knife.js): update comments to reflect changes in API key handling ✨ (swiss-army-knife.js): register settings for Gemini and Civitai API keys with sync functionality * ✨ (pyproject.toml): bump version from 2.9.0 to 2.9.1 to reflect new changes ♻️ (gemini_options_security.js): remove deprecated Gemini Util Options Security Extension as it is no longer needed ♻️ (swiss-army-knife.js): update API key settings to use consistent casing for SwissArmyKnife in multiple locations * ✨ (pyproject.toml): bump version from 2.9.1 to 2.9.2 to reflect new changes ♻️ (swiss-army-knife.js): remove CivitMetadataHelper node implementation to simplify code and improve maintainability * Update movement description in media_describe.py for clarity and detail; increment version to 2.9.3 in pyproject.toml * ✨ (media_describe.py): enhance scene description for richer environmental detail; bump version to 2.9.4 in pyproject.toml * ✨ (media_describe.py): enhance movement description for explicit genital visibility and sex position identification; bump version to 2.9.5 in pyproject.toml * ✨ (MEDIA_DESCRIBE.md, media_describe.py, pyproject.toml): update LLM Studio prompts for enhanced media description; increment version to 2.9.6 in pyproject.toml * ✨ (MEDIA_DESCRIBE.md, media_describe.py, pyproject.toml): update LLM Studio prompt architecture for improved clarity and compatibility; bump version to 2.9.7 in pyproject.toml * ⏪ Revert LLM Studio prompt changes (v2.9.5-v2.9.7) and bump version to 2.9.8 This reverts commits: - |
||
|
|
7d4ca3933b | Merge branch 'master' into develop | ||
|
|
b38f0b0566 |
✨ (ND_SUPER_NODES_UPDATE_REMOVAL.md): add documentation for the removal of update checking functionality to clarify project changes
♻️ (extension.js): remove UpdateService class and related update checking logic to streamline the codebase and avoid confusion for users 📝 (SUPERLORA_CLARIFICATION.md): update documentation to remove references to UpdateService and clarify current services 📝 (SUPERLORA_IMPLEMENTATION_GUIDE.md): update documentation to reflect the removal of update checking and clarify data flow 🐛 (web_api.py): modify version info endpoint to return local version only and disable update checking to prevent unnecessary API calls 🐛 (extension.js): fix Plus button behavior in SuperLoraLoader to correctly show single-stream selector instead of dual-panel selector |
||
|
|
7e0f3fd30d | port SuperLoraLoader | ||
|
|
a5237ff79f |
Fork nd-super-nodes: Add lora_manager module and web extensions
Co-authored-by: sammykumar <1479861+sammykumar@users.noreply.github.com> |
||
|
|
f00ed580d5 |
✨ (docs): add documentation for LoRA JSON Workflow Serialization to explain new features and usage
✨ (swiss-army-knife.js): implement LoRAInfoExtractor extension to capture and serialize lora_json output in workflows
|
||
|
|
72754c0dd8 |
✨ (cache busting): implement comprehensive cache busting solution for JavaScript files to ensure users see the latest updates and improve development workflow
🐛 (init.py): add version extraction from pyproject.toml for cache busting and update __all__ exports 📝 (cache_bust.sh): create cache busting script to automate version syncing and generate cache_info.json 📝 (CACHE_BUSTING_SUMMARY.md): add detailed documentation on cache busting implementation and usage scenarios 📝 (JAVASCRIPT_CACHE_BUSTING.md): provide a guide on JavaScript cache busting strategies and troubleshooting steps 🔧 (.gitignore): exclude cache_info.json to prevent committing cache metadata files ♻️ (swiss-army-knife.js): update JavaScript file to include version tracking and cache busting utilities for development ⬆️ (pyproject.toml): bump version from 1.4.0 to 1.4.1 to reflect new features and improvements ✅ (package.json): add npm script for cache busting to streamline development process |
||
|
|
1643e4643e |
📝 (REDDIT_URL_WIDGET_PERSISTENCE_BUG_FIX.md): add documentation for the Reddit URL widget persistence bug fix to provide detailed issue description, root cause analysis, enhanced solution, and testing instructions
📝 (REDDIT_URL_WIDGET_VISIBILITY_FIX.md): add documentation for the Reddit URL widget visibility fix to outline the issue, root cause, enhanced solution, and testing steps 🔧 (pyproject.toml): update version from 1.3.17 to 1.3.18 to reflect recent changes and improvements ♻️ (swiss-army-knife.js): refactor widget management logic to implement aggressive hiding and restoration of the Reddit URL widget for improved UI responsiveness and state management |
||
|
|
7c3dc67c4f |
✨ (docs): add documentation for JavaScript Reddit Post widget fix and Redgifs URL extraction fix
🐛 (nodes.py): fix redgifs URL extraction logic to handle various scenarios and improve error handling ♻️ (nodes.py): refactor media source handling to ensure proper extraction of video URLs from redgifs 🔧 (pyproject.toml): bump version to 1.3.17 for new features and fixes 📝 (REDDIT_POST_MEDIA_SOURCE.md): update documentation to reflect enhancements and fixes in Reddit Post media source 📝 (REDGIFS_EXTRACTION_FIX.md): add detailed documentation for the redgifs URL extraction fix 💡 (swiss-army-knife.js): update console logs for better debugging and visibility of widget states |
||
|
|
4d51e13b36 |
✨ (docs): add documentation for Reddit Post Media Source implementation to explain new features and usage
✨ (nodes.py): implement _download_reddit_media method to handle media downloading from Reddit posts ✨ (nodes.py): update describe_media method to support Reddit post as a media source ✨ (swiss-army-knife.js): update frontend widget management to handle Reddit post media source and show/hide relevant widgets |
||
|
|
efc22d681e |
✨ (swiss-army-knife.js): introduce Swiss Army Knife extension for custom widgets
- Add functionality to register custom nodes like GeminiUtilOptions and FilenameGenerator with specific widget behaviors. - Implement file upload handling for images and videos, including state management and UI updates. - Enhance user experience with dynamic widget visibility based on media source and type selections. |
||
|
|
70b25b2c1a | init: port code from previous repo |