magic_hour 0.29.0__tar.gz → 0.30.1__tar.gz

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.

Potentially problematic release.


This version of magic_hour might be problematic. Click here for more details.

Files changed (189) hide show
  1. {magic_hour-0.29.0 → magic_hour-0.30.1}/PKG-INFO +6 -1
  2. {magic_hour-0.29.0 → magic_hour-0.30.1}/README.md +5 -0
  3. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/environment.py +1 -1
  4. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/client.py +6 -0
  5. magic_hour-0.30.1/magic_hour/resources/v1/face_detection/README.md +91 -0
  6. magic_hour-0.30.1/magic_hour/resources/v1/face_detection/__init__.py +4 -0
  7. magic_hour-0.30.1/magic_hour/resources/v1/face_detection/client.py +193 -0
  8. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/__init__.py +8 -0
  9. magic_hour-0.30.1/magic_hour/types/models/v1_face_detection_create_response.py +25 -0
  10. magic_hour-0.30.1/magic_hour/types/models/v1_face_detection_get_response.py +45 -0
  11. magic_hour-0.30.1/magic_hour/types/models/v1_face_detection_get_response_faces_item.py +25 -0
  12. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/__init__.py +12 -0
  13. magic_hour-0.30.1/magic_hour/types/params/v1_face_detection_create_body.py +44 -0
  14. magic_hour-0.30.1/magic_hour/types/params/v1_face_detection_create_body_assets.py +28 -0
  15. {magic_hour-0.29.0 → magic_hour-0.30.1}/pyproject.toml +1 -1
  16. {magic_hour-0.29.0 → magic_hour-0.30.1}/LICENSE +0 -0
  17. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/__init__.py +0 -0
  18. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/client.py +0 -0
  19. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/core/__init__.py +0 -0
  20. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/core/api_error.py +0 -0
  21. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/core/auth.py +0 -0
  22. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/core/base_client.py +0 -0
  23. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/core/binary_response.py +0 -0
  24. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/core/query.py +0 -0
  25. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/core/request.py +0 -0
  26. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/core/response.py +0 -0
  27. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/core/type_utils.py +0 -0
  28. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/core/utils.py +0 -0
  29. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/__init__.py +0 -0
  30. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_clothes_changer/README.md +0 -0
  31. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_clothes_changer/__init__.py +0 -0
  32. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_clothes_changer/client.py +0 -0
  33. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_face_editor/README.md +0 -0
  34. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_face_editor/__init__.py +0 -0
  35. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_face_editor/client.py +0 -0
  36. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_gif_generator/README.md +0 -0
  37. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_gif_generator/__init__.py +0 -0
  38. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_gif_generator/client.py +0 -0
  39. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_headshot_generator/README.md +0 -0
  40. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_headshot_generator/__init__.py +0 -0
  41. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_headshot_generator/client.py +0 -0
  42. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_image_editor/README.md +0 -0
  43. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_image_editor/__init__.py +0 -0
  44. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_image_editor/client.py +0 -0
  45. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_image_generator/README.md +0 -0
  46. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_image_generator/__init__.py +0 -0
  47. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_image_generator/client.py +0 -0
  48. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_image_upscaler/README.md +0 -0
  49. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_image_upscaler/__init__.py +0 -0
  50. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_image_upscaler/client.py +0 -0
  51. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_meme_generator/README.md +0 -0
  52. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_meme_generator/__init__.py +0 -0
  53. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_meme_generator/client.py +0 -0
  54. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_photo_editor/README.md +0 -0
  55. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_photo_editor/__init__.py +0 -0
  56. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_photo_editor/client.py +0 -0
  57. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_qr_code_generator/README.md +0 -0
  58. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_qr_code_generator/__init__.py +0 -0
  59. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_qr_code_generator/client.py +0 -0
  60. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_talking_photo/README.md +0 -0
  61. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_talking_photo/__init__.py +0 -0
  62. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/ai_talking_photo/client.py +0 -0
  63. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/animation/README.md +0 -0
  64. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/animation/__init__.py +0 -0
  65. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/animation/client.py +0 -0
  66. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/auto_subtitle_generator/README.md +0 -0
  67. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/auto_subtitle_generator/__init__.py +0 -0
  68. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/auto_subtitle_generator/client.py +0 -0
  69. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/face_swap/README.md +0 -0
  70. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/face_swap/__init__.py +0 -0
  71. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/face_swap/client.py +0 -0
  72. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/face_swap_photo/README.md +0 -0
  73. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/face_swap_photo/__init__.py +0 -0
  74. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/face_swap_photo/client.py +0 -0
  75. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/files/__init__.py +0 -0
  76. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/files/client.py +0 -0
  77. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/files/upload_urls/README.md +0 -0
  78. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/files/upload_urls/__init__.py +0 -0
  79. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/files/upload_urls/client.py +0 -0
  80. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/image_background_remover/README.md +0 -0
  81. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/image_background_remover/__init__.py +0 -0
  82. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/image_background_remover/client.py +0 -0
  83. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/image_projects/README.md +0 -0
  84. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/image_projects/__init__.py +0 -0
  85. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/image_projects/client.py +0 -0
  86. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/image_to_video/README.md +0 -0
  87. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/image_to_video/__init__.py +0 -0
  88. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/image_to_video/client.py +0 -0
  89. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/lip_sync/README.md +0 -0
  90. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/lip_sync/__init__.py +0 -0
  91. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/lip_sync/client.py +0 -0
  92. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/photo_colorizer/README.md +0 -0
  93. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/photo_colorizer/__init__.py +0 -0
  94. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/photo_colorizer/client.py +0 -0
  95. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/text_to_video/README.md +0 -0
  96. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/text_to_video/__init__.py +0 -0
  97. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/text_to_video/client.py +0 -0
  98. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/video_projects/README.md +0 -0
  99. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/video_projects/__init__.py +0 -0
  100. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/video_projects/client.py +0 -0
  101. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/video_to_video/README.md +0 -0
  102. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/video_to_video/__init__.py +0 -0
  103. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/resources/v1/video_to_video/client.py +0 -0
  104. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_ai_clothes_changer_create_response.py +0 -0
  105. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_ai_face_editor_create_response.py +0 -0
  106. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_ai_gif_generator_create_response.py +0 -0
  107. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_ai_headshot_generator_create_response.py +0 -0
  108. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_ai_image_editor_create_response.py +0 -0
  109. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_ai_image_generator_create_response.py +0 -0
  110. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_ai_image_upscaler_create_response.py +0 -0
  111. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_ai_meme_generator_create_response.py +0 -0
  112. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_ai_photo_editor_create_response.py +0 -0
  113. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_ai_qr_code_generator_create_response.py +0 -0
  114. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_ai_talking_photo_create_response.py +0 -0
  115. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_animation_create_response.py +0 -0
  116. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_auto_subtitle_generator_create_response.py +0 -0
  117. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_face_swap_create_response.py +0 -0
  118. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_face_swap_photo_create_response.py +0 -0
  119. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_files_upload_urls_create_response.py +0 -0
  120. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_files_upload_urls_create_response_items_item.py +0 -0
  121. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_image_background_remover_create_response.py +0 -0
  122. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_image_projects_get_response.py +0 -0
  123. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_image_projects_get_response_downloads_item.py +0 -0
  124. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_image_projects_get_response_error.py +0 -0
  125. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_image_to_video_create_response.py +0 -0
  126. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_lip_sync_create_response.py +0 -0
  127. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_photo_colorizer_create_response.py +0 -0
  128. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_text_to_video_create_response.py +0 -0
  129. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_video_projects_get_response.py +0 -0
  130. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_video_projects_get_response_download.py +0 -0
  131. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_video_projects_get_response_downloads_item.py +0 -0
  132. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_video_projects_get_response_error.py +0 -0
  133. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/models/v1_video_to_video_create_response.py +0 -0
  134. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_clothes_changer_create_body.py +0 -0
  135. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_clothes_changer_create_body_assets.py +0 -0
  136. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_face_editor_create_body.py +0 -0
  137. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_face_editor_create_body_assets.py +0 -0
  138. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_face_editor_create_body_style.py +0 -0
  139. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_gif_generator_create_body.py +0 -0
  140. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_gif_generator_create_body_style.py +0 -0
  141. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_headshot_generator_create_body.py +0 -0
  142. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_headshot_generator_create_body_assets.py +0 -0
  143. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_headshot_generator_create_body_style.py +0 -0
  144. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_image_editor_create_body.py +0 -0
  145. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_image_editor_create_body_assets.py +0 -0
  146. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_image_editor_create_body_style.py +0 -0
  147. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_image_generator_create_body.py +0 -0
  148. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_image_generator_create_body_style.py +0 -0
  149. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_image_upscaler_create_body.py +0 -0
  150. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_image_upscaler_create_body_assets.py +0 -0
  151. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_image_upscaler_create_body_style.py +0 -0
  152. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_meme_generator_create_body.py +0 -0
  153. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_meme_generator_create_body_style.py +0 -0
  154. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_photo_editor_create_body.py +0 -0
  155. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_photo_editor_create_body_assets.py +0 -0
  156. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_photo_editor_create_body_style.py +0 -0
  157. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_qr_code_generator_create_body.py +0 -0
  158. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_qr_code_generator_create_body_style.py +0 -0
  159. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_talking_photo_create_body.py +0 -0
  160. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_talking_photo_create_body_assets.py +0 -0
  161. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_ai_talking_photo_create_body_style.py +0 -0
  162. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_animation_create_body.py +0 -0
  163. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_animation_create_body_assets.py +0 -0
  164. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_animation_create_body_style.py +0 -0
  165. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_auto_subtitle_generator_create_body.py +0 -0
  166. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_auto_subtitle_generator_create_body_assets.py +0 -0
  167. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_auto_subtitle_generator_create_body_style.py +0 -0
  168. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_auto_subtitle_generator_create_body_style_custom_config.py +0 -0
  169. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_face_swap_create_body.py +0 -0
  170. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_face_swap_create_body_assets.py +0 -0
  171. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_face_swap_photo_create_body.py +0 -0
  172. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_face_swap_photo_create_body_assets.py +0 -0
  173. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_face_swap_photo_create_body_assets_face_mappings_item.py +0 -0
  174. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_files_upload_urls_create_body.py +0 -0
  175. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_files_upload_urls_create_body_items_item.py +0 -0
  176. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_image_background_remover_create_body.py +0 -0
  177. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_image_background_remover_create_body_assets.py +0 -0
  178. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_image_to_video_create_body.py +0 -0
  179. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_image_to_video_create_body_assets.py +0 -0
  180. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_image_to_video_create_body_style.py +0 -0
  181. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_lip_sync_create_body.py +0 -0
  182. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_lip_sync_create_body_assets.py +0 -0
  183. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_photo_colorizer_create_body.py +0 -0
  184. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_photo_colorizer_create_body_assets.py +0 -0
  185. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_text_to_video_create_body.py +0 -0
  186. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_text_to_video_create_body_style.py +0 -0
  187. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_video_to_video_create_body.py +0 -0
  188. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_video_to_video_create_body_assets.py +0 -0
  189. {magic_hour-0.29.0 → magic_hour-0.30.1}/magic_hour/types/params/v1_video_to_video_create_body_style.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: magic_hour
