Add support for parsing the extraJsonMetaInfo field from image metadata.
The field values are merged into the meta dictionary with all values
ensured to be strings for safety.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add TipsCarousel component with random shuffling (Fisher-Yates)
- Display 10 tips in 4 languages (zh-hans, en, zh-hant, de)
- Tips include filename uniqueness, batch operations, shortcuts, AI clustering, fuzzy search regex, walk mode, workspace snapshots, auto-tagging, performance optimization, and AI agent integration
- Integrate TipsCarousel into TagSearch and SubstrSearch pages
- Auto-rotate every 10 seconds with smooth fade transitions
- Support dismissing warning tips via localStorage
- Compact horizontal layout for minimal space usage
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Change default IIB_DB_FILE_BACKUP_MAX from 8 to 4
- Add daily backup check to prevent multiple backups per day
- Skip backup if one already exists for the current date
- Rename skill from iib-api to iib for simpler installation:
npx skills add https://github.com/zanllp/infinite-image-browsing --skill iib
- Rewrite SKILL.md following agentskills.io best practices
- Use curl examples instead of Python for simpler agent execution
- Add "Before You Start" section: ask user for port, test connectivity first
- Add --noproxy flag to bypass proxy for localhost connections
- Add service status check and daemon startup instructions
- Add quick reference table for common operations
- Add agent-guide.md with decision tree and workflow patterns
- Update README.md with AI agent usage section
Co-Authored-By: Claude <noreply@anthropic.com>
When a folder is removed from the library, images under that folder are
now properly cleaned up from the database if they are not covered by any
other registered paths. This fixes the issue where Random Image would
pull from folders that had been removed.
The cleanup logic checks if each image is still "owned" by any remaining
scanned path before deletion, supporting nested path scenarios where a
parent path may still contain the images.
Fixes#868
Co-Authored-By: Claude <noreply@anthropic.com>
In scanned-fixed mode, stack.length is always 1 since openNext replaces
the entire stack instead of pushing. The existing watch on stack.length
wouldn't trigger scroll because v === lv is always true.
Co-Authored-By: Claude <noreply@anthropic.com>
When running AI organize on a folder that already contains subfolders,
the AI will now consider reusing existing folder names if the theme
matches, instead of always generating new titles. This prevents
duplicate folders from being created when re-organizing the same
directory multiple times.
- Add existing_folder_names parameter to ClusterIibOutputReq
- Pass existing folder names from dest directory to AI title generation
- Update AI prompt to prioritize reusing matching folder names
Co-Authored-By: Claude <noreply@anthropic.com>
- Pass recursive parameter from request to _build_embeddings_one_folder
- Include recursive in cache_params to avoid cache collision between
recursive and non-recursive clustering results
- Add debug logging for recursive parameter tracking
Co-Authored-By: Claude <noreply@anthropic.com>
- zh-hans: 智能整理 -> AI整理
- zh-hant: 智能整理 -> AI整理
- en: Smart Organize -> AI Organize
- de: Smart Organize -> AI Organize
Co-Authored-By: Claude <noreply@anthropic.com>
- Add smart organize feature that groups similar images based on prompt semantics
- AI generates meaningful folder names in user's preferred language
- Preview before action: review proposed organization, skip or adjust as needed
- Background processing for large folders
- Support move or copy, configurable min cluster size, include subfolders option
Backend changes:
- Add organize_files.py with job management and file operations
- Add recursive parameter to embedding and clustering APIs
- Default recursive=true for Topic Search (backward compatible)
- Default recursive=false for Smart Organize (first-level only)
- Update database on file move to preserve tags
Frontend changes:
- Add SmartOrganizeConfigModal for configuration
- Add OrganizeJobsPanel for progress tracking
- Add OrganizePreview for reviewing and confirming
- Add smart organize button to address bar
- Add i18n translations for zh-hans, zh-hant, en, de
Documentation:
- Update README.md and README-zh.md with feature description
- Update change.log.md with screenshots and video demo
Co-Authored-By: Claude <noreply@anthropic.com>
- Add autoUpdateIndex setting to global settings (enabled by default)
- When disabled, show manual update prompt instead of auto-updating expired index
- Add feature tip alert shown on first use
- Localize new strings in all languages (en, zh-hans, zh-hant, de)
- Rebuild vue dist assets with updated code