magic_hour 0.21.0__tar.gz → 0.23.0__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.
Files changed (173) hide show
  1. {magic_hour-0.21.0 → magic_hour-0.23.0}/PKG-INFO +2 -2
  2. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/client.py +3 -14
  3. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/core/base_client.py +32 -30
  4. magic_hour-0.23.0/magic_hour/environment.py +20 -0
  5. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_clothes_changer/README.md +2 -3
  6. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_clothes_changer/client.py +2 -2
  7. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_face_editor/README.md +1 -2
  8. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_gif_generator/README.md +2 -3
  9. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_gif_generator/client.py +2 -2
  10. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_headshot_generator/README.md +2 -3
  11. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_headshot_generator/client.py +2 -2
  12. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_image_generator/README.md +2 -3
  13. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_image_generator/client.py +2 -2
  14. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_image_upscaler/README.md +2 -3
  15. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_image_upscaler/client.py +2 -2
  16. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_meme_generator/README.md +2 -3
  17. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_meme_generator/client.py +2 -2
  18. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_photo_editor/README.md +2 -3
  19. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_photo_editor/client.py +2 -2
  20. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_qr_code_generator/README.md +2 -3
  21. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_qr_code_generator/client.py +2 -2
  22. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_talking_photo/README.md +1 -2
  23. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_talking_photo/client.py +14 -4
  24. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/animation/README.md +1 -2
  25. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/face_swap/README.md +1 -2
  26. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/face_swap_photo/README.md +2 -3
  27. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/face_swap_photo/client.py +2 -2
  28. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/files/upload_urls/README.md +1 -2
  29. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/image_background_remover/README.md +2 -3
  30. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/image_background_remover/client.py +2 -2
  31. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/image_projects/README.md +2 -4
  32. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/image_to_video/README.md +1 -2
  33. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/lip_sync/README.md +1 -2
  34. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/photo_colorizer/README.md +2 -3
  35. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/photo_colorizer/client.py +2 -2
  36. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/text_to_video/README.md +1 -2
  37. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/video_projects/README.md +2 -4
  38. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/video_to_video/README.md +1 -2
  39. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_ai_clothes_changer_create_response.py +9 -1
  40. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_ai_face_editor_create_response.py +9 -1
  41. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_ai_gif_generator_create_response.py +9 -1
  42. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_ai_headshot_generator_create_response.py +9 -1
  43. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_ai_image_generator_create_response.py +9 -1
  44. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_ai_image_upscaler_create_response.py +9 -1
  45. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_ai_meme_generator_create_response.py +9 -1
  46. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_ai_photo_editor_create_response.py +9 -1
  47. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_ai_qr_code_generator_create_response.py +9 -1
  48. magic_hour-0.23.0/magic_hour/types/models/v1_ai_talking_photo_create_response.py +35 -0
  49. magic_hour-0.23.0/magic_hour/types/models/v1_animation_create_response.py +35 -0
  50. magic_hour-0.23.0/magic_hour/types/models/v1_face_swap_create_response.py +35 -0
  51. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_face_swap_photo_create_response.py +9 -1
  52. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_image_background_remover_create_response.py +9 -1
  53. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_image_projects_get_response.py +9 -1
  54. magic_hour-0.23.0/magic_hour/types/models/v1_image_to_video_create_response.py +35 -0
  55. magic_hour-0.23.0/magic_hour/types/models/v1_lip_sync_create_response.py +35 -0
  56. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_photo_colorizer_create_response.py +9 -1
  57. magic_hour-0.23.0/magic_hour/types/models/v1_text_to_video_create_response.py +35 -0
  58. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_video_projects_get_response.py +10 -0
  59. magic_hour-0.23.0/magic_hour/types/models/v1_video_to_video_create_response.py +35 -0
  60. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/__init__.py +6 -0
  61. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_talking_photo_create_body.py +14 -2
  62. magic_hour-0.23.0/magic_hour/types/params/v1_ai_talking_photo_create_body_style.py +41 -0
  63. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_video_to_video_create_body_style.py +2 -0
  64. {magic_hour-0.21.0 → magic_hour-0.23.0}/pyproject.toml +2 -2
  65. magic_hour-0.21.0/magic_hour/environment.py +0 -8
  66. magic_hour-0.21.0/magic_hour/types/models/v1_ai_talking_photo_create_response.py +0 -25
  67. magic_hour-0.21.0/magic_hour/types/models/v1_animation_create_response.py +0 -25
  68. magic_hour-0.21.0/magic_hour/types/models/v1_face_swap_create_response.py +0 -25
  69. magic_hour-0.21.0/magic_hour/types/models/v1_image_to_video_create_response.py +0 -25
  70. magic_hour-0.21.0/magic_hour/types/models/v1_lip_sync_create_response.py +0 -25
  71. magic_hour-0.21.0/magic_hour/types/models/v1_text_to_video_create_response.py +0 -25
  72. magic_hour-0.21.0/magic_hour/types/models/v1_video_to_video_create_response.py +0 -25
  73. {magic_hour-0.21.0 → magic_hour-0.23.0}/LICENSE +0 -0
  74. {magic_hour-0.21.0 → magic_hour-0.23.0}/README.md +0 -0
  75. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/__init__.py +0 -0
  76. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/core/__init__.py +0 -0
  77. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/core/api_error.py +0 -0
  78. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/core/auth.py +0 -0
  79. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/core/binary_response.py +0 -0
  80. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/core/query.py +0 -0
  81. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/core/request.py +0 -0
  82. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/core/response.py +0 -0
  83. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/core/type_utils.py +0 -0
  84. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/core/utils.py +0 -0
  85. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/__init__.py +0 -0
  86. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_clothes_changer/__init__.py +0 -0
  87. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_face_editor/__init__.py +0 -0
  88. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_face_editor/client.py +0 -0
  89. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_gif_generator/__init__.py +0 -0
  90. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_headshot_generator/__init__.py +0 -0
  91. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_image_generator/__init__.py +0 -0
  92. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_image_upscaler/__init__.py +0 -0
  93. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_meme_generator/__init__.py +0 -0
  94. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_photo_editor/__init__.py +0 -0
  95. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_qr_code_generator/__init__.py +0 -0
  96. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/ai_talking_photo/__init__.py +0 -0
  97. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/animation/__init__.py +0 -0
  98. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/animation/client.py +0 -0
  99. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/client.py +0 -0
  100. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/face_swap/__init__.py +0 -0
  101. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/face_swap/client.py +0 -0
  102. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/face_swap_photo/__init__.py +0 -0
  103. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/files/__init__.py +0 -0
  104. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/files/client.py +0 -0
  105. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/files/upload_urls/__init__.py +0 -0
  106. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/files/upload_urls/client.py +0 -0
  107. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/image_background_remover/__init__.py +0 -0
  108. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/image_projects/__init__.py +0 -0
  109. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/image_projects/client.py +0 -0
  110. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/image_to_video/__init__.py +0 -0
  111. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/image_to_video/client.py +0 -0
  112. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/lip_sync/__init__.py +0 -0
  113. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/lip_sync/client.py +0 -0
  114. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/photo_colorizer/__init__.py +0 -0
  115. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/text_to_video/__init__.py +0 -0
  116. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/text_to_video/client.py +0 -0
  117. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/video_projects/__init__.py +0 -0
  118. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/video_projects/client.py +0 -0
  119. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/video_to_video/__init__.py +0 -0
  120. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/resources/v1/video_to_video/client.py +0 -0
  121. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/__init__.py +0 -0
  122. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_files_upload_urls_create_response.py +0 -0
  123. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_files_upload_urls_create_response_items_item.py +0 -0
  124. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_image_projects_get_response_downloads_item.py +0 -0
  125. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_image_projects_get_response_error.py +0 -0
  126. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_video_projects_get_response_download.py +0 -0
  127. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_video_projects_get_response_downloads_item.py +0 -0
  128. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/models/v1_video_projects_get_response_error.py +0 -0
  129. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_clothes_changer_create_body.py +0 -0
  130. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_clothes_changer_create_body_assets.py +0 -0
  131. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_face_editor_create_body.py +0 -0
  132. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_face_editor_create_body_assets.py +0 -0
  133. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_face_editor_create_body_style.py +0 -0
  134. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_gif_generator_create_body.py +0 -0
  135. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_gif_generator_create_body_style.py +0 -0
  136. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_headshot_generator_create_body.py +0 -0
  137. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_headshot_generator_create_body_assets.py +0 -0
  138. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_headshot_generator_create_body_style.py +0 -0
  139. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_image_generator_create_body.py +0 -0
  140. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_image_generator_create_body_style.py +0 -0
  141. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_image_upscaler_create_body.py +0 -0
  142. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_image_upscaler_create_body_assets.py +0 -0
  143. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_image_upscaler_create_body_style.py +0 -0
  144. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_meme_generator_create_body.py +0 -0
  145. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_meme_generator_create_body_style.py +0 -0
  146. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_photo_editor_create_body.py +0 -0
  147. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_photo_editor_create_body_assets.py +0 -0
  148. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_photo_editor_create_body_style.py +0 -0
  149. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_qr_code_generator_create_body.py +0 -0
  150. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_qr_code_generator_create_body_style.py +0 -0
  151. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_ai_talking_photo_create_body_assets.py +0 -0
  152. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_animation_create_body.py +0 -0
  153. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_animation_create_body_assets.py +0 -0
  154. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_animation_create_body_style.py +0 -0
  155. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_face_swap_create_body.py +0 -0
  156. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_face_swap_create_body_assets.py +0 -0
  157. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_face_swap_photo_create_body.py +0 -0
  158. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_face_swap_photo_create_body_assets.py +0 -0
  159. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_files_upload_urls_create_body.py +0 -0
  160. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_files_upload_urls_create_body_items_item.py +0 -0
  161. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_image_background_remover_create_body.py +0 -0
  162. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_image_background_remover_create_body_assets.py +0 -0
  163. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_image_to_video_create_body.py +0 -0
  164. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_image_to_video_create_body_assets.py +0 -0
  165. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_image_to_video_create_body_style.py +0 -0
  166. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_lip_sync_create_body.py +0 -0
  167. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_lip_sync_create_body_assets.py +0 -0
  168. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_photo_colorizer_create_body.py +0 -0
  169. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_photo_colorizer_create_body_assets.py +0 -0
  170. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_text_to_video_create_body.py +0 -0
  171. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_text_to_video_create_body_style.py +0 -0
  172. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_video_to_video_create_body.py +0 -0
  173. {magic_hour-0.21.0 → magic_hour-0.23.0}/magic_hour/types/params/v1_video_to_video_create_body_assets.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: magic_hour
