- 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.
4.8 KiB
Gemini Media Description Caching
This document explains the caching functionality implemented for the Gemini custom nodes.
Overview
The caching system automatically stores Gemini API responses to avoid redundant API calls when analyzing the same media with the same description prompt. This provides:
- Fast repeated analyses - Cached results return in milliseconds instead of waiting for API calls
- API cost savings - Avoids duplicate API requests for identical media+prompt combinations
- Transparent operation - Caching is always enabled and requires no user configuration
- Accurate isolation - Separate cache entries for each unique media+prompt+model combination
How It Works
Cache Key Generation
Each cache entry uses a unique key based on:
- Media identifier - Uniquely identifies the media content
- Description mode - The selected prompt option (e.g., "Describe without clothing")
- Model settings - The Gemini model name and type
Media Identification
- Video files: Uses file path + modification time + file size
- Image tensors: Uses content hash of the tensor data
- Uploaded files: Uses the file path in ComfyUI's input directory + metadata
Description Modes
Caching works with all 4 description modes:
- "Describe without clothing"
- "Describe with clothing"
- "Describe without clothing (No bokeh)"
- "Describe with clothing (No bokeh)"
Each mode creates a separate cache entry for the same media file.
Storage
Cache entries are stored as JSON files in the cache/gemini_descriptions/ directory:
- Each file contains the description, metadata, and timestamp
- Cache persists across ComfyUI restarts
- Cache directory is created automatically
- Cache files are excluded from git via
.gitignore
Cache Behavior
Cache Hit (Fast Path)
User analyzes media → Check cache → Found → Return cached description (< 1ms)
Cache Miss (API Path)
User analyzes media → Check cache → Not found → Call Gemini API → Store result → Return description
Cache Isolation Examples
Same video file with different prompts:
video.mp4+ "Describe without clothing" → Cache entry Avideo.mp4+ "Describe with clothing" → Cache entry Bvideo.mp4+ "Describe without clothing (No bokeh)" → Cache entry Cvideo.mp4+ "Describe with clothing (No bokeh)" → Cache entry D
Same prompt with different models:
video.mp4+ "Describe without clothing" +gemini-2.5-flash→ Cache entry Avideo.mp4+ "Describe without clothing" +gemini-2.5-pro→ Cache entry B
Implementation Details
Files Modified
utils/cache.py- New cache utility moduleutils/nodes.py- Added caching to GeminiVideoDescribe and GeminiImageDescribe classes
Cache Integration Points
- Before Gemini API call - Check cache for existing result
- After successful API response - Store result in cache
- Cache hit handling - Return cached result with appropriate status message
Status Messages
Cache hits are indicated in the Gemini status output:
🤖 Gemini Analysis Status: ✅ Complete (Cached)
• Model: models/gemini-2.5-flash
• Cached: 2025-09-02 10:16:32
Regular API calls show:
🤖 Gemini Analysis Status: ✅ Complete
• Model: models/gemini-2.5-flash
• API Key: ****1234
Performance Benefits
- First analysis: Normal API call timing (~2-5 seconds)
- Subsequent analyses: Cache retrieval (~0.1ms)
- API savings: 100% reduction in duplicate calls
- User experience: Instant results for repeated workflows
Cache Management
Automatic Behavior
- Cache entries are created automatically
- No user configuration required
- Cache persists across sessions
- Old entries remain until manually cleared
Manual Management
The cache can be inspected or cleared programmatically:
from nodes.cache import get_cache
cache = get_cache()
# Get cache statistics
info = cache.get_cache_info()
print(f"Entries: {info['entries']}, Size: {info['total_size_mb']} MB")
# Clear specific entry (not exposed in UI)
# cache._get_cache_file_path(key) and os.remove()
Cache Directory Location
- Default:
<comfyui_swissarmyknife>/cache/gemini_descriptions/ - Contains JSON files with SHA256 hash names
- Safe to delete entire directory to clear all cache
User Workflow Impact
The caching is completely transparent to users:
- First time analyzing media: Works exactly as before (API call)
- Re-analyzing same media+prompt: Results appear instantly from cache
- Different prompts on same media: Each creates new cache entry
- Different media files: Each gets separate cache entries
Users will notice:
- Faster repeated analyses
- Cache hit indicators in status messages
- No additional configuration needed
- Consistent behavior across ComfyUI restarts