magic_hour 0.35.0__tar.gz → 0.36.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 (262) hide show
  1. magic_hour-0.36.1/PKG-INFO +306 -0
  2. magic_hour-0.36.1/README.md +287 -0
  3. magic_hour-0.36.1/magic_hour/README.md +35 -0
  4. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/core/base_client.py +6 -5
  5. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/core/query.py +12 -6
  6. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/core/request.py +3 -3
  7. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/core/response.py +18 -14
  8. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/core/utils.py +3 -3
  9. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/environment.py +1 -1
  10. magic_hour-0.36.1/magic_hour/helpers/__init__.py +3 -0
  11. magic_hour-0.36.1/magic_hour/helpers/download.py +75 -0
  12. magic_hour-0.36.1/magic_hour/resources/v1/README.md +33 -0
  13. magic_hour-0.36.1/magic_hour/resources/v1/ai_clothes_changer/README.md +130 -0
  14. magic_hour-0.36.1/magic_hour/resources/v1/ai_clothes_changer/client.py +273 -0
  15. magic_hour-0.36.1/magic_hour/resources/v1/ai_face_editor/README.md +194 -0
  16. magic_hour-0.36.1/magic_hour/resources/v1/ai_face_editor/client.py +325 -0
  17. magic_hour-0.36.1/magic_hour/resources/v1/ai_gif_generator/README.md +106 -0
  18. magic_hour-0.36.1/magic_hour/resources/v1/ai_gif_generator/client.py +236 -0
  19. magic_hour-0.36.1/magic_hour/resources/v1/ai_headshot_generator/README.md +108 -0
  20. magic_hour-0.36.1/magic_hour/resources/v1/ai_headshot_generator/client.py +269 -0
  21. magic_hour-0.36.1/magic_hour/resources/v1/ai_image_editor/README.md +116 -0
  22. magic_hour-0.36.1/magic_hour/resources/v1/ai_image_editor/client.py +261 -0
  23. magic_hour-0.36.1/magic_hour/resources/v1/ai_image_generator/README.md +121 -0
  24. magic_hour-0.36.1/magic_hour/resources/v1/ai_image_generator/client.py +281 -0
  25. magic_hour-0.36.1/magic_hour/resources/v1/ai_image_upscaler/README.md +122 -0
  26. magic_hour-0.36.1/magic_hour/resources/v1/ai_image_upscaler/client.py +295 -0
  27. magic_hour-0.36.1/magic_hour/resources/v1/ai_meme_generator/README.md +128 -0
  28. magic_hour-0.36.1/magic_hour/resources/v1/ai_meme_generator/client.py +254 -0
  29. magic_hour-0.36.1/magic_hour/resources/v1/ai_photo_editor/README.md +167 -0
  30. magic_hour-0.36.1/magic_hour/resources/v1/ai_photo_editor/client.py +347 -0
  31. magic_hour-0.36.1/magic_hour/resources/v1/ai_qr_code_generator/README.md +115 -0
  32. magic_hour-0.36.1/magic_hour/resources/v1/ai_qr_code_generator/client.py +248 -0
  33. magic_hour-0.36.1/magic_hour/resources/v1/ai_talking_photo/README.md +136 -0
  34. magic_hour-0.36.1/magic_hour/resources/v1/ai_talking_photo/client.py +327 -0
  35. magic_hour-0.36.1/magic_hour/resources/v1/animation/README.md +184 -0
  36. magic_hour-0.36.1/magic_hour/resources/v1/animation/client.py +403 -0
  37. magic_hour-0.36.1/magic_hour/resources/v1/auto_subtitle_generator/README.md +127 -0
  38. magic_hour-0.36.1/magic_hour/resources/v1/auto_subtitle_generator/client.py +347 -0
  39. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/face_detection/README.md +59 -0
  40. magic_hour-0.36.1/magic_hour/resources/v1/face_detection/__init__.py +12 -0
  41. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/face_detection/client.py +179 -0
  42. magic_hour-0.36.1/magic_hour/resources/v1/face_swap/README.md +179 -0
  43. magic_hour-0.36.1/magic_hour/resources/v1/face_swap/client.py +455 -0
  44. magic_hour-0.36.1/magic_hour/resources/v1/face_swap_photo/README.md +153 -0
  45. magic_hour-0.36.1/magic_hour/resources/v1/face_swap_photo/client.py +311 -0
  46. magic_hour-0.36.1/magic_hour/resources/v1/files/README.md +40 -0
  47. magic_hour-0.36.1/magic_hour/resources/v1/files/client.py +367 -0
  48. magic_hour-0.36.1/magic_hour/resources/v1/files/client_test.py +414 -0
  49. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/files/upload_urls/README.md +8 -0
  50. magic_hour-0.36.1/magic_hour/resources/v1/image_background_remover/README.md +123 -0
  51. magic_hour-0.36.1/magic_hour/resources/v1/image_background_remover/client.py +255 -0
  52. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/image_projects/README.md +52 -0
  53. magic_hour-0.36.1/magic_hour/resources/v1/image_projects/__init__.py +12 -0
  54. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/image_projects/client.py +138 -0
  55. magic_hour-0.36.1/magic_hour/resources/v1/image_projects/client_test.py +527 -0
  56. magic_hour-0.36.1/magic_hour/resources/v1/image_to_video/README.md +129 -0
  57. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/image_to_video/client.py +186 -0
  58. magic_hour-0.36.1/magic_hour/resources/v1/lip_sync/README.md +149 -0
  59. magic_hour-0.36.1/magic_hour/resources/v1/lip_sync/client.py +421 -0
  60. magic_hour-0.36.1/magic_hour/resources/v1/photo_colorizer/README.md +106 -0
  61. magic_hour-0.36.1/magic_hour/resources/v1/photo_colorizer/client.py +249 -0
  62. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/text_to_video/README.md +68 -0
  63. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/text_to_video/client.py +151 -0
  64. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/video_projects/README.md +52 -0
  65. magic_hour-0.36.1/magic_hour/resources/v1/video_projects/__init__.py +12 -0
  66. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/video_projects/client.py +137 -0
  67. magic_hour-0.36.1/magic_hour/resources/v1/video_projects/client_test.py +527 -0
  68. magic_hour-0.36.1/magic_hour/resources/v1/video_to_video/README.md +166 -0
  69. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/video_to_video/client.py +222 -0
  70. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/__init__.py +58 -0
  71. magic_hour-0.36.1/magic_hour/types/params/v1_ai_clothes_changer_generate_body_assets.py +33 -0
  72. magic_hour-0.36.1/magic_hour/types/params/v1_ai_face_editor_generate_body_assets.py +17 -0
  73. magic_hour-0.36.1/magic_hour/types/params/v1_ai_headshot_generator_generate_body_assets.py +17 -0
  74. magic_hour-0.36.1/magic_hour/types/params/v1_ai_image_editor_generate_body_assets.py +17 -0
  75. magic_hour-0.36.1/magic_hour/types/params/v1_ai_image_upscaler_generate_body_assets.py +17 -0
  76. magic_hour-0.36.1/magic_hour/types/params/v1_ai_photo_editor_generate_body_assets.py +17 -0
  77. magic_hour-0.36.1/magic_hour/types/params/v1_ai_talking_photo_generate_body_assets.py +26 -0
  78. magic_hour-0.36.1/magic_hour/types/params/v1_animation_generate_body_assets.py +39 -0
  79. magic_hour-0.36.1/magic_hour/types/params/v1_auto_subtitle_generator_generate_body_assets.py +17 -0
  80. magic_hour-0.36.1/magic_hour/types/params/v1_face_detection_generate_body_assets.py +17 -0
  81. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_face_swap_create_body.py +12 -0
  82. magic_hour-0.36.1/magic_hour/types/params/v1_face_swap_create_body_style.py +33 -0
  83. magic_hour-0.36.1/magic_hour/types/params/v1_face_swap_generate_body_assets.py +56 -0
  84. magic_hour-0.36.1/magic_hour/types/params/v1_face_swap_generate_body_assets_face_mappings_item.py +25 -0
  85. magic_hour-0.36.1/magic_hour/types/params/v1_face_swap_photo_generate_body_assets.py +47 -0
  86. magic_hour-0.36.1/magic_hour/types/params/v1_face_swap_photo_generate_body_assets_face_mappings_item.py +25 -0
  87. magic_hour-0.36.1/magic_hour/types/params/v1_image_background_remover_generate_body_assets.py +27 -0
  88. magic_hour-0.36.1/magic_hour/types/params/v1_image_to_video_generate_body_assets.py +17 -0
  89. magic_hour-0.36.1/magic_hour/types/params/v1_lip_sync_generate_body_assets.py +36 -0
  90. magic_hour-0.36.1/magic_hour/types/params/v1_photo_colorizer_generate_body_assets.py +17 -0
  91. magic_hour-0.36.1/magic_hour/types/params/v1_video_to_video_generate_body_assets.py +27 -0
  92. {magic_hour-0.35.0 → magic_hour-0.36.1}/pyproject.toml +1 -1
  93. magic_hour-0.35.0/PKG-INFO +0 -166
  94. magic_hour-0.35.0/README.md +0 -147
  95. magic_hour-0.35.0/magic_hour/resources/v1/ai_clothes_changer/README.md +0 -57
  96. magic_hour-0.35.0/magic_hour/resources/v1/ai_clothes_changer/client.py +0 -127
  97. magic_hour-0.35.0/magic_hour/resources/v1/ai_face_editor/README.md +0 -84
  98. magic_hour-0.35.0/magic_hour/resources/v1/ai_face_editor/client.py +0 -157
  99. magic_hour-0.35.0/magic_hour/resources/v1/ai_gif_generator/README.md +0 -47
  100. magic_hour-0.35.0/magic_hour/resources/v1/ai_gif_generator/client.py +0 -117
  101. magic_hour-0.35.0/magic_hour/resources/v1/ai_headshot_generator/README.md +0 -48
  102. magic_hour-0.35.0/magic_hour/resources/v1/ai_headshot_generator/client.py +0 -129
  103. magic_hour-0.35.0/magic_hour/resources/v1/ai_image_editor/README.md +0 -52
  104. magic_hour-0.35.0/magic_hour/resources/v1/ai_image_editor/client.py +0 -125
  105. magic_hour-0.35.0/magic_hour/resources/v1/ai_image_generator/README.md +0 -55
  106. magic_hour-0.35.0/magic_hour/resources/v1/ai_image_generator/client.py +0 -142
  107. magic_hour-0.35.0/magic_hour/resources/v1/ai_image_upscaler/README.md +0 -55
  108. magic_hour-0.35.0/magic_hour/resources/v1/ai_image_upscaler/client.py +0 -145
  109. magic_hour-0.35.0/magic_hour/resources/v1/ai_meme_generator/README.md +0 -57
  110. magic_hour-0.35.0/magic_hour/resources/v1/ai_meme_generator/client.py +0 -127
  111. magic_hour-0.35.0/magic_hour/resources/v1/ai_photo_editor/README.md +0 -76
  112. magic_hour-0.35.0/magic_hour/resources/v1/ai_photo_editor/client.py +0 -173
  113. magic_hour-0.35.0/magic_hour/resources/v1/ai_qr_code_generator/README.md +0 -52
  114. magic_hour-0.35.0/magic_hour/resources/v1/ai_qr_code_generator/client.py +0 -125
  115. magic_hour-0.35.0/magic_hour/resources/v1/ai_talking_photo/README.md +0 -62
  116. magic_hour-0.35.0/magic_hour/resources/v1/ai_talking_photo/client.py +0 -157
  117. magic_hour-0.35.0/magic_hour/resources/v1/animation/README.md +0 -84
  118. magic_hour-0.35.0/magic_hour/resources/v1/animation/client.py +0 -185
  119. magic_hour-0.35.0/magic_hour/resources/v1/auto_subtitle_generator/README.md +0 -58
  120. magic_hour-0.35.0/magic_hour/resources/v1/auto_subtitle_generator/client.py +0 -169
  121. magic_hour-0.35.0/magic_hour/resources/v1/face_detection/__init__.py +0 -4
  122. magic_hour-0.35.0/magic_hour/resources/v1/face_swap/README.md +0 -82
  123. magic_hour-0.35.0/magic_hour/resources/v1/face_swap/client.py +0 -213
  124. magic_hour-0.35.0/magic_hour/resources/v1/face_swap_photo/README.md +0 -69
  125. magic_hour-0.35.0/magic_hour/resources/v1/face_swap_photo/client.py +0 -139
  126. magic_hour-0.35.0/magic_hour/resources/v1/files/client.py +0 -17
  127. magic_hour-0.35.0/magic_hour/resources/v1/image_background_remover/README.md +0 -55
  128. magic_hour-0.35.0/magic_hour/resources/v1/image_background_remover/client.py +0 -125
  129. magic_hour-0.35.0/magic_hour/resources/v1/image_projects/__init__.py +0 -4
  130. magic_hour-0.35.0/magic_hour/resources/v1/image_to_video/README.md +0 -61
  131. magic_hour-0.35.0/magic_hour/resources/v1/lip_sync/README.md +0 -71
  132. magic_hour-0.35.0/magic_hour/resources/v1/lip_sync/client.py +0 -211
  133. magic_hour-0.35.0/magic_hour/resources/v1/photo_colorizer/README.md +0 -47
  134. magic_hour-0.35.0/magic_hour/resources/v1/photo_colorizer/client.py +0 -119
  135. magic_hour-0.35.0/magic_hour/resources/v1/video_projects/__init__.py +0 -4
  136. magic_hour-0.35.0/magic_hour/resources/v1/video_to_video/README.md +0 -78
  137. {magic_hour-0.35.0 → magic_hour-0.36.1}/LICENSE +0 -0
  138. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/__init__.py +0 -0
  139. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/client.py +0 -0
  140. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/core/__init__.py +0 -0
  141. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/core/api_error.py +0 -0
  142. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/core/auth.py +0 -0
  143. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/core/binary_response.py +0 -0
  144. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/core/type_utils.py +0 -0
  145. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/__init__.py +0 -0
  146. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/ai_clothes_changer/__init__.py +0 -0
  147. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/ai_face_editor/__init__.py +0 -0
  148. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/ai_gif_generator/__init__.py +0 -0
  149. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/ai_headshot_generator/__init__.py +0 -0
  150. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/ai_image_editor/__init__.py +0 -0
  151. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/ai_image_generator/__init__.py +0 -0
  152. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/ai_image_upscaler/__init__.py +0 -0
  153. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/ai_meme_generator/__init__.py +0 -0
  154. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/ai_photo_editor/__init__.py +0 -0
  155. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/ai_qr_code_generator/__init__.py +0 -0
  156. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/ai_talking_photo/__init__.py +0 -0
  157. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/animation/__init__.py +0 -0
  158. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/auto_subtitle_generator/__init__.py +0 -0
  159. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/client.py +0 -0
  160. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/face_swap/__init__.py +0 -0
  161. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/face_swap_photo/__init__.py +0 -0
  162. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/files/__init__.py +0 -0
  163. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/files/upload_urls/__init__.py +0 -0
  164. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/files/upload_urls/client.py +0 -0
  165. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/image_background_remover/__init__.py +0 -0
  166. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/image_to_video/__init__.py +0 -0
  167. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/lip_sync/__init__.py +0 -0
  168. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/photo_colorizer/__init__.py +0 -0
  169. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/text_to_video/__init__.py +0 -0
  170. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/resources/v1/video_to_video/__init__.py +0 -0
  171. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/__init__.py +0 -0
  172. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_ai_clothes_changer_create_response.py +0 -0
  173. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_ai_face_editor_create_response.py +0 -0
  174. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_ai_gif_generator_create_response.py +0 -0
  175. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_ai_headshot_generator_create_response.py +0 -0
  176. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_ai_image_editor_create_response.py +0 -0
  177. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_ai_image_generator_create_response.py +0 -0
  178. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_ai_image_upscaler_create_response.py +0 -0
  179. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_ai_meme_generator_create_response.py +0 -0
  180. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_ai_photo_editor_create_response.py +0 -0
  181. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_ai_qr_code_generator_create_response.py +0 -0
  182. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_ai_talking_photo_create_response.py +0 -0
  183. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_animation_create_response.py +0 -0
  184. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_auto_subtitle_generator_create_response.py +0 -0
  185. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_face_detection_create_response.py +0 -0
  186. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_face_detection_get_response.py +0 -0
  187. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_face_detection_get_response_faces_item.py +0 -0
  188. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_face_swap_create_response.py +0 -0
  189. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_face_swap_photo_create_response.py +0 -0
  190. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_files_upload_urls_create_response.py +0 -0
  191. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_files_upload_urls_create_response_items_item.py +0 -0
  192. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_image_background_remover_create_response.py +0 -0
  193. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_image_projects_get_response.py +0 -0
  194. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_image_projects_get_response_downloads_item.py +0 -0
  195. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_image_projects_get_response_error.py +0 -0
  196. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_image_to_video_create_response.py +0 -0
  197. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_lip_sync_create_response.py +0 -0
  198. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_photo_colorizer_create_response.py +0 -0
  199. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_text_to_video_create_response.py +0 -0
  200. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_video_projects_get_response.py +0 -0
  201. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_video_projects_get_response_download.py +0 -0
  202. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_video_projects_get_response_downloads_item.py +0 -0
  203. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_video_projects_get_response_error.py +0 -0
  204. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/models/v1_video_to_video_create_response.py +0 -0
  205. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_clothes_changer_create_body.py +0 -0
  206. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_clothes_changer_create_body_assets.py +0 -0
  207. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_face_editor_create_body.py +0 -0
  208. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_face_editor_create_body_assets.py +0 -0
  209. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_face_editor_create_body_style.py +0 -0
  210. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_gif_generator_create_body.py +0 -0
  211. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_gif_generator_create_body_style.py +0 -0
  212. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_headshot_generator_create_body.py +0 -0
  213. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_headshot_generator_create_body_assets.py +0 -0
  214. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_headshot_generator_create_body_style.py +0 -0
  215. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_image_editor_create_body.py +0 -0
  216. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_image_editor_create_body_assets.py +0 -0
  217. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_image_editor_create_body_style.py +0 -0
  218. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_image_generator_create_body.py +0 -0
  219. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_image_generator_create_body_style.py +0 -0
  220. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_image_upscaler_create_body.py +0 -0
  221. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_image_upscaler_create_body_assets.py +0 -0
  222. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_image_upscaler_create_body_style.py +0 -0
  223. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_meme_generator_create_body.py +0 -0
  224. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_meme_generator_create_body_style.py +0 -0
  225. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_photo_editor_create_body.py +0 -0
  226. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_photo_editor_create_body_assets.py +0 -0
  227. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_photo_editor_create_body_style.py +0 -0
  228. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_qr_code_generator_create_body.py +0 -0
  229. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_qr_code_generator_create_body_style.py +0 -0
  230. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_talking_photo_create_body.py +0 -0
  231. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_talking_photo_create_body_assets.py +0 -0
  232. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_ai_talking_photo_create_body_style.py +0 -0
  233. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_animation_create_body.py +0 -0
  234. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_animation_create_body_assets.py +0 -0
  235. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_animation_create_body_style.py +0 -0
  236. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_auto_subtitle_generator_create_body.py +0 -0
  237. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_auto_subtitle_generator_create_body_assets.py +0 -0
  238. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_auto_subtitle_generator_create_body_style.py +0 -0
  239. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_auto_subtitle_generator_create_body_style_custom_config.py +0 -0
  240. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_face_detection_create_body.py +0 -0
  241. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_face_detection_create_body_assets.py +0 -0
  242. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_face_swap_create_body_assets.py +0 -0
  243. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_face_swap_create_body_assets_face_mappings_item.py +0 -0
  244. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_face_swap_photo_create_body.py +0 -0
  245. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_face_swap_photo_create_body_assets.py +0 -0
  246. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_face_swap_photo_create_body_assets_face_mappings_item.py +0 -0
  247. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_files_upload_urls_create_body.py +0 -0
  248. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_files_upload_urls_create_body_items_item.py +0 -0
  249. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_image_background_remover_create_body.py +0 -0
  250. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_image_background_remover_create_body_assets.py +0 -0
  251. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_image_to_video_create_body.py +0 -0
  252. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_image_to_video_create_body_assets.py +0 -0
  253. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_image_to_video_create_body_style.py +0 -0
  254. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_lip_sync_create_body.py +0 -0
  255. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_lip_sync_create_body_assets.py +0 -0
  256. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_photo_colorizer_create_body.py +0 -0
  257. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_photo_colorizer_create_body_assets.py +0 -0
  258. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_text_to_video_create_body.py +0 -0
  259. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_text_to_video_create_body_style.py +0 -0
  260. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_video_to_video_create_body.py +0 -0
  261. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_video_to_video_create_body_assets.py +0 -0
  262. {magic_hour-0.35.0 → magic_hour-0.36.1}/magic_hour/types/params/v1_video_to_video_create_body_style.py +0 -0