3
- Version: 0.21.0
3
+ Version: 0.23.0
4
4
  Summary: Python SDK for Magic Hour API
5
5
  Requires-Python: >=3.8,<4.0
6
6
  Classifier: Programming Language :: Python :: 3
@@ -10,7 +10,7 @@ Classifier: Programming Language :: Python :: 3.10
10
10
  Classifier: Programming Language :: Python :: 3.11
11
11
  Classifier: Programming Language :: Python :: 3.12
12
12
  Classifier: Programming Language :: Python :: 3.13
13
- Requires-Dist: httpx (>=0.26.0,<0.27.0)
13
+ Requires-Dist: httpx (>=0.26.0,<1)
14
14
  Requires-Dist: jsonpointer (>=3.0.0,<4.0.0)
15
15
  Requires-Dist: pydantic (>=2.5.0,<3.0.0)
16
16
  Requires-Dist: typing_extensions (>=4.0.0,<5.0.0)
@@ -2,7 +2,7 @@ import httpx
2
2
  import typing
3
3
 
4
4
  from magic_hour.core import AsyncBaseClient, AuthBearer, SyncBaseClient
5
- from magic_hour.environment import Environment
5
+ from magic_hour.environment import Environment, _get_base_url
6
6
  from magic_hour.resources.v1 import AsyncV1Client, V1Client
