{ "openapi": "3.1.0", "info": { "title": "PictoPy", "description": "The API calls to PictoPy are done via HTTP requests. This backend is built using FastAPI.", "version": "0.1.0", "contact": { "name": "PictoPy Postman Collection", "url": "https://www.postman.com/aossie-pictopy/pictopy/overview" } }, "servers": [ { "url": "http://localhost:52123", "description": "Local Development server" } ], "paths": { "/health": { "get": { "tags": [ "Health" ], "summary": "Root", "operationId": "root_health_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/folders/add-folder": { "post": { "tags": [ "Folders" ], "summary": "Add Folder", "operationId": "add_folder_folders_add_folder_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddFolderRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddFolderResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "409": { "description": "Conflict", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/folders/enable-ai-tagging": { "post": { "tags": [ "Folders" ], "summary": "Enable Ai Tagging", "description": "Enable AI tagging for multiple folders.", "operationId": "enable_ai_tagging_folders_enable_ai_tagging_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateAITaggingRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateAITaggingResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/folders/disable-ai-tagging": { "post": { "tags": [ "Folders" ], "summary": "Disable Ai Tagging", "description": "Disable AI tagging for multiple folders.", "operationId": "disable_ai_tagging_folders_disable_ai_tagging_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateAITaggingRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateAITaggingResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/folders/delete-folders": { "delete": { "tags": [ "Folders" ], "summary": "Delete Folders", "description": "Delete multiple folders by their IDs.", "operationId": "delete_folders_folders_delete_folders_delete", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteFoldersRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteFoldersResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/folders/sync-folder": { "post": { "tags": [ "Folders" ], "summary": "Sync Folder", "description": "Sync a folder by comparing filesystem folders with database entries and removing extra DB entries.", "operationId": "sync_folder_folders_sync_folder_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SyncFolderRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SyncFolderResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/folders/all-folders": { "get": { "tags": [ "Folders" ], "summary": "Get All Folders", "description": "Get details of all folders in the database.", "operationId": "get_all_folders_folders_all_folders_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAllFoldersResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__folders__ErrorResponse" } } } } } } }, "/albums/": { "get": { "tags": [ "Albums" ], "summary": "Get Albums", "description": "Get all albums. Always returns both locked and unlocked albums.", "operationId": "get_albums_albums__get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAlbumsResponse" } } } } } }, "post": { "tags": [ "Albums" ], "summary": "Create Album", "operationId": "create_album_albums__post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAlbumRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAlbumResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/albums/{album_id}": { "get": { "tags": [ "Albums" ], "summary": "Get Album", "operationId": "get_album_albums__album_id__get", "parameters": [ { "name": "album_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Album Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAlbumResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "put": { "tags": [ "Albums" ], "summary": "Update Album", "operationId": "update_album_albums__album_id__put", "parameters": [ { "name": "album_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Album Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateAlbumRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "tags": [ "Albums" ], "summary": "Delete Album", "operationId": "delete_album_albums__album_id__delete", "parameters": [ { "name": "album_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Album Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/albums/{album_id}/images/get": { "post": { "tags": [ "Albums" ], "summary": "Get Album Images", "operationId": "get_album_images_albums__album_id__images_get_post", "parameters": [ { "name": "album_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Album Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAlbumImagesRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAlbumImagesResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/albums/{album_id}/images": { "post": { "tags": [ "Albums" ], "summary": "Add Images To Album", "operationId": "add_images_to_album_albums__album_id__images_post", "parameters": [ { "name": "album_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Album Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ImageIdsRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "tags": [ "Albums" ], "summary": "Remove Images From Album", "operationId": "remove_images_from_album_albums__album_id__images_delete", "parameters": [ { "name": "album_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Album Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ImageIdsRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/albums/{album_id}/images/{image_id}": { "delete": { "tags": [ "Albums" ], "summary": "Remove Image From Album", "operationId": "remove_image_from_album_albums__album_id__images__image_id__delete", "parameters": [ { "name": "album_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Album Id" } }, { "name": "image_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Image Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/albums/{album_id}/cover": { "put": { "tags": [ "Albums" ], "summary": "Set Album Cover Image", "description": "Set or update the cover image for an album", "operationId": "set_album_cover_image_albums__album_id__cover_put", "parameters": [ { "name": "album_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Album Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SetCoverImageRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/images/": { "get": { "tags": [ "Images" ], "summary": "Get All Images", "description": "Get all images from the database.", "operationId": "get_all_images_images__get", "parameters": [ { "name": "tagged", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Filter images by tagged status", "title": "Tagged" }, "description": "Filter images by tagged status" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAllImagesResponse" } } } }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__images__ErrorResponse" } } }, "description": "Internal Server Error" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/images/search": { "get": { "tags": [ "Images" ], "summary": "Search Images By Tag", "description": "Search images by tag name.", "operationId": "search_images_by_tag_images_search_get", "parameters": [ { "name": "tag", "in": "query", "required": true, "schema": { "type": "string", "description": "Tag name to search for", "title": "Tag" }, "description": "Tag name to search for" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAllImagesResponse" } } } }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__images__ErrorResponse" } } }, "description": "Bad Request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__images__ErrorResponse" } } }, "description": "Not Found" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__images__ErrorResponse" } } }, "description": "Internal Server Error" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/images/semantic-search": { "get": { "tags": [ "Images" ], "summary": "Semantic Search Images", "description": "Semantic search images by query text using SigLIP2.", "operationId": "semantic_search_images_images_semantic_search_get", "parameters": [ { "name": "query", "in": "query", "required": true, "schema": { "type": "string", "minLength": 1, "description": "Query text to search for", "title": "Query" }, "description": "Query text to search for" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__routes__images__SemanticSearchResponse" } } } }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__images__ErrorResponse" } } }, "description": "Bad Request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__images__ErrorResponse" } } }, "description": "Not Found" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__images__ErrorResponse" } } }, "description": "Internal Server Error" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/images/toggle-favourite": { "post": { "tags": [ "Images" ], "summary": "Toggle Favourite", "description": "Toggle the favorite status of an image.", "operationId": "toggle_favourite_images_toggle_favourite_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__routes__images__ToggleFavouriteRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/videos/": { "get": { "tags": [ "Videos" ], "summary": "Get All Videos", "description": "Get all videos from the database.", "operationId": "get_all_videos_videos__get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAllVideosResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__videos__ErrorResponse" } } } } } } }, "/videos/search": { "get": { "tags": [ "Videos" ], "summary": "Search Videos By Tag", "description": "Search videos by tag name.", "operationId": "search_videos_by_tag_videos_search_get", "parameters": [ { "name": "tag", "in": "query", "required": true, "schema": { "type": "string", "description": "Tag name to search for", "title": "Tag" }, "description": "Tag name to search for" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAllVideosResponse" } } } }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__videos__ErrorResponse" } } }, "description": "Bad Request" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__videos__ErrorResponse" } } }, "description": "Internal Server Error" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/videos/semantic-search": { "get": { "tags": [ "Videos" ], "summary": "Semantic Search Videos", "description": "Semantic search videos by query text using SigLIP2 keyframe embeddings.", "operationId": "semantic_search_videos_videos_semantic_search_get", "parameters": [ { "name": "query", "in": "query", "required": true, "schema": { "type": "string", "minLength": 1, "description": "Query text to search for", "title": "Query" }, "description": "Query text to search for" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__routes__videos__SemanticSearchResponse" } } } }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__videos__ErrorResponse" } } }, "description": "Bad Request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__videos__ErrorResponse" } } }, "description": "Not Found" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__videos__ErrorResponse" } } }, "description": "Internal Server Error" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/videos/purge-frame-cache": { "post": { "tags": [ "Videos" ], "summary": "Purge Frame Cache", "description": "Delete the sampled keyframe JPEGs. Tags and semantic search survive:\nonly the on-disk frames are removed, not their embeddings.", "operationId": "purge_frame_cache_videos_purge_frame_cache_post", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PurgeFrameCacheResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__videos__ErrorResponse" } } } } } } }, "/videos/toggle-favourite": { "post": { "tags": [ "Videos" ], "summary": "Toggle Favourite", "description": "Toggle the favorite status of a video.", "operationId": "toggle_favourite_videos_toggle_favourite_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__routes__videos__ToggleFavouriteRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ToggleFavouriteResponse" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__videos__ErrorResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__videos__ErrorResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/face-clusters/{cluster_id}": { "put": { "tags": [ "Face Clusters" ], "summary": "Rename Cluster", "description": "Rename a face cluster by its ID.", "operationId": "rename_cluster_face_clusters__cluster_id__put", "parameters": [ { "name": "cluster_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Cluster Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RenameClusterRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RenameClusterResponse" } } } }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__face_clusters__ErrorResponse" } } }, "description": "Bad Request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__face_clusters__ErrorResponse" } } }, "description": "Not Found" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__face_clusters__ErrorResponse" } } }, "description": "Internal Server Error" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/face-clusters/": { "get": { "tags": [ "Face Clusters" ], "summary": "Get All Clusters", "description": "Get metadata for all face clusters including face counts.", "operationId": "get_all_clusters_face_clusters__get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetClustersResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__face_clusters__ErrorResponse" } } } } } } }, "/face-clusters/{cluster_id}/images": { "get": { "tags": [ "Face Clusters" ], "summary": "Get Cluster Images", "description": "Get all images that contain faces belonging to a specific cluster.", "operationId": "get_cluster_images_face_clusters__cluster_id__images_get", "parameters": [ { "name": "cluster_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Cluster Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetClusterImagesResponse" } } } }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__face_clusters__ErrorResponse" } } }, "description": "Not Found" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__face_clusters__ErrorResponse" } } }, "description": "Internal Server Error" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/face-clusters/face-search": { "post": { "tags": [ "Face Clusters" ], "summary": "Face Tagging", "operationId": "face_tagging_face_clusters_face_search_post", "parameters": [ { "name": "input_type", "in": "query", "required": false, "schema": { "allOf": [ { "$ref": "#/components/schemas/InputType" } ], "description": "Choose input type: 'path' or 'base64'", "default": "path", "title": "Input Type" }, "description": "Choose input type: 'path' or 'base64'" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FaceSearchRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__face_clusters__ErrorResponse" } } }, "description": "Bad Request" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__face_clusters__ErrorResponse" } } }, "description": "Internal Server Error" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/face-clusters/global-recluster": { "post": { "tags": [ "Face Clusters" ], "summary": "Trigger Global Reclustering", "description": "Manually trigger global face reclustering.\nThis forces full reclustering regardless of the 24-hour rule.", "operationId": "trigger_global_reclustering_face_clusters_global_recluster_post", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GlobalReclusterResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__face_clusters__ErrorResponse" } } } } } } }, "/face-clusters/multi-search": { "post": { "tags": [ "Face Clusters" ], "summary": "Search Images By Multiple Faces", "description": "Search for images containing multiple face identities, ranked by match count.", "operationId": "search_images_by_multiple_faces_face_clusters_multi_search_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MultiPersonSearchRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MultiPersonSearchResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__face_clusters__ErrorResponse" } } } }, "404": { "description": "Not Found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__face_clusters__ErrorResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__face_clusters__ErrorResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/user-preferences/": { "get": { "tags": [ "User Preferences" ], "summary": "Get User Preferences", "description": "Get user preferences from metadata.", "operationId": "get_user_preferences_user_preferences__get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUserPreferencesResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__user_preferences__ErrorResponse" } } } } } }, "put": { "tags": [ "User Preferences" ], "summary": "Update User Preferences", "description": "Update user preferences in metadata.", "operationId": "update_user_preferences_user_preferences__put", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserPreferencesRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserPreferencesResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__user_preferences__ErrorResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__user_preferences__ErrorResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/memories/generate": { "post": { "tags": [ "Memories" ], "summary": "Generate Memories", "description": "Queue a curation run.\n\nReturns immediately; the run itself goes to the shared single-worker\nexecutor so it serializes behind indexing and semantic scoring rather than\nracing them.", "operationId": "generate_memories_memories_generate_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateMemoriesRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateMemoriesResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__memories__ErrorResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__memories__ErrorResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/memories/status": { "get": { "tags": [ "Memories" ], "summary": "Get Memory Status", "description": "Report scheduler state.\n\nPolled by the Tauri background task, which is why indexing_busy is computed\nhere: the desktop shell never opens the database itself.", "operationId": "get_memory_status_memories_status_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/MemoryStatusResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__memories__ErrorResponse" } } } } } } }, "/memories/today": { "get": { "tags": [ "Memories" ], "summary": "Get Today Memory", "description": "Get the memory to surface now, or null if there is nothing to show.\n\nHaving nothing to surface is a normal state for a small or new library, so\nthis returns 200 with a null payload rather than a 404.", "operationId": "get_today_memory_memories_today_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetTodayMemoryResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__memories__ErrorResponse" } } } } } } }, "/memories": { "get": { "tags": [ "Memories" ], "summary": "List Memories", "description": "List memory cards, newest first. Backs the history filmstrip and grid.", "operationId": "list_memories_memories_get", "parameters": [ { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 100, "minimum": 1, "description": "Maximum memories to return", "default": 30, "title": "Limit" }, "description": "Maximum memories to return" }, { "name": "offset", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 0, "description": "Number of memories to skip", "default": 0, "title": "Offset" }, "description": "Number of memories to skip" }, { "name": "event_type", "in": "query", "required": false, "schema": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Filter by anniversary, import_event or semantic_event", "title": "Event Type" }, "description": "Filter by anniversary, import_event or semantic_event" }, { "name": "include_viewed", "in": "query", "required": false, "schema": { "type": "boolean", "description": "Include already-viewed memories", "default": true, "title": "Include Viewed" }, "description": "Include already-viewed memories" }, { "name": "include_dismissed", "in": "query", "required": false, "schema": { "type": "boolean", "description": "Include dismissed memories", "default": false, "title": "Include Dismissed" }, "description": "Include dismissed memories" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetMemoriesResponse" } } } }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__memories__ErrorResponse" } } }, "description": "Internal Server Error" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/memories/{memory_id}": { "get": { "tags": [ "Memories" ], "summary": "Get Memory", "description": "Get a single memory with its full image set.", "operationId": "get_memory_memories__memory_id__get", "parameters": [ { "name": "memory_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Memory Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetMemoryResponse" } } } }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__memories__ErrorResponse" } } }, "description": "Not Found" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__memories__ErrorResponse" } } }, "description": "Internal Server Error" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "patch": { "tags": [ "Memories" ], "summary": "Update Memory", "description": "Update a memory's viewed, dismissed or notified state.", "operationId": "update_memory_memories__memory_id__patch", "parameters": [ { "name": "memory_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Memory Id" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateMemoryRequest" } } } }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateMemoryResponse" } } } }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__memories__ErrorResponse" } } }, "description": "Bad Request" }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__memories__ErrorResponse" } } }, "description": "Not Found" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__memories__ErrorResponse" } } }, "description": "Internal Server Error" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "delete": { "tags": [ "Memories" ], "summary": "Delete Memory", "description": "Delete a memory. Its curated image list cascades; the photos remain.", "operationId": "delete_memory_memories__memory_id__delete", "parameters": [ { "name": "memory_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Memory Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteMemoryResponse" } } } }, "404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__memories__ErrorResponse" } } }, "description": "Not Found" }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app__schemas__memories__ErrorResponse" } } }, "description": "Internal Server Error" }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/shutdown": { "post": { "tags": [ "Shutdown", "Shutdown" ], "summary": "Shutdown", "description": "Gracefully shutdown the PictoPy backend.\n\nThis endpoint schedules backend server termination after response is sent.\nThe frontend is responsible for shutting down the sync service separately.\n\nReturns:\n ShutdownResponse with status and message", "operationId": "shutdown_shutdown_post", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ShutdownResponse" } } } } } } }, "/models/status": { "get": { "tags": [ "Models" ], "summary": "Get Model Status", "description": "Returns the installation status of all models in the registry.", "operationId": "get_model_status_models_status_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/models/hardware": { "get": { "tags": [ "Models" ], "summary": "Get Hardware Recommendation", "description": "Returns hardware specs and the recommended model tier.", "operationId": "get_hardware_recommendation_models_hardware_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/models/{model_key}": { "delete": { "tags": [ "Models" ], "summary": "Delete Model", "description": "Deletes a specific model from disk.", "operationId": "delete_model_models__model_key__delete", "parameters": [ { "name": "model_key", "in": "path", "required": true, "schema": { "type": "string", "title": "Model Key" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/models/setup": { "post": { "tags": [ "Models" ], "summary": "Setup Models", "description": "Initializes setup by starting downloads for a specific tier + required models.\nReturns a single task_id to track overall progress.", "operationId": "setup_models_models_setup_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SetupRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/models/download/{model_key}": { "post": { "tags": [ "Models" ], "summary": "Start Download Model", "description": "Starts download for a specific model by key. Returns a task_id.", "operationId": "start_download_model_models_download__model_key__post", "parameters": [ { "name": "model_key", "in": "path", "required": true, "schema": { "type": "string", "title": "Model Key" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/models/download/{task_id}/progress": { "get": { "tags": [ "Models" ], "summary": "Download Progress", "description": "Streams SSE progress for a given download task_id.", "operationId": "download_progress_models_download__task_id__progress_get", "parameters": [ { "name": "task_id", "in": "path", "required": true, "schema": { "type": "string", "title": "Task Id" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } } }, "components": { "schemas": { "AddFolderData": { "properties": { "folder_id": { "type": "string", "title": "Folder Id" }, "folder_path": { "type": "string", "title": "Folder Path" } }, "type": "object", "required": [ "folder_id", "folder_path" ], "title": "AddFolderData" }, "AddFolderRequest": { "properties": { "folder_path": { "type": "string", "title": "Folder Path" }, "parent_folder_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Parent Folder Id" }, "taggingCompleted": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Taggingcompleted", "default": false } }, "type": "object", "required": [ "folder_path" ], "title": "AddFolderRequest" }, "AddFolderResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "data": { "anyOf": [ { "$ref": "#/components/schemas/AddFolderData" }, { "type": "null" } ] } }, "type": "object", "required": [ "success" ], "title": "AddFolderResponse" }, "Album": { "properties": { "album_id": { "type": "string", "title": "Album Id" }, "album_name": { "type": "string", "title": "Album Name" }, "description": { "type": "string", "title": "Description" }, "is_locked": { "type": "boolean", "title": "Is Locked" }, "cover_image_path": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cover Image Path" }, "image_count": { "type": "integer", "title": "Image Count", "default": 0 } }, "type": "object", "required": [ "album_id", "album_name", "description", "is_locked" ], "title": "Album" }, "ClusterMetadata": { "properties": { "cluster_id": { "type": "string", "title": "Cluster Id" }, "cluster_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cluster Name" }, "face_image_base64": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Face Image Base64" }, "face_count": { "type": "integer", "title": "Face Count" } }, "type": "object", "required": [ "cluster_id", "cluster_name", "face_image_base64", "face_count" ], "title": "ClusterMetadata" }, "CreateAlbumRequest": { "properties": { "name": { "type": "string", "minLength": 1, "title": "Name" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description", "default": "" }, "is_locked": { "type": "boolean", "title": "Is Locked", "default": false }, "password": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Password" } }, "type": "object", "required": [ "name" ], "title": "CreateAlbumRequest" }, "CreateAlbumResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "album_id": { "type": "string", "title": "Album Id" } }, "type": "object", "required": [ "success", "album_id" ], "title": "CreateAlbumResponse" }, "DeleteFoldersData": { "properties": { "deleted_count": { "type": "integer", "title": "Deleted Count" }, "folder_ids": { "items": { "type": "string" }, "type": "array", "title": "Folder Ids" } }, "type": "object", "required": [ "deleted_count", "folder_ids" ], "title": "DeleteFoldersData" }, "DeleteFoldersRequest": { "properties": { "folder_ids": { "items": { "type": "string" }, "type": "array", "title": "Folder Ids" } }, "type": "object", "required": [ "folder_ids" ], "title": "DeleteFoldersRequest" }, "DeleteFoldersResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "data": { "anyOf": [ { "$ref": "#/components/schemas/DeleteFoldersData" }, { "type": "null" } ] } }, "type": "object", "required": [ "success" ], "title": "DeleteFoldersResponse" }, "DeleteMemoryData": { "properties": { "memory_id": { "type": "string", "title": "Memory Id" } }, "type": "object", "required": [ "memory_id" ], "title": "DeleteMemoryData", "description": "Outcome of a delete call." }, "DeleteMemoryResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "data": { "$ref": "#/components/schemas/DeleteMemoryData" } }, "type": "object", "required": [ "success", "message", "data" ], "title": "DeleteMemoryResponse" }, "FaceSearchRequest": { "properties": { "path": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Path" }, "base64_data": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Base64 Data" } }, "type": "object", "title": "FaceSearchRequest" }, "FolderDetails": { "properties": { "folder_id": { "type": "string", "title": "Folder Id" }, "folder_path": { "type": "string", "title": "Folder Path" }, "parent_folder_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Parent Folder Id" }, "last_modified_time": { "type": "integer", "title": "Last Modified Time" }, "AI_Tagging": { "type": "boolean", "title": "Ai Tagging" }, "taggingCompleted": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Taggingcompleted" }, "image_count": { "type": "integer", "title": "Image Count", "default": 0 }, "video_count": { "type": "integer", "title": "Video Count", "default": 0 }, "indexing_status": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Indexing Status", "default": "completed" } }, "type": "object", "required": [ "folder_id", "folder_path", "last_modified_time", "AI_Tagging" ], "title": "FolderDetails" }, "GenerateMemoriesData": { "properties": { "run_date": { "type": "string", "title": "Run Date" }, "status": { "type": "string", "enum": [ "running", "complete", "failed" ], "title": "Status" }, "queued": { "type": "boolean", "title": "Queued" } }, "type": "object", "required": [ "run_date", "status", "queued" ], "title": "GenerateMemoriesData", "description": "Outcome of a generate call." }, "GenerateMemoriesRequest": { "properties": { "force": { "type": "boolean", "title": "Force", "default": false }, "reference_date": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Reference Date" } }, "type": "object", "title": "GenerateMemoriesRequest", "description": "Request model for triggering a curation run." }, "GenerateMemoriesResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "data": { "$ref": "#/components/schemas/GenerateMemoriesData" } }, "type": "object", "required": [ "success", "message", "data" ], "title": "GenerateMemoriesResponse" }, "GetAlbumImagesRequest": { "properties": { "password": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Password" } }, "type": "object", "title": "GetAlbumImagesRequest" }, "GetAlbumImagesResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "image_ids": { "items": { "type": "string" }, "type": "array", "title": "Image Ids" } }, "type": "object", "required": [ "success", "image_ids" ], "title": "GetAlbumImagesResponse" }, "GetAlbumResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "data": { "$ref": "#/components/schemas/Album" } }, "type": "object", "required": [ "success", "data" ], "title": "GetAlbumResponse" }, "GetAlbumsResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "albums": { "items": { "$ref": "#/components/schemas/Album" }, "type": "array", "title": "Albums" } }, "type": "object", "required": [ "success", "albums" ], "title": "GetAlbumsResponse" }, "GetAllFoldersData": { "properties": { "folders": { "items": { "$ref": "#/components/schemas/FolderDetails" }, "type": "array", "title": "Folders" }, "total_count": { "type": "integer", "title": "Total Count" } }, "type": "object", "required": [ "folders", "total_count" ], "title": "GetAllFoldersData" }, "GetAllFoldersResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "data": { "anyOf": [ { "$ref": "#/components/schemas/GetAllFoldersData" }, { "type": "null" } ] } }, "type": "object", "required": [ "success" ], "title": "GetAllFoldersResponse" }, "GetAllImagesResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "data": { "items": { "$ref": "#/components/schemas/ImageData" }, "type": "array", "title": "Data" } }, "type": "object", "required": [ "success", "message", "data" ], "title": "GetAllImagesResponse" }, "GetAllVideosResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "data": { "items": { "$ref": "#/components/schemas/VideoData" }, "type": "array", "title": "Data" } }, "type": "object", "required": [ "success", "message", "data" ], "title": "GetAllVideosResponse" }, "GetClusterImagesData": { "properties": { "cluster_id": { "type": "string", "title": "Cluster Id" }, "cluster_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cluster Name" }, "images": { "items": { "$ref": "#/components/schemas/ImageInCluster" }, "type": "array", "title": "Images" }, "total_images": { "type": "integer", "title": "Total Images" } }, "type": "object", "required": [ "cluster_id", "images", "total_images" ], "title": "GetClusterImagesData", "description": "Data model for cluster images response." }, "GetClusterImagesResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "data": { "anyOf": [ { "$ref": "#/components/schemas/GetClusterImagesData" }, { "type": "null" } ] } }, "type": "object", "required": [ "success" ], "title": "GetClusterImagesResponse", "description": "Response model for getting images in a cluster." }, "GetClustersData": { "properties": { "clusters": { "items": { "$ref": "#/components/schemas/ClusterMetadata" }, "type": "array", "title": "Clusters" } }, "type": "object", "required": [ "clusters" ], "title": "GetClustersData" }, "GetClustersResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "data": { "anyOf": [ { "$ref": "#/components/schemas/GetClustersData" }, { "type": "null" } ] } }, "type": "object", "required": [ "success" ], "title": "GetClustersResponse" }, "GetMemoriesData": { "properties": { "memories": { "items": { "$ref": "#/components/schemas/MemoryCard" }, "type": "array", "title": "Memories" }, "total_count": { "type": "integer", "title": "Total Count", "default": 0 } }, "type": "object", "title": "GetMemoriesData", "description": "Paginated memory cards." }, "GetMemoriesResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "data": { "$ref": "#/components/schemas/GetMemoriesData" } }, "type": "object", "required": [ "success", "message", "data" ], "title": "GetMemoriesResponse" }, "GetMemoryData": { "properties": { "memory": { "$ref": "#/components/schemas/MemoryStory" } }, "type": "object", "required": [ "memory" ], "title": "GetMemoryData", "description": "A single memory story." }, "GetMemoryResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "data": { "$ref": "#/components/schemas/GetMemoryData" } }, "type": "object", "required": [ "success", "message", "data" ], "title": "GetMemoryResponse" }, "GetTodayMemoryData": { "properties": { "memory": { "anyOf": [ { "$ref": "#/components/schemas/MemoryStory" }, { "type": "null" } ] } }, "type": "object", "title": "GetTodayMemoryData", "description": "The memory to surface now, if any.\n\n`memory` is null rather than a 404 when nothing qualifies: this endpoint is\npolled, and an empty library is a normal state, not an error." }, "GetTodayMemoryResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "data": { "$ref": "#/components/schemas/GetTodayMemoryData" } }, "type": "object", "required": [ "success", "message", "data" ], "title": "GetTodayMemoryResponse" }, "GetUserPreferencesResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "user_preferences": { "$ref": "#/components/schemas/UserPreferencesData" } }, "type": "object", "required": [ "success", "message", "user_preferences" ], "title": "GetUserPreferencesResponse", "description": "Response model for getting user preferences" }, "GlobalReclusterData": { "properties": { "clusters_created": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Clusters Created" }, "faces_skipped": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Faces Skipped" } }, "type": "object", "title": "GlobalReclusterData" }, "GlobalReclusterResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "data": { "anyOf": [ { "$ref": "#/components/schemas/GlobalReclusterData" }, { "type": "null" } ] } }, "type": "object", "required": [ "success" ], "title": "GlobalReclusterResponse" }, "HTTPValidationError": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "ImageData": { "properties": { "id": { "type": "string", "title": "Id" }, "path": { "type": "string", "title": "Path" }, "folder_id": { "type": "string", "title": "Folder Id" }, "thumbnailPath": { "type": "string", "title": "Thumbnailpath" }, "metadata": { "$ref": "#/components/schemas/MetadataModel" }, "isTagged": { "type": "boolean", "title": "Istagged" }, "isFavourite": { "type": "boolean", "title": "Isfavourite" }, "tags": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Tags" } }, "type": "object", "required": [ "id", "path", "folder_id", "thumbnailPath", "metadata", "isTagged", "isFavourite" ], "title": "ImageData" }, "ImageIdsRequest": { "properties": { "image_ids": { "items": { "type": "string" }, "type": "array", "title": "Image Ids" } }, "type": "object", "required": [ "image_ids" ], "title": "ImageIdsRequest" }, "ImageInCluster": { "properties": { "id": { "type": "string", "title": "Id" }, "path": { "type": "string", "title": "Path" }, "thumbnailPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Thumbnailpath" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "face_id": { "type": "integer", "title": "Face Id" }, "confidence": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Confidence" }, "bbox": { "anyOf": [ { "additionalProperties": { "anyOf": [ { "type": "integer" }, { "type": "number" } ] }, "type": "object" }, { "type": "null" } ], "title": "Bbox" } }, "type": "object", "required": [ "id", "path", "face_id" ], "title": "ImageInCluster", "description": "Represents an image that contains faces from a specific cluster." }, "InputType": { "type": "string", "enum": [ "path", "base64" ], "title": "InputType" }, "MemoriesPreferences": { "properties": { "enabled": { "type": "boolean", "title": "Enabled", "default": true }, "notifications_enabled": { "type": "boolean", "title": "Notifications Enabled", "default": false }, "story_music_enabled": { "type": "boolean", "title": "Story Music Enabled", "default": false }, "slide_duration_seconds": { "type": "number", "maximum": 30.0, "minimum": 1.0, "title": "Slide Duration Seconds", "default": 5.0 }, "include_videos": { "type": "boolean", "title": "Include Videos", "default": true }, "min_images": { "type": "integer", "maximum": 50.0, "minimum": 2.0, "title": "Min Images", "default": 5 }, "max_images": { "type": "integer", "maximum": 100.0, "minimum": 5.0, "title": "Max Images", "default": 30 }, "weights": { "$ref": "#/components/schemas/MemoryScoringWeights" } }, "type": "object", "title": "MemoriesPreferences", "description": "Memory generation and delivery preferences." }, "MemoriesPreferencesUpdate": { "properties": { "enabled": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Enabled" }, "notifications_enabled": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Notifications Enabled" }, "story_music_enabled": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Story Music Enabled" }, "slide_duration_seconds": { "anyOf": [ { "type": "number", "maximum": 30.0, "minimum": 1.0 }, { "type": "null" } ], "title": "Slide Duration Seconds" }, "include_videos": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Include Videos" }, "min_images": { "anyOf": [ { "type": "integer", "maximum": 50.0, "minimum": 2.0 }, { "type": "null" } ], "title": "Min Images" }, "max_images": { "anyOf": [ { "type": "integer", "maximum": 100.0, "minimum": 5.0 }, { "type": "null" } ], "title": "Max Images" }, "weights": { "anyOf": [ { "$ref": "#/components/schemas/MemoryScoringWeightsUpdate" }, { "type": "null" } ] } }, "type": "object", "title": "MemoriesPreferencesUpdate", "description": "Partial update for memories preferences; every field is optional." }, "MemoryCard": { "properties": { "memory_id": { "type": "string", "title": "Memory Id" }, "dedupe_key": { "type": "string", "title": "Dedupe Key" }, "event_type": { "type": "string", "enum": [ "anniversary", "import_event", "semantic_event" ], "title": "Event Type" }, "status": { "type": "string", "enum": [ "pending", "complete", "failed", "empty" ], "title": "Status" }, "title": { "type": "string", "title": "Title" }, "subtitle": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Subtitle" }, "place_label": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Place Label" }, "center_lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Center Lat" }, "center_lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Center Lon" }, "surface_date": { "type": "string", "title": "Surface Date" }, "period_start": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Period Start" }, "period_end": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Period End" }, "image_count": { "type": "integer", "title": "Image Count", "default": 0 }, "video_count": { "type": "integer", "title": "Video Count", "default": 0 }, "cover_image_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cover Image Id" }, "cover_thumbnail_path": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cover Thumbnail Path" }, "score": { "type": "number", "title": "Score", "default": 0.0 }, "notified_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Notified At" }, "viewed_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Viewed At" }, "dismissed": { "type": "boolean", "title": "Dismissed", "default": false }, "created_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Created At" } }, "type": "object", "required": [ "memory_id", "dedupe_key", "event_type", "status", "title", "surface_date" ], "title": "MemoryCard", "description": "Memory summary, without the image set. Used by the history filmstrip." }, "MemoryImageItem": { "properties": { "id": { "type": "string", "title": "Id" }, "path": { "type": "string", "title": "Path" }, "thumbnailPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Thumbnailpath" }, "captured_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Captured At" }, "latitude": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Latitude" }, "longitude": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Longitude" }, "isFavourite": { "type": "boolean", "title": "Isfavourite", "default": false }, "sort_order": { "type": "integer", "title": "Sort Order" }, "score": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Score" } }, "type": "object", "required": [ "id", "path", "sort_order" ], "title": "MemoryImageItem", "description": "A single curated image within a memory." }, "MemoryScoringWeights": { "properties": { "favourite": { "type": "number", "maximum": 1.0, "minimum": 0.0, "title": "Favourite", "default": 0.22 }, "known_people": { "type": "number", "maximum": 1.0, "minimum": 0.0, "title": "Known People", "default": 0.2 }, "event_strength": { "type": "number", "maximum": 1.0, "minimum": 0.0, "title": "Event Strength", "default": 0.18 }, "face_presence": { "type": "number", "maximum": 1.0, "minimum": 0.0, "title": "Face Presence", "default": 0.12 }, "semantic_confidence": { "type": "number", "maximum": 1.0, "minimum": 0.0, "title": "Semantic Confidence", "default": 0.1 }, "gps_novelty": { "type": "number", "maximum": 1.0, "minimum": 0.0, "title": "Gps Novelty", "default": 0.1 }, "in_album": { "type": "number", "maximum": 1.0, "minimum": 0.0, "title": "In Album", "default": 0.08 } }, "type": "object", "title": "MemoryScoringWeights", "description": "Relative importance of each memory scoring signal.\n\nWeights are normalized to sum to 1.0 on validation, so a UI slider set\nnever has to land on an exact total." }, "MemoryScoringWeightsUpdate": { "properties": { "favourite": { "anyOf": [ { "type": "number", "maximum": 1.0, "minimum": 0.0 }, { "type": "null" } ], "title": "Favourite" }, "known_people": { "anyOf": [ { "type": "number", "maximum": 1.0, "minimum": 0.0 }, { "type": "null" } ], "title": "Known People" }, "event_strength": { "anyOf": [ { "type": "number", "maximum": 1.0, "minimum": 0.0 }, { "type": "null" } ], "title": "Event Strength" }, "face_presence": { "anyOf": [ { "type": "number", "maximum": 1.0, "minimum": 0.0 }, { "type": "null" } ], "title": "Face Presence" }, "semantic_confidence": { "anyOf": [ { "type": "number", "maximum": 1.0, "minimum": 0.0 }, { "type": "null" } ], "title": "Semantic Confidence" }, "gps_novelty": { "anyOf": [ { "type": "number", "maximum": 1.0, "minimum": 0.0 }, { "type": "null" } ], "title": "Gps Novelty" }, "in_album": { "anyOf": [ { "type": "number", "maximum": 1.0, "minimum": 0.0 }, { "type": "null" } ], "title": "In Album" } }, "type": "object", "title": "MemoryScoringWeightsUpdate", "description": "Partial update for scoring weights.\n\nDeliberately does not normalize: rescaling a single slider to 1.0 would\nwipe out the others. Stored values stay raw and are normalized on read." }, "MemoryStatusData": { "properties": { "run_date": { "type": "string", "title": "Run Date" }, "run_status": { "anyOf": [ { "type": "string", "enum": [ "running", "complete", "failed" ] }, { "type": "null" } ], "title": "Run Status" }, "run_started_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Run Started At" }, "indexing_busy": { "type": "boolean", "title": "Indexing Busy", "default": false }, "unviewed_count": { "type": "integer", "title": "Unviewed Count", "default": 0 }, "latest_memory_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Latest Memory Id" }, "memories_enabled": { "type": "boolean", "title": "Memories Enabled", "default": true }, "notifications_enabled": { "type": "boolean", "title": "Notifications Enabled", "default": false } }, "type": "object", "required": [ "run_date" ], "title": "MemoryStatusData", "description": "Scheduler-facing snapshot. Polled by the Tauri background task." }, "MemoryStatusResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "data": { "$ref": "#/components/schemas/MemoryStatusData" } }, "type": "object", "required": [ "success", "message", "data" ], "title": "MemoryStatusResponse" }, "MemoryStory": { "properties": { "memory_id": { "type": "string", "title": "Memory Id" }, "dedupe_key": { "type": "string", "title": "Dedupe Key" }, "event_type": { "type": "string", "enum": [ "anniversary", "import_event", "semantic_event" ], "title": "Event Type" }, "status": { "type": "string", "enum": [ "pending", "complete", "failed", "empty" ], "title": "Status" }, "title": { "type": "string", "title": "Title" }, "subtitle": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Subtitle" }, "place_label": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Place Label" }, "center_lat": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Center Lat" }, "center_lon": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Center Lon" }, "surface_date": { "type": "string", "title": "Surface Date" }, "period_start": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Period Start" }, "period_end": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Period End" }, "image_count": { "type": "integer", "title": "Image Count", "default": 0 }, "video_count": { "type": "integer", "title": "Video Count", "default": 0 }, "cover_image_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cover Image Id" }, "cover_thumbnail_path": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Cover Thumbnail Path" }, "score": { "type": "number", "title": "Score", "default": 0.0 }, "notified_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Notified At" }, "viewed_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Viewed At" }, "dismissed": { "type": "boolean", "title": "Dismissed", "default": false }, "created_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Created At" }, "images": { "items": { "$ref": "#/components/schemas/MemoryImageItem" }, "type": "array", "title": "Images" }, "videos": { "items": { "$ref": "#/components/schemas/MemoryVideoItem" }, "type": "array", "title": "Videos" }, "signals": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Signals" } }, "type": "object", "required": [ "memory_id", "dedupe_key", "event_type", "status", "title", "surface_date" ], "title": "MemoryStory", "description": "A memory with its full image set, for the story viewer." }, "MemoryVideoItem": { "properties": { "id": { "type": "string", "title": "Id" }, "path": { "type": "string", "title": "Path" }, "thumbnailPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Thumbnailpath" }, "captured_at": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Captured At" }, "duration": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Duration" }, "isFavourite": { "type": "boolean", "title": "Isfavourite", "default": false }, "sort_order": { "type": "integer", "title": "Sort Order" }, "score": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Score" } }, "type": "object", "required": [ "id", "path", "sort_order" ], "title": "MemoryVideoItem", "description": "A short clip curated into a memory, sharing the images' sort_order." }, "MetadataModel": { "properties": { "name": { "type": "string", "title": "Name" }, "date_created": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Date Created" }, "width": { "type": "integer", "title": "Width" }, "height": { "type": "integer", "title": "Height" }, "file_location": { "type": "string", "title": "File Location" }, "file_size": { "type": "integer", "title": "File Size" }, "item_type": { "type": "string", "title": "Item Type" }, "latitude": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Latitude" }, "longitude": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Longitude" }, "location": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Location" } }, "type": "object", "required": [ "name", "date_created", "width", "height", "file_location", "file_size", "item_type" ], "title": "MetadataModel" }, "MultiPersonSearchData": { "properties": { "images": { "items": { "$ref": "#/components/schemas/MultiPersonSearchImage" }, "type": "array", "title": "Images" }, "total": { "type": "integer", "title": "Total" }, "match_mode": { "type": "string", "title": "Match Mode" } }, "type": "object", "required": [ "images", "total", "match_mode" ], "title": "MultiPersonSearchData" }, "MultiPersonSearchImage": { "properties": { "id": { "type": "string", "title": "Id" }, "path": { "type": "string", "title": "Path" }, "thumbnailPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Thumbnailpath" }, "metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Metadata" }, "match_count": { "type": "integer", "title": "Match Count" } }, "type": "object", "required": [ "id", "path", "match_count" ], "title": "MultiPersonSearchImage" }, "MultiPersonSearchRequest": { "properties": { "cluster_ids": { "items": { "type": "string" }, "type": "array", "title": "Cluster Ids" }, "match_mode": { "type": "string", "title": "Match Mode", "default": "match_any" } }, "type": "object", "required": [ "cluster_ids" ], "title": "MultiPersonSearchRequest" }, "MultiPersonSearchResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "data": { "anyOf": [ { "$ref": "#/components/schemas/MultiPersonSearchData" }, { "type": "null" } ] } }, "type": "object", "required": [ "success" ], "title": "MultiPersonSearchResponse" }, "PurgeFrameCacheResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "bytes_reclaimed": { "type": "integer", "title": "Bytes Reclaimed" } }, "type": "object", "required": [ "success", "message", "bytes_reclaimed" ], "title": "PurgeFrameCacheResponse" }, "RenameClusterData": { "properties": { "cluster_id": { "type": "string", "title": "Cluster Id" }, "cluster_name": { "type": "string", "title": "Cluster Name" } }, "type": "object", "required": [ "cluster_id", "cluster_name" ], "title": "RenameClusterData" }, "RenameClusterRequest": { "properties": { "cluster_name": { "type": "string", "title": "Cluster Name" } }, "type": "object", "required": [ "cluster_name" ], "title": "RenameClusterRequest" }, "RenameClusterResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "data": { "anyOf": [ { "$ref": "#/components/schemas/RenameClusterData" }, { "type": "null" } ] } }, "type": "object", "required": [ "success" ], "title": "RenameClusterResponse" }, "ScoredVideoData": { "properties": { "id": { "type": "string", "title": "Id" }, "path": { "type": "string", "title": "Path" }, "folder_id": { "type": "string", "title": "Folder Id" }, "thumbnailPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Thumbnailpath" }, "metadata": { "$ref": "#/components/schemas/VideoMetadataModel" }, "isFavourite": { "type": "boolean", "title": "Isfavourite" }, "tags": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Tags" }, "score": { "type": "number", "title": "Score" }, "best_frame_timestamp": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Best Frame Timestamp" } }, "type": "object", "required": [ "id", "path", "folder_id", "thumbnailPath", "metadata", "isFavourite", "score" ], "title": "ScoredVideoData" }, "SemanticSearchImage": { "properties": { "id": { "type": "string", "title": "Id" }, "path": { "type": "string", "title": "Path" }, "folder_id": { "type": "string", "title": "Folder Id" }, "thumbnailPath": { "type": "string", "title": "Thumbnailpath" }, "metadata": { "$ref": "#/components/schemas/MetadataModel" }, "isTagged": { "type": "boolean", "title": "Istagged" }, "isFavourite": { "type": "boolean", "title": "Isfavourite" }, "tags": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Tags" }, "score": { "type": "number", "title": "Score" } }, "type": "object", "required": [ "id", "path", "folder_id", "thumbnailPath", "metadata", "isTagged", "isFavourite", "score" ], "title": "SemanticSearchImage" }, "SetCoverImageRequest": { "properties": { "image_id": { "type": "string", "minLength": 1, "title": "Image Id" } }, "type": "object", "required": [ "image_id" ], "title": "SetCoverImageRequest" }, "SetupRequest": { "properties": { "tier": { "type": "string", "title": "Tier" } }, "type": "object", "required": [ "tier" ], "title": "SetupRequest" }, "ShutdownResponse": { "properties": { "status": { "type": "string", "title": "Status" }, "message": { "type": "string", "title": "Message" } }, "type": "object", "required": [ "status", "message" ], "title": "ShutdownResponse", "description": "Response model for shutdown endpoint." }, "SuccessResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "msg": { "type": "string", "title": "Msg" } }, "type": "object", "required": [ "success", "msg" ], "title": "SuccessResponse" }, "SyncFolderData": { "properties": { "deleted_count": { "type": "integer", "title": "Deleted Count" }, "deleted_folders": { "items": { "type": "string" }, "type": "array", "title": "Deleted Folders" }, "added_count": { "type": "integer", "title": "Added Count" }, "added_folders": { "items": { "type": "string" }, "type": "array", "title": "Added Folders" }, "folder_id": { "type": "string", "title": "Folder Id" }, "folder_path": { "type": "string", "title": "Folder Path" } }, "type": "object", "required": [ "deleted_count", "deleted_folders", "added_count", "added_folders", "folder_id", "folder_path" ], "title": "SyncFolderData" }, "SyncFolderRequest": { "properties": { "folder_path": { "type": "string", "title": "Folder Path" }, "folder_id": { "type": "string", "title": "Folder Id" } }, "type": "object", "required": [ "folder_path", "folder_id" ], "title": "SyncFolderRequest" }, "SyncFolderResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "data": { "anyOf": [ { "$ref": "#/components/schemas/SyncFolderData" }, { "type": "null" } ] } }, "type": "object", "required": [ "success" ], "title": "SyncFolderResponse" }, "ToggleFavouriteResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "video_id": { "type": "string", "title": "Video Id" }, "isFavourite": { "type": "boolean", "title": "Isfavourite" } }, "type": "object", "required": [ "success", "video_id", "isFavourite" ], "title": "ToggleFavouriteResponse" }, "UpdateAITaggingData": { "properties": { "updated_count": { "type": "integer", "title": "Updated Count" }, "folder_ids": { "items": { "type": "string" }, "type": "array", "title": "Folder Ids" } }, "type": "object", "required": [ "updated_count", "folder_ids" ], "title": "UpdateAITaggingData" }, "UpdateAITaggingRequest": { "properties": { "folder_ids": { "items": { "type": "string" }, "type": "array", "title": "Folder Ids" } }, "type": "object", "required": [ "folder_ids" ], "title": "UpdateAITaggingRequest" }, "UpdateAITaggingResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" }, "data": { "anyOf": [ { "$ref": "#/components/schemas/UpdateAITaggingData" }, { "type": "null" } ] } }, "type": "object", "required": [ "success" ], "title": "UpdateAITaggingResponse" }, "UpdateAlbumRequest": { "properties": { "name": { "type": "string", "title": "Name" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description", "default": "" }, "is_locked": { "type": "boolean", "title": "Is Locked" }, "current_password": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Current Password" }, "password": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Password" } }, "type": "object", "required": [ "name", "is_locked" ], "title": "UpdateAlbumRequest" }, "UpdateMemoryRequest": { "properties": { "viewed": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Viewed" }, "dismissed": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Dismissed" }, "notified": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Notified" } }, "type": "object", "title": "UpdateMemoryRequest", "description": "Request model for updating a memory's user-facing state." }, "UpdateMemoryResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "data": { "$ref": "#/components/schemas/GetMemoryData" } }, "type": "object", "required": [ "success", "message", "data" ], "title": "UpdateMemoryResponse" }, "UpdateUserPreferencesRequest": { "properties": { "YOLO_model_size": { "anyOf": [ { "type": "string", "enum": [ "nano", "small", "medium" ] }, { "type": "null" } ], "title": "Yolo Model Size" }, "GPU_Acceleration": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Gpu Acceleration" }, "Video_Frame_Interval": { "anyOf": [ { "type": "number", "maximum": 300.0, "minimum": 0.5 }, { "type": "null" } ], "title": "Video Frame Interval" }, "memories": { "anyOf": [ { "$ref": "#/components/schemas/MemoriesPreferencesUpdate" }, { "type": "null" } ] } }, "type": "object", "title": "UpdateUserPreferencesRequest", "description": "Request model for updating user preferences" }, "UpdateUserPreferencesResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "user_preferences": { "$ref": "#/components/schemas/UserPreferencesData" } }, "type": "object", "required": [ "success", "message", "user_preferences" ], "title": "UpdateUserPreferencesResponse", "description": "Response model for updating user preferences" }, "UserPreferencesData": { "properties": { "YOLO_model_size": { "type": "string", "enum": [ "nano", "small", "medium" ], "title": "Yolo Model Size", "default": "small" }, "GPU_Acceleration": { "type": "boolean", "title": "Gpu Acceleration", "default": true }, "Video_Frame_Interval": { "type": "number", "maximum": 300.0, "minimum": 0.5, "title": "Video Frame Interval", "default": 5.0 }, "memories": { "$ref": "#/components/schemas/MemoriesPreferences" } }, "type": "object", "title": "UserPreferencesData", "description": "User preferences data structure" }, "ValidationError": { "properties": { "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "type": "array", "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "VideoData": { "properties": { "id": { "type": "string", "title": "Id" }, "path": { "type": "string", "title": "Path" }, "folder_id": { "type": "string", "title": "Folder Id" }, "thumbnailPath": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Thumbnailpath" }, "metadata": { "$ref": "#/components/schemas/VideoMetadataModel" }, "isFavourite": { "type": "boolean", "title": "Isfavourite" }, "tags": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Tags" } }, "type": "object", "required": [ "id", "path", "folder_id", "thumbnailPath", "metadata", "isFavourite" ], "title": "VideoData" }, "VideoMetadataModel": { "properties": { "name": { "type": "string", "title": "Name" }, "date_created": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Date Created" }, "width": { "type": "integer", "title": "Width" }, "height": { "type": "integer", "title": "Height" }, "duration": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Duration" }, "fps": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Fps" }, "file_location": { "type": "string", "title": "File Location" }, "file_size": { "type": "integer", "title": "File Size" }, "item_type": { "type": "string", "title": "Item Type" } }, "type": "object", "required": [ "name", "date_created", "width", "height", "file_location", "file_size", "item_type" ], "title": "VideoMetadataModel" }, "app__routes__images__SemanticSearchData": { "properties": { "images": { "items": { "$ref": "#/components/schemas/SemanticSearchImage" }, "type": "array", "title": "Images" }, "total": { "type": "integer", "title": "Total" } }, "type": "object", "required": [ "images", "total" ], "title": "SemanticSearchData" }, "app__routes__images__SemanticSearchResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "data": { "$ref": "#/components/schemas/app__routes__images__SemanticSearchData" } }, "type": "object", "required": [ "success", "message", "data" ], "title": "SemanticSearchResponse" }, "app__routes__images__ToggleFavouriteRequest": { "properties": { "image_id": { "type": "string", "title": "Image Id" } }, "type": "object", "required": [ "image_id" ], "title": "ToggleFavouriteRequest" }, "app__routes__videos__SemanticSearchData": { "properties": { "videos": { "items": { "$ref": "#/components/schemas/ScoredVideoData" }, "type": "array", "title": "Videos" }, "total": { "type": "integer", "title": "Total" } }, "type": "object", "required": [ "videos", "total" ], "title": "SemanticSearchData" }, "app__routes__videos__SemanticSearchResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "message": { "type": "string", "title": "Message" }, "data": { "$ref": "#/components/schemas/app__routes__videos__SemanticSearchData" } }, "type": "object", "required": [ "success", "message", "data" ], "title": "SemanticSearchResponse" }, "app__routes__videos__ToggleFavouriteRequest": { "properties": { "video_id": { "type": "string", "title": "Video Id" } }, "type": "object", "required": [ "video_id" ], "title": "ToggleFavouriteRequest" }, "app__schemas__face_clusters__ErrorResponse": { "properties": { "success": { "type": "boolean", "title": "Success", "default": false }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" } }, "type": "object", "title": "ErrorResponse" }, "app__schemas__folders__ErrorResponse": { "properties": { "success": { "type": "boolean", "title": "Success", "default": false }, "message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Message" }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Error" } }, "type": "object", "title": "ErrorResponse" }, "app__schemas__images__ErrorResponse": { "properties": { "success": { "type": "boolean", "title": "Success", "default": false }, "message": { "type": "string", "title": "Message" }, "error": { "type": "string", "title": "Error" } }, "type": "object", "required": [ "message", "error" ], "title": "ErrorResponse" }, "app__schemas__memories__ErrorResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "error": { "type": "string", "title": "Error" }, "message": { "type": "string", "title": "Message" } }, "type": "object", "required": [ "success", "error", "message" ], "title": "ErrorResponse", "description": "Error response model" }, "app__schemas__user_preferences__ErrorResponse": { "properties": { "success": { "type": "boolean", "title": "Success" }, "error": { "type": "string", "title": "Error" }, "message": { "type": "string", "title": "Message" } }, "type": "object", "required": [ "success", "error", "message" ], "title": "ErrorResponse", "description": "Error response model" }, "app__schemas__videos__ErrorResponse": { "properties": { "success": { "type": "boolean", "title": "Success", "default": false }, "message": { "type": "string", "title": "Message" }, "error": { "type": "string", "title": "Error" } }, "type": "object", "required": [ "message", "error" ], "title": "ErrorResponse" } } } }