mirror of
https://github.com/immich-app/immich.git
synced 2025-12-05 20:40:29 -08:00
* feat: plugins * feat: table definition * feat: type and migration * feat: add repositories * feat: validate manifest with class-validator and load manifest info to database * feat: workflow/plugin controller/service layer * feat: implement workflow logic * feat: make trigger static * feat: dynamical instantiate plugin instances * fix: access control and helper script * feat: it works * chore: simplify * refactor: refactor and use queue for workflow execution * refactor: remove unsused property in plugin-schema * build wasm in prod * feat: plugin loader in transaction * fix: docker build arm64 * generated files * shell check * fix tests * fix: waiting for migration to finish before loading plugin * remove context reassignment * feat: use mise to manage extism tools (#23760) * pr feedback * refactor: create workflow now including create filters and actions * feat: workflow medium tests * fix: broken medium test * feat: medium tests * chore: unify workflow job * sign user id with jwt * chore: query plugin with filters and action * chore: read manifest in repository * chore: load manifest from server configs * merge main * feat: endpoint documentation * pr feedback * load plugin from absolute path * refactor:handle trigger * throw error and return early * pr feedback * unify plugin services * fix: plugins code * clean up * remove triggerConfig * clean up * displayName and methodName --------- Co-authored-by: Jason Rasmussen <jason@rasm.me> Co-authored-by: bo0tzz <git@bo0tzz.me>
128 lines
3.3 KiB
JSON
128 lines
3.3 KiB
JSON
{
|
|
"name": "immich-core",
|
|
"version": "2.0.0",
|
|
"title": "Immich Core",
|
|
"description": "Core workflow capabilities for Immich",
|
|
"author": "Immich Team",
|
|
|
|
"wasm": {
|
|
"path": "dist/plugin.wasm"
|
|
},
|
|
|
|
"filters": [
|
|
{
|
|
"methodName": "filterFileName",
|
|
"title": "Filter by filename",
|
|
"description": "Filter assets by filename pattern using text matching or regular expressions",
|
|
"supportedContexts": ["asset"],
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"pattern": {
|
|
"type": "string",
|
|
"description": "Text or regex pattern to match against filename"
|
|
},
|
|
"matchType": {
|
|
"type": "string",
|
|
"enum": ["contains", "regex", "exact"],
|
|
"default": "contains",
|
|
"description": "Type of pattern matching to perform"
|
|
},
|
|
"caseSensitive": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Whether matching should be case-sensitive"
|
|
}
|
|
},
|
|
"required": ["pattern"]
|
|
}
|
|
},
|
|
{
|
|
"methodName": "filterFileType",
|
|
"title": "Filter by file type",
|
|
"description": "Filter assets by file type",
|
|
"supportedContexts": ["asset"],
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"fileTypes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string",
|
|
"enum": ["IMAGE", "VIDEO"]
|
|
},
|
|
"description": "Allowed file types"
|
|
}
|
|
},
|
|
"required": ["fileTypes"]
|
|
}
|
|
},
|
|
{
|
|
"methodName": "filterPerson",
|
|
"title": "Filter by person",
|
|
"description": "Filter by detected person",
|
|
"supportedContexts": ["person"],
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"personIds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"description": "List of person to match"
|
|
},
|
|
"matchAny": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Match any name (true) or require all names (false)"
|
|
}
|
|
},
|
|
"required": ["personIds"]
|
|
}
|
|
}
|
|
],
|
|
|
|
"actions": [
|
|
{
|
|
"methodName": "actionArchive",
|
|
"title": "Archive",
|
|
"description": "Move the asset to archive",
|
|
"supportedContexts": ["asset"],
|
|
"schema": {}
|
|
},
|
|
{
|
|
"methodName": "actionFavorite",
|
|
"title": "Favorite",
|
|
"description": "Mark the asset as favorite or unfavorite",
|
|
"supportedContexts": ["asset"],
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"favorite": {
|
|
"type": "boolean",
|
|
"default": true,
|
|
"description": "Set favorite (true) or unfavorite (false)"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"methodName": "actionAddToAlbum",
|
|
"title": "Add to Album",
|
|
"description": "Add the item to a specified album",
|
|
"supportedContexts": ["asset", "person"],
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"albumId": {
|
|
"type": "string",
|
|
"description": "Target album ID"
|
|
}
|
|
},
|
|
"required": ["albumId"]
|
|
}
|
|
}
|
|
]
|
|
}
|