@@ -0,0 +1,306 @@
1
+ Metadata-Version: 2.1
2
+ Name: magic_hour
3
+ Version: 0.36.1
4
+ Summary: Python SDK for Magic Hour API
5
+ Requires-Python: >=3.8,<4.0
6
+ Classifier: Programming Language :: Python :: 3
7
+ Classifier: Programming Language :: Python :: 3.8
8
+ Classifier: Programming Language :: Python :: 3.9
9
+ Classifier: Programming Language :: Python :: 3.10
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Requires-Dist: httpx (>=0.26.0,<1)
14
+ Requires-Dist: jsonpointer (>=3.0.0,<4.0.0)
15
+ Requires-Dist: pydantic (>=2.5.0,<3.0.0)
16
+ Requires-Dist: typing_extensions (>=4.0.0,<5.0.0)
17
+ Description-Content-Type: text/markdown
18
+
19
+ # Magic Hour Python SDK
20
+
21
+ [![PyPI - Version](https://img.shields.io/pypi/v/magic_hour)](https://pypi.org/project/magic_hour/)
22
+
23
+ The Magic Hour Python Library provides convenient access to the Magic Hour API. This library offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).
24
+
25
+ ## Documentation
26
+
27
+ For full documentation of all APIs, please visit https://docs.magichour.ai
28
+
29
+ If you have any questions, please reach out to us via [discord](https://discord.gg/JX5rgsZaJp).
30
+
31
+ ## Install
32
+
33
+ ```sh
34
+ pip install magic_hour
35
+ ```
36
+
37
+ ## Synchronous Client Usage
38
+
39
+ ```python
40
+ from magic_hour import Client
41
+
42
+ # generate your API Key at https://magichour.ai/developer
43
+ client = Client(token="my api key")
44
+
45
+ response = client.v1.face_swap_photo.generate(
46
+ assets={
47
+ "face_swap_mode": "all-faces",
48
+ "source_file_path": "/path/to/source/image.png",
49
+ "source/image": "/path/to/target/image.png",
50
+ },
51
+ name="Face Swap image",
52
+ wait_for_completion=True,
53
+ download_outputs=True,
54
+ download_directory="./outputs/",
55
+ )
56
+ print(f"Project ID: {response.id}")
57
+ print(f"Status: {response.status}")
58
+ print(f"Downloaded files: {response.downloaded_paths}")
59
+ ```
60
+
61
+ ### Asynchronous Client Usage
62
+
63
+ ```python
64
+ from magic_hour import AsyncClient
65
+
66
+ # generate your API Key at https://magichour.ai/developer
67
+ client = AsyncClient(token="my api key")
68
+
69
+ response = await client.v1.face_swap_photo.generate(
70
+ assets={
71
+ "face_swap_mode": "all-faces",
72
+ "source_file_path": "/path/to/source/image.png",
73
+ "target_file_path": "/path/to/target/image.png",
74
+ },
75
+ name="Face Swap image",
76
+ wait_for_completion=True,
77
+ download_outputs=True,
78
+ download_directory="./outputs/",
79
+ )
80
+ print(f"Project ID: {response.id}")
81
+ print(f"Status: {response.status}")
82
+ print(f"Downloaded files: {response.downloaded_paths}")
83
+ ```
84
+
85
+ ## Client Functions
86
+
87
+ Most resources that generate media content support two methods:
88
+
89
+ - **`generate()`** - A high-level convenience method that handles the entire workflow
90
+ - **`create()`** - A low-level method that only initiates the generation process
91
+
92
+ ### Generate Function
93
+
94
+ The `generate()` function provides a complete end-to-end solution:
95
+
96
+ - Uploads local file to Magic Hour storage
97
+ - Calls the API to start generation
98
+ - Automatically polls for completion
99
+ - Downloads generated files to your local machine
100
+ - Returns both API response data and local file paths
101
+
102
+ **Additional Parameters:**
103
+
104
+ - `wait_for_completion` (bool, default True): Whether to wait for the project to complete.
105
+ - `download_outputs` (bool, default True): Whether to download the generated files
106
+ - `download_directory` (str, optional): Directory to save downloaded files (defaults to current directory)
107
+
108
+ ```python
109
+ # Generate function - handles everything automatically
110
+ response = client.v1.ai_image_generator.generate(
111
+ style={"prompt": "A beautiful sunset over mountains"},
112
+ name="Sunset Image",
113
+ wait_for_completion=True, # Wait for status to be complete/error/canceled
114
+ download_outputs=True, # Download files automatically
115
+ download_directory="./outputs/" # Where to save files
116
+ )
117
+
118
+ # You get both the API response AND downloaded file paths
119
+ print(f"Project ID: {response.id}")
120
+ print(f"Status: {response.status}")
121
+ print(f"Downloaded files: {response.downloaded_paths}")
122
+ ```
123
+
124
+ ### Create Function
125
+
126
+ The `create()` function provides granular control:
127
+
128
+ - Only calls the API to start the generation process
129
+ - Returns immediately with a project ID and amount of credits used
130
+ - Requires manual status checking and file downloading
131
+
132
+ ```python
133
+ # Create function - only starts the process
134
+ create_response = client.v1.ai_image_generator.create(
135
+ style={"prompt": "A beautiful sunset over mountains"},
136
+ name="Sunset Image"
137
+ )
138
+
139
+ # You get just the project ID and initial response
140
+ project_id = create_response.id
141
+ print(f"Started project: {project_id}")
142
+
143
+ # You must handle the rest:
144
+ # 1. Poll for completion. We provide a helper function to handle polling for you
145
+ result = client.v1.image_projects.check_status(
146
+ wait_for_completion=True,
147
+ download_outputs=False,
148
+ )
149
+ # 2. Download files using the download URLs
150
+ download_urls = result.downloads
151
+ # download the files using your preferred way
152
+ ```
153
+
154
+ ### Choosing Between Which Function to use
155
+
156
+ **Use `generate()` when:**
157
+
158
+ - You want a simple, one-call solution
159
+ - You're building a straightforward application
160
+ - You don't need custom polling or download logic
161
+
162
+ **Use `create()` when:**
163
+
164
+ - You need custom status checking logic
165
+ - You're integrating with existing job processing systems
166
+ - You want to separate generation initiation from completion handling
167
+ - You need fine-grained control over the entire workflow
168
+
169
+ ## Module Documentation and Snippets
170
+
171
+ ### [v1](magic_hour/resources/v1/README.md)
172
+
173
+
174
+ ### [v1.ai_clothes_changer](magic_hour/resources/v1/ai_clothes_changer/README.md)
175
+
176
+ * [create](magic_hour/resources/v1/ai_clothes_changer/README.md#create) - AI Clothes Changer
177
+ * [generate](magic_hour/resources/v1/ai_clothes_changer/README.md#generate) - AI Clothes Changer Generate Workflow
178
+
179
+ ### [v1.ai_face_editor](magic_hour/resources/v1/ai_face_editor/README.md)
180
+
181
+ * [create](magic_hour/resources/v1/ai_face_editor/README.md#create) - AI Face Editor
182
+ * [generate](magic_hour/resources/v1/ai_face_editor/README.md#generate) - Ai Face Editor Generate Workflow
183
+
184
+ ### [v1.ai_gif_generator](magic_hour/resources/v1/ai_gif_generator/README.md)
185
+
186
+ * [create](magic_hour/resources/v1/ai_gif_generator/README.md#create) - AI GIFs
187
+ * [generate](magic_hour/resources/v1/ai_gif_generator/README.md#generate) - Ai Gif Generator Generate Workflow
188
+
189
+ ### [v1.ai_headshot_generator](magic_hour/resources/v1/ai_headshot_generator/README.md)
190
+
191
+ * [create](magic_hour/resources/v1/ai_headshot_generator/README.md#create) - AI Headshots
192
+ * [generate](magic_hour/resources/v1/ai_headshot_generator/README.md#generate) - Ai Headshot Generator Generate Workflow
193
+
194
+ ### [v1.ai_image_editor](magic_hour/resources/v1/ai_image_editor/README.md)
195
+
196
+ * [create](magic_hour/resources/v1/ai_image_editor/README.md#create) - AI Image Editor
197
+ * [generate](magic_hour/resources/v1/ai_image_editor/README.md#generate) - Ai Image Editor Generate Workflow
198
+
199
+ ### [v1.ai_image_generator](magic_hour/resources/v1/ai_image_generator/README.md)
200
+
201
+ * [create](magic_hour/resources/v1/ai_image_generator/README.md#create) - AI Images
202
+ * [generate](magic_hour/resources/v1/ai_image_generator/README.md#generate) - Ai Image Generator Generate Workflow
203
+
204
+ ### [v1.ai_image_upscaler](magic_hour/resources/v1/ai_image_upscaler/README.md)
205
+
206
+ * [create](magic_hour/resources/v1/ai_image_upscaler/README.md#create) - AI Image Upscaler
207
+ * [generate](magic_hour/resources/v1/ai_image_upscaler/README.md#generate) - Ai Image Upscaler Generate Workflow
208
+
209
+ ### [v1.ai_meme_generator](magic_hour/resources/v1/ai_meme_generator/README.md)
210
+
211
+ * [create](magic_hour/resources/v1/ai_meme_generator/README.md#create) - AI Meme Generator
212
+ * [generate](magic_hour/resources/v1/ai_meme_generator/README.md#generate) - Ai Meme Generator Generate Workflow
213
+
214
+ ### [v1.ai_photo_editor](magic_hour/resources/v1/ai_photo_editor/README.md)
215
+
216
+ * [create](magic_hour/resources/v1/ai_photo_editor/README.md#create) - AI Photo Editor
217
+ * [generate](magic_hour/resources/v1/ai_photo_editor/README.md#generate) - Ai Photo Editor Generate Workflow
218
+
219
+ ### [v1.ai_qr_code_generator](magic_hour/resources/v1/ai_qr_code_generator/README.md)
220
+
221
+ * [create](magic_hour/resources/v1/ai_qr_code_generator/README.md#create) - AI QR Code
222
+ * [generate](magic_hour/resources/v1/ai_qr_code_generator/README.md#generate) - Ai Qr Code Generator Generate Workflow
223
+
224
+ ### [v1.ai_talking_photo](magic_hour/resources/v1/ai_talking_photo/README.md)
225
+
226
+ * [create](magic_hour/resources/v1/ai_talking_photo/README.md#create) - AI Talking Photo
227
+ * [generate](magic_hour/resources/v1/ai_talking_photo/README.md#generate) - Ai Talking Photo Generate Workflow
228
+
229
+ ### [v1.animation](magic_hour/resources/v1/animation/README.md)
230
+
231
+ * [create](magic_hour/resources/v1/animation/README.md#create) - Animation
232
+ * [generate](magic_hour/resources/v1/animation/README.md#generate) - Animation Generate Workflow
233
+
234
+ ### [v1.auto_subtitle_generator](magic_hour/resources/v1/auto_subtitle_generator/README.md)
235
+
236
+ * [create](magic_hour/resources/v1/auto_subtitle_generator/README.md#create) - Auto Subtitle Generator
237
+ * [generate](magic_hour/resources/v1/auto_subtitle_generator/README.md#generate) - Auto Subtitle Generator Generate Workflow
238
+
239
+ ### [v1.face_detection](magic_hour/resources/v1/face_detection/README.md)
240
+
241
+ * [create](magic_hour/resources/v1/face_detection/README.md#create) - Face Detection
242
+ * [generate](magic_hour/resources/v1/face_detection/README.md#generate) - Face Detection Generate Workflow
243
+ * [get](magic_hour/resources/v1/face_detection/README.md#get) - Get face detection details
244
+
245
+ ### [v1.face_swap](magic_hour/resources/v1/face_swap/README.md)
246
+
247
+ * [create](magic_hour/resources/v1/face_swap/README.md#create) - Face Swap video
248
+ * [generate](magic_hour/resources/v1/face_swap/README.md#generate) - Face Swap Generate Workflow
249
+
250
+ ### [v1.face_swap_photo](magic_hour/resources/v1/face_swap_photo/README.md)
251
+
252
+ * [create](magic_hour/resources/v1/face_swap_photo/README.md#create) - Face Swap Photo
253
+ * [generate](magic_hour/resources/v1/face_swap_photo/README.md#generate) - Face Swap Photo Generate Workflow
254
+
255
+ ### [v1.files](magic_hour/resources/v1/files/README.md)
256
+
257
+ * [upload-file](magic_hour/resources/v1/files/README.md#upload-file) - Upload File
258
+
259
+ ### [v1.files.upload_urls](magic_hour/resources/v1/files/upload_urls/README.md)
260
+
261
+ * [create](magic_hour/resources/v1/files/upload_urls/README.md#create) - Generate asset upload urls
262
+
263
+ ### [v1.image_background_remover](magic_hour/resources/v1/image_background_remover/README.md)
264
+
265
+ * [create](magic_hour/resources/v1/image_background_remover/README.md#create) - Image Background Remover
266
+ * [generate](magic_hour/resources/v1/image_background_remover/README.md#generate) - Image Background Remover Generate Workflow
267
+
268
+ ### [v1.image_projects](magic_hour/resources/v1/image_projects/README.md)
269
+
270
+ * [check-result](magic_hour/resources/v1/image_projects/README.md#check-result) - Check results
271
+ * [delete](magic_hour/resources/v1/image_projects/README.md#delete) - Delete image
272
+ * [get](magic_hour/resources/v1/image_projects/README.md#get) - Get image details
273
+
274
+ ### [v1.image_to_video](magic_hour/resources/v1/image_to_video/README.md)
275
+
276
+ * [create](magic_hour/resources/v1/image_to_video/README.md#create) - Image-to-Video
277
+ * [generate](magic_hour/resources/v1/image_to_video/README.md#generate) - Image To Video Generate Workflow
278
+
279
+ ### [v1.lip_sync](magic_hour/resources/v1/lip_sync/README.md)
280
+
281
+ * [create](magic_hour/resources/v1/lip_sync/README.md#create) - Lip Sync
282
+ * [generate](magic_hour/resources/v1/lip_sync/README.md#generate) - Lip Sync Generate Workflow
283
+
284
+ ### [v1.photo_colorizer](magic_hour/resources/v1/photo_colorizer/README.md)
285
+
286
+ * [create](magic_hour/resources/v1/photo_colorizer/README.md#create) - Photo Colorizer
287
+ * [generate](magic_hour/resources/v1/photo_colorizer/README.md#generate) - Photo Colorizer Generate Workflow
288
+
289
+ ### [v1.text_to_video](magic_hour/resources/v1/text_to_video/README.md)
290
+
291
+ * [create](magic_hour/resources/v1/text_to_video/README.md#create) - Text-to-Video
292
+ * [generate](magic_hour/resources/v1/text_to_video/README.md#generate) - Text To Video Generate Workflow
293
+
294
+ ### [v1.video_projects](magic_hour/resources/v1/video_projects/README.md)
295
+
296
+ * [check-result](magic_hour/resources/v1/video_projects/README.md#check-result) - Check results
297
+ * [delete](magic_hour/resources/v1/video_projects/README.md#delete) - Delete video
298
+ * [get](magic_hour/resources/v1/video_projects/README.md#get) - Get video details
299
+
300
+ ### [v1.video_to_video](magic_hour/resources/v1/video_to_video/README.md)
301
+
302
+ * [create](magic_hour/resources/v1/video_to_video/README.md#create) - Video-to-Video
303
+ * [generate](magic_hour/resources/v1/video_to_video/README.md#generate) - Video To Video Generate Workflow
304
+
305
+ <!-- MODULE DOCS END -->
306
+
@@ -0,0 +1,287 @@
1
+ # Magic Hour Python SDK
2
+
3
+ [![PyPI - Version](https://img.shields.io/pypi/v/magic_hour)](https://pypi.org/project/magic_hour/)
4
+
5
+ The Magic Hour Python Library provides convenient access to the Magic Hour API. This library offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).
6
+
7
+ ## Documentation
8
+
9
+ For full documentation of all APIs, please visit https://docs.magichour.ai
10
+
11
+ If you have any questions, please reach out to us via [discord](https://discord.gg/JX5rgsZaJp).
12
+
13
+ ## Install
14
+
15
+ ```sh
16
+ pip install magic_hour
17
+ ```
18
+
19
+ ## Synchronous Client Usage
20
+
21
+ ```python
22
+ from magic_hour import Client
23
+
24
+ # generate your API Key at https://magichour.ai/developer
25
+ client = Client(token="my api key")
26
+
27
+ response = client.v1.face_swap_photo.generate(
28
+ assets={
29
+ "face_swap_mode": "all-faces",
30
+ "source_file_path": "/path/to/source/image.png",
31
+ "source/image": "/path/to/target/image.png",
32
+ },
33
+ name="Face Swap image",
34
+ wait_for_completion=True,
35
+ download_outputs=True,
36
+ download_directory="./outputs/",
37
+ )
38
+ print(f"Project ID: {response.id}")
39
+ print(f"Status: {response.status}")
40
+ print(f"Downloaded files: {response.downloaded_paths}")
41
+ ```
42
+
43
+ ### Asynchronous Client Usage
44
+
45
+ ```python
46
+ from magic_hour import AsyncClient
47
+
48
+ # generate your API Key at https://magichour.ai/developer
49
+ client = AsyncClient(token="my api key")
50
+
51
+ response = await client.v1.face_swap_photo.generate(
52
+ assets={
53
+ "face_swap_mode": "all-faces",
54
+ "source_file_path": "/path/to/source/image.png",
55
+ "target_file_path": "/path/to/target/image.png",
56
+ },
57
+ name="Face Swap image",
58
+ wait_for_completion=True,
59
+ download_outputs=True,
60
+ download_directory="./outputs/",
61
+ )
62
+ print(f"Project ID: {response.id}")
63
+ print(f"Status: {response.status}")
64
+ print(f"Downloaded files: {response.downloaded_paths}")
65
+ ```
66
+
67
+ ## Client Functions
68
+
69
+ Most resources that generate media content support two methods:
70
+
71
+ - **`generate()`** - A high-level convenience method that handles the entire workflow
72
+ - **`create()`** - A low-level method that only initiates the generation process
73
+
74
+ ### Generate Function
75
+
76
+ The `generate()` function provides a complete end-to-end solution:
77
+
78
+ - Uploads local file to Magic Hour storage
79
+ - Calls the API to start generation
80
+ - Automatically polls for completion
81
+ - Downloads generated files to your local machine
82
+ - Returns both API response data and local file paths
83
+
84
+ **Additional Parameters:**
85
+
86
+ - `wait_for_completion` (bool, default True): Whether to wait for the project to complete.
87
+ - `download_outputs` (bool, default True): Whether to download the generated files
88
+ - `download_directory` (str, optional): Directory to save downloaded files (defaults to current directory)
89
+
90
+ ```python
91
+ # Generate function - handles everything automatically
92
+ response = client.v1.ai_image_generator.generate(
93
+ style={"prompt": "A beautiful sunset over mountains"},
94
+ name="Sunset Image",
95
+ wait_for_completion=True, # Wait for status to be complete/error/canceled
96
+ download_outputs=True, # Download files automatically
97
+ download_directory="./outputs/" # Where to save files
98
+ )
99
+
100
+ # You get both the API response AND downloaded file paths
101
+ print(f"Project ID: {response.id}")
102
+ print(f"Status: {response.status}")
103
+ print(f"Downloaded files: {response.downloaded_paths}")
104
+ ```
105
+
106
+ ### Create Function
107
+
108
+ The `create()` function provides granular control:
109
+
110
+ - Only calls the API to start the generation process
111
+ - Returns immediately with a project ID and amount of credits used
112
+ - Requires manual status checking and file downloading
113
+
114
+ ```python
115
+ # Create function - only starts the process
116
+ create_response = client.v1.ai_image_generator.create(
117
+ style={"prompt": "A beautiful sunset over mountains"},
118
+ name="Sunset Image"
119
+ )
120
+
121
+ # You get just the project ID and initial response
122
+ project_id = create_response.id
123
+ print(f"Started project: {project_id}")
124
+
125
+ # You must handle the rest:
126
+ # 1. Poll for completion. We provide a helper function to handle polling for you
127
+ result = client.v1.image_projects.check_status(
128
+ wait_for_completion=True,
129
+ download_outputs=False,
130
+ )
131
+ # 2. Download files using the download URLs
132
+ download_urls = result.downloads
133
+ # download the files using your preferred way
134
+ ```
135
+
136
+ ### Choosing Between Which Function to use
137
+
138
+ **Use `generate()` when:**
139
+
140
+ - You want a simple, one-call solution
141
+ - You're building a straightforward application
142
+ - You don't need custom polling or download logic
143
+
144
+ **Use `create()` when:**
145
+
146
+ - You need custom status checking logic
147
+ - You're integrating with existing job processing systems
148
+ - You want to separate generation initiation from completion handling
149
+ - You need fine-grained control over the entire workflow
150
+
151
+ ## Module Documentation and Snippets
152
+
153
+ ### [v1](magic_hour/resources/v1/README.md)
154
+
155
+
156
+ ### [v1.ai_clothes_changer](magic_hour/resources/v1/ai_clothes_changer/README.md)
157
+
158
+ * [create](magic_hour/resources/v1/ai_clothes_changer/README.md#create) - AI Clothes Changer
159
+ * [generate](magic_hour/resources/v1/ai_clothes_changer/README.md#generate) - AI Clothes Changer Generate Workflow
160
+
161
+ ### [v1.ai_face_editor](magic_hour/resources/v1/ai_face_editor/README.md)
162
+
163
+ * [create](magic_hour/resources/v1/ai_face_editor/README.md#create) - AI Face Editor
164
+ * [generate](magic_hour/resources/v1/ai_face_editor/README.md#generate) - Ai Face Editor Generate Workflow
165
+
166
+ ### [v1.ai_gif_generator](magic_hour/resources/v1/ai_gif_generator/README.md)
167
+
168
+ * [create](magic_hour/resources/v1/ai_gif_generator/README.md#create) - AI GIFs
169
+ * [generate](magic_hour/resources/v1/ai_gif_generator/README.md#generate) - Ai Gif Generator Generate Workflow
170
+
171
+ ### [v1.ai_headshot_generator](magic_hour/resources/v1/ai_headshot_generator/README.md)
172
+
173
+ * [create](magic_hour/resources/v1/ai_headshot_generator/README.md#create) - AI Headshots
174
+ * [generate](magic_hour/resources/v1/ai_headshot_generator/README.md#generate) - Ai Headshot Generator Generate Workflow
175
+
176
+ ### [v1.ai_image_editor](magic_hour/resources/v1/ai_image_editor/README.md)
177
+
178
+ * [create](magic_hour/resources/v1/ai_image_editor/README.md#create) - AI Image Editor
179
+ * [generate](magic_hour/resources/v1/ai_image_editor/README.md#generate) - Ai Image Editor Generate Workflow
180
+
181
+ ### [v1.ai_image_generator](magic_hour/resources/v1/ai_image_generator/README.md)
182
+
183
+ * [create](magic_hour/resources/v1/ai_image_generator/README.md#create) - AI Images
184
+ * [generate](magic_hour/resources/v1/ai_image_generator/README.md#generate) - Ai Image Generator Generate Workflow
185
+
186
+ ### [v1.ai_image_upscaler](magic_hour/resources/v1/ai_image_upscaler/README.md)
187
+
188
+ * [create](magic_hour/resources/v1/ai_image_upscaler/README.md#create) - AI Image Upscaler
189
+ * [generate](magic_hour/resources/v1/ai_image_upscaler/README.md#generate) - Ai Image Upscaler Generate Workflow
190
+
191
+ ### [v1.ai_meme_generator](magic_hour/resources/v1/ai_meme_generator/README.md)
192
+
193
+ * [create](magic_hour/resources/v1/ai_meme_generator/README.md#create) - AI Meme Generator
194
+ * [generate](magic_hour/resources/v1/ai_meme_generator/README.md#generate) - Ai Meme Generator Generate Workflow
195
+
196
+ ### [v1.ai_photo_editor](magic_hour/resources/v1/ai_photo_editor/README.md)
197
+
198
+ * [create](magic_hour/resources/v1/ai_photo_editor/README.md#create) - AI Photo Editor
199
+ * [generate](magic_hour/resources/v1/ai_photo_editor/README.md#generate) - Ai Photo Editor Generate Workflow
200
+
201
+ ### [v1.ai_qr_code_generator](magic_hour/resources/v1/ai_qr_code_generator/README.md)
202
+
203
+ * [create](magic_hour/resources/v1/ai_qr_code_generator/README.md#create) - AI QR Code
204
+ * [generate](magic_hour/resources/v1/ai_qr_code_generator/README.md#generate) - Ai Qr Code Generator Generate Workflow
205
+
206
+ ### [v1.ai_talking_photo](magic_hour/resources/v1/ai_talking_photo/README.md)
207
+
208
+ * [create](magic_hour/resources/v1/ai_talking_photo/README.md#create) - AI Talking Photo
209
+ * [generate](magic_hour/resources/v1/ai_talking_photo/README.md#generate) - Ai Talking Photo Generate Workflow
210
+
211
+ ### [v1.animation](magic_hour/resources/v1/animation/README.md)
212
+
213
+ * [create](magic_hour/resources/v1/animation/README.md#create) - Animation
214
+ * [generate](magic_hour/resources/v1/animation/README.md#generate) - Animation Generate Workflow
215
+
216
+ ### [v1.auto_subtitle_generator](magic_hour/resources/v1/auto_subtitle_generator/README.md)
217
+
218
+ * [create](magic_hour/resources/v1/auto_subtitle_generator/README.md#create) - Auto Subtitle Generator
219
+ * [generate](magic_hour/resources/v1/auto_subtitle_generator/README.md#generate) - Auto Subtitle Generator Generate Workflow
220
+
221
+ ### [v1.face_detection](magic_hour/resources/v1/face_detection/README.md)
222
+
223
+ * [create](magic_hour/resources/v1/face_detection/README.md#create) - Face Detection
224
+ * [generate](magic_hour/resources/v1/face_detection/README.md#generate) - Face Detection Generate Workflow
225
+ * [get](magic_hour/resources/v1/face_detection/README.md#get) - Get face detection details
226
+
227
+ ### [v1.face_swap](magic_hour/resources/v1/face_swap/README.md)
228
+
229
+ * [create](magic_hour/resources/v1/face_swap/README.md#create) - Face Swap video
230
+ * [generate](magic_hour/resources/v1/face_swap/README.md#generate) - Face Swap Generate Workflow
231
+
232
+ ### [v1.face_swap_photo](magic_hour/resources/v1/face_swap_photo/README.md)
233
+
234
+ * [create](magic_hour/resources/v1/face_swap_photo/README.md#create) - Face Swap Photo
235
+ * [generate](magic_hour/resources/v1/face_swap_photo/README.md#generate) - Face Swap Photo Generate Workflow
236
+
237
+ ### [v1.files](magic_hour/resources/v1/files/README.md)
238
+
239
+ * [upload-file](magic_hour/resources/v1/files/README.md#upload-file) - Upload File
240
+
241
+ ### [v1.files.upload_urls](magic_hour/resources/v1/files/upload_urls/README.md)
242
+
243
+ * [create](magic_hour/resources/v1/files/upload_urls/README.md#create) - Generate asset upload urls
244
+
245
+ ### [v1.image_background_remover](magic_hour/resources/v1/image_background_remover/README.md)
246
+
247
+ * [create](magic_hour/resources/v1/image_background_remover/README.md#create) - Image Background Remover
248
+ * [generate](magic_hour/resources/v1/image_background_remover/README.md#generate) - Image Background Remover Generate Workflow
249
+
250
+ ### [v1.image_projects](magic_hour/resources/v1/image_projects/README.md)
251
+
252
+ * [check-result](magic_hour/resources/v1/image_projects/README.md#check-result) - Check results
253
+ * [delete](magic_hour/resources/v1/image_projects/README.md#delete) - Delete image
254
+ * [get](magic_hour/resources/v1/image_projects/README.md#get) - Get image details
255
+
256
+ ### [v1.image_to_video](magic_hour/resources/v1/image_to_video/README.md)
257
+
258
+ * [create](magic_hour/resources/v1/image_to_video/README.md#create) - Image-to-Video
259
+ * [generate](magic_hour/resources/v1/image_to_video/README.md#generate) - Image To Video Generate Workflow
260
+
261
+ ### [v1.lip_sync](magic_hour/resources/v1/lip_sync/README.md)
262
+
263
+ * [create](magic_hour/resources/v1/lip_sync/README.md#create) - Lip Sync
264
+ * [generate](magic_hour/resources/v1/lip_sync/README.md#generate) - Lip Sync Generate Workflow
265
+
266
+ ### [v1.photo_colorizer](magic_hour/resources/v1/photo_colorizer/README.md)
267
+
268
+ * [create](magic_hour/resources/v1/photo_colorizer/README.md#create) - Photo Colorizer
269
+ * [generate](magic_hour/resources/v1/photo_colorizer/README.md#generate) - Photo Colorizer Generate Workflow
270
+
271
+ ### [v1.text_to_video](magic_hour/resources/v1/text_to_video/README.md)
272
+
273
+ * [create](magic_hour/resources/v1/text_to_video/README.md#create) - Text-to-Video
274
+ * [generate](magic_hour/resources/v1/text_to_video/README.md#generate) - Text To Video Generate Workflow
275
+
276
+ ### [v1.video_projects](magic_hour/resources/v1/video_projects/README.md)
277
+
278
+ * [check-result](magic_hour/resources/v1/video_projects/README.md#check-result) - Check results
279
+ * [delete](magic_hour/resources/v1/video_projects/README.md#delete) - Delete video
280
+ * [get](magic_hour/resources/v1/video_projects/README.md#get) - Get video details
281
+
282
+ ### [v1.video_to_video](magic_hour/resources/v1/video_to_video/README.md)
283
+
284
+ * [create](magic_hour/resources/v1/video_to_video/README.md#create) - Video-to-Video
285
+ * [generate](magic_hour/resources/v1/video_to_video/README.md#generate) - Video To Video Generate Workflow
286
+
287
+ <!-- MODULE DOCS END -->
@@ -0,0 +1,35 @@
1
+ # Root Client
2
+
3
+ <!-- CUSTOM DOCS START -->
4
+
5
+ <!-- CUSTOM DOCS END -->
6
+
7
+ ## Submodules
8
+ - [ai_clothes_changer](resources/v1/ai_clothes_changer/README.md) - ai_clothes_changer
9
+ - [ai_face_editor](resources/v1/ai_face_editor/README.md) - ai_face_editor
10
+ - [ai_gif_generator](resources/v1/ai_gif_generator/README.md) - ai_gif_generator
11
+ - [ai_headshot_generator](resources/v1/ai_headshot_generator/README.md) - ai_headshot_generator
12
+ - [ai_image_editor](resources/v1/ai_image_editor/README.md) - ai_image_editor
13
+ - [ai_image_generator](resources/v1/ai_image_generator/README.md) - ai_image_generator
14
+ - [ai_image_upscaler](resources/v1/ai_image_upscaler/README.md) - ai_image_upscaler
15
+ - [ai_meme_generator](resources/v1/ai_meme_generator/README.md) - ai_meme_generator
16
+ - [ai_photo_editor](resources/v1/ai_photo_editor/README.md) - ai_photo_editor
17
+ - [ai_qr_code_generator](resources/v1/ai_qr_code_generator/README.md) - ai_qr_code_generator
18
+ - [ai_talking_photo](resources/v1/ai_talking_photo/README.md) - ai_talking_photo
19
+ - [animation](resources/v1/animation/README.md) - animation
20
+ - [auto_subtitle_generator](resources/v1/auto_subtitle_generator/README.md) - auto_subtitle_generator
21
+ - [face_detection](resources/v1/face_detection/README.md) - face_detection
22
+ - [face_swap](resources/v1/face_swap/README.md) - face_swap
23
+ - [face_swap_photo](resources/v1/face_swap_photo/README.md) - face_swap_photo
24
+ - [upload_urls](resources/v1/files/upload_urls/README.md) - upload_urls
25
+ - [files](resources/v1/files/README.md) - files
26
+ - [image_background_remover](resources/v1/image_background_remover/README.md) - image_background_remover
27
+ - [image_projects](resources/v1/image_projects/README.md) - image_projects
28
+ - [image_to_video](resources/v1/image_to_video/README.md) - image_to_video
29
+ - [lip_sync](resources/v1/lip_sync/README.md) - lip_sync
30
+ - [photo_colorizer](resources/v1/photo_colorizer/README.md) - photo_colorizer
31
+ - [text_to_video](resources/v1/text_to_video/README.md) - text_to_video
32
+ - [video_projects](resources/v1/video_projects/README.md) - video_projects
33
+ - [video_to_video](resources/v1/video_to_video/README.md) - video_to_video
34
+ - [v1](resources/v1/README.md) - v1
35
+
@@ -15,7 +15,8 @@ from pydantic import BaseModel
15
15
 
16
16
  from .api_error import ApiError
17
17
  from .auth import AuthProvider
18
- from .request import RequestConfig, RequestOptions, default_request_options, QueryParams
18
+ from .request import RequestConfig, RequestOptions, default_request_options
19
+ from .query import QueryParams
19
20
  from .response import from_encodable, AsyncStreamResponse, StreamResponse
20
21
  from .utils import get_response_type, filter_binary_response
21
22
  from .binary_response import BinaryResponse
@@ -51,7 +52,7 @@ class BaseClient:
51
52
  )
52
53
  self._auths: Dict[str, AuthProvider] = auths or {}
53
54
 
54
- def register_auth(self, auth_id: str, provider: AuthProvider):
55
+ def register_auth(self, auth_id: str, provider: AuthProvider) -> None:
55
56
  """Register an authentication provider.
56
57
 
57
58
  Args:
@@ -297,7 +298,7 @@ class BaseClient:
297
298
  def process_response(
298
299
  self,
299
300
  *,
300
- response=httpx.Response,
301
+ response: httpx.Response,
301
302
  cast_to: Union[Type[T], Any],
302
303
  ) -> T:
303
304
  """Process an HTTP response and convert it to the desired type.
@@ -325,8 +326,8 @@ class BaseClient:
325
326
 
326
327
  if response_type == "json":
327
328
  if cast_to is type(Any):
328
- return response.json()
329
- return from_encodable(
329
+ return response.json() # type: ignore[no-any-return]
330
+ return from_encodable( # type: ignore[no-any-return]
330
331
  data=response.json(), load_with=filter_binary_response(cast_to=cast_to)
331
332
  )
332
333
  elif response_type == "text":