magic_hour 0.9.5__py3-none-any.whl → 0.44.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. magic_hour/README.md +34 -0
  2. magic_hour/__init__.py +1 -1
  3. magic_hour/client.py +8 -17
  4. magic_hour/environment.py +13 -1
  5. magic_hour/helpers/__init__.py +4 -0
  6. magic_hour/helpers/download.py +77 -0
  7. magic_hour/helpers/logger.py +8 -0
  8. magic_hour/resources/v1/README.md +32 -0
  9. magic_hour/resources/v1/ai_clothes_changer/README.md +94 -5
  10. magic_hour/resources/v1/ai_clothes_changer/client.py +161 -16
  11. magic_hour/resources/v1/ai_face_editor/README.md +195 -0
  12. magic_hour/resources/v1/ai_face_editor/__init__.py +4 -0
  13. magic_hour/resources/v1/ai_face_editor/client.py +324 -0
  14. magic_hour/resources/v1/ai_gif_generator/README.md +116 -0
  15. magic_hour/resources/v1/ai_gif_generator/__init__.py +4 -0
  16. magic_hour/resources/v1/ai_gif_generator/client.py +257 -0
  17. magic_hour/resources/v1/ai_headshot_generator/README.md +81 -3
  18. magic_hour/resources/v1/ai_headshot_generator/client.py +167 -18
  19. magic_hour/resources/v1/ai_image_editor/README.md +125 -0
  20. magic_hour/resources/v1/ai_image_editor/__init__.py +4 -0
  21. magic_hour/resources/v1/ai_image_editor/client.py +290 -0
  22. magic_hour/resources/v1/ai_image_generator/README.md +99 -5
  23. magic_hour/resources/v1/ai_image_generator/client.py +170 -24
  24. magic_hour/resources/v1/ai_image_upscaler/README.md +89 -3
  25. magic_hour/resources/v1/ai_image_upscaler/client.py +173 -20
  26. magic_hour/resources/v1/ai_meme_generator/README.md +129 -0
  27. magic_hour/resources/v1/ai_meme_generator/__init__.py +4 -0
  28. magic_hour/resources/v1/ai_meme_generator/client.py +253 -0
  29. magic_hour/resources/v1/ai_photo_editor/README.md +119 -4
  30. magic_hour/resources/v1/ai_photo_editor/client.py +199 -18
  31. magic_hour/resources/v1/ai_qr_code_generator/README.md +84 -3
  32. magic_hour/resources/v1/ai_qr_code_generator/client.py +140 -18
  33. magic_hour/resources/v1/ai_talking_photo/README.md +137 -0
  34. magic_hour/resources/v1/ai_talking_photo/__init__.py +4 -0
  35. magic_hour/resources/v1/ai_talking_photo/client.py +326 -0
  36. magic_hour/resources/v1/ai_voice_cloner/README.md +62 -0
  37. magic_hour/resources/v1/ai_voice_cloner/__init__.py +4 -0
  38. magic_hour/resources/v1/ai_voice_cloner/client.py +272 -0
  39. magic_hour/resources/v1/ai_voice_generator/README.md +112 -0
  40. magic_hour/resources/v1/ai_voice_generator/__init__.py +4 -0
  41. magic_hour/resources/v1/ai_voice_generator/client.py +241 -0
  42. magic_hour/resources/v1/animation/README.md +128 -6
  43. magic_hour/resources/v1/animation/client.py +247 -22
  44. magic_hour/resources/v1/audio_projects/README.md +135 -0
  45. magic_hour/resources/v1/audio_projects/__init__.py +12 -0
  46. magic_hour/resources/v1/audio_projects/client.py +310 -0
  47. magic_hour/resources/v1/audio_projects/client_test.py +520 -0
  48. magic_hour/resources/v1/auto_subtitle_generator/README.md +128 -0
  49. magic_hour/resources/v1/auto_subtitle_generator/__init__.py +4 -0
  50. magic_hour/resources/v1/auto_subtitle_generator/client.py +346 -0
  51. magic_hour/resources/v1/client.py +75 -1
  52. magic_hour/resources/v1/face_detection/README.md +157 -0
  53. magic_hour/resources/v1/face_detection/__init__.py +12 -0
  54. magic_hour/resources/v1/face_detection/client.py +380 -0
  55. magic_hour/resources/v1/face_swap/README.md +137 -9
  56. magic_hour/resources/v1/face_swap/client.py +329 -38
  57. magic_hour/resources/v1/face_swap_photo/README.md +118 -3
  58. magic_hour/resources/v1/face_swap_photo/client.py +199 -14
  59. magic_hour/resources/v1/files/README.md +39 -0
  60. magic_hour/resources/v1/files/client.py +351 -1
  61. magic_hour/resources/v1/files/client_test.py +414 -0
  62. magic_hour/resources/v1/files/upload_urls/README.md +38 -17
  63. magic_hour/resources/v1/files/upload_urls/client.py +38 -34
  64. magic_hour/resources/v1/image_background_remover/README.md +96 -5
  65. magic_hour/resources/v1/image_background_remover/client.py +151 -16
  66. magic_hour/resources/v1/image_projects/README.md +82 -10
  67. magic_hour/resources/v1/image_projects/__init__.py +10 -2
  68. magic_hour/resources/v1/image_projects/client.py +154 -16
  69. magic_hour/resources/v1/image_projects/client_test.py +527 -0
  70. magic_hour/resources/v1/image_to_video/README.md +96 -11
  71. magic_hour/resources/v1/image_to_video/client.py +282 -38
  72. magic_hour/resources/v1/lip_sync/README.md +112 -9
  73. magic_hour/resources/v1/lip_sync/client.py +288 -34
  74. magic_hour/resources/v1/photo_colorizer/README.md +107 -0
  75. magic_hour/resources/v1/photo_colorizer/__init__.py +4 -0
  76. magic_hour/resources/v1/photo_colorizer/client.py +248 -0
  77. magic_hour/resources/v1/text_to_video/README.md +96 -7
  78. magic_hour/resources/v1/text_to_video/client.py +204 -18
  79. magic_hour/resources/v1/video_projects/README.md +81 -9
  80. magic_hour/resources/v1/video_projects/__init__.py +10 -2
  81. magic_hour/resources/v1/video_projects/client.py +151 -14
  82. magic_hour/resources/v1/video_projects/client_test.py +527 -0
  83. magic_hour/resources/v1/video_to_video/README.md +119 -15
  84. magic_hour/resources/v1/video_to_video/client.py +299 -46
  85. magic_hour/types/models/__init__.py +92 -56
  86. magic_hour/types/models/v1_ai_clothes_changer_create_response.py +33 -0
  87. magic_hour/types/models/v1_ai_face_editor_create_response.py +33 -0
  88. magic_hour/types/models/v1_ai_gif_generator_create_response.py +33 -0
  89. magic_hour/types/models/v1_ai_headshot_generator_create_response.py +33 -0
  90. magic_hour/types/models/v1_ai_image_editor_create_response.py +33 -0
  91. magic_hour/types/models/v1_ai_image_generator_create_response.py +33 -0
  92. magic_hour/types/models/v1_ai_image_upscaler_create_response.py +33 -0
  93. magic_hour/types/models/v1_ai_meme_generator_create_response.py +33 -0
  94. magic_hour/types/models/v1_ai_photo_editor_create_response.py +33 -0
  95. magic_hour/types/models/v1_ai_qr_code_generator_create_response.py +33 -0
  96. magic_hour/types/models/v1_ai_talking_photo_create_response.py +35 -0
  97. magic_hour/types/models/v1_ai_voice_cloner_create_response.py +27 -0
  98. magic_hour/types/models/v1_ai_voice_generator_create_response.py +27 -0
  99. magic_hour/types/models/v1_animation_create_response.py +35 -0
  100. magic_hour/types/models/v1_audio_projects_get_response.py +72 -0
  101. magic_hour/types/models/v1_audio_projects_get_response_downloads_item.py +19 -0
  102. magic_hour/types/models/{get_v1_image_projects_id_response_error.py → v1_audio_projects_get_response_error.py} +2 -2
  103. magic_hour/types/models/v1_auto_subtitle_generator_create_response.py +35 -0
  104. magic_hour/types/models/v1_face_detection_create_response.py +25 -0
  105. magic_hour/types/models/v1_face_detection_get_response.py +45 -0
  106. magic_hour/types/models/v1_face_detection_get_response_faces_item.py +25 -0
  107. magic_hour/types/models/v1_face_swap_create_response.py +35 -0
  108. magic_hour/types/models/v1_face_swap_photo_create_response.py +33 -0
  109. magic_hour/types/models/v1_files_upload_urls_create_response.py +24 -0
  110. magic_hour/types/models/{post_v1_files_upload_urls_response_items_item.py → v1_files_upload_urls_create_response_items_item.py} +2 -2
  111. magic_hour/types/models/v1_image_background_remover_create_response.py +33 -0
  112. magic_hour/types/models/{get_v1_image_projects_id_response.py → v1_image_projects_get_response.py} +20 -18
  113. magic_hour/types/models/{get_v1_video_projects_id_response_downloads_item.py → v1_image_projects_get_response_downloads_item.py} +1 -1
  114. magic_hour/types/models/{get_v1_video_projects_id_response_error.py → v1_image_projects_get_response_error.py} +2 -2
  115. magic_hour/types/models/v1_image_to_video_create_response.py +35 -0
  116. magic_hour/types/models/v1_lip_sync_create_response.py +35 -0
  117. magic_hour/types/models/v1_photo_colorizer_create_response.py +33 -0
  118. magic_hour/types/models/v1_text_to_video_create_response.py +35 -0
  119. magic_hour/types/models/{get_v1_video_projects_id_response.py → v1_video_projects_get_response.py} +26 -23
  120. magic_hour/types/models/{get_v1_video_projects_id_response_download.py → v1_video_projects_get_response_download.py} +1 -1
  121. magic_hour/types/models/{get_v1_image_projects_id_response_downloads_item.py → v1_video_projects_get_response_downloads_item.py} +1 -1
  122. magic_hour/types/models/v1_video_projects_get_response_error.py +25 -0
  123. magic_hour/types/models/v1_video_to_video_create_response.py +35 -0
  124. magic_hour/types/params/__init__.py +422 -176
  125. magic_hour/types/params/v1_ai_clothes_changer_create_body.py +40 -0
  126. magic_hour/types/params/v1_ai_clothes_changer_create_body_assets.py +58 -0
  127. magic_hour/types/params/v1_ai_clothes_changer_generate_body_assets.py +33 -0
  128. magic_hour/types/params/v1_ai_face_editor_create_body.py +52 -0
  129. magic_hour/types/params/v1_ai_face_editor_create_body_assets.py +33 -0
  130. magic_hour/types/params/v1_ai_face_editor_create_body_style.py +137 -0
  131. magic_hour/types/params/v1_ai_face_editor_generate_body_assets.py +17 -0
  132. magic_hour/types/params/v1_ai_gif_generator_create_body.py +47 -0
  133. magic_hour/types/params/{post_v1_ai_image_generator_body_style.py → v1_ai_gif_generator_create_body_style.py} +5 -5
  134. magic_hour/types/params/v1_ai_headshot_generator_create_body.py +49 -0
  135. magic_hour/types/params/v1_ai_headshot_generator_create_body_assets.py +33 -0
  136. magic_hour/types/params/v1_ai_headshot_generator_create_body_style.py +27 -0
  137. magic_hour/types/params/v1_ai_headshot_generator_generate_body_assets.py +17 -0
  138. magic_hour/types/params/v1_ai_image_editor_create_body.py +49 -0
  139. magic_hour/types/params/v1_ai_image_editor_create_body_assets.py +47 -0
  140. magic_hour/types/params/v1_ai_image_editor_create_body_style.py +41 -0
  141. magic_hour/types/params/v1_ai_image_editor_generate_body_assets.py +28 -0
  142. magic_hour/types/params/{post_v1_ai_image_generator_body.py → v1_ai_image_generator_create_body.py} +17 -11
  143. magic_hour/types/params/v1_ai_image_generator_create_body_style.py +127 -0
  144. magic_hour/types/params/v1_ai_image_upscaler_create_body.py +59 -0
  145. magic_hour/types/params/v1_ai_image_upscaler_create_body_assets.py +33 -0
  146. magic_hour/types/params/{post_v1_ai_image_upscaler_body_style.py → v1_ai_image_upscaler_create_body_style.py} +4 -4
  147. magic_hour/types/params/v1_ai_image_upscaler_generate_body_assets.py +17 -0
  148. magic_hour/types/params/v1_ai_meme_generator_create_body.py +37 -0
  149. magic_hour/types/params/v1_ai_meme_generator_create_body_style.py +73 -0
  150. magic_hour/types/params/{post_v1_ai_photo_editor_body.py → v1_ai_photo_editor_create_body.py} +15 -15
  151. magic_hour/types/params/v1_ai_photo_editor_create_body_assets.py +33 -0
  152. magic_hour/types/params/{post_v1_ai_photo_editor_body_style.py → v1_ai_photo_editor_create_body_style.py} +20 -4
  153. magic_hour/types/params/v1_ai_photo_editor_generate_body_assets.py +17 -0
  154. magic_hour/types/params/v1_ai_qr_code_generator_create_body.py +45 -0
  155. magic_hour/types/params/{post_v1_ai_qr_code_generator_body_style.py → v1_ai_qr_code_generator_create_body_style.py} +4 -4
  156. magic_hour/types/params/v1_ai_talking_photo_create_body.py +68 -0
  157. magic_hour/types/params/v1_ai_talking_photo_create_body_assets.py +46 -0
  158. magic_hour/types/params/v1_ai_talking_photo_create_body_style.py +44 -0
  159. magic_hour/types/params/v1_ai_talking_photo_generate_body_assets.py +26 -0
  160. magic_hour/types/params/v1_ai_voice_cloner_create_body.py +49 -0
  161. magic_hour/types/params/v1_ai_voice_cloner_create_body_assets.py +33 -0
  162. magic_hour/types/params/v1_ai_voice_cloner_create_body_style.py +28 -0
  163. magic_hour/types/params/v1_ai_voice_cloner_generate_body_assets.py +28 -0
  164. magic_hour/types/params/v1_ai_voice_generator_create_body.py +40 -0
  165. magic_hour/types/params/v1_ai_voice_generator_create_body_style.py +440 -0
  166. magic_hour/types/params/{post_v1_animation_body.py → v1_animation_create_body.py} +16 -16
  167. magic_hour/types/params/{post_v1_animation_body_assets.py → v1_animation_create_body_assets.py} +15 -5
  168. magic_hour/types/params/{post_v1_animation_body_style.py → v1_animation_create_body_style.py} +13 -10
  169. magic_hour/types/params/v1_animation_generate_body_assets.py +39 -0
  170. magic_hour/types/params/v1_auto_subtitle_generator_create_body.py +78 -0
  171. magic_hour/types/params/v1_auto_subtitle_generator_create_body_assets.py +33 -0
  172. magic_hour/types/params/v1_auto_subtitle_generator_create_body_style.py +56 -0
  173. magic_hour/types/params/v1_auto_subtitle_generator_create_body_style_custom_config.py +86 -0
  174. magic_hour/types/params/v1_auto_subtitle_generator_generate_body_assets.py +17 -0
  175. magic_hour/types/params/v1_face_detection_create_body.py +44 -0
  176. magic_hour/types/params/v1_face_detection_create_body_assets.py +33 -0
  177. magic_hour/types/params/v1_face_detection_generate_body_assets.py +17 -0
  178. magic_hour/types/params/v1_face_swap_create_body.py +92 -0
  179. magic_hour/types/params/v1_face_swap_create_body_assets.py +91 -0
  180. magic_hour/types/params/v1_face_swap_create_body_assets_face_mappings_item.py +44 -0
  181. magic_hour/types/params/v1_face_swap_create_body_style.py +33 -0
  182. magic_hour/types/params/v1_face_swap_generate_body_assets.py +56 -0
  183. magic_hour/types/params/v1_face_swap_generate_body_assets_face_mappings_item.py +25 -0
  184. magic_hour/types/params/v1_face_swap_photo_create_body.py +40 -0
  185. magic_hour/types/params/v1_face_swap_photo_create_body_assets.py +76 -0
  186. magic_hour/types/params/v1_face_swap_photo_create_body_assets_face_mappings_item.py +44 -0
  187. magic_hour/types/params/v1_face_swap_photo_generate_body_assets.py +47 -0
  188. magic_hour/types/params/v1_face_swap_photo_generate_body_assets_face_mappings_item.py +25 -0
  189. magic_hour/types/params/v1_files_upload_urls_create_body.py +36 -0
  190. magic_hour/types/params/v1_files_upload_urls_create_body_items_item.py +38 -0
  191. magic_hour/types/params/v1_image_background_remover_create_body.py +40 -0
  192. magic_hour/types/params/v1_image_background_remover_create_body_assets.py +49 -0
  193. magic_hour/types/params/v1_image_background_remover_generate_body_assets.py +27 -0
  194. magic_hour/types/params/v1_image_to_video_create_body.py +101 -0
  195. magic_hour/types/params/v1_image_to_video_create_body_assets.py +33 -0
  196. magic_hour/types/params/v1_image_to_video_create_body_style.py +53 -0
  197. magic_hour/types/params/v1_image_to_video_generate_body_assets.py +17 -0
  198. magic_hour/types/params/v1_lip_sync_create_body.py +100 -0
  199. magic_hour/types/params/{post_v1_lip_sync_body_assets.py → v1_lip_sync_create_body_assets.py} +15 -5
  200. magic_hour/types/params/v1_lip_sync_create_body_style.py +37 -0
  201. magic_hour/types/params/v1_lip_sync_generate_body_assets.py +36 -0
  202. magic_hour/types/params/v1_photo_colorizer_create_body.py +40 -0
  203. magic_hour/types/params/v1_photo_colorizer_create_body_assets.py +33 -0
  204. magic_hour/types/params/v1_photo_colorizer_generate_body_assets.py +17 -0
  205. magic_hour/types/params/v1_text_to_video_create_body.py +78 -0
  206. magic_hour/types/params/v1_text_to_video_create_body_style.py +43 -0
  207. magic_hour/types/params/v1_video_to_video_create_body.py +101 -0
  208. magic_hour/types/params/{post_v1_video_to_video_body_assets.py → v1_video_to_video_create_body_assets.py} +9 -4
  209. magic_hour/types/params/{post_v1_video_to_video_body_style.py → v1_video_to_video_create_body_style.py} +68 -26
  210. magic_hour/types/params/v1_video_to_video_generate_body_assets.py +27 -0
  211. magic_hour-0.44.0.dist-info/METADATA +328 -0
  212. magic_hour-0.44.0.dist-info/RECORD +231 -0
  213. magic_hour/core/__init__.py +0 -52
  214. magic_hour/core/api_error.py +0 -56
  215. magic_hour/core/auth.py +0 -314
  216. magic_hour/core/base_client.py +0 -618
  217. magic_hour/core/binary_response.py +0 -23
  218. magic_hour/core/query.py +0 -106
  219. magic_hour/core/request.py +0 -156
  220. magic_hour/core/response.py +0 -293
  221. magic_hour/core/type_utils.py +0 -28
  222. magic_hour/core/utils.py +0 -55
  223. magic_hour/types/models/post_v1_ai_clothes_changer_response.py +0 -25
  224. magic_hour/types/models/post_v1_ai_headshot_generator_response.py +0 -25
  225. magic_hour/types/models/post_v1_ai_image_generator_response.py +0 -25
  226. magic_hour/types/models/post_v1_ai_image_upscaler_response.py +0 -25
  227. magic_hour/types/models/post_v1_ai_photo_editor_response.py +0 -25
  228. magic_hour/types/models/post_v1_ai_qr_code_generator_response.py +0 -25
  229. magic_hour/types/models/post_v1_animation_response.py +0 -25
  230. magic_hour/types/models/post_v1_face_swap_photo_response.py +0 -25
  231. magic_hour/types/models/post_v1_face_swap_response.py +0 -25
  232. magic_hour/types/models/post_v1_files_upload_urls_response.py +0 -21
  233. magic_hour/types/models/post_v1_image_background_remover_response.py +0 -25
  234. magic_hour/types/models/post_v1_image_to_video_response.py +0 -25
  235. magic_hour/types/models/post_v1_lip_sync_response.py +0 -25
  236. magic_hour/types/models/post_v1_text_to_video_response.py +0 -25
  237. magic_hour/types/models/post_v1_video_to_video_response.py +0 -25
  238. magic_hour/types/params/post_v1_ai_clothes_changer_body.py +0 -40
  239. magic_hour/types/params/post_v1_ai_clothes_changer_body_assets.py +0 -45
  240. magic_hour/types/params/post_v1_ai_headshot_generator_body.py +0 -40
  241. magic_hour/types/params/post_v1_ai_headshot_generator_body_assets.py +0 -28
  242. magic_hour/types/params/post_v1_ai_image_upscaler_body.py +0 -57
  243. magic_hour/types/params/post_v1_ai_image_upscaler_body_assets.py +0 -28
  244. magic_hour/types/params/post_v1_ai_photo_editor_body_assets.py +0 -28
  245. magic_hour/types/params/post_v1_ai_qr_code_generator_body.py +0 -45
  246. magic_hour/types/params/post_v1_face_swap_body.py +0 -72
  247. magic_hour/types/params/post_v1_face_swap_body_assets.py +0 -52
  248. magic_hour/types/params/post_v1_face_swap_photo_body.py +0 -40
  249. magic_hour/types/params/post_v1_face_swap_photo_body_assets.py +0 -36
  250. magic_hour/types/params/post_v1_files_upload_urls_body.py +0 -31
  251. magic_hour/types/params/post_v1_files_upload_urls_body_items_item.py +0 -38
  252. magic_hour/types/params/post_v1_image_background_remover_body.py +0 -40
  253. magic_hour/types/params/post_v1_image_background_remover_body_assets.py +0 -28
  254. magic_hour/types/params/post_v1_image_to_video_body.py +0 -73
  255. magic_hour/types/params/post_v1_image_to_video_body_assets.py +0 -28
  256. magic_hour/types/params/post_v1_image_to_video_body_style.py +0 -37
  257. magic_hour/types/params/post_v1_lip_sync_body.py +0 -80
  258. magic_hour/types/params/post_v1_text_to_video_body.py +0 -57
  259. magic_hour/types/params/post_v1_text_to_video_body_style.py +0 -28
  260. magic_hour/types/params/post_v1_video_to_video_body.py +0 -93
  261. magic_hour-0.9.5.dist-info/METADATA +0 -133
  262. magic_hour-0.9.5.dist-info/RECORD +0 -132
  263. {magic_hour-0.9.5.dist-info → magic_hour-0.44.0.dist-info}/LICENSE +0 -0
  264. {magic_hour-0.9.5.dist-info → magic_hour-0.44.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,78 @@
1
+ import pydantic
2
+ import typing
3
+ import typing_extensions
4
+
5
+ from .v1_auto_subtitle_generator_create_body_assets import (
6
+ V1AutoSubtitleGeneratorCreateBodyAssets,
7
+ _SerializerV1AutoSubtitleGeneratorCreateBodyAssets,
8
+ )
9
+ from .v1_auto_subtitle_generator_create_body_style import (
10
+ V1AutoSubtitleGeneratorCreateBodyStyle,
11
+ _SerializerV1AutoSubtitleGeneratorCreateBodyStyle,
12
+ )
13
+
14
+
15
+ class V1AutoSubtitleGeneratorCreateBody(typing_extensions.TypedDict):
16
+ """
17
+ V1AutoSubtitleGeneratorCreateBody
18
+ """
19
+
20
+ assets: typing_extensions.Required[V1AutoSubtitleGeneratorCreateBodyAssets]
21
+ """
22
+ Provide the assets for auto subtitle generator
23
+ """
24
+
25
+ end_seconds: typing_extensions.Required[float]
26
+ """
27
+ The end time of the input video in seconds. This value is used to trim the input video. The value must be greater than 0.1, and more than the start_seconds.
28
+ """
29
+
30
+ name: typing_extensions.NotRequired[str]
31
+ """
32
+ The name of video. This value is mainly used for your own identification of the video.
33
+ """
34
+
35
+ start_seconds: typing_extensions.Required[float]
36
+ """
37
+ The start time of the input video in seconds. This value is used to trim the input video. The value must be greater than 0.
38
+ """
39
+
40
+ style: typing_extensions.Required[V1AutoSubtitleGeneratorCreateBodyStyle]
41
+ """
42
+ Style of the subtitle. At least one of `.style.template` or `.style.custom_config` must be provided.
43
+ * If only `.style.template` is provided, default values for the template will be used.
44
+ * If both are provided, the fields in `.style.custom_config` will be used to overwrite the fields in `.style.template`.
45
+ * If only `.style.custom_config` is provided, then all fields in `.style.custom_config` will be used.
46
+
47
+ To use custom config only, the following `custom_config` params are required:
48
+ * `.style.custom_config.font`
49
+ * `.style.custom_config.text_color`
50
+ * `.style.custom_config.vertical_position`
51
+ * `.style.custom_config.horizontal_position`
52
+
53
+ """
54
+
55
+
56
+ class _SerializerV1AutoSubtitleGeneratorCreateBody(pydantic.BaseModel):
57
+ """
58
+ Serializer for V1AutoSubtitleGeneratorCreateBody handling case conversions
59
+ and file omissions as dictated by the API
60
+ """
61
+
62
+ model_config = pydantic.ConfigDict(
63
+ populate_by_name=True,
64
+ )
65
+
66
+ assets: _SerializerV1AutoSubtitleGeneratorCreateBodyAssets = pydantic.Field(
67
+ alias="assets",
68
+ )
69
+ end_seconds: float = pydantic.Field(
70
+ alias="end_seconds",
71
+ )
72
+ name: typing.Optional[str] = pydantic.Field(alias="name", default=None)
73
+ start_seconds: float = pydantic.Field(
74
+ alias="start_seconds",
75
+ )
76
+ style: _SerializerV1AutoSubtitleGeneratorCreateBodyStyle = pydantic.Field(
77
+ alias="style",
78
+ )
@@ -0,0 +1,33 @@
1
+ import pydantic
2
+ import typing_extensions
3
+
4
+
5
+ class V1AutoSubtitleGeneratorCreateBodyAssets(typing_extensions.TypedDict):
6
+ """
7
+ Provide the assets for auto subtitle generator
8
+ """
9
+
10
+ video_file_path: typing_extensions.Required[str]
11
+ """
12
+ This is the video used to add subtitles. This value is either
13
+ - a direct URL to the video file
14
+ - `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).
15
+
16
+ Please refer to the [Input File documentation](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) to learn more.
17
+
18
+ """
19
+
20
+
21
+ class _SerializerV1AutoSubtitleGeneratorCreateBodyAssets(pydantic.BaseModel):
22
+ """
23
+ Serializer for V1AutoSubtitleGeneratorCreateBodyAssets handling case conversions
24
+ and file omissions as dictated by the API
25
+ """
26
+
27
+ model_config = pydantic.ConfigDict(
28
+ populate_by_name=True,
29
+ )
30
+
31
+ video_file_path: str = pydantic.Field(
32
+ alias="video_file_path",
33
+ )
@@ -0,0 +1,56 @@
1
+ import pydantic
2
+ import typing
3
+ import typing_extensions
4
+
5
+ from .v1_auto_subtitle_generator_create_body_style_custom_config import (
6
+ V1AutoSubtitleGeneratorCreateBodyStyleCustomConfig,
7
+ _SerializerV1AutoSubtitleGeneratorCreateBodyStyleCustomConfig,
8
+ )
9
+
10
+
11
+ class V1AutoSubtitleGeneratorCreateBodyStyle(typing_extensions.TypedDict):
12
+ """
13
+ Style of the subtitle. At least one of `.style.template` or `.style.custom_config` must be provided.
14
+ * If only `.style.template` is provided, default values for the template will be used.
15
+ * If both are provided, the fields in `.style.custom_config` will be used to overwrite the fields in `.style.template`.
16
+ * If only `.style.custom_config` is provided, then all fields in `.style.custom_config` will be used.
17
+
18
+ To use custom config only, the following `custom_config` params are required:
19
+ * `.style.custom_config.font`
20
+ * `.style.custom_config.text_color`
21
+ * `.style.custom_config.vertical_position`
22
+ * `.style.custom_config.horizontal_position`
23
+
24
+ """
25
+
26
+ custom_config: typing_extensions.NotRequired[
27
+ V1AutoSubtitleGeneratorCreateBodyStyleCustomConfig
28
+ ]
29
+ """
30
+ Custom subtitle configuration.
31
+ """
32
+
33
+ template: typing_extensions.NotRequired[
34
+ typing_extensions.Literal["cinematic", "highlight", "karaoke", "minimalist"]
35
+ ]
36
+ """
37
+ Preset subtitle templates. Please visit https://magichour.ai/create/auto-subtitle-generator to see the style of the existing templates.
38
+ """
39
+
40
+
41
+ class _SerializerV1AutoSubtitleGeneratorCreateBodyStyle(pydantic.BaseModel):
42
+ """
43
+ Serializer for V1AutoSubtitleGeneratorCreateBodyStyle handling case conversions
44
+ and file omissions as dictated by the API
45
+ """
46
+
47
+ model_config = pydantic.ConfigDict(
48
+ populate_by_name=True,
49
+ )
50
+
51
+ custom_config: typing.Optional[
52
+ _SerializerV1AutoSubtitleGeneratorCreateBodyStyleCustomConfig
53
+ ] = pydantic.Field(alias="custom_config", default=None)
54
+ template: typing.Optional[
55
+ typing_extensions.Literal["cinematic", "highlight", "karaoke", "minimalist"]
56
+ ] = pydantic.Field(alias="template", default=None)
@@ -0,0 +1,86 @@
1
+ import pydantic
2
+ import typing
3
+ import typing_extensions
4
+
5
+
6
+ class V1AutoSubtitleGeneratorCreateBodyStyleCustomConfig(typing_extensions.TypedDict):
7
+ """
8
+ Custom subtitle configuration.
9
+ """
10
+
11
+ font: typing_extensions.NotRequired[str]
12
+ """
13
+ Font name from Google Fonts. Not all fonts support all languages or character sets.
14
+ We recommend verifying language support and appearance directly on https://fonts.google.com before use.
15
+ """
16
+
17
+ font_size: typing_extensions.NotRequired[float]
18
+ """
19
+ Font size in pixels. If not provided, the font size is automatically calculated based on the video resolution.
20
+ """
21
+
22
+ font_style: typing_extensions.NotRequired[str]
23
+ """
24
+ Font style (e.g., normal, italic, bold)
25
+ """
26
+
27
+ highlighted_text_color: typing_extensions.NotRequired[str]
28
+ """
29
+ Color used to highlight the current spoken text
30
+ """
31
+
32
+ horizontal_position: typing_extensions.NotRequired[str]
33
+ """
34
+ Horizontal alignment of the text (e.g., left, center, right)
35
+ """
36
+
37
+ stroke_color: typing_extensions.NotRequired[str]
38
+ """
39
+ Stroke (outline) color of the text
40
+ """
41
+
42
+ stroke_width: typing_extensions.NotRequired[float]
43
+ """
44
+ Width of the text stroke in pixels. If `stroke_color` is provided, but `stroke_width` is not, the `stroke_width` will be calculated automatically based on the font size.
45
+ """
46
+
47
+ text_color: typing_extensions.NotRequired[str]
48
+ """
49
+ Primary text color in hex format
50
+ """
51
+
52
+ vertical_position: typing_extensions.NotRequired[str]
53
+ """
54
+ Vertical alignment of the text (e.g., top, center, bottom)
55
+ """
56
+
57
+
58
+ class _SerializerV1AutoSubtitleGeneratorCreateBodyStyleCustomConfig(pydantic.BaseModel):
59
+ """
60
+ Serializer for V1AutoSubtitleGeneratorCreateBodyStyleCustomConfig handling case conversions
61
+ and file omissions as dictated by the API
62
+ """
63
+
64
+ model_config = pydantic.ConfigDict(
65
+ populate_by_name=True,
66
+ )
67
+
68
+ font: typing.Optional[str] = pydantic.Field(alias="font", default=None)
69
+ font_size: typing.Optional[float] = pydantic.Field(alias="font_size", default=None)
70
+ font_style: typing.Optional[str] = pydantic.Field(alias="font_style", default=None)
71
+ highlighted_text_color: typing.Optional[str] = pydantic.Field(
72
+ alias="highlighted_text_color", default=None
73
+ )
74
+ horizontal_position: typing.Optional[str] = pydantic.Field(
75
+ alias="horizontal_position", default=None
76
+ )
77
+ stroke_color: typing.Optional[str] = pydantic.Field(
78
+ alias="stroke_color", default=None
79
+ )
80
+ stroke_width: typing.Optional[float] = pydantic.Field(
81
+ alias="stroke_width", default=None
82
+ )
83
+ text_color: typing.Optional[str] = pydantic.Field(alias="text_color", default=None)
84
+ vertical_position: typing.Optional[str] = pydantic.Field(
85
+ alias="vertical_position", default=None
86
+ )
@@ -0,0 +1,17 @@
1
+ import pydantic
2
+ import typing_extensions
3
+
4
+
5
+ class V1AutoSubtitleGeneratorGenerateBodyAssets(typing_extensions.TypedDict):
6
+ """
7
+ Provide the assets for auto subtitle generator
8
+ """
9
+
10
+ video_file_path: typing_extensions.Required[str]
11
+ """
12
+ This is the video used to add subtitles. This value is either
13
+ - a direct URL to the video file
14
+ - a path to a local file
15
+
16
+ Note: if the path begins with `api-assets`, it will be assumed to already be uploaded to Magic Hour's storage, and will not be uploaded again.
17
+ """
@@ -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,33 @@
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 is either
13
+ - a direct URL to the video file
14
+ - `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).
15
+
16
+ Please refer to the [Input File documentation](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) to learn more.
17
+
18
+ """
19
+
20
+
21
+ class _SerializerV1FaceDetectionCreateBodyAssets(pydantic.BaseModel):
22
+ """
23
+ Serializer for V1FaceDetectionCreateBodyAssets handling case conversions
24
+ and file omissions as dictated by the API
25
+ """
26
+
27
+ model_config = pydantic.ConfigDict(
28
+ populate_by_name=True,
29
+ )
30
+
31
+ target_file_path: str = pydantic.Field(
32
+ alias="target_file_path",
33
+ )
@@ -0,0 +1,17 @@
1
+ import pydantic
2
+ import typing_extensions
3
+
4
+
5
+ class V1FaceDetectionGenerateBodyAssets(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 is either
13
+ - a direct URL to the image file
14
+ - a path to a local file
15
+
16
+ Note: if the path begins with `api-assets`, it will be assumed to already be uploaded to Magic Hour's storage, and will not be uploaded again.
17
+ """
@@ -0,0 +1,92 @@
1
+ import pydantic
2
+ import typing
3
+ import typing_extensions
4
+
5
+ from .v1_face_swap_create_body_assets import (
6
+ V1FaceSwapCreateBodyAssets,
7
+ _SerializerV1FaceSwapCreateBodyAssets,
8
+ )
9
+ from .v1_face_swap_create_body_style import (
10
+ V1FaceSwapCreateBodyStyle,
11
+ _SerializerV1FaceSwapCreateBodyStyle,
12
+ )
13
+
14
+
15
+ class V1FaceSwapCreateBody(typing_extensions.TypedDict):
16
+ """
17
+ V1FaceSwapCreateBody
18
+ """
19
+
20
+ assets: typing_extensions.Required[V1FaceSwapCreateBodyAssets]
21
+ """
22
+ Provide the assets for face swap. For video, The `video_source` field determines whether `video_file_path` or `youtube_url` field is used
23
+ """
24
+
25
+ end_seconds: typing_extensions.Required[float]
26
+ """
27
+ The end time of the input video in seconds. This value is used to trim the input video. The value must be greater than 0.1, and more than the start_seconds.
28
+ """
29
+
30
+ height: typing_extensions.NotRequired[typing.Optional[int]]
31
+ """
32
+ `height` is deprecated and no longer influences the output video's resolution.
33
+
34
+ Output resolution is determined by the **minimum** of:
35
+ - The resolution of the input video
36
+ - The maximum resolution allowed by your subscription tier. See our [pricing page](https://magichour.ai/pricing) for more details.
37
+
38
+ This field is retained only for backward compatibility and will be removed in a future release.
39
+ """
40
+
41
+ name: typing_extensions.NotRequired[str]
42
+ """
43
+ The name of video. This value is mainly used for your own identification of the video.
44
+ """
45
+
46
+ start_seconds: typing_extensions.Required[float]
47
+ """
48
+ The start time of the input video in seconds. This value is used to trim the input video. The value must be greater than 0.
49
+ """
50
+
51
+ style: typing_extensions.NotRequired[V1FaceSwapCreateBodyStyle]
52
+ """
53
+ Style of the face swap video.
54
+ """
55
+
56
+ width: typing_extensions.NotRequired[typing.Optional[int]]
57
+ """
58
+ `width` is deprecated and no longer influences the output video's resolution.
59
+
60
+ Output resolution is determined by the **minimum** of:
61
+ - The resolution of the input video
62
+ - The maximum resolution allowed by your subscription tier. See our [pricing page](https://magichour.ai/pricing) for more details.
63
+
64
+ This field is retained only for backward compatibility and will be removed in a future release.
65
+ """
66
+
67
+
68
+ class _SerializerV1FaceSwapCreateBody(pydantic.BaseModel):
69
+ """
70
+ Serializer for V1FaceSwapCreateBody handling case conversions
71
+ and file omissions as dictated by the API
72
+ """
73
+
74
+ model_config = pydantic.ConfigDict(
75
+ populate_by_name=True,
76
+ )
77
+
78
+ assets: _SerializerV1FaceSwapCreateBodyAssets = pydantic.Field(
79
+ alias="assets",
80
+ )
81
+ end_seconds: float = pydantic.Field(
82
+ alias="end_seconds",
83
+ )
84
+ height: typing.Optional[int] = pydantic.Field(alias="height", default=None)
85
+ name: typing.Optional[str] = pydantic.Field(alias="name", default=None)
86
+ start_seconds: float = pydantic.Field(
87
+ alias="start_seconds",
88
+ )
89
+ style: typing.Optional[_SerializerV1FaceSwapCreateBodyStyle] = pydantic.Field(
90
+ alias="style", default=None
91
+ )
92
+ width: typing.Optional[int] = pydantic.Field(alias="width", default=None)
@@ -0,0 +1,91 @@
1
+ import pydantic
2
+ import typing
3
+ import typing_extensions
4
+
5
+ from .v1_face_swap_create_body_assets_face_mappings_item import (
6
+ V1FaceSwapCreateBodyAssetsFaceMappingsItem,
7
+ _SerializerV1FaceSwapCreateBodyAssetsFaceMappingsItem,
8
+ )
9
+
10
+
11
+ class V1FaceSwapCreateBodyAssets(typing_extensions.TypedDict):
12
+ """
13
+ Provide the assets for face swap. For video, The `video_source` field determines whether `video_file_path` or `youtube_url` field is used
14
+ """
15
+
16
+ face_mappings: typing_extensions.NotRequired[
17
+ typing.List[V1FaceSwapCreateBodyAssetsFaceMappingsItem]
18
+ ]
19
+ """
20
+ This is the array of face mappings used for multiple face swap. The value is required if `face_swap_mode` is `individual-faces`.
21
+ """
22
+
23
+ face_swap_mode: typing_extensions.NotRequired[
24
+ typing_extensions.Literal["all-faces", "individual-faces"]
25
+ ]
26
+ """
27
+ The mode of face swap.
28
+ * `all-faces` - Swap all faces in the target image or video. `source_file_path` is required.
29
+ * `individual-faces` - Swap individual faces in the target image or video. `source_faces` is required.
30
+ """
31
+
32
+ image_file_path: typing_extensions.NotRequired[str]
33
+ """
34
+ The path of the input image with the face to be swapped. The value is required if `face_swap_mode` is `all-faces`.
35
+
36
+ This value is either
37
+ - a direct URL to the video file
38
+ - `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).
39
+
40
+ Please refer to the [Input File documentation](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) to learn more.
41
+
42
+ """
43
+
44
+ video_file_path: typing_extensions.NotRequired[str]
45
+ """
46
+ Required if `video_source` is `file`. This value is either
47
+ - a direct URL to the video file
48
+ - `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).
49
+
50
+ Please refer to the [Input File documentation](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) to learn more.
51
+
52
+ """
53
+
54
+ video_source: typing_extensions.Required[
55
+ typing_extensions.Literal["file", "youtube"]
56
+ ]
57
+
58
+ youtube_url: typing_extensions.NotRequired[str]
59
+ """
60
+ Using a youtube video as the input source. This field is required if `video_source` is `youtube`
61
+ """
62
+
63
+
64
+ class _SerializerV1FaceSwapCreateBodyAssets(pydantic.BaseModel):
65
+ """
66
+ Serializer for V1FaceSwapCreateBodyAssets handling case conversions
67
+ and file omissions as dictated by the API
68
+ """
69
+
70
+ model_config = pydantic.ConfigDict(
71
+ populate_by_name=True,
72
+ )
73
+
74
+ face_mappings: typing.Optional[
75
+ typing.List[_SerializerV1FaceSwapCreateBodyAssetsFaceMappingsItem]
76
+ ] = pydantic.Field(alias="face_mappings", default=None)
77
+ face_swap_mode: typing.Optional[
78
+ typing_extensions.Literal["all-faces", "individual-faces"]
79
+ ] = pydantic.Field(alias="face_swap_mode", default=None)
80
+ image_file_path: typing.Optional[str] = pydantic.Field(
81
+ alias="image_file_path", default=None
82
+ )
83
+ video_file_path: typing.Optional[str] = pydantic.Field(
84
+ alias="video_file_path", default=None
85
+ )
86
+ video_source: typing_extensions.Literal["file", "youtube"] = pydantic.Field(
87
+ alias="video_source",
88
+ )
89
+ youtube_url: typing.Optional[str] = pydantic.Field(
90
+ alias="youtube_url", default=None
91
+ )
@@ -0,0 +1,44 @@
1
+ import pydantic
2
+ import typing_extensions
3
+
4
+
5
+ class V1FaceSwapCreateBodyAssetsFaceMappingsItem(typing_extensions.TypedDict):
6
+ """
7
+ V1FaceSwapCreateBodyAssetsFaceMappingsItem
8
+ """
9
+
10
+ new_face: typing_extensions.Required[str]
11
+ """
12
+ The face image that will be used to replace the face in the `original_face`. This value is either
13
+ - a direct URL to the video file
14
+ - `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls).
15
+
16
+ Please refer to the [Input File documentation](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls#input-file) to learn more.
17
+
18
+ """
19
+
20
+ original_face: typing_extensions.Required[str]
21
+ """
22
+ The face detected from the image in `target_file_path`. The file name is in the format of `<face_frame>-<face_index>.png`. This value is corresponds to the response in the [face detection API](https://docs.magichour.ai/api-reference/files/get-face-detection-details).
23
+
24
+ * The face_frame is the frame number of the face in the target image. For images, the frame number is always 0.
25
+ * The face_index is the index of the face in the target image, starting from 0 going left to right.
26
+ """
27
+
28
+
29
+ class _SerializerV1FaceSwapCreateBodyAssetsFaceMappingsItem(pydantic.BaseModel):
30
+ """
31
+ Serializer for V1FaceSwapCreateBodyAssetsFaceMappingsItem 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
+ new_face: str = pydantic.Field(
40
+ alias="new_face",
41
+ )
42
+ original_face: str = pydantic.Field(
43
+ alias="original_face",
44
+ )
@@ -0,0 +1,33 @@
1
+ import pydantic
2
+ import typing
3
+ import typing_extensions
4
+
5
+
6
+ class V1FaceSwapCreateBodyStyle(typing_extensions.TypedDict):
7
+ """
8
+ Style of the face swap video.
9
+ """
10
+
11
+ version: typing_extensions.NotRequired[
12
+ typing_extensions.Literal["default", "v1", "v2"]
13
+ ]
14
+ """
15
+ * `v1` - May preserve skin detail and texture better, but weaker identity preservation.
16
+ * `v2` - Faster, sharper, better handling of hair and glasses. stronger identity preservation.
17
+ * `default` - Use the version we recommend, which will change over time. This is recommended unless you need a specific earlier version. This is the default behavior.
18
+ """
19
+
20
+
21
+ class _SerializerV1FaceSwapCreateBodyStyle(pydantic.BaseModel):
22
+ """
23
+ Serializer for V1FaceSwapCreateBodyStyle handling case conversions
24
+ and file omissions as dictated by the API
25
+ """
26
+
27
+ model_config = pydantic.ConfigDict(
28
+ populate_by_name=True,
29
+ )
30
+
31
+ version: typing.Optional[typing_extensions.Literal["default", "v1", "v2"]] = (
32
+ pydantic.Field(alias="version", default=None)
33
+ )