{ "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", "operationId": "get_albums_albums__get", "parameters": [ { "name": "show_hidden", "in": "query", "required": false, "schema": { "type": "boolean", "default": false, "title": "Show Hidden" } } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAlbumsResponse" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } }, "post": { "tags": [ "Albums" ], "summary": "Create Album", "operationId": "create_album_albums__post", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAlbumRequest" } } } }, "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" } } } } } } }, "/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": { "$ref": "#/components/schemas/InputType", "description": "Choose input type: 'path' or 'base64'", "default": "path" }, "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" } } } } } } }, "/api/memories/generate": { "post": { "tags": [ "memories" ], "summary": "Generate Memories", "description": "SIMPLIFIED: Generate memories from ALL images.\n- GPS images \u2192 location-based memories\n- Non-GPS images \u2192 monthly date-based memories\n\nReturns simple breakdown: {location_count, date_count, total}", "operationId": "generate_memories_api_memories_generate_post", "parameters": [ { "name": "location_radius_km", "in": "query", "required": false, "schema": { "type": "number", "maximum": 100, "minimum": 0.1, "description": "Location clustering radius in km", "default": 5.0, "title": "Location Radius Km" }, "description": "Location clustering radius in km" }, { "name": "date_tolerance_days", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 30, "minimum": 1, "description": "Date tolerance in days", "default": 3, "title": "Date Tolerance Days" }, "description": "Date tolerance in days" }, { "name": "min_images", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 10, "minimum": 1, "description": "Minimum images per memory", "default": 2, "title": "Min Images" }, "description": "Minimum images per memory" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/memories/timeline": { "get": { "tags": [ "memories" ], "summary": "Get Timeline", "description": "Get memories from the past N days as a timeline.\n\nThis endpoint:\n1. Calculates date range (today - N days to today)\n2. Fetches images within that date range\n3. Clusters them into memories\n4. Returns timeline of memories\n\nArgs:\n days: Number of days to look back (default: 365 = 1 year)\n location_radius_km: Location clustering radius (default: 5km)\n date_tolerance_days: Date tolerance for temporal clustering (default: 3)\n\nReturns:\n TimelineResponse with memories ordered by date\n\nRaises:\n HTTPException: If database query fails", "operationId": "get_timeline_api_memories_timeline_get", "parameters": [ { "name": "days", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 3650, "minimum": 1, "description": "Number of days to look back", "default": 365, "title": "Days" }, "description": "Number of days to look back" }, { "name": "location_radius_km", "in": "query", "required": false, "schema": { "type": "number", "maximum": 100, "minimum": 0.1, "description": "Location clustering radius in km", "default": 5.0, "title": "Location Radius Km" }, "description": "Location clustering radius in km" }, { "name": "date_tolerance_days", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 30, "minimum": 1, "description": "Date tolerance in days", "default": 3, "title": "Date Tolerance Days" }, "description": "Date tolerance in days" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/api/memories/on-this-day": { "get": { "tags": [ "memories" ], "summary": "Get On This Day", "description": "Get photos taken on this date in previous years.\n\nThis endpoint:\n1. Gets current month and day\n2. Searches for images from this month-day in all previous years\n3. Groups by year\n4. Returns images sorted by year (most recent first)\n\nReturns:\n OnThisDayResponse with images from this date in previous years\n\nRaises:\n HTTPException: If database query fails", "operationId": "get_on_this_day_api_memories_on_this_day_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/api/memories/locations": { "get": { "tags": [ "memories" ], "summary": "Get Locations", "description": "Get all unique locations where photos were taken.\n\nThis endpoint:\n1. Fetches all images with GPS coordinates\n2. Clusters them by location\n3. Returns location clusters with photo counts\n4. Includes sample images for each location\n\nArgs:\n location_radius_km: Location clustering radius (default: 5km)\n max_sample_images: Maximum sample images per location (default: 5)\n\nReturns:\n LocationsResponse with list of location clusters\n\nRaises:\n HTTPException: If database query fails", "operationId": "get_locations_api_memories_locations_get", "parameters": [ { "name": "location_radius_km", "in": "query", "required": false, "schema": { "type": "number", "maximum": 100, "minimum": 0.1, "description": "Location clustering radius in km", "default": 5.0, "title": "Location Radius Km" }, "description": "Location clustering radius in km" }, { "name": "max_sample_images", "in": "query", "required": false, "schema": { "type": "integer", "maximum": 20, "minimum": 1, "description": "Max sample images per location", "default": 5, "title": "Max Sample Images" }, "description": "Max sample images per location" } ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "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_hidden": { "type": "boolean", "title": "Is Hidden" } }, "type": "object", "required": [ "album_id", "album_name", "description", "is_hidden" ], "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_hidden": { "type": "boolean", "title": "Is Hidden", "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" }, "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" }, "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" }, "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": [ { "additionalProperties": true, "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" }, "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": [ { "additionalProperties": true, "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" }, "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_hidden": { "type": "boolean", "title": "Is Hidden" }, "current_password": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Current Password" }, "password": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Password" } }, "type": "object", "required": [ "name", "is_hidden" ], "title": "UpdateAlbumRequest" }, "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": 60.0, "minimum": 1.0 }, { "type": "null" } ], "title": "Video Frame Interval" } }, "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": 60.0, "minimum": 1.0, "title": "Video Frame Interval", "default": 5.0 } }, "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__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" } } } }