mirror of
https://github.com/immich-app/immich.git
synced 2026-05-21 07:06:31 -04:00
3d075f2bf8
feat: plugins chore: better types feat: plugins
259 lines
7.1 KiB
JSON
259 lines
7.1 KiB
JSON
{
|
|
"name": "immich-plugin-core",
|
|
"version": "2.0.1",
|
|
"title": "Immich Core Plugin",
|
|
"description": "Core workflow capabilities for Immich",
|
|
"author": "Immich Team",
|
|
"wasmPath": "dist/plugin.wasm",
|
|
"methods": [
|
|
{
|
|
"name": "assetFileFilter",
|
|
"title": "Filter by filename",
|
|
"description": "Filter assets by filename pattern using text matching or regular expressions",
|
|
"types": ["AssetV1"],
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"pattern": {
|
|
"type": "string",
|
|
"title": "Filename pattern",
|
|
"description": "Text or regex pattern to match against filename"
|
|
},
|
|
"matchType": {
|
|
"type": "string",
|
|
"title": "Match type",
|
|
"enum": ["contains", "startsWith", "exact", "regex"],
|
|
"default": "contains",
|
|
"description": "Type of pattern matching to perform"
|
|
},
|
|
"caseSensitive": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"title": "Case sensitive",
|
|
"description": "Whether matching should be case-sensitive"
|
|
}
|
|
},
|
|
"required": ["pattern"]
|
|
},
|
|
"uiHints": ["filter"]
|
|
},
|
|
{
|
|
"name": "filterFileType",
|
|
"title": "Filter by file type",
|
|
"description": "Filter assets by file type",
|
|
"types": ["AssetV1"],
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"fileTypes": {
|
|
"title": "File types",
|
|
"description": "Allowed file types",
|
|
"type": "string",
|
|
"array": true,
|
|
"enum": ["image", "video"]
|
|
}
|
|
},
|
|
"required": ["fileTypes"]
|
|
},
|
|
"uiHints": ["filter"]
|
|
},
|
|
{
|
|
"name": "filterPerson",
|
|
"title": "Filter by person",
|
|
"description": "Filter by detected person",
|
|
"types": ["AssetV1"],
|
|
"schema": {
|
|
"properties": {
|
|
"personIds": {
|
|
"type": "string",
|
|
"array": true,
|
|
"title": "Person IDs",
|
|
"description": "List of person to match",
|
|
"uiHint": "personI"
|
|
},
|
|
"matchAny": {
|
|
"type": "boolean",
|
|
"title": "Match any",
|
|
"default": true,
|
|
"description": "Match any name (true) or require all names (false)"
|
|
}
|
|
},
|
|
"required": ["personIds"]
|
|
},
|
|
"uiHints": ["filter"]
|
|
},
|
|
{
|
|
"name": "assetArchive",
|
|
"title": "Archive asset",
|
|
"description": "Change asset visibility to archive",
|
|
"types": ["AssetV1"],
|
|
"schema": {
|
|
"properties": {
|
|
"inverse": {
|
|
"title": "Inverse",
|
|
"description": "When true will unarchive any archived assets",
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "assetLock",
|
|
"title": "Move to locked folder",
|
|
"description": "Change visibility to locked",
|
|
"types": ["AssetV1"]
|
|
},
|
|
{
|
|
"name": "assetTimeline",
|
|
"title": "Move to timeline",
|
|
"description": "Change visibility to timeline",
|
|
"types": ["AssetV1"]
|
|
},
|
|
{
|
|
"name": "assetVisibility",
|
|
"title": "Update visibility",
|
|
"description": "Change visibility to selected option",
|
|
"types": ["AssetV1"],
|
|
"schema": {
|
|
"properties": {
|
|
"visibility": {
|
|
"title": "Visibility",
|
|
"description": "Asset visibility",
|
|
"type": "string",
|
|
"enum": ["archive", "timeline", "locked"]
|
|
}
|
|
},
|
|
"required": ["visibility"]
|
|
}
|
|
},
|
|
{
|
|
"name": "assetFavorite",
|
|
"title": "Favorite",
|
|
"description": "Favorite an asset",
|
|
"types": ["AssetV1"],
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"inverse": {
|
|
"type": "boolean",
|
|
"title": "Inverse",
|
|
"description": "Unfavorite by default, set to true to favorite instead",
|
|
"default": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "assetAddToAlbums",
|
|
"title": "Add to Album(s)",
|
|
"description": "Add asset to selected albums",
|
|
"types": ["AssetV1"],
|
|
"hostFunctions": true,
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"albumIds": {
|
|
"type": "string",
|
|
"title": "Album IDs",
|
|
"array": true,
|
|
"description": "Target album IDs",
|
|
"uiHint": "albumId"
|
|
}
|
|
},
|
|
"required": ["albumIds"]
|
|
}
|
|
},
|
|
{
|
|
"name": "noop1",
|
|
"title": "DEV: Nested properties",
|
|
"description": "Example configuration with nested properties",
|
|
"types": ["AssetV1"],
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"number1": {
|
|
"type": "number",
|
|
"title": "Number 1",
|
|
"description": "Basic number"
|
|
},
|
|
"number2": {
|
|
"type": "number",
|
|
"title": "Number 2",
|
|
"array": true,
|
|
"description": "List of numbers"
|
|
},
|
|
"string1": {
|
|
"type": "string",
|
|
"title": "String 1",
|
|
"description": "Basic string"
|
|
},
|
|
"string2": {
|
|
"type": "string",
|
|
"title": "String 2",
|
|
"array": true,
|
|
"description": "List of strings"
|
|
},
|
|
"string3": {
|
|
"type": "string",
|
|
"title": "String 3",
|
|
"enum": ["choice-1", "choice-2"],
|
|
"description": "Select from a list"
|
|
},
|
|
"nested": {
|
|
"type": "object",
|
|
"title": "Nested",
|
|
"description": "Nested properties for nesting",
|
|
"properties": {
|
|
"nested1": {
|
|
"type": "string",
|
|
"title": "Nested 1",
|
|
"description": "Nested string"
|
|
},
|
|
"nested2": {
|
|
"type": "number",
|
|
"title": "Nested 2",
|
|
"description": "Nested number"
|
|
},
|
|
"nested3": {
|
|
"type": "object",
|
|
"title": "Nested 3",
|
|
"description": "Nested again",
|
|
"properties": {
|
|
"nested4": {
|
|
"type": "boolean",
|
|
"title": "Nested 4",
|
|
"description": "Nested, nested boolean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"name": "noop2",
|
|
"title": "DEV: Album pickers",
|
|
"description": "Example configuration with album pickers",
|
|
"types": ["AssetV1"],
|
|
"schema": {
|
|
"properties": {
|
|
"albumId": {
|
|
"type": "string",
|
|
"title": "Album ID",
|
|
"description": "Target album ID",
|
|
"uiHint": "albumId"
|
|
},
|
|
"albumIds": {
|
|
"type": "string",
|
|
"title": "Album IDs",
|
|
"description": "Target album IDs",
|
|
"array": true,
|
|
"uiHint": "albumId"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|