[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"extension-skill-drolosoft-rotate-photos-en":3,"guides-for-drolosoft-rotate-photos":491,"similar-k17a793ns6w7k01tv43akbr3tn86m7ra-en":492},{"_creationTime":4,"_id":5,"children":6,"community":7,"display":9,"evaluation":15,"identity":242,"isFallback":226,"parentExtension":247,"providers":302,"relations":306,"repo":307,"tags":489,"workflow":490},1778686338567.5754,"k17a793ns6w7k01tv43akbr3tn86m7ra",[],{"reviewCount":8},0,{"description":10,"installMethods":11,"name":13,"sourceUrl":14},"Bulk rotate photos in an Immich library — by album or asset IDs. Non-destructive, original files are never modified. Supports undo/revert. Use when the user says \"rotate photos\", \"rotate album\", \"fix rotation\", \"photos are sideways\", \"rotate 90\", \"rotate clockwise\", \"rotate counterclockwise\", \"upside down photos\", \"wrong orientation\", \"bulk rotate\", \"rotate multiple\", or any variation of wanting to rotate one or more photos.\n",{"claudeCode":12},"drolosoft/immich-photo-manager","rotate-photos","https://github.com/drolosoft/immich-photo-manager",{"_creationTime":16,"_id":17,"extensionId":5,"locale":18,"result":19,"trustSignals":224,"workflow":240},1778686641184.0244,"kn7c107xhrhya2ej9qwb70txmn86nm2s","en",{"checks":20,"evaluatedAt":192,"extensionSummary":193,"features":194,"nonGoals":200,"promptVersionExtension":205,"promptVersionScoring":206,"purpose":207,"rationale":208,"score":209,"summary":210,"tags":211,"targetMarket":217,"tier":218,"useCases":219},[21,26,29,32,36,39,43,47,50,53,57,61,65,69,72,75,78,81,84,87,91,95,99,103,107,110,113,116,120,123,126,129,132,135,138,142,146,150,153,157,160,163,166,169,173,176,179,182,185,189],{"category":22,"check":23,"severity":24,"summary":25},"Practical Utility","Problem relevance","pass","The description clearly states the problem of bulk rotating photos in Immich and provides specific user intents and scenarios where it should be used.",{"category":22,"check":27,"severity":24,"summary":28},"Unique selling proposition","The skill offers a valuable capability for Immich users by providing a natural language interface for photo rotation and management, going beyond simple API calls.",{"category":22,"check":30,"severity":24,"summary":31},"Production readiness","The skill is fully implemented for its stated purpose of rotating photos and includes essential features like undo/revert and clear workflow instructions.",{"category":33,"check":34,"severity":24,"summary":35},"Scope","Single responsibility principle","The extension focuses solely on photo rotation within the Immich library, aligning with its name and description.",{"category":33,"check":37,"severity":24,"summary":38},"Description quality","The displayed description accurately reflects the skill's capabilities, including the specific actions it performs and the user intents it addresses.",{"category":40,"check":41,"severity":24,"summary":42},"Invocation","Scoped tools","The skill exposes two well-defined tools, 'rotate_assets' and 'revert_asset_edits', which are specific verb-noun actions.",{"category":44,"check":45,"severity":24,"summary":46},"Documentation","Configuration & parameter reference","The SKILL.md file documents the tools, their parameters, and provides clear examples of their usage, including accumulation logic and reversion.",{"category":33,"check":48,"severity":24,"summary":49},"Tool naming","Tool names 'rotate_assets' and 'revert_asset_edits' are descriptive and clearly indicate their respective functions.",{"category":33,"check":51,"severity":24,"summary":52},"Minimal I/O surface","The tools accept specific parameters like 'album_id', 'asset_ids', and 'angle', requesting only necessary data. Responses are not detailed but imply success/failure based on tool execution.",{"category":54,"check":55,"severity":24,"summary":56},"License","License usability","The extension is licensed under the MIT license, which is permissive and standard for open-source software.",{"category":58,"check":59,"severity":24,"summary":60},"Maintenance","Commit recency","The latest commit was on May 7, 2026, indicating recent maintenance activity.",{"category":58,"check":62,"severity":63,"summary":64},"Dependency Management","not_applicable","The extension does not appear to use any third-party dependencies that would require explicit management beyond Python itself.",{"category":66,"check":67,"severity":24,"summary":68},"Security","Secret Management","The skill requires an Immich API key, which is handled via an MCP server connection and not directly exposed or committed.",{"category":66,"check":70,"severity":24,"summary":71},"Injection","The skill's instructions and tools are self-contained and do not load or execute external, untrusted data.",{"category":66,"check":73,"severity":24,"summary":74},"Transitive Supply-Chain Grenades","The skill does not fetch remote content at runtime or include dynamic execution based on external sources.",{"category":66,"check":76,"severity":24,"summary":77},"Sandbox Isolation","The skill operates via an MCP server and interacts with the Immich API, confined to its designated scope and not modifying files outside its domain.",{"category":66,"check":79,"severity":24,"summary":80},"Sandbox escape primitives","There are no indications of detached processes or retry loops designed to escape sandbox limitations.",{"category":66,"check":82,"severity":24,"summary":83},"Data Exfiltration","The skill's outbound calls are to the Immich API for photo management and are documented. No confidential data is exfiltrated.",{"category":66,"check":85,"severity":24,"summary":86},"Hidden Text Tricks","The bundled files do not contain any hidden steering tricks, invisible characters, or formatting meant to manipulate the model.",{"category":88,"check":89,"severity":24,"summary":90},"Hooks","Opaque code execution","The skill's code is written in plain Python and does not involve obfuscation techniques like base64 encoding or runtime script fetching.",{"category":92,"check":93,"severity":24,"summary":94},"Portability","Structural Assumption","The skill makes no assumptions about the user's project structure outside of the Immich library it interacts with.",{"category":96,"check":97,"severity":24,"summary":98},"Trust","Issues Attention","In the last 90 days, 0 issues were opened and 1 was closed, indicating low issue volume and recent engagement.",{"category":100,"check":101,"severity":24,"summary":102},"Versioning","Release Management","The skill declares a version (1.2.0) in its frontmatter, indicating proper release management.",{"category":104,"check":105,"severity":24,"summary":106},"Code Execution","Validation","The tool parameters appear to be validated based on their descriptions and expected types (IDs, angles).",{"category":66,"check":108,"severity":24,"summary":109},"Unguarded Destructive Operations","While rotation is a modification, it's non-destructive to original files and can be reverted, with clear user workflows.",{"category":104,"check":111,"severity":24,"summary":112},"Error Handling","The SKILL.md emphasizes blocking execution if the Immich server is not connected, indicating fail-closed behavior for critical dependencies.",{"category":104,"check":114,"severity":63,"summary":115},"Logging","The skill operates via an MCP server and interacts with the Immich API; logging of destructive actions is handled by the Immich server itself and the MCP protocol.",{"category":117,"check":118,"severity":63,"summary":119},"Compliance","GDPR","The skill operates on photo metadata and does not directly handle personal data beyond asset IDs and album names.",{"category":117,"check":121,"severity":24,"summary":122},"Target market","The extension operates on a self-hosted Immich instance and does not have regional or jurisdictional limitations.",{"category":92,"check":124,"severity":24,"summary":125},"Runtime stability","The skill requires Python 3.10+ and interacts with an Immich API, making it broadly compatible with standard environments.",{"category":44,"check":127,"severity":24,"summary":128},"README","The README provides a comprehensive overview, installation instructions, and highlights the extension's capabilities and benefits.",{"category":33,"check":130,"severity":24,"summary":131},"Tool surface size","The extension exposes two distinct tools, which is well within the recommended range.",{"category":40,"check":133,"severity":24,"summary":134},"Overlapping near-synonym tools","The two exposed tools, 'rotate_assets' and 'revert_asset_edits', perform distinct and non-overlapping functions.",{"category":44,"check":136,"severity":24,"summary":137},"Phantom features","All features mentioned in the README and description, such as bulk rotation and undo, are supported by the documented tools and workflow.",{"category":139,"check":140,"severity":24,"summary":141},"Install","Installation instruction","The README provides clear, copy-pasteable installation instructions for both Claude plugins and manual MCP server setup.",{"category":143,"check":144,"severity":24,"summary":145},"Errors","Actionable error messages","The SKILL.md explicitly instructs to block execution if the Immich server is not connected, providing a clear error message and remediation step (setup command).",{"category":147,"check":148,"severity":24,"summary":149},"Execution","Pinned dependencies","The SKILL.md specifies Python 3.10+ and the README mentions Python 3.10+ with pip, indicating pinned interpreter requirements.",{"category":33,"check":151,"severity":63,"summary":152},"Dry-run preview","The skill's primary operation is photo rotation, which is non-destructive to original files and reversible. A dry-run is not applicable here.",{"category":154,"check":155,"severity":24,"summary":156},"Protocol","Idempotent retry & timeouts","The rotation operation is effectively idempotent as it accumulates edits and can be reverted. The MCP protocol likely handles timeouts.",{"category":117,"check":158,"severity":63,"summary":159},"Telemetry opt-in","The extension does not appear to emit any telemetry.",{"category":40,"check":161,"severity":24,"summary":162},"Precise Purpose","The description clearly defines the purpose as bulk photo rotation in Immich by album or asset IDs, and the use cases are specific and well-defined.",{"category":40,"check":164,"severity":24,"summary":165},"Concise Frontmatter","The frontmatter is concise and effectively summarizes the core capability and provides specific trigger phrases.",{"category":44,"check":167,"severity":24,"summary":168},"Concise Body","The SKILL.md is well-structured, delegates detailed information to references where appropriate, and stays within reasonable length.",{"category":170,"check":171,"severity":63,"summary":172},"Context","Progressive Disclosure","The SKILL.md is not excessively long and does not require further progressive disclosure through separate reference files for its current scope.",{"category":170,"check":174,"severity":63,"summary":175},"Forked exploration","This skill performs a direct action (rotation) and does not involve deep exploration requiring a forked context.",{"category":22,"check":177,"severity":24,"summary":178},"Usage examples","The SKILL.md provides clear, ready-to-use examples for rotating albums and specific assets, including how to revert edits.",{"category":22,"check":180,"severity":24,"summary":181},"Edge cases","The SKILL.md documents limitations such as the lack of auto-detection, the angle being a multiple of 90, and the accumulation of edits, with implied recovery through reversion or re-rotation.",{"category":104,"check":183,"severity":24,"summary":184},"Tool Fallback","The skill explicitly requires an Immich MCP server and provides a clear fallback instruction (stop and prompt user) if it's not available.",{"category":186,"check":187,"severity":24,"summary":188},"Safety","Halt on unexpected state","The SKILL.md mandates an immediate halt and user notification if the Immich MCP server is not accessible, preventing destructive operations on a disconnected system.",{"category":92,"check":190,"severity":24,"summary":191},"Cross-skill coupling","The skill is self-contained and focuses solely on photo rotation within Immich, without relying on or implicitly coupling with other skills.",1778686640764,"This skill provides bulk photo rotation capabilities for an Immich library, operating non-destructively by applying display transforms via the Immich API. It supports rotation by album or asset IDs, allows for cumulative rotations, and offers an undo/revert function. It requires a connection to a running Immich MCP server and specifies Python 3.10+ as a prerequisite.",[195,196,197,198,199],"Bulk photo rotation by album or asset IDs","Non-destructive editing, preserving original files","Undo/revert functionality for all edits","Accumulates rotation edits over multiple calls","Requires Immich MCP server connection",[201,202,203,204],"Automatic detection of wrongly rotated photos.","Rotating photos by arbitrary angles (only multiples of 90°).","Modifying original photo files directly.","Searching for misrotated photos using semantic search like CLIP.","3.0.0","4.4.0","To enable users to quickly and easily correct the orientation of multiple photos within their Immich library through natural language commands, managing the entire process via an AI assistant.","The extension is exceptionally well-documented and implemented, with clear purpose, examples, and robust error handling. Minor points like the lack of explicit dependency pinning for Python beyond version requirement and no explicit dry-run for a reversible operation prevent a perfect score.",99,"A high-quality, well-documented skill for efficiently rotating photos in Immich with clear usage instructions and robust error handling.",[212,213,214,215,216],"immich","photo-management","bulk-rotate","automation","mcp","global","verified",[220,221,222,223],"When user needs to rotate photos that are sideways, upside down, or in the wrong orientation.","When user wants to rotate an entire album of photos at once.","When user needs to fix the rotation of multiple selected photos.","When user wants to revert all applied rotations to the original state.",{"codeQuality":225,"collectedAt":227,"documentation":228,"maintenance":231,"security":237,"testCoverage":239},{"hasLockfile":226},false,1778686619126,{"descriptionLength":229,"readmeSize":230},429,8637,{"closedIssues90d":232,"forks":233,"hasChangelog":226,"manifestVersion":234,"openIssues90d":8,"pushedAt":235,"stars":236},1,4,"1.2.0",1778175631000,16,{"hasNpmPackage":226,"license":238,"smitheryVerified":226},"MIT",{"hasCi":226,"hasTests":226},{"updatedAt":241},1778686641184,{"basePath":243,"githubOwner":244,"githubRepo":245,"locale":18,"slug":13,"type":246},"skills/rotate-photos","drolosoft","immich-photo-manager","skill",{"_creationTime":248,"_id":249,"community":250,"display":251,"identity":255,"parentExtension":258,"providers":287,"relations":298,"tags":299,"workflow":300},1778686338567.5732,"k17fptxxsmtdk9k5x99qw7re2586n8fq",{"reviewCount":8},{"description":252,"installMethods":253,"name":254,"sourceUrl":14},"MCP server for intelligent photo management with Immich — interactive HTML galleries with Cowork Actions Panel, geographic album curation, library cleanup, duplicate detection, people & face management, trash management, metadata repair, and 36 MCP tools. The first MCP server for self-hosted photo management.",{"claudeCode":245},"Immich Photo Manager",{"basePath":256,"githubOwner":244,"githubRepo":245,"locale":18,"slug":245,"type":257},"","plugin",{"_creationTime":259,"_id":260,"community":261,"display":262,"identity":266,"providers":268,"relations":281,"tags":283,"workflow":284},1778686338567.573,"k177jqq2va7fhvpdsch9vv5cbn86nwwg",{"reviewCount":8},{"description":263,"installMethods":264,"name":265,"sourceUrl":14},"Drolosoft Marketplace - AI-powered tools by Drolosoft",{"claudeCode":12},"drolosoft-marketplace",{"basePath":256,"githubOwner":244,"githubRepo":245,"locale":18,"slug":245,"type":267},"marketplace",{"evaluate":269,"extract":276},{"promptVersionExtension":270,"promptVersionScoring":206,"score":271,"tags":272,"targetMarket":217,"tier":218},"3.1.0",98,[213,212,273,274,275,216],"ai-assistant","media","organization",{"commitSha":277,"marketplace":278,"plugin":279},"HEAD",{"name":265,"pluginCount":232},{"mcpCount":8,"provider":280,"skillCount":8},"classify",{"repoId":282},"kd71cer955pa6pzdsewzf62dt986nbtd",[273,212,216,274,275,213],{"evaluatedAt":285,"extractAt":286,"updatedAt":285},1778686361336,1778686338567,{"evaluate":288,"extract":295},{"promptVersionExtension":205,"promptVersionScoring":206,"score":289,"tags":290,"targetMarket":217,"tier":218},95,[212,213,291,292,293,215,294],"gallery","self-hosted","ai-search","media-organization",{"commitSha":277,"license":238,"plugin":296},{"mcpCount":8,"provider":280,"skillCount":297},12,{"parentExtensionId":260,"repoId":282},[293,215,291,212,294,213,292],{"evaluatedAt":301,"extractAt":286,"updatedAt":301},1778686398961,{"evaluate":303,"extract":305},{"promptVersionExtension":205,"promptVersionScoring":206,"score":209,"tags":304,"targetMarket":217,"tier":218},[212,213,214,215,216],{"commitSha":277},{"parentExtensionId":249,"repoId":282},{"_creationTime":308,"_id":282,"identity":309,"providers":310,"workflow":485},1778686332166.7776,{"githubOwner":244,"githubRepo":245,"sourceUrl":14},{"classify":311,"discover":467,"github":470},{"commitSha":277,"extensions":312},[313,326,369,382,390,398,406,414,422,430,438,443,451,459],{"basePath":256,"description":263,"displayName":265,"installMethods":314,"rationale":315,"selectedPaths":316,"source":325,"sourceLanguage":18,"type":267},{"claudeCode":12},"marketplace.json at .claude-plugin/marketplace.json",[317,320,322],{"path":318,"priority":319},".claude-plugin/marketplace.json","mandatory",{"path":321,"priority":319},"README.md",{"path":323,"priority":324},"LICENSE","high","rule",{"basePath":256,"description":252,"displayName":245,"installMethods":327,"license":238,"rationale":328,"selectedPaths":329,"source":325,"sourceLanguage":18,"type":257},{"claudeCode":245},"plugin manifest at .claude-plugin/plugin.json",[330,332,333,334,337,339,341,343,345,347,349,351,353,355,357,359,361,363,365,367],{"path":331,"priority":319},".claude-plugin/plugin.json",{"path":321,"priority":319},{"path":323,"priority":324},{"path":335,"priority":336},"skills/album-manager/SKILL.md","medium",{"path":338,"priority":336},"skills/auto-album-curator/SKILL.md",{"path":340,"priority":336},"skills/duplicate-report/SKILL.md",{"path":342,"priority":336},"skills/library-health-report/SKILL.md",{"path":344,"priority":336},"skills/metadata-fixer/SKILL.md",{"path":346,"priority":336},"skills/people-report/SKILL.md",{"path":348,"priority":336},"skills/photo-cleanup/SKILL.md",{"path":350,"priority":336},"skills/photo-search/SKILL.md",{"path":352,"priority":336},"skills/rotate-photos/SKILL.md",{"path":354,"priority":336},"skills/storage-optimizer/SKILL.md",{"path":356,"priority":336},"skills/timeline-gaps/SKILL.md",{"path":358,"priority":336},"skills/travel-map/SKILL.md",{"path":360,"priority":324},"commands/cleanup.md",{"path":362,"priority":324},"commands/create-album.md",{"path":364,"priority":324},"commands/immich-status.md",{"path":366,"priority":324},"commands/my-travels.md",{"path":368,"priority":324},"commands/setup-immich-photo-manager.md",{"basePath":370,"description":371,"displayName":372,"installMethods":373,"rationale":374,"selectedPaths":375,"source":325,"sourceLanguage":18,"type":246},"skills/album-manager","Create, curate, and publish Immich albums organized by geography, theme, or custom criteria. Use when the user says \"create an album\", \"organize my photos by location\", \"make a gallery album\", \"curate photos from Italy\", \"publish album\", \"geographic albums\", \"album from my trip to X\", \"share this album\", or any variation of creating, managing, or publishing photo albums in Immich. Also triggers on \"what albums do I have\", \"list albums\", \"album stats\", \"show me photos from\", \"generate gallery for\", \"show me the album\".\n","album-manager",{"claudeCode":12},"SKILL.md frontmatter at skills/album-manager/SKILL.md",[376,378,380],{"path":377,"priority":319},"SKILL.md",{"path":379,"priority":336},"references/geographic-search-patterns.md",{"path":381,"priority":336},"references/viewer-template-spec.md",{"basePath":383,"description":384,"displayName":385,"installMethods":386,"rationale":387,"selectedPaths":388,"source":325,"sourceLanguage":18,"type":246},"skills/auto-album-curator","Monitor your Immich library for new photos that match existing albums and suggest additions. Keeps albums fresh by finding new photos that belong in existing collections based on GPS location, visual similarity (CLIP), and date patterns. Use when the user says \"update my albums\", \"refresh albums\", \"new photos for albums\", \"curate albums\", \"auto-curate\", \"keep albums fresh\", \"album suggestions\", \"what new photos belong in my albums\", \"smart album update\", or any variation of wanting to keep their albums up to date with recent imports.\n","auto-album-curator",{"claudeCode":12},"SKILL.md frontmatter at skills/auto-album-curator/SKILL.md",[389],{"path":377,"priority":319},{"basePath":391,"description":392,"displayName":393,"installMethods":394,"rationale":395,"selectedPaths":396,"source":325,"sourceLanguage":18,"type":246},"skills/duplicate-report","Run a comprehensive duplicate analysis on an Immich photo library using perceptual hashing. Finds cross-source duplicates (e.g. Apple Photos vs Google Photos exports), internal duplicates, and generates a detailed report with removal recommendations. Use when the user says \"find duplicates\", \"duplicate report\", \"how many duplicates\", \"library health check\", \"photo dedup report\", \"run duplicate analysis\", \"compare my photo sources\", or any variation of wanting to understand duplicate photos across import sources.\n","duplicate-report",{"claudeCode":12},"SKILL.md frontmatter at skills/duplicate-report/SKILL.md",[397],{"path":377,"priority":319},{"basePath":399,"description":400,"displayName":401,"installMethods":402,"rationale":403,"selectedPaths":404,"source":325,"sourceLanguage":18,"type":246},"skills/library-health-report","Run a comprehensive health check on an Immich photo library — asset counts, storage usage, metadata completeness, orphaned files, and quality indicators. Use when the user says \"library health\", \"health report\", \"library status\", \"library audit\", \"how healthy is my library\", \"photo stats\", \"library overview\", \"what's in my library\", \"library report\", or any variation of wanting a comprehensive overview of their photo library's state.\n","library-health-report",{"claudeCode":12},"SKILL.md frontmatter at skills/library-health-report/SKILL.md",[405],{"path":377,"priority":319},{"basePath":407,"description":408,"displayName":409,"installMethods":410,"rationale":411,"selectedPaths":412,"source":325,"sourceLanguage":18,"type":246},"skills/metadata-fixer","Scan for and fix broken or missing photo metadata — dates, GPS coordinates, timezone offsets, and camera info. Detects suspicious patterns (midnight/noon timestamps, missing GPS on geotagged trips) and proposes corrections using folder structure, neighboring photos, and EXIF inference. Use when the user says \"fix metadata\", \"fix dates\", \"wrong dates\", \"missing GPS\", \"metadata repair\", \"exif fix\", \"photos have wrong time\", \"noon dates\", \"midnight timestamps\", \"fix my photo dates\", \"metadata fixer\", or any variation of wanting to repair photo metadata.\n","metadata-fixer",{"claudeCode":12},"SKILL.md frontmatter at skills/metadata-fixer/SKILL.md",[413],{"path":377,"priority":319},{"basePath":415,"description":416,"displayName":417,"installMethods":418,"rationale":419,"selectedPaths":420,"source":325,"sourceLanguage":18,"type":246},"skills/people-report","Generate a report on people in your Immich photo library — unique faces detected, photos per person, unnamed faces, people appearing together, and face recognition quality. Use when the user says \"people report\", \"faces report\", \"who's in my library\", \"unnamed faces\", \"face recognition\", \"how many people\", \"people stats\", \"who appears most\", \"tag my faces\", \"face cleanup\", \"person report\", or any variation of wanting to understand the people in their photo library.\n","people-report",{"claudeCode":12},"SKILL.md frontmatter at skills/people-report/SKILL.md",[421],{"path":377,"priority":319},{"basePath":423,"description":424,"displayName":425,"installMethods":426,"rationale":427,"selectedPaths":428,"source":325,"sourceLanguage":18,"type":246},"skills/photo-cleanup","Detect and remove screenshots, duplicates, and low-quality photos from an Immich library. Use when the user says \"clean up my photos\", \"remove screenshots\", \"find duplicates\", \"deduplicate\", \"photo cleanup\", \"library cleanup\", \"how many screenshots do I have\", \"free up space\", \"remove junk photos\", or any variation of cleaning, deduplicating, or optimizing a photo library.\n","photo-cleanup",{"claudeCode":12},"SKILL.md frontmatter at skills/photo-cleanup/SKILL.md",[429],{"path":377,"priority":319},{"basePath":431,"description":432,"displayName":433,"installMethods":434,"rationale":435,"selectedPaths":436,"source":325,"sourceLanguage":18,"type":246},"skills/photo-search","Search and explore an Immich photo library using natural language, GPS locations, dates, people, cameras, and AI-powered visual search (CLIP). Use when the user says \"find photos of\", \"search my photos\", \"show me pictures from\", \"where are my photos of\", \"do I have photos of\", \"find all screenshots\", \"photos taken with\", \"photos from 2019\", \"photos near\", \"photos of [person]\", or any variation of searching, browsing, or exploring their photo library.\n","photo-search",{"claudeCode":12},"SKILL.md frontmatter at skills/photo-search/SKILL.md",[437],{"path":377,"priority":319},{"basePath":243,"description":10,"displayName":13,"installMethods":439,"rationale":440,"selectedPaths":441,"source":325,"sourceLanguage":18,"type":246},{"claudeCode":12},"SKILL.md frontmatter at skills/rotate-photos/SKILL.md",[442],{"path":377,"priority":319},{"basePath":444,"description":445,"displayName":446,"installMethods":447,"rationale":448,"selectedPaths":449,"source":325,"sourceLanguage":18,"type":246},"skills/storage-optimizer","Analyze disk usage in an Immich photo library and identify opportunities to reclaim storage — redundant RAW+JPEG pairs, oversized videos, bloated sidecar files, and format inefficiencies. Use when the user says \"storage\", \"disk space\", \"what's eating my disk\", \"free up space\", \"storage report\", \"disk usage\", \"large files\", \"optimize storage\", \"space analysis\", \"how much space\", \"biggest files\", or any variation of wanting to understand or reduce storage usage.\n","storage-optimizer",{"claudeCode":12},"SKILL.md frontmatter at skills/storage-optimizer/SKILL.md",[450],{"path":377,"priority":319},{"basePath":452,"description":453,"displayName":454,"installMethods":455,"rationale":456,"selectedPaths":457,"source":325,"sourceLanguage":18,"type":246},"skills/timeline-gaps","Analyze the photo timeline to find suspicious gaps — months or years with zero or very few photos. Helps identify failed imports, missing backups, or periods where photos exist in only one ecosystem. Use when the user says \"timeline gaps\", \"missing months\", \"missing photos\", \"are there gaps\", \"what months am I missing\", \"photo timeline\", \"coverage check\", \"find missing periods\", \"when am I missing photos\", or any variation of wanting to find holes in their photo timeline.\n","timeline-gaps",{"claudeCode":12},"SKILL.md frontmatter at skills/timeline-gaps/SKILL.md",[458],{"path":377,"priority":319},{"basePath":460,"description":461,"displayName":462,"installMethods":463,"rationale":464,"selectedPaths":465,"source":325,"sourceLanguage":18,"type":246},"skills/travel-map","Generate an interactive map showing every location where photos were taken, clustered by city/region with photo counts, date ranges, and album links. Outputs a standalone HTML file with Leaflet.js that can be hosted or viewed locally. Use when the user says \"travel map\", \"show me everywhere I've been\", \"photo map\", \"map my photos\", \"where have I traveled\", \"GPS map\", \"location map\", \"map of my trips\", \"generate a map\", \"interactive map\", or any variation of wanting to see their photos plotted on a map.\n","travel-map",{"claudeCode":12},"SKILL.md frontmatter at skills/travel-map/SKILL.md",[466],{"path":377,"priority":319},{"sources":468},[469],"manual",{"closedIssues90d":232,"description":471,"forks":233,"homepage":472,"license":238,"openIssues90d":8,"pushedAt":235,"readmeSize":230,"stars":236,"topics":473},"📸🧹🗺️ MCP server for intelligent photo management with Immich — search, curate geographic albums, clean up libraries, and publish galleries","https://drolosoft.com/immich-photo-manager.html?lang=en",[474,475,476,477,478,291,479,212,216,480,481,213,482,292,483,484],"albums","claude","claude-plugin","cleanup","duplicates","geolocation","mcp-server","metadata","photos","immich-plugin","python",{"classifiedAt":486,"discoverAt":487,"extractAt":488,"githubAt":488,"updatedAt":486},1778686338385,1778686332166,1778686336662,[215,214,212,216,213],{"evaluatedAt":241,"extractAt":286,"updatedAt":241},[],[493,524,542,560,580,596],{"_creationTime":494,"_id":495,"community":496,"display":497,"identity":503,"providers":506,"relations":516,"tags":519,"workflow":520},1778699170774.1592,"k172e8vt4zcz50bb0vfp6ptb1n86mf90",{"reviewCount":8},{"description":498,"installMethods":499,"name":501,"sourceUrl":502},"Use when the user needs X (Twitter) data or confirmation-gated X actions through Xquik: tweet search, user lookup, follower extraction, media download, monitoring, webhooks, MCP, SDKs, posting, likes, DMs, and profile updates. Requires a Xquik API key. Never ask for X login material.",{"claudeCode":500},"Xquik-dev/x-twitter-scraper","x-twitter-scraper","https://github.com/Xquik-dev/x-twitter-scraper",{"basePath":504,"githubOwner":505,"githubRepo":501,"locale":18,"slug":501,"type":246},"skills/x-twitter-scraper","Xquik-dev",{"evaluate":507,"extract":515},{"promptVersionExtension":205,"promptVersionScoring":206,"score":508,"tags":509,"targetMarket":217,"tier":218},100,[510,511,512,513,215,216,514],"twitter","x","api","data-retrieval","sdk",{"commitSha":277},{"parentExtensionId":517,"repoId":518},"k17axvhmvwp90strpqcd5b0h7986m80d","kd783enpnwhry153ka0z65ear186mjbh",[512,215,513,216,514,510,511],{"evaluatedAt":521,"extractAt":522,"updatedAt":523},1778699230863,1778699170774,1778699296021,{"_creationTime":525,"_id":526,"community":527,"display":528,"identity":530,"providers":531,"relations":538,"tags":539,"workflow":540},1778686338567.5742,"k1732fnv0fnb1bxhz02g2erp0n86m6r9",{"reviewCount":8},{"description":400,"installMethods":529,"name":401,"sourceUrl":14},{"claudeCode":12},{"basePath":399,"githubOwner":244,"githubRepo":245,"locale":18,"slug":401,"type":246},{"evaluate":532,"extract":537},{"promptVersionExtension":205,"promptVersionScoring":206,"score":271,"tags":533,"targetMarket":217,"tier":218},[212,213,534,535,536],"library-health","data-analysis","reporting",{"commitSha":277},{"parentExtensionId":249,"repoId":282},[535,212,534,213,536],{"evaluatedAt":541,"extractAt":286,"updatedAt":541},1778686498743,{"_creationTime":543,"_id":544,"community":545,"display":546,"identity":549,"providers":550,"relations":556,"tags":557,"workflow":558},1778686338567.5745,"k1737wckn9mggk2vdm8r0mvpqs86n7q2",{"reviewCount":8},{"description":408,"installMethods":547,"name":548,"sourceUrl":14},{"claudeCode":12},"Metadata Fixer",{"basePath":407,"githubOwner":244,"githubRepo":245,"locale":18,"slug":409,"type":246},{"evaluate":551,"extract":555},{"promptVersionExtension":205,"promptVersionScoring":206,"score":289,"tags":552,"targetMarket":217,"tier":218},[213,481,212,553,554],"exif","gps",{"commitSha":277,"license":238},{"parentExtensionId":249,"repoId":282},[553,554,212,481,213],{"evaluatedAt":559,"extractAt":286,"updatedAt":559},1778686524402,{"_creationTime":561,"_id":562,"community":563,"display":564,"identity":566,"providers":567,"relations":576,"tags":577,"workflow":578},1778686338567.576,"k17e4g90xh14vn4xqf9y9rfc4n86mct0",{"reviewCount":8},{"description":453,"installMethods":565,"name":454,"sourceUrl":14},{"claudeCode":12},{"basePath":452,"githubOwner":244,"githubRepo":245,"locale":18,"slug":454,"type":246},{"evaluate":568,"extract":575},{"promptVersionExtension":205,"promptVersionScoring":206,"score":569,"tags":570,"targetMarket":217,"tier":574},75,[213,571,572,212,484,573],"timeline-analysis","data-quality","sql","community",{"commitSha":277},{"parentExtensionId":249,"repoId":282},[572,212,213,484,573,571],{"evaluatedAt":579,"extractAt":286,"updatedAt":579},1778686691418,{"_creationTime":581,"_id":582,"community":583,"display":584,"identity":586,"providers":587,"relations":592,"tags":593,"workflow":594},1778686338567.575,"k17bkwnghncjzk4p919n0yhqjd86n89t",{"reviewCount":8},{"description":424,"installMethods":585,"name":425,"sourceUrl":14},{"claudeCode":12},{"basePath":423,"githubOwner":244,"githubRepo":245,"locale":18,"slug":425,"type":246},{"evaluate":588,"extract":591},{"promptVersionExtension":205,"promptVersionScoring":206,"score":569,"tags":589,"targetMarket":217,"tier":574},[213,212,590,477,215],"deduplication",{"commitSha":277},{"parentExtensionId":249,"repoId":282},[215,477,590,212,213],{"evaluatedAt":595,"extractAt":286,"updatedAt":595},1778686595340,{"_creationTime":597,"_id":598,"community":599,"display":600,"identity":606,"providers":611,"relations":621,"tags":624,"workflow":625},1778699234184.6157,"k177tdbfgqmwhtaqv771f2ych586nne9",{"reviewCount":8},{"description":601,"installMethods":602,"name":604,"sourceUrl":605},"Worktree-first dev environment manager for issues, PRs, and features with optional tmux sessions",{"claudeCode":603},"Yeachan-Heo/oh-my-claudecode","Project Session Manager","https://github.com/Yeachan-Heo/oh-my-claudecode",{"basePath":607,"githubOwner":608,"githubRepo":609,"locale":18,"slug":610,"type":246},"skills/project-session-manager","Yeachan-Heo","oh-my-claudecode","project-session-manager",{"evaluate":612,"extract":620},{"promptVersionExtension":205,"promptVersionScoring":206,"score":508,"tags":613,"targetMarket":217,"tier":218},[614,615,616,617,215,618,619],"git","development-environment","workflow","tmux","cli","developer-tool",{"commitSha":277,"license":238},{"parentExtensionId":622,"repoId":623},"k17brg5egdw1jbncj1j4wfv3fh86n639","kd74zv63fryf9prygtq7gf4es986n22y",[215,618,619,615,614,617,616],{"evaluatedAt":626,"extractAt":627,"updatedAt":626},1778699613343,1778699234184]