7
7
 
8
8
 
@@ -10,9 +10,9 @@ class Client:
10
10
  def __init__(
11
11
  self,
12
12
  *,
13
- base_url: typing.Optional[str] = None,
14
13
  timeout: typing.Optional[float] = 60,
15
14
  httpx_client: typing.Optional[httpx.Client] = None,
15
+ base_url: typing.Optional[str] = None,
16
16
  environment: Environment = Environment.ENVIRONMENT,
17
17
  token: typing.Optional[str] = None,
18
18
  ):
@@ -31,9 +31,9 @@ class AsyncClient:
31
31
  def __init__(
32
32
  self,
33
33
  *,
34
- base_url: typing.Optional[str] = None,
35
34
  timeout: typing.Optional[float] = 60,
36
35
  httpx_client: typing.Optional[httpx.AsyncClient] = None,
36
+ base_url: typing.Optional[str] = None,
37
37
  environment: Environment = Environment.ENVIRONMENT,
38
38
  token: typing.Optional[str] = None,
39
39
  ):
@@ -46,14 +46,3 @@ class AsyncClient:
46
46
  )
47
47
  self._base_client.register_auth("bearerAuth", AuthBearer(val=token))
48
48
  self.v1 = AsyncV1Client(base_client=self._base_client)
49
-
50
-
51
- def _get_base_url(
52
- *, base_url: typing.Optional[str] = None, environment: Environment
53
- ) -> str:
54
- if base_url is not None:
55
- return base_url
56
- elif environment is not None:
57
- return environment.value
58
- else:
59
- raise Exception("Must include a base_url or environment arguments")
@@ -25,6 +25,7 @@ T = TypeVar(
25
25
  "T",
26
26
  bound=Union[object, None, str, "BaseModel", List[Any], Dict[str, Any], Any],
27
27
  )
28
+ _DEFAULT_SERVICE_NAME = "__default_service__"
28
29
 
29
30
 
30
31
  class BaseClient:
@@ -34,21 +35,16 @@ class BaseClient:
34
35
  Serves as the foundation for both synchronous and asynchronous client implementations.
35
36
 
36
37
  Attributes:
37
- _base_url: Base URL for the API endpoint
38
38
  _auths: Dictionary mapping auth provider IDs to AuthProvider instances
