immichpy 1.6.5__py3-none-any.whl → 1.7.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. immichpy/cli/__main__.py +1 -1
  2. immichpy/cli/commands/activities.py +23 -11
  3. immichpy/cli/commands/albums.py +34 -20
  4. immichpy/cli/commands/api_keys.py +6 -4
  5. immichpy/cli/commands/assets.py +274 -65
  6. immichpy/cli/commands/authentication.py +115 -25
  7. immichpy/cli/commands/database_backups_admin.py +111 -0
  8. immichpy/cli/commands/download.py +13 -5
  9. immichpy/cli/commands/duplicates.py +1 -1
  10. immichpy/cli/commands/faces.py +17 -11
  11. immichpy/cli/commands/jobs.py +6 -4
  12. immichpy/cli/commands/libraries.py +15 -9
  13. immichpy/cli/commands/maintenance_admin.py +39 -2
  14. immichpy/cli/commands/map.py +8 -8
  15. immichpy/cli/commands/memories.py +35 -21
  16. immichpy/cli/commands/notifications.py +16 -8
  17. immichpy/cli/commands/notifications_admin.py +43 -17
  18. immichpy/cli/commands/partners.py +9 -3
  19. immichpy/cli/commands/people.py +30 -24
  20. immichpy/cli/commands/plugins.py +14 -0
  21. immichpy/cli/commands/queues.py +8 -6
  22. immichpy/cli/commands/search.py +395 -189
  23. immichpy/cli/commands/server.py +6 -2
  24. immichpy/cli/commands/sessions.py +6 -4
  25. immichpy/cli/commands/shared_links.py +42 -25
  26. immichpy/cli/commands/stacks.py +4 -4
  27. immichpy/cli/commands/sync.py +26 -10
  28. immichpy/cli/commands/system_config.py +216 -115
  29. immichpy/cli/commands/system_metadata.py +3 -1
  30. immichpy/cli/commands/tags.py +9 -9
  31. immichpy/cli/commands/trash.py +1 -1
  32. immichpy/cli/commands/users.py +57 -29
  33. immichpy/cli/commands/users_admin.py +79 -45
  34. immichpy/cli/commands/workflows.py +40 -11
  35. immichpy/cli/main.py +10 -2
  36. immichpy/cli/utils.py +2 -2
  37. immichpy/cli/wrapper/setup.py +1 -1
  38. immichpy/client/.openapi-generator/FILES +26 -2
  39. immichpy/client/generated/__init__.py +101 -7
  40. immichpy/client/generated/api/__init__.py +3 -0
  41. immichpy/client/generated/api/activities_api.py +73 -43
  42. immichpy/client/generated/api/albums_api.py +40 -19
  43. immichpy/client/generated/api/api_keys_api.py +1 -1
  44. immichpy/client/generated/api/assets_api.py +1768 -366
  45. immichpy/client/generated/api/authentication_admin_api.py +1 -1
  46. immichpy/client/generated/api/authentication_api.py +1 -1
  47. immichpy/client/generated/api/database_backups_admin_api.py +1224 -0
  48. immichpy/client/generated/api/deprecated_api.py +103 -73
  49. immichpy/client/generated/api/download_api.py +1 -1
  50. immichpy/client/generated/api/duplicates_api.py +1 -1
  51. immichpy/client/generated/api/faces_api.py +7 -7
  52. immichpy/client/generated/api/jobs_api.py +7 -7
  53. immichpy/client/generated/api/libraries_api.py +1 -1
  54. immichpy/client/generated/api/maintenance_admin_api.py +459 -1
  55. immichpy/client/generated/api/map_api.py +103 -49
  56. immichpy/client/generated/api/memories_api.py +109 -61
  57. immichpy/client/generated/api/notifications_admin_api.py +1 -1
  58. immichpy/client/generated/api/notifications_api.py +52 -25
  59. immichpy/client/generated/api/partners_api.py +7 -7
  60. immichpy/client/generated/api/people_api.py +37 -19
  61. immichpy/client/generated/api/plugins_api.py +230 -1
  62. immichpy/client/generated/api/queues_api.py +37 -31
  63. immichpy/client/generated/api/search_api.py +529 -283
  64. immichpy/client/generated/api/server_api.py +1 -1
  65. immichpy/client/generated/api/sessions_api.py +1 -1
  66. immichpy/client/generated/api/shared_links_api.py +53 -19
  67. immichpy/client/generated/api/stacks_api.py +13 -7
  68. immichpy/client/generated/api/sync_api.py +1 -1
  69. immichpy/client/generated/api/system_config_api.py +1 -1
  70. immichpy/client/generated/api/system_metadata_api.py +1 -1
  71. immichpy/client/generated/api/tags_api.py +1 -1
  72. immichpy/client/generated/api/timeline_api.py +1 -1
  73. immichpy/client/generated/api/trash_api.py +1 -1
  74. immichpy/client/generated/api/users_admin_api.py +55 -31
  75. immichpy/client/generated/api/users_api.py +16 -7
  76. immichpy/client/generated/api/views_api.py +1 -1
  77. immichpy/client/generated/api/workflows_api.py +1 -1
  78. immichpy/client/generated/api_client.py +1 -1
  79. immichpy/client/generated/configuration.py +2 -2
  80. immichpy/client/generated/exceptions.py +1 -1
  81. immichpy/client/generated/models/__init__.py +56 -3
  82. immichpy/client/generated/models/activity_create_dto.py +11 -5
  83. immichpy/client/generated/models/activity_response_dto.py +10 -6
  84. immichpy/client/generated/models/activity_statistics_response_dto.py +4 -4
  85. immichpy/client/generated/models/add_users_dto.py +2 -2
  86. immichpy/client/generated/models/admin_onboarding_update_dto.py +4 -2
  87. immichpy/client/generated/models/album_response_dto.py +28 -16
  88. immichpy/client/generated/models/album_statistics_response_dto.py +6 -4
  89. immichpy/client/generated/models/album_user_add_dto.py +3 -3
  90. immichpy/client/generated/models/album_user_create_dto.py +3 -3
  91. immichpy/client/generated/models/album_user_response_dto.py +3 -3
  92. immichpy/client/generated/models/album_user_role.py +2 -2
  93. immichpy/client/generated/models/albums_add_assets_dto.py +3 -3
  94. immichpy/client/generated/models/albums_add_assets_response_dto.py +4 -4
  95. immichpy/client/generated/models/albums_response.py +4 -2
  96. immichpy/client/generated/models/albums_update.py +5 -3
  97. immichpy/client/generated/models/api_key_create_dto.py +5 -3
  98. immichpy/client/generated/models/api_key_create_response_dto.py +2 -2
  99. immichpy/client/generated/models/api_key_response_dto.py +6 -6
  100. immichpy/client/generated/models/api_key_update_dto.py +5 -3
  101. immichpy/client/generated/models/asset_bulk_delete_dto.py +6 -4
  102. immichpy/client/generated/models/asset_bulk_update_dto.py +28 -12
  103. immichpy/client/generated/models/asset_bulk_upload_check_dto.py +3 -3
  104. immichpy/client/generated/models/asset_bulk_upload_check_item.py +3 -3
  105. immichpy/client/generated/models/asset_bulk_upload_check_response_dto.py +5 -3
  106. immichpy/client/generated/models/asset_bulk_upload_check_result.py +12 -6
  107. immichpy/client/generated/models/asset_copy_dto.py +16 -8
  108. immichpy/client/generated/models/asset_delta_sync_dto.py +5 -3
  109. immichpy/client/generated/models/asset_delta_sync_response_dto.py +6 -4
  110. immichpy/client/generated/models/asset_edit_action.py +35 -0
  111. immichpy/client/generated/models/asset_edit_action_crop.py +95 -0
  112. immichpy/client/generated/models/asset_edit_action_list_dto.py +104 -0
  113. immichpy/client/generated/models/asset_edit_action_list_dto_edits_inner.py +188 -0
  114. immichpy/client/generated/models/asset_edit_action_mirror.py +95 -0
  115. immichpy/client/generated/models/asset_edit_action_rotate.py +95 -0
  116. immichpy/client/generated/models/asset_edits_dto.py +107 -0
  117. immichpy/client/generated/models/asset_face_create_dto.py +13 -9
  118. immichpy/client/generated/models/asset_face_delete_dto.py +3 -3
  119. immichpy/client/generated/models/asset_face_response_dto.py +26 -10
  120. immichpy/client/generated/models/asset_face_update_dto.py +3 -3
  121. immichpy/client/generated/models/asset_face_update_item.py +3 -3
  122. immichpy/client/generated/models/asset_face_without_person_response_dto.py +23 -9
  123. immichpy/client/generated/models/asset_full_sync_dto.py +13 -5
  124. immichpy/client/generated/models/asset_ids_dto.py +2 -2
  125. immichpy/client/generated/models/asset_ids_response_dto.py +6 -4
  126. immichpy/client/generated/models/asset_job_name.py +2 -2
  127. immichpy/client/generated/models/asset_jobs_dto.py +3 -3
  128. immichpy/client/generated/models/asset_media_response_dto.py +4 -4
  129. immichpy/client/generated/models/asset_media_size.py +2 -1
  130. immichpy/client/generated/models/asset_media_status.py +2 -2
  131. immichpy/client/generated/models/asset_metadata_bulk_delete_dto.py +103 -0
  132. immichpy/client/generated/models/asset_metadata_bulk_delete_item_dto.py +86 -0
  133. immichpy/client/generated/models/asset_metadata_bulk_response_dto.py +93 -0
  134. immichpy/client/generated/models/asset_metadata_bulk_upsert_dto.py +103 -0
  135. immichpy/client/generated/models/asset_metadata_bulk_upsert_item_dto.py +91 -0
  136. immichpy/client/generated/models/asset_metadata_response_dto.py +5 -6
  137. immichpy/client/generated/models/asset_metadata_upsert_dto.py +5 -3
  138. immichpy/client/generated/models/asset_metadata_upsert_item_dto.py +4 -5
  139. immichpy/client/generated/models/asset_ocr_response_dto.py +1 -1
  140. immichpy/client/generated/models/asset_order.py +2 -2
  141. immichpy/client/generated/models/asset_response_dto.py +66 -24
  142. immichpy/client/generated/models/asset_stack_response_dto.py +8 -4
  143. immichpy/client/generated/models/asset_stats_response_dto.py +5 -5
  144. immichpy/client/generated/models/asset_type_enum.py +2 -2
  145. immichpy/client/generated/models/asset_visibility.py +2 -2
  146. immichpy/client/generated/models/audio_codec.py +2 -2
  147. immichpy/client/generated/models/auth_status_response_dto.py +12 -6
  148. immichpy/client/generated/models/avatar_update.py +3 -3
  149. immichpy/client/generated/models/bulk_id_error_reason.py +2 -2
  150. immichpy/client/generated/models/bulk_id_response_dto.py +14 -5
  151. immichpy/client/generated/models/bulk_ids_dto.py +3 -3
  152. immichpy/client/generated/models/cast_response.py +4 -2
  153. immichpy/client/generated/models/cast_update.py +4 -2
  154. immichpy/client/generated/models/change_password_dto.py +6 -4
  155. immichpy/client/generated/models/check_existing_assets_dto.py +3 -3
  156. immichpy/client/generated/models/check_existing_assets_response_dto.py +4 -2
  157. immichpy/client/generated/models/clip_config.py +5 -3
  158. immichpy/client/generated/models/colorspace.py +1 -1
  159. immichpy/client/generated/models/contributor_count_response_dto.py +5 -3
  160. immichpy/client/generated/models/cq_mode.py +2 -2
  161. immichpy/client/generated/models/create_album_dto.py +9 -5
  162. immichpy/client/generated/models/create_library_dto.py +9 -5
  163. immichpy/client/generated/models/create_profile_image_response_dto.py +8 -4
  164. immichpy/client/generated/models/crop_parameters.py +105 -0
  165. immichpy/client/generated/models/database_backup_config.py +6 -4
  166. immichpy/client/generated/models/database_backup_delete_dto.py +82 -0
  167. immichpy/client/generated/models/database_backup_dto.py +85 -0
  168. immichpy/client/generated/models/database_backup_list_response_dto.py +98 -0
  169. immichpy/client/generated/models/download_archive_info.py +5 -3
  170. immichpy/client/generated/models/download_info_dto.py +11 -5
  171. immichpy/client/generated/models/download_response.py +8 -3
  172. immichpy/client/generated/models/download_response_dto.py +3 -3
  173. immichpy/client/generated/models/download_update.py +5 -3
  174. immichpy/client/generated/models/duplicate_detection_config.py +6 -3
  175. immichpy/client/generated/models/duplicate_response_dto.py +5 -3
  176. immichpy/client/generated/models/email_notifications_response.py +10 -4
  177. immichpy/client/generated/models/email_notifications_update.py +14 -4
  178. immichpy/client/generated/models/exif_response_dto.py +47 -23
  179. immichpy/client/generated/models/face_dto.py +3 -3
  180. immichpy/client/generated/models/facial_recognition_config.py +15 -6
  181. immichpy/client/generated/models/folders_response.py +5 -3
  182. immichpy/client/generated/models/folders_update.py +9 -3
  183. immichpy/client/generated/models/image_format.py +2 -2
  184. immichpy/client/generated/models/job_create_dto.py +3 -3
  185. immichpy/client/generated/models/job_name.py +3 -2
  186. immichpy/client/generated/models/job_settings_dto.py +4 -2
  187. immichpy/client/generated/models/library_response_dto.py +16 -10
  188. immichpy/client/generated/models/library_stats_response_dto.py +6 -6
  189. immichpy/client/generated/models/license_key_dto.py +7 -3
  190. immichpy/client/generated/models/license_response_dto.py +8 -4
  191. immichpy/client/generated/models/log_level.py +1 -1
  192. immichpy/client/generated/models/login_credential_dto.py +4 -4
  193. immichpy/client/generated/models/login_response_dto.py +13 -9
  194. immichpy/client/generated/models/logout_response_dto.py +3 -3
  195. immichpy/client/generated/models/machine_learning_availability_checks_dto.py +3 -3
  196. immichpy/client/generated/models/maintenance_action.py +4 -2
  197. immichpy/client/generated/models/maintenance_auth_dto.py +3 -3
  198. immichpy/client/generated/models/maintenance_detect_install_response_dto.py +101 -0
  199. immichpy/client/generated/models/maintenance_detect_install_storage_folder_dto.py +95 -0
  200. immichpy/client/generated/models/maintenance_login_dto.py +3 -3
  201. immichpy/client/generated/models/maintenance_status_response_dto.py +109 -0
  202. immichpy/client/generated/models/manual_job_name.py +2 -2
  203. immichpy/client/generated/models/map_marker_response_dto.py +8 -8
  204. immichpy/client/generated/models/map_reverse_geocode_response_dto.py +5 -5
  205. immichpy/client/generated/models/memories_response.py +4 -4
  206. immichpy/client/generated/models/memories_update.py +7 -3
  207. immichpy/client/generated/models/memory_create_dto.py +12 -6
  208. immichpy/client/generated/models/memory_response_dto.py +20 -12
  209. immichpy/client/generated/models/memory_search_order.py +1 -1
  210. immichpy/client/generated/models/memory_statistics_response_dto.py +3 -3
  211. immichpy/client/generated/models/memory_type.py +1 -1
  212. immichpy/client/generated/models/memory_update_dto.py +10 -4
  213. immichpy/client/generated/models/merge_person_dto.py +3 -3
  214. immichpy/client/generated/models/metadata_search_dto.py +124 -46
  215. immichpy/client/generated/models/{asset_metadata_key.py → mirror_axis.py} +6 -5
  216. immichpy/client/generated/models/mirror_parameters.py +83 -0
  217. immichpy/client/generated/models/notification_create_dto.py +18 -8
  218. immichpy/client/generated/models/notification_delete_all_dto.py +3 -3
  219. immichpy/client/generated/models/notification_dto.py +15 -9
  220. immichpy/client/generated/models/notification_level.py +1 -1
  221. immichpy/client/generated/models/notification_type.py +1 -1
  222. immichpy/client/generated/models/notification_update_all_dto.py +5 -3
  223. immichpy/client/generated/models/notification_update_dto.py +4 -2
  224. immichpy/client/generated/models/o_auth_authorize_response_dto.py +3 -3
  225. immichpy/client/generated/models/o_auth_callback_dto.py +8 -4
  226. immichpy/client/generated/models/o_auth_config_dto.py +10 -4
  227. immichpy/client/generated/models/o_auth_token_endpoint_auth_method.py +2 -2
  228. immichpy/client/generated/models/ocr_config.py +14 -6
  229. immichpy/client/generated/models/on_this_day_dto.py +2 -2
  230. immichpy/client/generated/models/onboarding_dto.py +4 -2
  231. immichpy/client/generated/models/onboarding_response_dto.py +4 -2
  232. immichpy/client/generated/models/partner_create_dto.py +4 -2
  233. immichpy/client/generated/models/partner_direction.py +1 -1
  234. immichpy/client/generated/models/partner_response_dto.py +16 -8
  235. immichpy/client/generated/models/partner_update_dto.py +4 -2
  236. immichpy/client/generated/models/people_response.py +5 -3
  237. immichpy/client/generated/models/people_response_dto.py +7 -5
  238. immichpy/client/generated/models/people_update.py +9 -3
  239. immichpy/client/generated/models/people_update_dto.py +3 -3
  240. immichpy/client/generated/models/people_update_item.py +10 -10
  241. immichpy/client/generated/models/permission.py +13 -2
  242. immichpy/client/generated/models/person_create_dto.py +8 -8
  243. immichpy/client/generated/models/person_response_dto.py +17 -9
  244. immichpy/client/generated/models/person_statistics_response_dto.py +3 -3
  245. immichpy/client/generated/models/person_update_dto.py +9 -9
  246. immichpy/client/generated/models/person_with_faces_response_dto.py +20 -10
  247. immichpy/client/generated/models/pin_code_change_dto.py +10 -4
  248. immichpy/client/generated/models/pin_code_reset_dto.py +7 -3
  249. immichpy/client/generated/models/pin_code_setup_dto.py +2 -2
  250. immichpy/client/generated/models/places_response_dto.py +11 -7
  251. immichpy/client/generated/models/plugin_action_response_dto.py +13 -9
  252. immichpy/client/generated/models/{plugin_context.py → plugin_context_type.py} +4 -4
  253. immichpy/client/generated/models/plugin_filter_response_dto.py +13 -9
  254. immichpy/client/generated/models/plugin_response_dto.py +11 -11
  255. immichpy/client/generated/models/plugin_trigger_response_dto.py +89 -0
  256. immichpy/client/generated/models/plugin_trigger_type.py +2 -2
  257. immichpy/client/generated/models/purchase_response.py +7 -3
  258. immichpy/client/generated/models/purchase_update.py +7 -3
  259. immichpy/client/generated/models/queue_command.py +2 -2
  260. immichpy/client/generated/models/queue_command_dto.py +6 -4
  261. immichpy/client/generated/models/queue_delete_dto.py +1 -1
  262. immichpy/client/generated/models/queue_job_response_dto.py +6 -6
  263. immichpy/client/generated/models/queue_job_status.py +1 -1
  264. immichpy/client/generated/models/queue_name.py +2 -1
  265. immichpy/client/generated/models/queue_response_dto.py +5 -3
  266. immichpy/client/generated/models/queue_response_legacy_dto.py +1 -1
  267. immichpy/client/generated/models/queue_statistics_dto.py +8 -8
  268. immichpy/client/generated/models/queue_status_legacy_dto.py +8 -3
  269. immichpy/client/generated/models/queue_update_dto.py +4 -2
  270. immichpy/client/generated/models/queues_response_legacy_dto.py +9 -1
  271. immichpy/client/generated/models/random_search_dto.py +96 -34
  272. immichpy/client/generated/models/ratings_response.py +3 -3
  273. immichpy/client/generated/models/ratings_update.py +5 -3
  274. immichpy/client/generated/models/reaction_level.py +1 -1
  275. immichpy/client/generated/models/reaction_type.py +1 -1
  276. immichpy/client/generated/models/reverse_geocoding_state_response_dto.py +7 -3
  277. immichpy/client/generated/models/rotate_parameters.py +84 -0
  278. immichpy/client/generated/models/search_album_response_dto.py +4 -4
  279. immichpy/client/generated/models/search_asset_response_dto.py +6 -4
  280. immichpy/client/generated/models/search_explore_item.py +3 -3
  281. immichpy/client/generated/models/search_explore_response_dto.py +2 -2
  282. immichpy/client/generated/models/search_facet_count_response_dto.py +4 -4
  283. immichpy/client/generated/models/search_facet_response_dto.py +3 -3
  284. immichpy/client/generated/models/search_response_dto.py +1 -1
  285. immichpy/client/generated/models/search_statistics_response_dto.py +3 -3
  286. immichpy/client/generated/models/search_suggestion_type.py +1 -1
  287. immichpy/client/generated/models/server_about_response_dto.py +46 -22
  288. immichpy/client/generated/models/server_apk_links_dto.py +12 -6
  289. immichpy/client/generated/models/server_config_dto.py +36 -12
  290. immichpy/client/generated/models/server_features_dto.py +32 -16
  291. immichpy/client/generated/models/server_media_types_response_dto.py +5 -5
  292. immichpy/client/generated/models/server_ping_response.py +1 -1
  293. immichpy/client/generated/models/server_stats_response_dto.py +10 -6
  294. immichpy/client/generated/models/server_storage_response_dto.py +21 -8
  295. immichpy/client/generated/models/server_theme_dto.py +4 -2
  296. immichpy/client/generated/models/server_version_history_response_dto.py +6 -4
  297. immichpy/client/generated/models/server_version_response_dto.py +5 -5
  298. immichpy/client/generated/models/session_create_dto.py +8 -4
  299. immichpy/client/generated/models/session_create_response_dto.py +17 -11
  300. immichpy/client/generated/models/session_response_dto.py +16 -10
  301. immichpy/client/generated/models/session_unlock_dto.py +7 -3
  302. immichpy/client/generated/models/session_update_dto.py +2 -2
  303. immichpy/client/generated/models/set_maintenance_mode_dto.py +17 -7
  304. immichpy/client/generated/models/shared_link_create_dto.py +25 -11
  305. immichpy/client/generated/models/shared_link_edit_dto.py +19 -9
  306. immichpy/client/generated/models/shared_link_response_dto.py +18 -14
  307. immichpy/client/generated/models/shared_link_type.py +2 -2
  308. immichpy/client/generated/models/shared_links_response.py +5 -3
  309. immichpy/client/generated/models/shared_links_update.py +9 -3
  310. immichpy/client/generated/models/sign_up_dto.py +5 -5
  311. immichpy/client/generated/models/smart_search_dto.py +102 -36
  312. immichpy/client/generated/models/source_type.py +2 -2
  313. immichpy/client/generated/models/stack_create_dto.py +2 -2
  314. immichpy/client/generated/models/stack_response_dto.py +6 -4
  315. immichpy/client/generated/models/stack_update_dto.py +4 -2
  316. immichpy/client/generated/models/statistics_search_dto.py +86 -30
  317. immichpy/client/generated/models/storage_folder.py +38 -0
  318. immichpy/client/generated/models/sync_ack_delete_dto.py +5 -3
  319. immichpy/client/generated/models/sync_ack_dto.py +4 -4
  320. immichpy/client/generated/models/sync_ack_set_dto.py +4 -2
  321. immichpy/client/generated/models/sync_album_delete_v1.py +2 -2
  322. immichpy/client/generated/models/sync_album_to_asset_delete_v1.py +3 -3
  323. immichpy/client/generated/models/sync_album_to_asset_v1.py +3 -3
  324. immichpy/client/generated/models/sync_album_user_delete_v1.py +3 -3
  325. immichpy/client/generated/models/sync_album_user_v1.py +4 -4
  326. immichpy/client/generated/models/sync_album_v1.py +13 -9
  327. immichpy/client/generated/models/sync_asset_delete_v1.py +2 -2
  328. immichpy/client/generated/models/sync_asset_exif_v1.py +46 -26
  329. immichpy/client/generated/models/sync_asset_face_delete_v1.py +2 -2
  330. immichpy/client/generated/models/sync_asset_face_v1.py +5 -5
  331. immichpy/client/generated/models/sync_asset_metadata_delete_v1.py +3 -4
  332. immichpy/client/generated/models/sync_asset_metadata_v1.py +4 -5
  333. immichpy/client/generated/models/sync_asset_v1.py +47 -18
  334. immichpy/client/generated/models/sync_auth_user_v1.py +22 -12
  335. immichpy/client/generated/models/sync_entity_type.py +2 -2
  336. immichpy/client/generated/models/sync_memory_asset_delete_v1.py +3 -3
  337. immichpy/client/generated/models/sync_memory_asset_v1.py +3 -3
  338. immichpy/client/generated/models/sync_memory_delete_v1.py +2 -2
  339. immichpy/client/generated/models/sync_memory_v1.py +13 -13
  340. immichpy/client/generated/models/sync_partner_delete_v1.py +5 -3
  341. immichpy/client/generated/models/sync_partner_v1.py +6 -4
  342. immichpy/client/generated/models/sync_person_delete_v1.py +2 -2
  343. immichpy/client/generated/models/sync_person_v1.py +13 -11
  344. immichpy/client/generated/models/sync_request_type.py +2 -2
  345. immichpy/client/generated/models/sync_stack_delete_v1.py +2 -2
  346. immichpy/client/generated/models/sync_stack_v1.py +8 -6
  347. immichpy/client/generated/models/sync_stream_dto.py +4 -4
  348. immichpy/client/generated/models/sync_user_delete_v1.py +2 -2
  349. immichpy/client/generated/models/sync_user_metadata_delete_v1.py +3 -3
  350. immichpy/client/generated/models/sync_user_metadata_v1.py +4 -4
  351. immichpy/client/generated/models/sync_user_v1.py +16 -8
  352. immichpy/client/generated/models/system_config_backups_dto.py +1 -1
  353. immichpy/client/generated/models/system_config_dto.py +1 -1
  354. immichpy/client/generated/models/system_config_f_fmpeg_dto.py +44 -22
  355. immichpy/client/generated/models/system_config_faces_dto.py +2 -2
  356. immichpy/client/generated/models/system_config_generated_fullsize_image_dto.py +13 -7
  357. immichpy/client/generated/models/system_config_generated_image_dto.py +14 -8
  358. immichpy/client/generated/models/system_config_image_dto.py +5 -3
  359. immichpy/client/generated/models/system_config_job_dto.py +9 -1
  360. immichpy/client/generated/models/system_config_library_dto.py +1 -1
  361. immichpy/client/generated/models/system_config_library_scan_dto.py +2 -2
  362. immichpy/client/generated/models/system_config_library_watch_dto.py +3 -3
  363. immichpy/client/generated/models/system_config_logging_dto.py +3 -3
  364. immichpy/client/generated/models/system_config_machine_learning_dto.py +2 -2
  365. immichpy/client/generated/models/system_config_map_dto.py +2 -2
  366. immichpy/client/generated/models/system_config_metadata_dto.py +1 -1
  367. immichpy/client/generated/models/system_config_new_version_check_dto.py +3 -3
  368. immichpy/client/generated/models/system_config_nightly_tasks_dto.py +16 -6
  369. immichpy/client/generated/models/system_config_notifications_dto.py +1 -1
  370. immichpy/client/generated/models/system_config_o_auth_dto.py +28 -18
  371. immichpy/client/generated/models/system_config_password_login_dto.py +3 -3
  372. immichpy/client/generated/models/system_config_reverse_geocoding_dto.py +3 -3
  373. immichpy/client/generated/models/system_config_server_dto.py +8 -4
  374. immichpy/client/generated/models/system_config_smtp_dto.py +8 -4
  375. immichpy/client/generated/models/system_config_smtp_transport_dto.py +9 -7
  376. immichpy/client/generated/models/system_config_storage_template_dto.py +6 -4
  377. immichpy/client/generated/models/system_config_template_emails_dto.py +1 -1
  378. immichpy/client/generated/models/system_config_template_storage_option_dto.py +32 -9
  379. immichpy/client/generated/models/system_config_templates_dto.py +1 -1
  380. immichpy/client/generated/models/system_config_theme_dto.py +4 -2
  381. immichpy/client/generated/models/system_config_trash_dto.py +3 -3
  382. immichpy/client/generated/models/system_config_user_dto.py +4 -2
  383. immichpy/client/generated/models/tag_bulk_assets_dto.py +3 -3
  384. immichpy/client/generated/models/tag_bulk_assets_response_dto.py +3 -3
  385. immichpy/client/generated/models/tag_create_dto.py +8 -4
  386. immichpy/client/generated/models/tag_response_dto.py +10 -8
  387. immichpy/client/generated/models/tag_update_dto.py +3 -3
  388. immichpy/client/generated/models/tag_upsert_dto.py +3 -3
  389. immichpy/client/generated/models/tags_response.py +5 -3
  390. immichpy/client/generated/models/tags_update.py +9 -3
  391. immichpy/client/generated/models/template_dto.py +3 -3
  392. immichpy/client/generated/models/template_response_dto.py +4 -4
  393. immichpy/client/generated/models/test_email_response_dto.py +2 -2
  394. immichpy/client/generated/models/time_bucket_asset_response_dto.py +2 -3
  395. immichpy/client/generated/models/time_buckets_response_dto.py +1 -1
  396. immichpy/client/generated/models/tone_mapping.py +2 -2
  397. immichpy/client/generated/models/transcode_hw_accel.py +2 -2
  398. immichpy/client/generated/models/transcode_policy.py +2 -2
  399. immichpy/client/generated/models/trash_response_dto.py +3 -3
  400. immichpy/client/generated/models/update_album_dto.py +12 -6
  401. immichpy/client/generated/models/update_album_user_dto.py +3 -3
  402. immichpy/client/generated/models/update_asset_dto.py +21 -9
  403. immichpy/client/generated/models/update_library_dto.py +8 -4
  404. immichpy/client/generated/models/usage_by_user_dto.py +16 -9
  405. immichpy/client/generated/models/user_admin_create_dto.py +20 -10
  406. immichpy/client/generated/models/user_admin_delete_dto.py +5 -3
  407. immichpy/client/generated/models/user_admin_response_dto.py +35 -18
  408. immichpy/client/generated/models/user_admin_update_dto.py +20 -10
  409. immichpy/client/generated/models/user_avatar_color.py +2 -2
  410. immichpy/client/generated/models/user_license.py +6 -4
  411. immichpy/client/generated/models/user_metadata_key.py +2 -2
  412. immichpy/client/generated/models/user_preferences_response_dto.py +1 -1
  413. immichpy/client/generated/models/user_preferences_update_dto.py +1 -1
  414. immichpy/client/generated/models/user_response_dto.py +13 -7
  415. immichpy/client/generated/models/user_status.py +2 -2
  416. immichpy/client/generated/models/user_update_me_dto.py +10 -5
  417. immichpy/client/generated/models/validate_access_token_response_dto.py +4 -2
  418. immichpy/client/generated/models/validate_library_dto.py +9 -3
  419. immichpy/client/generated/models/validate_library_import_path_response_dto.py +4 -4
  420. immichpy/client/generated/models/validate_library_response_dto.py +4 -2
  421. immichpy/client/generated/models/version_check_state_response_dto.py +7 -3
  422. immichpy/client/generated/models/video_codec.py +2 -2
  423. immichpy/client/generated/models/video_container.py +2 -2
  424. immichpy/client/generated/models/workflow_action_item_dto.py +7 -3
  425. immichpy/client/generated/models/workflow_action_response_dto.py +10 -6
  426. immichpy/client/generated/models/workflow_create_dto.py +11 -7
  427. immichpy/client/generated/models/workflow_filter_item_dto.py +7 -3
  428. immichpy/client/generated/models/workflow_filter_response_dto.py +10 -6
  429. immichpy/client/generated/models/workflow_response_dto.py +14 -27
  430. immichpy/client/generated/models/workflow_update_dto.py +19 -7
  431. immichpy/client/generated/rest.py +1 -1
  432. immichpy/client/main.py +4 -1
  433. {immichpy-1.6.5.dist-info → immichpy-1.7.6.dist-info}/METADATA +1 -3
  434. immichpy-1.7.6.dist-info/RECORD +464 -0
  435. immichpy-1.6.5.dist-info/RECORD +0 -439
  436. {immichpy-1.6.5.dist-info → immichpy-1.7.6.dist-info}/WHEEL +0 -0
  437. {immichpy-1.6.5.dist-info → immichpy-1.7.6.dist-info}/entry_points.txt +0 -0
  438. {immichpy-1.6.5.dist-info → immichpy-1.7.6.dist-info}/licenses/LICENSE +0 -0