3
- Version: 0.29.0
3
+ Version: 0.30.1
4
4
  Summary: Python SDK for Magic Hour API
5
5
  Requires-Python: >=3.8,<4.0
6
6
  Classifier: Programming Language :: Python :: 3
@@ -111,6 +111,11 @@ client = AsyncClient(token="my api key")
111
111
 
112
112
  * [create](magic_hour/resources/v1/auto_subtitle_generator/README.md#create) - Auto Subtitle Generator
113
113
 
114
+ ### [v1.face_detection](magic_hour/resources/v1/face_detection/README.md)
115
+
116
+ * [create](magic_hour/resources/v1/face_detection/README.md#create) - Face Detection
117
+ * [get](magic_hour/resources/v1/face_detection/README.md#get) - Get face detection details
118
+
114
119
  ### [v1.face_swap](magic_hour/resources/v1/face_swap/README.md)
115
120
 
116
121
  * [create](magic_hour/resources/v1/face_swap/README.md#create) - Face Swap video
@@ -93,6 +93,11 @@ client = AsyncClient(token="my api key")
93
93
 
94
94
  * [create](magic_hour/resources/v1/auto_subtitle_generator/README.md#create) - Auto Subtitle Generator
95
95
 
96
+ ### [v1.face_detection](magic_hour/resources/v1/face_detection/README.md)
97
+
98
+ * [create](magic_hour/resources/v1/face_detection/README.md#create) - Face Detection
99
+ * [get](magic_hour/resources/v1/face_detection/README.md#get) - Get face detection details
100
+
96
101
  ### [v1.face_swap](magic_hour/resources/v1/face_swap/README.md)
97
102
 
98
103
  * [create](magic_hour/resources/v1/face_swap/README.md#create) - Face Swap video
@@ -6,7 +6,7 @@ class Environment(enum.Enum):
6
6
  """Pre-defined base URLs for the API"""
7
7
 
8
8
  ENVIRONMENT = "https://api.magichour.ai"
9
- MOCK_SERVER = "https://api.sideko.dev/v1/mock/magichour/magic-hour/0.29.0"
9
+ MOCK_SERVER = "https://api.sideko.dev/v1/mock/magichour/magic-hour/0.30.1"
10
10
 
11
11
 
12
12
  def _get_base_url(
@@ -48,6 +48,10 @@ from magic_hour.resources.v1.auto_subtitle_generator import (
48
48
  AsyncAutoSubtitleGeneratorClient,
49
49
  AutoSubtitleGeneratorClient,
50
50
  )
51
+ from magic_hour.resources.v1.face_detection import (
52
+ AsyncFaceDetectionClient,
53
+ FaceDetectionClient,
54
+ )
51
55
  from magic_hour.resources.v1.face_swap import AsyncFaceSwapClient, FaceSwapClient
52
56
  from magic_hour.resources.v1.face_swap_photo import (
53
57
  AsyncFaceSwapPhotoClient,
@@ -90,6 +94,7 @@ class V1Client:
90
94
  self._base_client = base_client
91
95
  self.image_projects = ImageProjectsClient(base_client=self._base_client)
92
96
  self.video_projects = VideoProjectsClient(base_client=self._base_client)
97
+ self.face_detection = FaceDetectionClient(base_client=self._base_client)
93
98
  self.ai_clothes_changer = AiClothesChangerClient(base_client=self._base_client)
94
99
  self.ai_face_editor = AiFaceEditorClient(base_client=self._base_client)
95
100
  self.ai_gif_generator = AiGifGeneratorClient(base_client=self._base_client)
@@ -127,6 +132,7 @@ class AsyncV1Client:
127
132
  self._base_client = base_client
128
133
  self.image_projects = AsyncImageProjectsClient(base_client=self._base_client)
129
134
  self.video_projects = AsyncVideoProjectsClient(base_client=self._base_client)
135
+ self.face_detection = AsyncFaceDetectionClient(base_client=self._base_client)
130
136
  self.ai_clothes_changer = AsyncAiClothesChangerClient(
131
137
  base_client=self._base_client
132
138
  )
@@ -0,0 +1,91 @@
1
+
2
+ ### Get face detection details <a name="get"></a>
3
+
4
+ Get the details of a face detection task.
5
+
6
+ **API Endpoint**: `GET /v1/face-detection/{id}`
7
+
8
+ #### Parameters
9
+
10
+ | Parameter | Required | Description | Example |
11
+ |-----------|:--------:|-------------|--------|
12
+ | `id` | ✓ | The id of the task | `"string"` |
13
+
14
+ #### Synchronous Client
15
+
16
+ ```python
17
+ from magic_hour import Client
18
+ from os import getenv
19
+
20
+ client = Client(token=getenv("API_TOKEN"))
21
+ res = client.v1.face_detection.get(id="string")
22
+
23
+ ```
24
+
25
+ #### Asynchronous Client
26
+
27
+ ```python
28
+ from magic_hour import AsyncClient
29
+ from os import getenv
30
+
31
+ client = AsyncClient(token=getenv("API_TOKEN"))
32
+ res = await client.v1.face_detection.get(id="string")
33
+
34
+ ```
35
+
36
+ #### Response
37
+
38
+ ##### Type
39
+ [V1FaceDetectionGetResponse](/magic_hour/types/models/v1_face_detection_get_response.py)
40
+
41
+ ##### Example
42
+ `{"credits_charged": 123, "faces": [{"path": "api-assets/id/0-0.png", "url": "https://videos.magichour.ai/api-assets/id/0-0.png"}], "id": "string", "status": "complete"}`
43
+
44
+ ### Face Detection <a name="create"></a>
45
+
46
+ Detect faces in an image or video.
47
+
48
+ Note: Face detection is free to use for the near future. Pricing may change in the future.
49
+
50
+ **API Endpoint**: `POST /v1/face-detection`
51
+
52
+ #### Parameters
53
+
54
+ | Parameter | Required | Description | Example |
55
+ |-----------|:--------:|-------------|--------|
56
+ | `assets` | ✓ | Provide the assets for face detection | `{"target_file_path": "api-assets/id/1234.png"}` |
57
+ | `confidence_score` | ✗ | Confidence threshold for filtering detected faces. * Higher values (e.g., 0.9) include only faces detected with high certainty, reducing false positives. * Lower values (e.g., 0.3) include more faces, but may increase the chance of incorrect detections. | `0.5` |
58
+
59
+ #### Synchronous Client
60
+
61
+ ```python
62
+ from magic_hour import Client
63
+ from os import getenv
64
+
65
+ client = Client(token=getenv("API_TOKEN"))
66
+ res = client.v1.face_detection.create(
67
+ assets={"target_file_path": "api-assets/id/1234.png"}, confidence_score=0.5
68
+ )
69
+
70
+ ```
71
+
72
+ #### Asynchronous Client
73
+
74
+ ```python
75
+ from magic_hour import AsyncClient
76
+ from os import getenv
77
+
78
+ client = AsyncClient(token=getenv("API_TOKEN"))
79
+ res = await client.v1.face_detection.create(
80
+ assets={"target_file_path": "api-assets/id/1234.png"}, confidence_score=0.5
81
+ )
82
+
83
+ ```
84
+
85
+ #### Response
86
+
87
+ ##### Type
88
+ [V1FaceDetectionCreateResponse](/magic_hour/types/models/v1_face_detection_create_response.py)
89
+
90
+ ##### Example
91
+ `{"credits_charged": 123, "id": "string"}`
@@ -0,0 +1,4 @@
1
+ from .client import AsyncFaceDetectionClient, FaceDetectionClient
2
+
3
+
4
+ __all__ = ["AsyncFaceDetectionClient", "FaceDetectionClient"]
@@ -0,0 +1,193 @@
1
+ import typing
2
+
3
+ from magic_hour.core import (
4
+ AsyncBaseClient,
5
+ RequestOptions,
6
+ SyncBaseClient,
7
+ default_request_options,
8
+ to_encodable,
9
+ type_utils,
10
+ )
11
+ from magic_hour.types import models, params
12
+
13
+
14
+ class FaceDetectionClient:
15
+ def __init__(self, *, base_client: SyncBaseClient):
16
+ self._base_client = base_client
17
+
18
+ def get(
19
+ self, *, id: str, request_options: typing.Optional[RequestOptions] = None
20
+ ) -> models.V1FaceDetectionGetResponse:
21
+ """
22
+ Get face detection details
23
+
24
+ Get the details of a face detection task.
25
+
26
+ GET /v1/face-detection/{id}
27
+
28
+ Args:
29
+ id: The id of the task
30
+ request_options: Additional options to customize the HTTP request
31
+
32
+ Returns:
33
+ 200
34
+
35
+ Raises:
36
+ ApiError: A custom exception class that provides additional context
37
+ for API errors, including the HTTP status code and response body.
38
+
39
+ Examples:
40
+ ```py
41
+ client.v1.face_detection.get(id="string")
42
+ ```
43
+ """
44
+ return self._base_client.request(
45
+ method="GET",
46
+ path=f"/v1/face-detection/{id}",
47
+ auth_names=["bearerAuth"],
48
+ cast_to=models.V1FaceDetectionGetResponse,
49
+ request_options=request_options or default_request_options(),
50
+ )
51
+
52
+ def create(
53
+ self,
54
+ *,
55
+ assets: params.V1FaceDetectionCreateBodyAssets,
56
+ confidence_score: typing.Union[
57
+ typing.Optional[float], type_utils.NotGiven
58
+ ] = type_utils.NOT_GIVEN,
59
+ request_options: typing.Optional[RequestOptions] = None,
60
+ ) -> models.V1FaceDetectionCreateResponse:
61
+ """
62
+ Face Detection
63
+
64
+ Detect faces in an image or video.
65
+
66
+ Note: Face detection is free to use for the near future. Pricing may change in the future.
67
+
68
+ POST /v1/face-detection
69
+
70
+ Args:
71
+ confidence_score: Confidence threshold for filtering detected faces.
72
+ * Higher values (e.g., 0.9) include only faces detected with high certainty, reducing false positives.
73
+ * Lower values (e.g., 0.3) include more faces, but may increase the chance of incorrect detections.
74
+ assets: Provide the assets for face detection
75
+ request_options: Additional options to customize the HTTP request
76
+
77
+ Returns:
78
+ 200
79
+
80
+ Raises:
81
+ ApiError: A custom exception class that provides additional context
82
+ for API errors, including the HTTP status code and response body.
83
+
84
+ Examples:
85
+ ```py
86
+ client.v1.face_detection.create(
87
+ assets={"target_file_path": "api-assets/id/1234.png"}, confidence_score=0.5
88
+ )
89
+ ```
90
+ """
91
+ _json = to_encodable(
92
+ item={"confidence_score": confidence_score, "assets": assets},
93
+ dump_with=params._SerializerV1FaceDetectionCreateBody,
94
+ )
95
+ return self._base_client.request(
96
+ method="POST",
97
+ path="/v1/face-detection",
98
+ auth_names=["bearerAuth"],
99
+ json=_json,
100
+ cast_to=models.V1FaceDetectionCreateResponse,
101
+ request_options=request_options or default_request_options(),
102
+ )
103
+
104
+
105
+ class AsyncFaceDetectionClient:
106
+ def __init__(self, *, base_client: AsyncBaseClient):
107
+ self._base_client = base_client
108
+
109
+ async def get(
110
+ self, *, id: str, request_options: typing.Optional[RequestOptions] = None
111
+ ) -> models.V1FaceDetectionGetResponse:
112
+ """
113
+ Get face detection details
114
+
115
+ Get the details of a face detection task.
116
+
117
+ GET /v1/face-detection/{id}
118
+
119
+ Args:
120
+ id: The id of the task
121
+ request_options: Additional options to customize the HTTP request
122
+
123
+ Returns:
124
+ 200
125
+
126
+ Raises:
127
+ ApiError: A custom exception class that provides additional context
128
+ for API errors, including the HTTP status code and response body.
129
+
130
+ Examples:
131
+ ```py
132
+ await client.v1.face_detection.get(id="string")
133
+ ```
134
+ """
135
+ return await self._base_client.request(
136
+ method="GET",
137
+ path=f"/v1/face-detection/{id}",
138
+ auth_names=["bearerAuth"],
139
+ cast_to=models.V1FaceDetectionGetResponse,
140
+ request_options=request_options or default_request_options(),
141
+ )
142
+
143
+ async def create(
144
+ self,
145
+ *,
146
+ assets: params.V1FaceDetectionCreateBodyAssets,
147
+ confidence_score: typing.Union[
148
+ typing.Optional[float], type_utils.NotGiven
149
+ ] = type_utils.NOT_GIVEN,
150
+ request_options: typing.Optional[RequestOptions] = None,
151
+ ) -> models.V1FaceDetectionCreateResponse:
152
+ """
153
+ Face Detection
154
+
155
+ Detect faces in an image or video.
156
+
157
+ Note: Face detection is free to use for the near future. Pricing may change in the future.
158
+
159
+ POST /v1/face-detection
160
+
161
+ Args:
162
+ confidence_score: Confidence threshold for filtering detected faces.
163
+ * Higher values (e.g., 0.9) include only faces detected with high certainty, reducing false positives.
164
+ * Lower values (e.g., 0.3) include more faces, but may increase the chance of incorrect detections.
165
+ assets: Provide the assets for face detection
166
+ request_options: Additional options to customize the HTTP request
167
+
168
+ Returns:
169
+ 200
170
+
171
+ Raises:
172
+ ApiError: A custom exception class that provides additional context
173
+ for API errors, including the HTTP status code and response body.
174
+
175
+ Examples:
176
+ ```py
177
+ await client.v1.face_detection.create(
178
+ assets={"target_file_path": "api-assets/id/1234.png"}, confidence_score=0.5
179
+ )
180
+ ```
181
+ """
182
+ _json = to_encodable(
183
+ item={"confidence_score": confidence_score, "assets": assets},
184
+ dump_with=params._SerializerV1FaceDetectionCreateBody,
185
+ )
186
+ return await self._base_client.request(
187
+ method="POST",
188
+ path="/v1/face-detection",
189
+ auth_names=["bearerAuth"],
190
+ json=_json,
191
+ cast_to=models.V1FaceDetectionCreateResponse,
192
+ request_options=request_options or default_request_options(),
193
+ )
@@ -15,6 +15,11 @@ from .v1_animation_create_response import V1AnimationCreateResponse
15
15
  from .v1_auto_subtitle_generator_create_response import (
16
16
  V1AutoSubtitleGeneratorCreateResponse,
17
17
  )
18
+ from .v1_face_detection_create_response import V1FaceDetectionCreateResponse
19
+ from .v1_face_detection_get_response import V1FaceDetectionGetResponse
20
+ from .v1_face_detection_get_response_faces_item import (
21
+ V1FaceDetectionGetResponseFacesItem,
22
+ )
18
23
  from .v1_face_swap_create_response import V1FaceSwapCreateResponse
19
24
  from .v1_face_swap_photo_create_response import V1FaceSwapPhotoCreateResponse
20
25
  from .v1_files_upload_urls_create_response import V1FilesUploadUrlsCreateResponse
@@ -56,6 +61,9 @@ __all__ = [
56
61
  "V1AiTalkingPhotoCreateResponse",
57
62
  "V1AnimationCreateResponse",
58
63
  "V1AutoSubtitleGeneratorCreateResponse",
64
+ "V1FaceDetectionCreateResponse",
65
+ "V1FaceDetectionGetResponse",
66
+ "V1FaceDetectionGetResponseFacesItem",
59
67
  "V1FaceSwapCreateResponse",
60
68
  "V1FaceSwapPhotoCreateResponse",
61
69
  "V1FilesUploadUrlsCreateResponse",
@@ -0,0 +1,25 @@
1
+ import pydantic
2
+
3
+
4
+ class V1FaceDetectionCreateResponse(pydantic.BaseModel):
5
+ """
6
+ V1FaceDetectionCreateResponse
7
+ """
8
+
9
+ model_config = pydantic.ConfigDict(
10
+ arbitrary_types_allowed=True,
11
+ populate_by_name=True,
12
+ )
13
+
14
+ credits_charged: int = pydantic.Field(
15
+ alias="credits_charged",
16
+ )
17
+ """
18
+ The credits charged for the task.
19
+ """
20
+ id: str = pydantic.Field(
21
+ alias="id",
22
+ )
23
+ """
24
+ The id of the task
25
+ """
@@ -0,0 +1,45 @@
1
+ import pydantic
2
+ import typing
3
+ import typing_extensions
4
+
5
+ from .v1_face_detection_get_response_faces_item import (
6
+ V1FaceDetectionGetResponseFacesItem,
7
+ )
8
+
9
+
10
+ class V1FaceDetectionGetResponse(pydantic.BaseModel):
11
+ """
12
+ V1FaceDetectionGetResponse
13
+ """
14
+
15
+ model_config = pydantic.ConfigDict(
16
+ arbitrary_types_allowed=True,
17
+ populate_by_name=True,
18
+ )
19
+
20
+ credits_charged: int = pydantic.Field(
21
+ alias="credits_charged",
22
+ )
23
+ """
24
+ The credits charged for the task.
25
+ """
26
+ faces: typing.List[V1FaceDetectionGetResponseFacesItem] = pydantic.Field(
27
+ alias="faces",
28
+ )
29
+ """
30
+ The faces detected in the image or video. The list is populated as faces are detected.
31
+ """
32
+ id: str = pydantic.Field(
33
+ alias="id",
34
+ )
35
+ """
36
+ The id of the task
37
+ """
38
+ status: typing_extensions.Literal["complete", "error", "queued", "rendering"] = (
39
+ pydantic.Field(
40
+ alias="status",
41
+ )
42
+ )
43
+ """
44
+ The status of the detection.
45
+ """
@@ -0,0 +1,25 @@
1
+ import pydantic
2
+
3
+
4
+ class V1FaceDetectionGetResponseFacesItem(pydantic.BaseModel):
5
+ """
6
+ V1FaceDetectionGetResponseFacesItem
7
+ """
8
+
9
+ model_config = pydantic.ConfigDict(
10
+ arbitrary_types_allowed=True,
11
+ populate_by_name=True,
12
+ )
13
+
14
+ path: str = pydantic.Field(
15
+ alias="path",
16
+ )
17
+ """
18
+ The path to the face image. This should be used in face swap photo/video API calls as `.assets.face_mappings.original_face`
19
+ """
20
+ url: str = pydantic.Field(
21
+ alias="url",
22
+ )
23
+ """
24
+ The url to the face image. This is used to render the image in your applications.
25
+ """
@@ -138,6 +138,14 @@ from .v1_auto_subtitle_generator_create_body_style_custom_config import (
138
138
  V1AutoSubtitleGeneratorCreateBodyStyleCustomConfig,
139
139
  _SerializerV1AutoSubtitleGeneratorCreateBodyStyleCustomConfig,
140
140
  )
141
+ from .v1_face_detection_create_body import (
142
+ V1FaceDetectionCreateBody,
143
+ _SerializerV1FaceDetectionCreateBody,
144
+ )
145
+ from .v1_face_detection_create_body_assets import (
146
+ V1FaceDetectionCreateBodyAssets,
147
+ _SerializerV1FaceDetectionCreateBodyAssets,
148
+ )
141
149
  from .v1_face_swap_create_body import (
142
150
  V1FaceSwapCreateBody,
143
151
  _SerializerV1FaceSwapCreateBody,
@@ -257,6 +265,8 @@ __all__ = [
257
265
  "V1AutoSubtitleGeneratorCreateBodyAssets",
258
266
  "V1AutoSubtitleGeneratorCreateBodyStyle",
259
267
  "V1AutoSubtitleGeneratorCreateBodyStyleCustomConfig",
268
+ "V1FaceDetectionCreateBody",
269
+ "V1FaceDetectionCreateBodyAssets",
260
270
  "V1FaceSwapCreateBody",
261
271
  "V1FaceSwapCreateBodyAssets",
262
272
  "V1FaceSwapPhotoCreateBody",
@@ -313,6 +323,8 @@ __all__ = [
313
323
  "_SerializerV1AutoSubtitleGeneratorCreateBodyAssets",
314
324
  "_SerializerV1AutoSubtitleGeneratorCreateBodyStyle",
315
325
  "_SerializerV1AutoSubtitleGeneratorCreateBodyStyleCustomConfig",
326
+ "_SerializerV1FaceDetectionCreateBody",
327
+ "_SerializerV1FaceDetectionCreateBodyAssets",
316
328
  "_SerializerV1FaceSwapCreateBody",
317
329
  "_SerializerV1FaceSwapCreateBodyAssets",
318
330
  "_SerializerV1FaceSwapPhotoCreateBody",
@@ -0,0 +1,44 @@
1
+ import pydantic
2
+ import typing
3
+ import typing_extensions
4
+
5
+ from .v1_face_detection_create_body_assets import (
6
+ V1FaceDetectionCreateBodyAssets,
7
+ _SerializerV1FaceDetectionCreateBodyAssets,
8
+ )
9
+
10
+
11
+ class V1FaceDetectionCreateBody(typing_extensions.TypedDict):
12
+ """
13
+ V1FaceDetectionCreateBody
14
+ """
15
+
16
+ assets: typing_extensions.Required[V1FaceDetectionCreateBodyAssets]
17
+ """
18
+ Provide the assets for face detection
19
+ """
20
+
21
+ confidence_score: typing_extensions.NotRequired[float]
22
+ """
23
+ Confidence threshold for filtering detected faces.
24
+ * Higher values (e.g., 0.9) include only faces detected with high certainty, reducing false positives.
25
+ * Lower values (e.g., 0.3) include more faces, but may increase the chance of incorrect detections.
26
+ """
27
+
28
+
29
+ class _SerializerV1FaceDetectionCreateBody(pydantic.BaseModel):
30
+ """
31
+ Serializer for V1FaceDetectionCreateBody handling case conversions
32
+ and file omissions as dictated by the API
33
+ """
34
+
35
+ model_config = pydantic.ConfigDict(
36
+ populate_by_name=True,
37
+ )
38
+
39
+ assets: _SerializerV1FaceDetectionCreateBodyAssets = pydantic.Field(
40
+ alias="assets",
41
+ )
42
+ confidence_score: typing.Optional[float] = pydantic.Field(
43
+ alias="confidence_score", default=None
44
+ )
@@ -0,0 +1,28 @@
1
+ import pydantic
2
+ import typing_extensions
3
+
4
+
5
+ class V1FaceDetectionCreateBodyAssets(typing_extensions.TypedDict):
6
+ """
7
+ Provide the assets for face detection
8
+ """
9
+
10
+ target_file_path: typing_extensions.Required[str]
11
+ """
12
+ This is the image or video where the face will be detected. This value can be either the `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls), or the url of the file.
13
+ """
14
+
15
+
16
+ class _SerializerV1FaceDetectionCreateBodyAssets(pydantic.BaseModel):
17
+ """
18
+ Serializer for V1FaceDetectionCreateBodyAssets handling case conversions
19
+ and file omissions as dictated by the API
20
+ """
21
+
22
+ model_config = pydantic.ConfigDict(
23
+ populate_by_name=True,
24
+ )
25
+
26
+ target_file_path: str = pydantic.Field(
27
+ alias="target_file_path",
28
+ )
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "magic_hour"
3
- version = "0.29.0"
3
+ version = "0.30.1"
4
4
  description = "Python SDK for Magic Hour API"
5
5
  readme = "README.md"
6
6
  authors = []
File without changes