39
39
  """
40
40
 
41
- def __init__(
42
- self,
43
- *,
44
- base_url: str,
45
- ):
46
- """Initialize the base client.
47
-
48
- Args:
49
- base_url: Base URL for the API endpoint
50
- """
51
- self._base_url = base_url
41
+ def __init__(self, base_url: Union[str, Dict[str, str]]):
42
+ """Initialize the base client"""
43
+ self._base_url = (
44
+ base_url
45
+ if isinstance(base_url, dict)
46
+ else {_DEFAULT_SERVICE_NAME: base_url}
47
+ )
52
48
  self._auths: Dict[str, AuthProvider] = {}
53
49
 
54
50
  def register_auth(self, auth_id: str, provider: AuthProvider):
@@ -71,15 +67,7 @@ class BaseClient:
71
67
  }
72
68
  return headers
73
69
 
74
- def get_base_url(self) -> str:
75
- """Get the base URL for the API endpoint.
76
-
77
- Returns:
78
- Base URL string
79
- """
80
- return self._base_url
81
-
82
- def build_url(self, path: str) -> str:
70
+ def build_url(self, path: str, service_name: Optional[str] = None) -> str:
83
71
  """Build a complete URL by combining base URL and path.
84
72
 
85
73
  Args:
@@ -88,13 +76,13 @@ class BaseClient:
88
76
  Returns:
89
77
  Complete URL string
90
78
  """
91
- base = self._base_url
92
- if base.endswith("/"):
93
- base = base[:-1]
79
+ base_url = self._base_url.get(service_name or _DEFAULT_SERVICE_NAME, "")
80
+ if base_url.endswith("/"):
81
+ base_url = base_url[:-1]
94
82
  if path.startswith("/"):
95
83
  path = path[1:]
96
84
 
97
- return f"{base}/{path}"
85
+ return f"{base_url}/{path}"
98
86
 
99
87
  def _cast_to_raw_response(
100
88
  self, res: httpx.Response, cast_to: Union[Type[T], Any]
@@ -254,6 +242,7 @@ class BaseClient:
254
242
  *,
255
243
  method: str,
256
244
  path: str,
245
+ service_name: Optional[str] = None,
257
246
  auth_names: Optional[List[str]] = None,
258
247
  query_params: Optional[QueryParams] = None,
259
248
  headers: Optional[Dict[str, str]] = None,
@@ -283,7 +272,10 @@ class BaseClient:
283
272
  Complete request configuration
284
273
  """
285
274
  opts = request_options or default_request_options()
286
- req_cfg: RequestConfig = {"method": method, "url": self.build_url(path)}
275
+ req_cfg: RequestConfig = {
276
+ "method": method,
277
+ "url": self.build_url(path, service_name=service_name),
278
+ }
287
279
  req_cfg = self._apply_auth(cfg=req_cfg, auth_names=auth_names or [])