@@ -3,7 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import typer
6
- from typing import TYPE_CHECKING
6
+ from typing import Literal, TYPE_CHECKING
7
7
 
8
8
  if TYPE_CHECKING:
9
9
  from immichpy import AsyncClient
@@ -68,134 +68,166 @@ def get_storage_template_options(
68
68
  def update_config(
69
69
  ctx: typer.Context,
70
70
  backup_database_cron_expression: str = typer.Option(
71
- ..., "--backup-database-cron-expression", help=""""""
71
+ ..., "--backup-database-cron-expression", help="""Cron expression"""
72
72
  ),
73
73
  backup_database_enabled: bool = typer.Option(
74
- ..., "--backup-database-enabled", help=""""""
74
+ ..., "--backup-database-enabled", help="""Enabled"""
75
75
  ),
76
76
  backup_database_keep_last_amount: float = typer.Option(
77
- ..., "--backup-database-keep-last-amount", help="""""", min=1
77
+ ..., "--backup-database-keep-last-amount", help="""Keep last amount""", min=1
78
+ ),
79
+ ffmpeg_accel: str = typer.Option(
80
+ ..., "--ffmpeg-accel", help="""Transcode hardware acceleration"""
81
+ ),
82
+ ffmpeg_accel_decode: bool = typer.Option(
83
+ ..., "--ffmpeg-accel-decode", help="""Accelerated decode"""
78
84
  ),
79
- ffmpeg_accel: str = typer.Option(..., "--ffmpeg-accel", help=""""""),
80
- ffmpeg_accel_decode: bool = typer.Option(..., "--ffmpeg-accel-decode", help=""""""),
81
85
  ffmpeg_accepted_audio_codecs: list[AudioCodec] = typer.Option(
82
- ..., "--ffmpeg-accepted-audio-codecs", help=""""""
86
+ ..., "--ffmpeg-accepted-audio-codecs", help="""Accepted audio codecs"""
83
87
  ),
84
88
  ffmpeg_accepted_containers: list[VideoContainer] = typer.Option(
85
- ..., "--ffmpeg-accepted-containers", help=""""""
89
+ ..., "--ffmpeg-accepted-containers", help="""Accepted containers"""
86
90
  ),
87
91
  ffmpeg_accepted_video_codecs: list[VideoCodec] = typer.Option(
88
- ..., "--ffmpeg-accepted-video-codecs", help=""""""
92
+ ..., "--ffmpeg-accepted-video-codecs", help="""Accepted video codecs"""
89
93
  ),
90
94
  ffmpeg_bframes: int = typer.Option(
91
- ..., "--ffmpeg-bframes", help="""""", min=-1, max=16
95
+ ..., "--ffmpeg-bframes", help="""B-frames""", min=-1, max=16
96
+ ),
97
+ ffmpeg_cq_mode: str = typer.Option(..., "--ffmpeg-cq-mode", help="""CQ mode"""),
98
+ ffmpeg_crf: int = typer.Option(..., "--ffmpeg-crf", help="""CRF""", min=0, max=51),
99
+ ffmpeg_gop_size: int = typer.Option(
100
+ ..., "--ffmpeg-gop-size", help="""GOP size""", min=0
101
+ ),
102
+ ffmpeg_max_bitrate: str = typer.Option(
103
+ ..., "--ffmpeg-max-bitrate", help="""Max bitrate"""
92
104
  ),
93
- ffmpeg_cq_mode: str = typer.Option(..., "--ffmpeg-cq-mode", help=""""""),
94
- ffmpeg_crf: int = typer.Option(..., "--ffmpeg-crf", help="""""", min=0, max=51),
95
- ffmpeg_gop_size: int = typer.Option(..., "--ffmpeg-gop-size", help="""""", min=0),
96
- ffmpeg_max_bitrate: str = typer.Option(..., "--ffmpeg-max-bitrate", help=""""""),
97
105
  ffmpeg_preferred_hw_device: str = typer.Option(
98
- ..., "--ffmpeg-preferred-hw-device", help=""""""
106
+ ..., "--ffmpeg-preferred-hw-device", help="""Preferred hardware device"""
107
+ ),
108
+ ffmpeg_preset: str = typer.Option(..., "--ffmpeg-preset", help="""Preset"""),
109
+ ffmpeg_refs: int = typer.Option(
110
+ ..., "--ffmpeg-refs", help="""References""", min=0, max=6
99
111
  ),
100
- ffmpeg_preset: str = typer.Option(..., "--ffmpeg-preset", help=""""""),
101
- ffmpeg_refs: int = typer.Option(..., "--ffmpeg-refs", help="""""", min=0, max=6),
102
112
  ffmpeg_target_audio_codec: str = typer.Option(
103
- ..., "--ffmpeg-target-audio-codec", help=""""""
113
+ ..., "--ffmpeg-target-audio-codec", help="""Target audio codec"""
104
114
  ),
105
115
  ffmpeg_target_resolution: str = typer.Option(
106
- ..., "--ffmpeg-target-resolution", help=""""""
116
+ ..., "--ffmpeg-target-resolution", help="""Target resolution"""
107
117
  ),
108
118
  ffmpeg_target_video_codec: str = typer.Option(
109
- ..., "--ffmpeg-target-video-codec", help=""""""
110
- ),
111
- ffmpeg_temporal_aq: bool = typer.Option(..., "--ffmpeg-temporal-aq", help=""""""),
112
- ffmpeg_threads: int = typer.Option(..., "--ffmpeg-threads", help="""""", min=0),
113
- ffmpeg_tonemap: str = typer.Option(..., "--ffmpeg-tonemap", help=""""""),
114
- ffmpeg_transcode: str = typer.Option(..., "--ffmpeg-transcode", help=""""""),
115
- ffmpeg_two_pass: bool = typer.Option(..., "--ffmpeg-two-pass", help=""""""),
116
- image_colorspace: str = typer.Option(..., "--image-colorspace", help=""""""),
119
+ ..., "--ffmpeg-target-video-codec", help="""Target video codec"""
120
+ ),
121
+ ffmpeg_temporal_aq: bool = typer.Option(
122
+ ..., "--ffmpeg-temporal-aq", help="""Temporal AQ"""
123
+ ),
124
+ ffmpeg_threads: int = typer.Option(
125
+ ..., "--ffmpeg-threads", help="""Threads""", min=0
126
+ ),
127
+ ffmpeg_tonemap: str = typer.Option(
128
+ ..., "--ffmpeg-tonemap", help="""Tone mapping"""
129
+ ),
130
+ ffmpeg_transcode: str = typer.Option(
131
+ ..., "--ffmpeg-transcode", help="""Transcode policy"""
132
+ ),
133
+ ffmpeg_two_pass: bool = typer.Option(..., "--ffmpeg-two-pass", help="""Two pass"""),
134
+ image_colorspace: str = typer.Option(
135
+ ..., "--image-colorspace", help="""Colorspace"""
136
+ ),
117
137
  image_extract_embedded: bool = typer.Option(
118
- ..., "--image-extract-embedded", help=""""""
138
+ ..., "--image-extract-embedded", help="""Extract embedded"""
119
139
  ),
120
140
  image_fullsize_enabled: bool = typer.Option(
121
- ..., "--image-fullsize-enabled", help=""""""
141
+ ..., "--image-fullsize-enabled", help="""Enabled"""
122
142
  ),
123
143
  image_fullsize_format: str = typer.Option(
124
- ..., "--image-fullsize-format", help=""""""
144
+ ..., "--image-fullsize-format", help="""Image format"""
145
+ ),
146
+ image_fullsize_progressive: Literal["true", "false"] | None = typer.Option(
147
+ None, "--image-fullsize-progressive", help="""Progressive"""
125
148
  ),
126
149
  image_fullsize_quality: int = typer.Option(
127
- ..., "--image-fullsize-quality", help="""""", min=1, max=100
150
+ ..., "--image-fullsize-quality", help="""Quality""", min=1, max=100
128
151
  ),
129
152
  image_preview_format: str = typer.Option(
130
- ..., "--image-preview-format", help=""""""
153
+ ..., "--image-preview-format", help="""Image format"""
154
+ ),
155
+ image_preview_progressive: Literal["true", "false"] | None = typer.Option(
156
+ None, "--image-preview-progressive", help=""""""
131
157
  ),
132
158
  image_preview_quality: int = typer.Option(
133
- ..., "--image-preview-quality", help="""""", min=1, max=100
159
+ ..., "--image-preview-quality", help="""Quality""", min=1, max=100
134
160
  ),
135
161
  image_preview_size: int = typer.Option(
136
- ..., "--image-preview-size", help="""""", min=1
162
+ ..., "--image-preview-size", help="""Size""", min=1
137
163
  ),
138
164
  image_thumbnail_format: str = typer.Option(
139
- ..., "--image-thumbnail-format", help=""""""
165
+ ..., "--image-thumbnail-format", help="""Image format"""
166
+ ),
167
+ image_thumbnail_progressive: Literal["true", "false"] | None = typer.Option(
168
+ None, "--image-thumbnail-progressive", help=""""""
140
169
  ),
141
170
  image_thumbnail_quality: int = typer.Option(
142
- ..., "--image-thumbnail-quality", help="""""", min=1, max=100
171
+ ..., "--image-thumbnail-quality", help="""Quality""", min=1, max=100
143
172
  ),
144
173
  image_thumbnail_size: int = typer.Option(
145
- ..., "--image-thumbnail-size", help="""""", min=1
174
+ ..., "--image-thumbnail-size", help="""Size""", min=1
146
175
  ),
147
176
  job_background_task_concurrency: int = typer.Option(
148
- ..., "--job-background-task-concurrency", help="""""", min=1
177
+ ..., "--job-background-task-concurrency", help="""Concurrency""", min=1
178
+ ),
179
+ job_editor_concurrency: int = typer.Option(
180
+ ..., "--job-editor-concurrency", help="""Concurrency""", min=1
149
181
  ),
150
182
  job_face_detection_concurrency: int = typer.Option(
151
- ..., "--job-face-detection-concurrency", help="""""", min=1
183
+ ..., "--job-face-detection-concurrency", help="""Concurrency""", min=1
152
184
  ),
153
185
  job_library_concurrency: int = typer.Option(
154
- ..., "--job-library-concurrency", help="""""", min=1
186
+ ..., "--job-library-concurrency", help="""Concurrency""", min=1
155
187
  ),
156
188
  job_metadata_extraction_concurrency: int = typer.Option(
157
- ..., "--job-metadata-extraction-concurrency", help="""""", min=1
189
+ ..., "--job-metadata-extraction-concurrency", help="""Concurrency""", min=1
158
190
  ),
159
191
  job_migration_concurrency: int = typer.Option(
160
- ..., "--job-migration-concurrency", help="""""", min=1
192
+ ..., "--job-migration-concurrency", help="""Concurrency""", min=1
161
193
  ),
162
194
  job_notifications_concurrency: int = typer.Option(
163
- ..., "--job-notifications-concurrency", help="""""", min=1
195
+ ..., "--job-notifications-concurrency", help="""Concurrency""", min=1
164
196
  ),
165
197
  job_ocr_concurrency: int = typer.Option(
166
- ..., "--job-ocr-concurrency", help="""""", min=1
198
+ ..., "--job-ocr-concurrency", help="""Concurrency""", min=1
167
199
  ),
168
200
  job_search_concurrency: int = typer.Option(
169
- ..., "--job-search-concurrency", help="""""", min=1
201
+ ..., "--job-search-concurrency", help="""Concurrency""", min=1
170
202
  ),
171
203
  job_sidecar_concurrency: int = typer.Option(
172
- ..., "--job-sidecar-concurrency", help="""""", min=1
204
+ ..., "--job-sidecar-concurrency", help="""Concurrency""", min=1
173
205
  ),
174
206
  job_smart_search_concurrency: int = typer.Option(
175
- ..., "--job-smart-search-concurrency", help="""""", min=1
207
+ ..., "--job-smart-search-concurrency", help="""Concurrency""", min=1
176
208
  ),
177
209
  job_thumbnail_generation_concurrency: int = typer.Option(
178
- ..., "--job-thumbnail-generation-concurrency", help="""""", min=1
210
+ ..., "--job-thumbnail-generation-concurrency", help="""Concurrency""", min=1
179
211
  ),
180
212
  job_video_conversion_concurrency: int = typer.Option(
181
- ..., "--job-video-conversion-concurrency", help="""""", min=1
213
+ ..., "--job-video-conversion-concurrency", help="""Concurrency""", min=1
182
214
  ),
183
215
  job_workflow_concurrency: int = typer.Option(
184
- ..., "--job-workflow-concurrency", help="""""", min=1
216
+ ..., "--job-workflow-concurrency", help="""Concurrency""", min=1
185
217
  ),
186
218
  library_scan_cron_expression: str = typer.Option(
187
219
  ..., "--library-scan-cron-expression", help=""""""
188
220
  ),
189
221
  library_scan_enabled: bool = typer.Option(
190
- ..., "--library-scan-enabled", help=""""""
222
+ ..., "--library-scan-enabled", help="""Enabled"""
191
223
  ),
192
224
  library_watch_enabled: bool = typer.Option(
193
- ..., "--library-watch-enabled", help=""""""
225
+ ..., "--library-watch-enabled", help="""Enabled"""
194
226
  ),
195
- logging_enabled: bool = typer.Option(..., "--logging-enabled", help=""""""),
227
+ logging_enabled: bool = typer.Option(..., "--logging-enabled", help="""Enabled"""),
196
228
  logging_level: str = typer.Option(..., "--logging-level", help=""""""),
197
229
  machine_learning_availability_checks_enabled: bool = typer.Option(
198
- ..., "--machine-learning-availability-checks-enabled", help=""""""
230
+ ..., "--machine-learning-availability-checks-enabled", help="""Enabled"""
199
231
  ),
200
232
  machine_learning_availability_checks_interval: float = typer.Option(
201
233
  ..., "--machine-learning-availability-checks-interval", help=""""""
@@ -204,174 +236,222 @@ def update_config(
204
236
  ..., "--machine-learning-availability-checks-timeout", help=""""""
205
237
  ),
206
238
  machine_learning_clip_enabled: bool = typer.Option(
207
- ..., "--machine-learning-clip-enabled", help=""""""
239
+ ..., "--machine-learning-clip-enabled", help="""Whether the task is enabled"""
208
240
  ),
209
241
  machine_learning_clip_model_name: str = typer.Option(
210
- ..., "--machine-learning-clip-model-name", help=""""""
242
+ ..., "--machine-learning-clip-model-name", help="""Name of the model to use"""
211
243
  ),
212
244
  machine_learning_duplicate_detection_enabled: bool = typer.Option(
213
- ..., "--machine-learning-duplicate-detection-enabled", help=""""""
245
+ ...,
246
+ "--machine-learning-duplicate-detection-enabled",
247
+ help="""Whether the task is enabled""",
214
248
  ),
215
249
  machine_learning_duplicate_detection_max_distance: float = typer.Option(
216
250
  ...,
217
251
  "--machine-learning-duplicate-detection-max-distance",
218
- help="""""",
252
+ help="""Maximum distance threshold for duplicate detection""",
219
253
  min=0.001,
220
254
  max=0.1,
221
255
  ),
222
256
  machine_learning_enabled: bool = typer.Option(
223
- ..., "--machine-learning-enabled", help=""""""
257
+ ..., "--machine-learning-enabled", help="""Enabled"""
224
258
  ),
225
259
  machine_learning_facial_recognition_enabled: bool = typer.Option(
226
- ..., "--machine-learning-facial-recognition-enabled", help=""""""
260
+ ...,
261
+ "--machine-learning-facial-recognition-enabled",
262
+ help="""Whether the task is enabled""",
227
263
  ),
228
264
  machine_learning_facial_recognition_max_distance: float = typer.Option(
229
265
  ...,
230
266
  "--machine-learning-facial-recognition-max-distance",
231
- help="""""",
267
+ help="""Maximum distance threshold for face recognition""",
232
268
  min=0.1,
233
269
  max=2,
234
270
  ),
235
271
  machine_learning_facial_recognition_min_faces: int = typer.Option(
236
- ..., "--machine-learning-facial-recognition-min-faces", help="""""", min=1
272
+ ...,
273
+ "--machine-learning-facial-recognition-min-faces",
274
+ help="""Minimum number of faces required for recognition""",
275
+ min=1,
237
276
  ),
238
277
  machine_learning_facial_recognition_min_score: float = typer.Option(
239
278
  ...,
240
279
  "--machine-learning-facial-recognition-min-score",
241
- help="""""",
280
+ help="""Minimum confidence score for face detection""",
242
281
  min=0.1,
243
282
  max=1,
244
283
  ),
245
284
  machine_learning_facial_recognition_model_name: str = typer.Option(
246
- ..., "--machine-learning-facial-recognition-model-name", help=""""""
285
+ ...,
286
+ "--machine-learning-facial-recognition-model-name",
287
+ help="""Name of the model to use""",
247
288
  ),
248
289
  machine_learning_ocr_enabled: bool = typer.Option(
249
- ..., "--machine-learning-ocr-enabled", help=""""""
290
+ ..., "--machine-learning-ocr-enabled", help="""Whether the task is enabled"""
250
291
  ),
251
292
  machine_learning_ocr_max_resolution: int = typer.Option(
252
- ..., "--machine-learning-ocr-max-resolution", help="""""", min=1
293
+ ...,
294
+ "--machine-learning-ocr-max-resolution",
295
+ help="""Maximum resolution for OCR processing""",
296
+ min=1,
253
297
  ),
254
298
  machine_learning_ocr_min_detection_score: float = typer.Option(
255
- ..., "--machine-learning-ocr-min-detection-score", help="""""", min=0.1, max=1
299
+ ...,
300
+ "--machine-learning-ocr-min-detection-score",
301
+ help="""Minimum confidence score for text detection""",
302
+ min=0.1,
303
+ max=1,
256
304
  ),
257
305
  machine_learning_ocr_min_recognition_score: float = typer.Option(
258
- ..., "--machine-learning-ocr-min-recognition-score", help="""""", min=0.1, max=1
306
+ ...,
307
+ "--machine-learning-ocr-min-recognition-score",
308
+ help="""Minimum confidence score for text recognition""",
309
+ min=0.1,
310
+ max=1,
259
311
  ),
260
312
  machine_learning_ocr_model_name: str = typer.Option(
261
- ..., "--machine-learning-ocr-model-name", help=""""""
313
+ ..., "--machine-learning-ocr-model-name", help="""Name of the model to use"""
262
314
  ),
263
315
  machine_learning_urls: list[str] = typer.Option(
264
316
  ..., "--machine-learning-urls", help=""""""
265
317
  ),
266
318
  map_dark_style: str = typer.Option(..., "--map-dark-style", help=""""""),
267
- map_enabled: bool = typer.Option(..., "--map-enabled", help=""""""),
319
+ map_enabled: bool = typer.Option(..., "--map-enabled", help="""Enabled"""),
268
320
  map_light_style: str = typer.Option(..., "--map-light-style", help=""""""),
269
321
  metadata_faces_import_: bool = typer.Option(
270
- ..., "--metadata-faces-import", help=""""""
322
+ ..., "--metadata-faces-import", help="""Import"""
271
323
  ),
272
324
  new_version_check_enabled: bool = typer.Option(
273
- ..., "--new-version-check-enabled", help=""""""
325
+ ..., "--new-version-check-enabled", help="""Enabled"""
274
326
  ),
275
327
  nightly_tasks_cluster_new_faces: bool = typer.Option(
276
- ..., "--nightly-tasks-cluster-new-faces", help=""""""
328
+ ..., "--nightly-tasks-cluster-new-faces", help="""Cluster new faces"""
277
329
  ),
278
330
  nightly_tasks_database_cleanup: bool = typer.Option(
279
- ..., "--nightly-tasks-database-cleanup", help=""""""
331
+ ..., "--nightly-tasks-database-cleanup", help="""Database cleanup"""
280
332
  ),
281
333
  nightly_tasks_generate_memories: bool = typer.Option(
282
- ..., "--nightly-tasks-generate-memories", help=""""""
334
+ ..., "--nightly-tasks-generate-memories", help="""Generate memories"""
283
335
  ),
284
336
  nightly_tasks_missing_thumbnails: bool = typer.Option(
285
- ..., "--nightly-tasks-missing-thumbnails", help=""""""
337
+ ..., "--nightly-tasks-missing-thumbnails", help="""Missing thumbnails"""
286
338
  ),
287
339
  nightly_tasks_start_time: str = typer.Option(
288
340
  ..., "--nightly-tasks-start-time", help=""""""
289
341
  ),
290
342
  nightly_tasks_sync_quota_usage: bool = typer.Option(
291
- ..., "--nightly-tasks-sync-quota-usage", help=""""""
343
+ ..., "--nightly-tasks-sync-quota-usage", help="""Sync quota usage"""
292
344
  ),
293
345
  notifications_smtp_enabled: bool = typer.Option(
294
- ..., "--notifications-smtp-enabled", help=""""""
346
+ ...,
347
+ "--notifications-smtp-enabled",
348
+ help="""Whether SMTP email notifications are enabled""",
295
349
  ),
296
350
  notifications_smtp_from_: str = typer.Option(
297
- ..., "--notifications-smtp-from", help=""""""
351
+ ..., "--notifications-smtp-from", help="""Email address to send from"""
298
352
  ),
299
353
  notifications_smtp_reply_to: str = typer.Option(
300
- ..., "--notifications-smtp-reply-to", help=""""""
354
+ ..., "--notifications-smtp-reply-to", help="""Email address for replies"""
301
355
  ),
302
356
  notifications_smtp_transport_host: str = typer.Option(
303
- ..., "--notifications-smtp-transport-host", help=""""""
357
+ ..., "--notifications-smtp-transport-host", help="""SMTP server hostname"""
304
358
  ),
305
359
  notifications_smtp_transport_ignore_cert: bool = typer.Option(
306
- ..., "--notifications-smtp-transport-ignore-cert", help=""""""
360
+ ...,
361
+ "--notifications-smtp-transport-ignore-cert",
362
+ help="""Whether to ignore SSL certificate errors""",
307
363
  ),
308
364
  notifications_smtp_transport_password: str = typer.Option(
309
- ..., "--notifications-smtp-transport-password", help=""""""
365
+ ..., "--notifications-smtp-transport-password", help="""SMTP password"""
310
366
  ),
311
367
  notifications_smtp_transport_port: float = typer.Option(
312
- ..., "--notifications-smtp-transport-port", help="""""", min=0, max=65535
368
+ ...,
369
+ "--notifications-smtp-transport-port",
370
+ help="""SMTP server port""",
371
+ min=0,
372
+ max=65535,
313
373
  ),
314
374
  notifications_smtp_transport_secure: bool = typer.Option(
315
- ..., "--notifications-smtp-transport-secure", help=""""""
375
+ ...,
376
+ "--notifications-smtp-transport-secure",
377
+ help="""Whether to use secure connection (TLS/SSL)""",
316
378
  ),
317
379
  notifications_smtp_transport_username: str = typer.Option(
318
- ..., "--notifications-smtp-transport-username", help=""""""
380
+ ..., "--notifications-smtp-transport-username", help="""SMTP username"""
381
+ ),
382
+ oauth_auto_launch: bool = typer.Option(
383
+ ..., "--oauth-auto-launch", help="""Auto launch"""
384
+ ),
385
+ oauth_auto_register: bool = typer.Option(
386
+ ..., "--oauth-auto-register", help="""Auto register"""
387
+ ),
388
+ oauth_button_text: str = typer.Option(
389
+ ..., "--oauth-button-text", help="""Button text"""
390
+ ),
391
+ oauth_client_id: str = typer.Option(..., "--oauth-client-id", help="""Client ID"""),
392
+ oauth_client_secret: str = typer.Option(
393
+ ..., "--oauth-client-secret", help="""Client secret"""
319
394
  ),
320
- oauth_auto_launch: bool = typer.Option(..., "--oauth-auto-launch", help=""""""),
321
- oauth_auto_register: bool = typer.Option(..., "--oauth-auto-register", help=""""""),
322
- oauth_button_text: str = typer.Option(..., "--oauth-button-text", help=""""""),
323
- oauth_client_id: str = typer.Option(..., "--oauth-client-id", help=""""""),
324
- oauth_client_secret: str = typer.Option(..., "--oauth-client-secret", help=""""""),
325
395
  oauth_default_storage_quota: int = typer.Option(
326
- ..., "--oauth-default-storage-quota", help="""""", min=0
396
+ ..., "--oauth-default-storage-quota", help="""Default storage quota""", min=0
397
+ ),
398
+ oauth_enabled: bool = typer.Option(..., "--oauth-enabled", help="""Enabled"""),
399
+ oauth_issuer_url: str = typer.Option(
400
+ ..., "--oauth-issuer-url", help="""Issuer URL"""
327
401
  ),
328
- oauth_enabled: bool = typer.Option(..., "--oauth-enabled", help=""""""),
329
- oauth_issuer_url: str = typer.Option(..., "--oauth-issuer-url", help=""""""),
330
402
  oauth_mobile_override_enabled: bool = typer.Option(
331
- ..., "--oauth-mobile-override-enabled", help=""""""
403
+ ..., "--oauth-mobile-override-enabled", help="""Mobile override enabled"""
332
404
  ),
333
405
  oauth_mobile_redirect_uri: str = typer.Option(
334
- ..., "--oauth-mobile-redirect-uri", help=""""""
406
+ ..., "--oauth-mobile-redirect-uri", help="""Mobile redirect URI"""
335
407
  ),
336
408
  oauth_profile_signing_algorithm: str = typer.Option(
337
- ..., "--oauth-profile-signing-algorithm", help=""""""
409
+ ..., "--oauth-profile-signing-algorithm", help="""Profile signing algorithm"""
338
410
  ),
339
- oauth_role_claim: str = typer.Option(..., "--oauth-role-claim", help=""""""),
340
- oauth_scope: str = typer.Option(..., "--oauth-scope", help=""""""),
411
+ oauth_role_claim: str = typer.Option(
412
+ ..., "--oauth-role-claim", help="""Role claim"""
413
+ ),
414
+ oauth_scope: str = typer.Option(..., "--oauth-scope", help="""Scope"""),
341
415
  oauth_signing_algorithm: str = typer.Option(
342
416
  ..., "--oauth-signing-algorithm", help=""""""
343
417
  ),
344
418
  oauth_storage_label_claim: str = typer.Option(
345
- ..., "--oauth-storage-label-claim", help=""""""
419
+ ..., "--oauth-storage-label-claim", help="""Storage label claim"""
346
420
  ),
347
421
  oauth_storage_quota_claim: str = typer.Option(
348
- ..., "--oauth-storage-quota-claim", help=""""""
422
+ ..., "--oauth-storage-quota-claim", help="""Storage quota claim"""
423
+ ),
424
+ oauth_timeout: int = typer.Option(
425
+ ..., "--oauth-timeout", help="""Timeout""", min=1
349
426
  ),
350
- oauth_timeout: int = typer.Option(..., "--oauth-timeout", help="""""", min=1),
351
427
  oauth_token_endpoint_auth_method: str = typer.Option(
352
- ..., "--oauth-token-endpoint-auth-method", help=""""""
428
+ ..., "--oauth-token-endpoint-auth-method", help="""Token endpoint auth method"""
353
429
  ),
354
430
  password_login_enabled: bool = typer.Option(
355
- ..., "--password-login-enabled", help=""""""
431
+ ..., "--password-login-enabled", help="""Enabled"""
356
432
  ),
357
433
  reverse_geocoding_enabled: bool = typer.Option(
358
- ..., "--reverse-geocoding-enabled", help=""""""
434
+ ..., "--reverse-geocoding-enabled", help="""Enabled"""
359
435
  ),
360
436
  server_external_domain: str = typer.Option(
361
- ..., "--server-external-domain", help=""""""
437
+ ..., "--server-external-domain", help="""External domain"""
362
438
  ),
363
439
  server_login_page_message: str = typer.Option(
364
- ..., "--server-login-page-message", help=""""""
440
+ ..., "--server-login-page-message", help="""Login page message"""
441
+ ),
442
+ server_public_users: bool = typer.Option(
443
+ ..., "--server-public-users", help="""Public users"""
365
444
  ),
366
- server_public_users: bool = typer.Option(..., "--server-public-users", help=""""""),
367
445
  storage_template_enabled: bool = typer.Option(
368
- ..., "--storage-template-enabled", help=""""""
446
+ ..., "--storage-template-enabled", help="""Enabled"""
369
447
  ),
370
448
  storage_template_hash_verification_enabled: bool = typer.Option(
371
- ..., "--storage-template-hash-verification-enabled", help=""""""
449
+ ...,
450
+ "--storage-template-hash-verification-enabled",
451
+ help="""Hash verification enabled""",
372
452
  ),
373
453
  storage_template_template: str = typer.Option(
374
- ..., "--storage-template-template", help=""""""
454
+ ..., "--storage-template-template", help="""Template"""
375
455
  ),
376
456
  templates_email_album_invite_template: str = typer.Option(
377
457
  ..., "--templates-email-album-invite-template", help=""""""
@@ -382,11 +462,13 @@ def update_config(
382
462
  templates_email_welcome_template: str = typer.Option(
383
463
  ..., "--templates-email-welcome-template", help=""""""
384
464
  ),
385
- theme_custom_css: str = typer.Option(..., "--theme-custom-css", help=""""""),
386
- trash_days: int = typer.Option(..., "--trash-days", help="""""", min=0),
387
- trash_enabled: bool = typer.Option(..., "--trash-enabled", help=""""""),
465
+ theme_custom_css: str = typer.Option(
466
+ ..., "--theme-custom-css", help="""Custom CSS for theming"""
467
+ ),
468
+ trash_days: int = typer.Option(..., "--trash-days", help="""Days""", min=0),
469
+ trash_enabled: bool = typer.Option(..., "--trash-enabled", help="""Enabled"""),
388
470
  user_delete_delay: int = typer.Option(
389
- ..., "--user-delete-delay", help="""""", min=1
471
+ ..., "--user-delete-delay", help="""Delete delay""", min=1
390
472
  ),
391
473
  ) -> None:
392
474
  """Update system configuration
@@ -433,16 +515,35 @@ def update_config(
433
515
  set_nested(json_data, ["image_extract_embedded"], image_extract_embedded)
434
516
  set_nested(json_data, ["image_fullsize_enabled"], image_fullsize_enabled)
435
517
  set_nested(json_data, ["image_fullsize_format"], image_fullsize_format)
518
+ if image_fullsize_progressive is not None:
519
+ set_nested(
520
+ json_data,
521
+ ["image_fullsize_progressive"],
522
+ image_fullsize_progressive.lower() == "true",
523
+ )
436
524
  set_nested(json_data, ["image_fullsize_quality"], image_fullsize_quality)
437
525
  set_nested(json_data, ["image_preview_format"], image_preview_format)
526
+ if image_preview_progressive is not None:
527
+ set_nested(
528
+ json_data,
529
+ ["image_preview_progressive"],
530
+ image_preview_progressive.lower() == "true",
531
+ )
438
532
  set_nested(json_data, ["image_preview_quality"], image_preview_quality)
439
533
  set_nested(json_data, ["image_preview_size"], image_preview_size)
440
534
  set_nested(json_data, ["image_thumbnail_format"], image_thumbnail_format)
535
+ if image_thumbnail_progressive is not None:
536
+ set_nested(
537
+ json_data,
538
+ ["image_thumbnail_progressive"],
539
+ image_thumbnail_progressive.lower() == "true",
540
+ )
441
541
  set_nested(json_data, ["image_thumbnail_quality"], image_thumbnail_quality)
442
542
  set_nested(json_data, ["image_thumbnail_size"], image_thumbnail_size)
443
543
  set_nested(
444
544
  json_data, ["job_background_task_concurrency"], job_background_task_concurrency
445
545
  )
546
+ set_nested(json_data, ["job_editor_concurrency"], job_editor_concurrency)
446
547
  set_nested(
447
548
  json_data, ["job_face_detection_concurrency"], job_face_detection_concurrency
448
549
  )
@@ -73,7 +73,9 @@ def get_version_check_state(
73
73
  )
74
74
  def update_admin_onboarding(
75
75
  ctx: typer.Context,
76
- is_onboarded: bool = typer.Option(..., "--is-onboarded", help=""""""),
76
+ is_onboarded: bool = typer.Option(
77
+ ..., "--is-onboarded", help="""Is admin onboarded"""
78
+ ),
77
79
  ) -> None:
78
80
  """Update admin onboarding
79
81
 
@@ -19,8 +19,8 @@ app = typer.Typer(
19
19
  @app.command("bulk-tag-assets", deprecated=False, rich_help_panel="API commands")
20
20
  def bulk_tag_assets(
21
21
  ctx: typer.Context,
22
- asset_ids: list[str] = typer.Option(..., "--asset-ids", help=""""""),
23
- tag_ids: list[str] = typer.Option(..., "--tag-ids", help=""""""),
22
+ asset_ids: list[str] = typer.Option(..., "--asset-ids", help="""Asset IDs"""),
23
+ tag_ids: list[str] = typer.Option(..., "--tag-ids", help="""Tag IDs"""),
24
24
  ) -> None:
25
25
  """Tag assets
26
26
 
@@ -40,9 +40,9 @@ def bulk_tag_assets(
40
40
  @app.command("create-tag", deprecated=False, rich_help_panel="API commands")
41
41
  def create_tag(
42
42
  ctx: typer.Context,
43
- color: str | None = typer.Option(None, "--color", help=""""""),
44
- name: str = typer.Option(..., "--name", help=""""""),
45
- parent_id: str | None = typer.Option(None, "--parent-id", help=""""""),
43
+ color: str | None = typer.Option(None, "--color", help="""Tag color (hex)"""),
44
+ name: str = typer.Option(..., "--name", help="""Tag name"""),
45
+ parent_id: str | None = typer.Option(None, "--parent-id", help="""Parent tag ID"""),
46
46
  ) -> None:
47
47
  """Create a tag
48
48
 
@@ -112,7 +112,7 @@ def get_tag_by_id(
112
112
  def tag_assets(
113
113
  ctx: typer.Context,
114
114
  id: str = typer.Argument(..., help=""""""),
115
- ids: list[str] = typer.Option(..., "--ids", help=""""""),
115
+ ids: list[str] = typer.Option(..., "--ids", help="""IDs to process"""),
116
116
  ) -> None:
117
117
  """Tag assets
118
118
 
@@ -133,7 +133,7 @@ def tag_assets(
133
133
  def untag_assets(
134
134
  ctx: typer.Context,
135
135
  id: str = typer.Argument(..., help=""""""),
136
- ids: list[str] = typer.Option(..., "--ids", help=""""""),
136
+ ids: list[str] = typer.Option(..., "--ids", help="""IDs to process"""),
137
137
  ) -> None:
138
138
  """Untag assets
139
139
 
@@ -154,7 +154,7 @@ def untag_assets(
154
154
  def update_tag(
155
155
  ctx: typer.Context,
156
156
  id: str = typer.Argument(..., help=""""""),
157
- color: str | None = typer.Option(None, "--color", help=""""""),
157
+ color: str | None = typer.Option(None, "--color", help="""Tag color (hex)"""),
158
158
  ) -> None:
159
159
  """Update a tag
160
160
 
@@ -175,7 +175,7 @@ def update_tag(
175
175
  @app.command("upsert-tags", deprecated=False, rich_help_panel="API commands")
176
176
  def upsert_tags(
177
177
  ctx: typer.Context,
178
- tags: list[str] = typer.Option(..., "--tags", help=""""""),
178
+ tags: list[str] = typer.Option(..., "--tags", help="""Tag names to upsert"""),
179
179
  ) -> None:
180
180
  """Upsert tags
181
181
 
@@ -33,7 +33,7 @@ def empty_trash(
33
33
  @app.command("restore-assets", deprecated=False, rich_help_panel="API commands")
34
34
  def restore_assets(
35
35
  ctx: typer.Context,
36
- ids: list[str] = typer.Option(..., "--ids", help=""""""),
36
+ ids: list[str] = typer.Option(..., "--ids", help="""IDs to process"""),
37
37
  ) -> None:
38
38
  """Restore assets
39
39