288
280
  req_cfg = self._apply_headers(
289
281
  cfg=req_cfg, opts=opts, content_type=content_type, explicit_headers=headers
@@ -351,13 +343,12 @@ class SyncBaseClient(BaseClient):
351
343
  def __init__(
352
344
  self,
353
345
  *,
354
- base_url: str,
346
+ base_url: Union[str, Dict[str, str]],
355
347
  httpx_client: httpx.Client,
356
348
  ):
357
349
  """Initialize the synchronous client.
358
350
 
359
351
  Args:
360
- base_url: Base URL for the API endpoint
361
352
  httpx_client: Synchronous HTTPX client instance
362
353
  """
363
354
  super().__init__(base_url=base_url)
@@ -369,6 +360,7 @@ class SyncBaseClient(BaseClient):
369
360
  method: str,
370
361
  path: str,
371
362
  cast_to: Union[Type[T], Any],
363
+ service_name: Optional[str] = None,
372
364
  auth_names: Optional[List[str]] = None,
373
365
  query_params: Optional[QueryParams] = None,
374
366
  headers: Optional[Dict[str, str]] = None,
@@ -386,6 +378,7 @@ class SyncBaseClient(BaseClient):
386
378
  path: API endpoint path
387
379
  cast_to: Type to cast the response to
388
380
  auth_names: List of auth provider IDs
381
+ service_name: The name of the API service to make the request to
389
382
  query_params: Query parameters
390
383
  headers: Request headers
391
384
  data: Form data
@@ -404,6 +397,7 @@ class SyncBaseClient(BaseClient):
404
397
  req_cfg = self.build_request(
405
398
  method=method,
406
399
  path=path,
400
+ service_name=service_name,
407
401
  auth_names=auth_names,
408
402
  query_params=query_params,
409
403
  headers=headers,
@@ -430,6 +424,7 @@ class SyncBaseClient(BaseClient):
430
424
  method: str,
431
425
  path: str,
432
426
  cast_to: Union[Type[T], Any],
427
+ service_name: Optional[str] = None,
433
428
  auth_names: Optional[List[str]] = None,
434
429
  query_params: Optional[QueryParams] = None,
435
430
  headers: Optional[Dict[str, str]] = None,
@@ -447,6 +442,7 @@ class SyncBaseClient(BaseClient):
447
442
  path: API endpoint path
448
443
  cast_to: Type to cast the response to
449
444
  auth_names: List of auth provider IDs
445
+ service_name: The name of the API service to make the request to
450
446
  query_params: Query parameters
451
447
  headers: Request headers
452
448
  data: Form data
@@ -465,6 +461,7 @@ class SyncBaseClient(BaseClient):
465
461
  req_cfg = self.build_request(
466
462
  method=method,
467
463
  path=path,
464
+ service_name=service_name,
468
465
  auth_names=auth_names,
469
466
  query_params=query_params,
470
467
  headers=headers,
@@ -489,13 +486,12 @@ class AsyncBaseClient(BaseClient):
489
486
  def __init__(
490
487
  self,
491
488
  *,
492
- base_url: str,
489
+ base_url: Union[str, Dict[str, str]],
493
490
  httpx_client: httpx.AsyncClient,
494
491
  ):
495
492
  """Initialize the asynchronous client.
496
493
 
497
494
  Args:
498
- base_url: Base URL for the API endpoint
499
495
  httpx_client: Asynchronous HTTPX client instance
500
496
  """
501
497
  super().__init__(base_url=base_url)
@@ -507,6 +503,7 @@ class AsyncBaseClient(BaseClient):
507
503
  method: str,
508
504
  path: str,
509
505
  cast_to: Union[Type[T], Any],
506
+ service_name: Optional[str] = None,
510
507
  auth_names: Optional[List[str]] = None,
511
508
  query_params: Optional[QueryParams] = None,
512
509
  headers: Optional[Dict[str, str]] = None,
@@ -524,6 +521,7 @@ class AsyncBaseClient(BaseClient):
524
521
  path: API endpoint path
525
522
  cast_to: Type to cast the response to
526
523
  auth_names: List of auth provider IDs
524
+ service_name: The name of the API service to make the request to
527
525
  query_params: Query parameters
528
526
  headers: Request headers
529
527
  data: Form data
@@ -542,6 +540,7 @@ class AsyncBaseClient(BaseClient):
542
540
  req_cfg = self.build_request(
543
541
  method=method,
544
542
  path=path,
543
+ service_name=service_name,
545
544
  auth_names=auth_names,
546
545
  query_params=query_params,
547
546
  headers=headers,
@@ -568,6 +567,7 @@ class AsyncBaseClient(BaseClient):
568
567
  method: str,
569
568
  path: str,
570
569
  cast_to: Union[Type[T], Any],
570
+ service_name: Optional[str] = None,
571
571
  auth_names: Optional[List[str]] = None,
572
572
  query_params: Optional[QueryParams] = None,
573
573
  headers: Optional[Dict[str, str]] = None,
@@ -585,6 +585,7 @@ class AsyncBaseClient(BaseClient):
585
585
  path: API endpoint path
586
586
  cast_to: Type to cast the response to
587
587
  auth_names: List of auth provider IDs
588
+ service_name: The name of the API service to make the request to
588
589
  query_params: Query parameters
589
590
  headers: Request headers
590
591
  data: Form data
@@ -603,6 +604,7 @@ class AsyncBaseClient(BaseClient):
603
604
  req_cfg = self.build_request(
604
605
  method=method,
605
606
  path=path,
607
+ service_name=service_name,
606
608
  auth_names=auth_names,
607
609
  query_params=query_params,
608
610
  headers=headers,
@@ -0,0 +1,20 @@
1
+ import enum
2
+ import typing
3
+
4
+
5
+ class Environment(enum.Enum):
6
+ """Pre-defined base URLs for the API"""
7
+
8
+ ENVIRONMENT = "https://api.magichour.ai"
9
+ MOCK_SERVER = "https://api.sideko.dev/v1/mock/magichour/magic-hour/0.23.0"
10
+
11
+
12
+ def _get_base_url(
13
+ *, base_url: typing.Optional[str] = None, environment: Environment
14
+ ) -> str:
15
+ if base_url is not None:
16
+ return base_url
17
+ elif environment is not None:
18
+ return environment.value
19
+ else:
20
+ raise Exception("Must include a base_url or environment arguments")
@@ -1,8 +1,7 @@
1
1
 
2
- ### create <a name="create"></a>
3
- AI Clothes Changer
2
+ ### AI Clothes Changer <a name="create"></a>
4
3
 
5
- Change outfits in photos in seconds with just a photo reference. Each photo costs 25 frames.
4
+ Change outfits in photos in seconds with just a photo reference. Each photo costs 25 credits.
6
5
 
7
6
  **API Endpoint**: `POST /v1/ai-clothes-changer`
8
7
 
@@ -27,7 +27,7 @@ class AiClothesChangerClient:
27
27
  """
28
28
  AI Clothes Changer
29
29
 
30
- Change outfits in photos in seconds with just a photo reference. Each photo costs 25 frames.
30
+ Change outfits in photos in seconds with just a photo reference. Each photo costs 25 credits.
31
31
 
32
32
  POST /v1/ai-clothes-changer
33
33
 
@@ -85,7 +85,7 @@ class AsyncAiClothesChangerClient:
85
85
  """
86
86
  AI Clothes Changer
87
87
 
88
- Change outfits in photos in seconds with just a photo reference. Each photo costs 25 frames.
88
+ Change outfits in photos in seconds with just a photo reference. Each photo costs 25 credits.
89
89
 
90
90
  POST /v1/ai-clothes-changer
91
91
 
@@ -1,6 +1,5 @@
1
1
 
2
- ### create <a name="create"></a>
3
- AI Face Editor
2
+ ### AI Face Editor <a name="create"></a>
4
3
 
5
4
  Edit facial features of an image using AI. Each edit costs 1 frame. The height/width of the output image depends on your subscription. Please refer to our [pricing](/pricing) page for more details
6
5
 
@@ -1,8 +1,7 @@
1
1
 
2
- ### create <a name="create"></a>
3
- AI GIFs
2
+ ### AI GIFs <a name="create"></a>
4
3
 
5
- Create an AI GIF. Each GIF costs 25 frames.
4
+ Create an AI GIF. Each GIF costs 25 credits.
6
5
 
7
6
  **API Endpoint**: `POST /v1/ai-gif-generator`
8
7
 
@@ -27,7 +27,7 @@ class AiGifGeneratorClient:
27
27
  """
28
28
  AI GIFs
29
29
 
30
- Create an AI GIF. Each GIF costs 25 frames.
30
+ Create an AI GIF. Each GIF costs 25 credits.
31
31
 
32
32
  POST /v1/ai-gif-generator
33
33
 
@@ -80,7 +80,7 @@ class AsyncAiGifGeneratorClient:
80
80
  """
81
81
  AI GIFs
82
82
 
83
- Create an AI GIF. Each GIF costs 25 frames.
83
+ Create an AI GIF. Each GIF costs 25 credits.
84
84
 
85
85
  POST /v1/ai-gif-generator
86
86
 
@@ -1,8 +1,7 @@
1
1
 
2
- ### create <a name="create"></a>
3
- AI Headshots
2
+ ### AI Headshots <a name="create"></a>
4
3
 
5
- Create an AI headshot. Each headshot costs 50 frames.
4
+ Create an AI headshot. Each headshot costs 50 credits.
6
5
 
7
6
  **API Endpoint**: `POST /v1/ai-headshot-generator`
8
7
 
@@ -31,7 +31,7 @@ class AiHeadshotGeneratorClient:
31
31
  """
32
32
  AI Headshots
33
33
 
34
- Create an AI headshot. Each headshot costs 50 frames.
34
+ Create an AI headshot. Each headshot costs 50 credits.
35
35
 
36
36
  POST /v1/ai-headshot-generator
37
37
 
@@ -90,7 +90,7 @@ class AsyncAiHeadshotGeneratorClient:
90
90
  """
91
91
  AI Headshots
92
92
 
93
- Create an AI headshot. Each headshot costs 50 frames.
93
+ Create an AI headshot. Each headshot costs 50 credits.
94
94
 
95
95
  POST /v1/ai-headshot-generator
96
96
 
@@ -1,8 +1,7 @@
1
1
 
2
- ### create <a name="create"></a>
3
- AI Images
2
+ ### AI Images <a name="create"></a>
4
3
 
5
- Create an AI image. Each image costs 5 frames.
4
+ Create an AI image. Each image costs 5 credits.
6
5
 
7
6
  **API Endpoint**: `POST /v1/ai-image-generator`
8
7
 
@@ -30,7 +30,7 @@ class AiImageGeneratorClient:
30
30
  """
31
31
  AI Images
32
32
 
33
- Create an AI image. Each image costs 5 frames.
33
+ Create an AI image. Each image costs 5 credits.
34
34
 
35
35
  POST /v1/ai-image-generator
36
36
 
@@ -95,7 +95,7 @@ class AsyncAiImageGeneratorClient:
95
95
  """
96
96
  AI Images
97
97
 
98
- Create an AI image. Each image costs 5 frames.
98
+ Create an AI image. Each image costs 5 credits.
99
99
 
100
100
  POST /v1/ai-image-generator
101
101
 
@@ -1,8 +1,7 @@
1
1
 
2
- ### create <a name="create"></a>
3
- AI Image Upscaler
2
+ ### AI Image Upscaler <a name="create"></a>
4
3
 
5
- Upscale your image using AI. Each 2x upscale costs 50 frames, and 4x upscale costs 200 frames.
4
+ Upscale your image using AI. Each 2x upscale costs 50 credits, and 4x upscale costs 200 credits.
6
5
 
7
6
  **API Endpoint**: `POST /v1/ai-image-upscaler`
8
7
 
@@ -29,7 +29,7 @@ class AiImageUpscalerClient:
29
29
  """
30
30
  AI Image Upscaler
31
31
 
32
- Upscale your image using AI. Each 2x upscale costs 50 frames, and 4x upscale costs 200 frames.
32
+ Upscale your image using AI. Each 2x upscale costs 50 credits, and 4x upscale costs 200 credits.
33
33
 
34
34
  POST /v1/ai-image-upscaler
35
35
 
@@ -94,7 +94,7 @@ class AsyncAiImageUpscalerClient:
94
94
  """
95
95
  AI Image Upscaler
96
96
 
97
- Upscale your image using AI. Each 2x upscale costs 50 frames, and 4x upscale costs 200 frames.
97
+ Upscale your image using AI. Each 2x upscale costs 50 credits, and 4x upscale costs 200 credits.
98
98
 
99
99
  POST /v1/ai-image-upscaler
100
100
 
@@ -1,8 +1,7 @@
1
1
 
2
- ### create <a name="create"></a>
3
- AI Meme Generator
2
+ ### AI Meme Generator <a name="create"></a>
4
3
 
5
- Create an AI generated meme. Each meme costs 10 frames.
4
+ Create an AI generated meme. Each meme costs 10 credits.
6
5
 
7
6
  **API Endpoint**: `POST /v1/ai-meme-generator`
8
7
 
@@ -27,7 +27,7 @@ class AiMemeGeneratorClient:
27
27
  """
28
28
  AI Meme Generator
29
29
 
30
- Create an AI generated meme. Each meme costs 10 frames.
30
+ Create an AI generated meme. Each meme costs 10 credits.
31
31
 
32
32
  POST /v1/ai-meme-generator
33
33
 
@@ -85,7 +85,7 @@ class AsyncAiMemeGeneratorClient:
85
85
  """
86
86
  AI Meme Generator
87
87
 
88
- Create an AI generated meme. Each meme costs 10 frames.
88
+ Create an AI generated meme. Each meme costs 10 credits.
89
89
 
90
90
  POST /v1/ai-meme-generator
91
91
 
@@ -1,10 +1,9 @@
1
1
 
2
- ### create <a name="create"></a>
3
- AI Photo Editor
2
+ ### AI Photo Editor <a name="create"></a>
4
3
 
5
4
  > **NOTE**: this API is still in early development stages, and should be avoided. Please reach out to us if you're interested in this API.
6
5
 
7
- Edit photo using AI. Each photo costs 10 frames.
6
+ Edit photo using AI. Each photo costs 10 credits.
8
7
 
9
8
  **API Endpoint**: `POST /v1/ai-photo-editor`
10
9
 
@@ -34,7 +34,7 @@ class AiPhotoEditorClient:
34
34
 
35
35
  > **NOTE**: this API is still in early development stages, and should be avoided. Please reach out to us if you're interested in this API.
36
36
 
37
- Edit photo using AI. Each photo costs 10 frames.
37
+ Edit photo using AI. Each photo costs 10 credits.
38
38
 
39
39
  POST /v1/ai-photo-editor
40
40
 
@@ -115,7 +115,7 @@ class AsyncAiPhotoEditorClient:
115
115
 
116
116
  > **NOTE**: this API is still in early development stages, and should be avoided. Please reach out to us if you're interested in this API.
117
117
 
118
- Edit photo using AI. Each photo costs 10 frames.
118
+ Edit photo using AI. Each photo costs 10 credits.
119
119
 
120
120
  POST /v1/ai-photo-editor
121
121
 
@@ -1,8 +1,7 @@
1
1
 
2
- ### create <a name="create"></a>
3
- AI QR Code
2
+ ### AI QR Code <a name="create"></a>
4
3
 
5
- Create an AI QR code. Each QR code costs 20 frames.
4
+ Create an AI QR code. Each QR code costs 20 credits.
6
5
 
7
6
  **API Endpoint**: `POST /v1/ai-qr-code-generator`
8
7
 
@@ -28,7 +28,7 @@ class AiQrCodeGeneratorClient:
28
28
  """
29
29
  AI QR Code
30
30
 
31
- Create an AI QR code. Each QR code costs 20 frames.
31
+ Create an AI QR code. Each QR code costs 20 credits.
32
32
 
33
33
  POST /v1/ai-qr-code-generator
34
34
 
@@ -85,7 +85,7 @@ class AsyncAiQrCodeGeneratorClient:
85
85
  """
86
86
  AI QR Code
87
87
 
88
- Create an AI QR code. Each QR code costs 20 frames.
88
+ Create an AI QR code. Each QR code costs 20 credits.
89
89
 
90
90
  POST /v1/ai-qr-code-generator
91
91
 
@@ -1,6 +1,5 @@
1
1
 
2
- ### create <a name="create"></a>
3
- AI Talking Photo
2
+ ### AI Talking Photo <a name="create"></a>
4
3
 
5
4
  Create a talking photo from an image and audio or text input.
6
5
 
@@ -24,6 +24,9 @@ class AiTalkingPhotoClient:
24
24
  name: typing.Union[
25
25
  typing.Optional[str], type_utils.NotGiven
26
26
  ] = type_utils.NOT_GIVEN,
27
+ style: typing.Union[
28
+ typing.Optional[params.V1AiTalkingPhotoCreateBodyStyle], type_utils.NotGiven
29
+ ] = type_utils.NOT_GIVEN,
27
30
  request_options: typing.Optional[RequestOptions] = None,
28
31
  ) -> models.V1AiTalkingPhotoCreateResponse:
29
32
  """
@@ -35,9 +38,10 @@ class AiTalkingPhotoClient:
35
38
 
36
39
  Args:
37
40
  name: The name of image
41
+ style: Attributes used to dictate the style of the output
38
42
  assets: Provide the assets for creating a talking photo
39
- end_seconds: The end time of the input video in seconds
40
- start_seconds: The start time of the input video in seconds
43
+ end_seconds: The end time of the input audio in seconds. The maximum duration allowed is 30 seconds.
44
+ start_seconds: The start time of the input audio in seconds. The maximum duration allowed is 30 seconds.
41
45
  request_options: Additional options to customize the HTTP request
42
46
 
43
47
  Returns:
@@ -63,6 +67,7 @@ class AiTalkingPhotoClient:
63
67
  _json = to_encodable(
64
68
  item={
65
69
  "name": name,
70
+ "style": style,
66
71
  "assets": assets,
67
72
  "end_seconds": end_seconds,
68
73
  "start_seconds": start_seconds,
@@ -92,6 +97,9 @@ class AsyncAiTalkingPhotoClient:
92
97
  name: typing.Union[
93
98
  typing.Optional[str], type_utils.NotGiven
94
99
  ] = type_utils.NOT_GIVEN,
100
+ style: typing.Union[
101
+ typing.Optional[params.V1AiTalkingPhotoCreateBodyStyle], type_utils.NotGiven
102
+ ] = type_utils.NOT_GIVEN,
95
103
  request_options: typing.Optional[RequestOptions] = None,
96
104
  ) -> models.V1AiTalkingPhotoCreateResponse:
97
105
  """
@@ -103,9 +111,10 @@ class AsyncAiTalkingPhotoClient:
103
111
 
104
112
  Args:
105
113
  name: The name of image
114
+ style: Attributes used to dictate the style of the output
106
115
  assets: Provide the assets for creating a talking photo
107
- end_seconds: The end time of the input video in seconds
108
- start_seconds: The start time of the input video in seconds
116
+ end_seconds: The end time of the input audio in seconds. The maximum duration allowed is 30 seconds.
117
+ start_seconds: The start time of the input audio in seconds. The maximum duration allowed is 30 seconds.
109
118
  request_options: Additional options to customize the HTTP request
110
119
 
111
120
  Returns:
@@ -131,6 +140,7 @@ class AsyncAiTalkingPhotoClient:
131
140
  _json = to_encodable(
132
141
  item={
133
142
  "name": name,
143
+ "style": style,
134
144
  "assets": assets,
135
145
  "end_seconds": end_seconds,
136
146
  "start_seconds": start_seconds,
@@ -1,6 +1,5 @@
1
1
 
2
- ### create <a name="create"></a>
3
- Animation
2
+ ### Animation <a name="create"></a>
4
3
 
5
4
  Create a Animation video. The estimated frame cost is calculated based on the `fps` and `end_seconds` input.
6
5
 
@@ -1,6 +1,5 @@
1
1
 
2
- ### create <a name="create"></a>
3
- Face Swap video
2
+ ### Face Swap video <a name="create"></a>
4
3
 
5
4
  Create a Face Swap video. The estimated frame cost is calculated using 30 FPS. This amount is deducted from your account balance when a video is queued. Once the video is complete, the cost will be updated based on the actual number of frames rendered.
6
5
 
@@ -1,8 +1,7 @@
1
1
 
2
- ### create <a name="create"></a>
3
- Face Swap Photo
2
+ ### Face Swap Photo <a name="create"></a>
4
3
 
5
- Create a face swap photo. Each photo costs 5 frames. The height/width of the output image depends on your subscription. Please refer to our [pricing](/pricing) page for more details
4
+ Create a face swap photo. Each photo costs 5 credits. The height/width of the output image depends on your subscription. Please refer to our [pricing](/pricing) page for more details
6
5
 
7
6
  **API Endpoint**: `POST /v1/face-swap-photo`
8
7