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.
- magic_hour/README.md +34 -0
- magic_hour/__init__.py +1 -1
- magic_hour/client.py +8 -17
- magic_hour/environment.py +13 -1
- magic_hour/helpers/__init__.py +4 -0
- magic_hour/helpers/download.py +77 -0
- magic_hour/helpers/logger.py +8 -0
- magic_hour/resources/v1/README.md +32 -0
- magic_hour/resources/v1/ai_clothes_changer/README.md +94 -5
- magic_hour/resources/v1/ai_clothes_changer/client.py +161 -16
- magic_hour/resources/v1/ai_face_editor/README.md +195 -0
- magic_hour/resources/v1/ai_face_editor/__init__.py +4 -0
- magic_hour/resources/v1/ai_face_editor/client.py +324 -0
- magic_hour/resources/v1/ai_gif_generator/README.md +116 -0
- magic_hour/resources/v1/ai_gif_generator/__init__.py +4 -0
- magic_hour/resources/v1/ai_gif_generator/client.py +257 -0
- magic_hour/resources/v1/ai_headshot_generator/README.md +81 -3
- magic_hour/resources/v1/ai_headshot_generator/client.py +167 -18
- magic_hour/resources/v1/ai_image_editor/README.md +125 -0
- magic_hour/resources/v1/ai_image_editor/__init__.py +4 -0
- magic_hour/resources/v1/ai_image_editor/client.py +290 -0
- magic_hour/resources/v1/ai_image_generator/README.md +99 -5
- magic_hour/resources/v1/ai_image_generator/client.py +170 -24
- magic_hour/resources/v1/ai_image_upscaler/README.md +89 -3
- magic_hour/resources/v1/ai_image_upscaler/client.py +173 -20
- magic_hour/resources/v1/ai_meme_generator/README.md +129 -0
- magic_hour/resources/v1/ai_meme_generator/__init__.py +4 -0
- magic_hour/resources/v1/ai_meme_generator/client.py +253 -0
- magic_hour/resources/v1/ai_photo_editor/README.md +119 -4
- magic_hour/resources/v1/ai_photo_editor/client.py +199 -18
- magic_hour/resources/v1/ai_qr_code_generator/README.md +84 -3
- magic_hour/resources/v1/ai_qr_code_generator/client.py +140 -18
- magic_hour/resources/v1/ai_talking_photo/README.md +137 -0
- magic_hour/resources/v1/ai_talking_photo/__init__.py +4 -0
- magic_hour/resources/v1/ai_talking_photo/client.py +326 -0
- magic_hour/resources/v1/ai_voice_cloner/README.md +62 -0
- magic_hour/resources/v1/ai_voice_cloner/__init__.py +4 -0
- magic_hour/resources/v1/ai_voice_cloner/client.py +272 -0
- magic_hour/resources/v1/ai_voice_generator/README.md +112 -0
- magic_hour/resources/v1/ai_voice_generator/__init__.py +4 -0
- magic_hour/resources/v1/ai_voice_generator/client.py +241 -0
- magic_hour/resources/v1/animation/README.md +128 -6
- magic_hour/resources/v1/animation/client.py +247 -22
- magic_hour/resources/v1/audio_projects/README.md +135 -0
- magic_hour/resources/v1/audio_projects/__init__.py +12 -0
- magic_hour/resources/v1/audio_projects/client.py +310 -0
- magic_hour/resources/v1/audio_projects/client_test.py +520 -0
- magic_hour/resources/v1/auto_subtitle_generator/README.md +128 -0
- magic_hour/resources/v1/auto_subtitle_generator/__init__.py +4 -0
- magic_hour/resources/v1/auto_subtitle_generator/client.py +346 -0
- magic_hour/resources/v1/client.py +75 -1
- magic_hour/resources/v1/face_detection/README.md +157 -0
- magic_hour/resources/v1/face_detection/__init__.py +12 -0
- magic_hour/resources/v1/face_detection/client.py +380 -0
- magic_hour/resources/v1/face_swap/README.md +137 -9
- magic_hour/resources/v1/face_swap/client.py +329 -38
- magic_hour/resources/v1/face_swap_photo/README.md +118 -3
- magic_hour/resources/v1/face_swap_photo/client.py +199 -14
- magic_hour/resources/v1/files/README.md +39 -0
- magic_hour/resources/v1/files/client.py +351 -1
- magic_hour/resources/v1/files/client_test.py +414 -0
- magic_hour/resources/v1/files/upload_urls/README.md +38 -17
- magic_hour/resources/v1/files/upload_urls/client.py +38 -34
- magic_hour/resources/v1/image_background_remover/README.md +96 -5
- magic_hour/resources/v1/image_background_remover/client.py +151 -16
- magic_hour/resources/v1/image_projects/README.md +82 -10
- magic_hour/resources/v1/image_projects/__init__.py +10 -2
- magic_hour/resources/v1/image_projects/client.py +154 -16
- magic_hour/resources/v1/image_projects/client_test.py +527 -0
- magic_hour/resources/v1/image_to_video/README.md +96 -11
- magic_hour/resources/v1/image_to_video/client.py +282 -38
- magic_hour/resources/v1/lip_sync/README.md +112 -9
- magic_hour/resources/v1/lip_sync/client.py +288 -34
- magic_hour/resources/v1/photo_colorizer/README.md +107 -0
- magic_hour/resources/v1/photo_colorizer/__init__.py +4 -0
- magic_hour/resources/v1/photo_colorizer/client.py +248 -0
- magic_hour/resources/v1/text_to_video/README.md +96 -7
- magic_hour/resources/v1/text_to_video/client.py +204 -18
- magic_hour/resources/v1/video_projects/README.md +81 -9
- magic_hour/resources/v1/video_projects/__init__.py +10 -2
- magic_hour/resources/v1/video_projects/client.py +151 -14
- magic_hour/resources/v1/video_projects/client_test.py +527 -0
- magic_hour/resources/v1/video_to_video/README.md +119 -15
- magic_hour/resources/v1/video_to_video/client.py +299 -46
- magic_hour/types/models/__init__.py +92 -56
- magic_hour/types/models/v1_ai_clothes_changer_create_response.py +33 -0
- magic_hour/types/models/v1_ai_face_editor_create_response.py +33 -0
- magic_hour/types/models/v1_ai_gif_generator_create_response.py +33 -0
- magic_hour/types/models/v1_ai_headshot_generator_create_response.py +33 -0
- magic_hour/types/models/v1_ai_image_editor_create_response.py +33 -0
- magic_hour/types/models/v1_ai_image_generator_create_response.py +33 -0
- magic_hour/types/models/v1_ai_image_upscaler_create_response.py +33 -0
- magic_hour/types/models/v1_ai_meme_generator_create_response.py +33 -0
- magic_hour/types/models/v1_ai_photo_editor_create_response.py +33 -0
- magic_hour/types/models/v1_ai_qr_code_generator_create_response.py +33 -0
- magic_hour/types/models/v1_ai_talking_photo_create_response.py +35 -0
- magic_hour/types/models/v1_ai_voice_cloner_create_response.py +27 -0
- magic_hour/types/models/v1_ai_voice_generator_create_response.py +27 -0
- magic_hour/types/models/v1_animation_create_response.py +35 -0
- magic_hour/types/models/v1_audio_projects_get_response.py +72 -0
- magic_hour/types/models/v1_audio_projects_get_response_downloads_item.py +19 -0
- magic_hour/types/models/{get_v1_image_projects_id_response_error.py → v1_audio_projects_get_response_error.py} +2 -2
- magic_hour/types/models/v1_auto_subtitle_generator_create_response.py +35 -0
- magic_hour/types/models/v1_face_detection_create_response.py +25 -0
- magic_hour/types/models/v1_face_detection_get_response.py +45 -0
- magic_hour/types/models/v1_face_detection_get_response_faces_item.py +25 -0
- magic_hour/types/models/v1_face_swap_create_response.py +35 -0
- magic_hour/types/models/v1_face_swap_photo_create_response.py +33 -0
- magic_hour/types/models/v1_files_upload_urls_create_response.py +24 -0
- magic_hour/types/models/{post_v1_files_upload_urls_response_items_item.py → v1_files_upload_urls_create_response_items_item.py} +2 -2
- magic_hour/types/models/v1_image_background_remover_create_response.py +33 -0
- magic_hour/types/models/{get_v1_image_projects_id_response.py → v1_image_projects_get_response.py} +20 -18
- magic_hour/types/models/{get_v1_video_projects_id_response_downloads_item.py → v1_image_projects_get_response_downloads_item.py} +1 -1
- magic_hour/types/models/{get_v1_video_projects_id_response_error.py → v1_image_projects_get_response_error.py} +2 -2
- magic_hour/types/models/v1_image_to_video_create_response.py +35 -0
- magic_hour/types/models/v1_lip_sync_create_response.py +35 -0
- magic_hour/types/models/v1_photo_colorizer_create_response.py +33 -0
- magic_hour/types/models/v1_text_to_video_create_response.py +35 -0
- magic_hour/types/models/{get_v1_video_projects_id_response.py → v1_video_projects_get_response.py} +26 -23
- magic_hour/types/models/{get_v1_video_projects_id_response_download.py → v1_video_projects_get_response_download.py} +1 -1
- magic_hour/types/models/{get_v1_image_projects_id_response_downloads_item.py → v1_video_projects_get_response_downloads_item.py} +1 -1
- magic_hour/types/models/v1_video_projects_get_response_error.py +25 -0
- magic_hour/types/models/v1_video_to_video_create_response.py +35 -0
- magic_hour/types/params/__init__.py +422 -176
- magic_hour/types/params/v1_ai_clothes_changer_create_body.py +40 -0
- magic_hour/types/params/v1_ai_clothes_changer_create_body_assets.py +58 -0
- magic_hour/types/params/v1_ai_clothes_changer_generate_body_assets.py +33 -0
- magic_hour/types/params/v1_ai_face_editor_create_body.py +52 -0
- magic_hour/types/params/v1_ai_face_editor_create_body_assets.py +33 -0
- magic_hour/types/params/v1_ai_face_editor_create_body_style.py +137 -0
- magic_hour/types/params/v1_ai_face_editor_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_ai_gif_generator_create_body.py +47 -0
- magic_hour/types/params/{post_v1_ai_image_generator_body_style.py → v1_ai_gif_generator_create_body_style.py} +5 -5
- magic_hour/types/params/v1_ai_headshot_generator_create_body.py +49 -0
- magic_hour/types/params/v1_ai_headshot_generator_create_body_assets.py +33 -0
- magic_hour/types/params/v1_ai_headshot_generator_create_body_style.py +27 -0
- magic_hour/types/params/v1_ai_headshot_generator_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_ai_image_editor_create_body.py +49 -0
- magic_hour/types/params/v1_ai_image_editor_create_body_assets.py +47 -0
- magic_hour/types/params/v1_ai_image_editor_create_body_style.py +41 -0
- magic_hour/types/params/v1_ai_image_editor_generate_body_assets.py +28 -0
- magic_hour/types/params/{post_v1_ai_image_generator_body.py → v1_ai_image_generator_create_body.py} +17 -11
- magic_hour/types/params/v1_ai_image_generator_create_body_style.py +127 -0
- magic_hour/types/params/v1_ai_image_upscaler_create_body.py +59 -0
- magic_hour/types/params/v1_ai_image_upscaler_create_body_assets.py +33 -0
- magic_hour/types/params/{post_v1_ai_image_upscaler_body_style.py → v1_ai_image_upscaler_create_body_style.py} +4 -4
- magic_hour/types/params/v1_ai_image_upscaler_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_ai_meme_generator_create_body.py +37 -0
- magic_hour/types/params/v1_ai_meme_generator_create_body_style.py +73 -0
- magic_hour/types/params/{post_v1_ai_photo_editor_body.py → v1_ai_photo_editor_create_body.py} +15 -15
- magic_hour/types/params/v1_ai_photo_editor_create_body_assets.py +33 -0
- magic_hour/types/params/{post_v1_ai_photo_editor_body_style.py → v1_ai_photo_editor_create_body_style.py} +20 -4
- magic_hour/types/params/v1_ai_photo_editor_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_ai_qr_code_generator_create_body.py +45 -0
- magic_hour/types/params/{post_v1_ai_qr_code_generator_body_style.py → v1_ai_qr_code_generator_create_body_style.py} +4 -4
- magic_hour/types/params/v1_ai_talking_photo_create_body.py +68 -0
- magic_hour/types/params/v1_ai_talking_photo_create_body_assets.py +46 -0
- magic_hour/types/params/v1_ai_talking_photo_create_body_style.py +44 -0
- magic_hour/types/params/v1_ai_talking_photo_generate_body_assets.py +26 -0
- magic_hour/types/params/v1_ai_voice_cloner_create_body.py +49 -0
- magic_hour/types/params/v1_ai_voice_cloner_create_body_assets.py +33 -0
- magic_hour/types/params/v1_ai_voice_cloner_create_body_style.py +28 -0
- magic_hour/types/params/v1_ai_voice_cloner_generate_body_assets.py +28 -0
- magic_hour/types/params/v1_ai_voice_generator_create_body.py +40 -0
- magic_hour/types/params/v1_ai_voice_generator_create_body_style.py +440 -0
- magic_hour/types/params/{post_v1_animation_body.py → v1_animation_create_body.py} +16 -16
- magic_hour/types/params/{post_v1_animation_body_assets.py → v1_animation_create_body_assets.py} +15 -5
- magic_hour/types/params/{post_v1_animation_body_style.py → v1_animation_create_body_style.py} +13 -10
- magic_hour/types/params/v1_animation_generate_body_assets.py +39 -0
- magic_hour/types/params/v1_auto_subtitle_generator_create_body.py +78 -0
- magic_hour/types/params/v1_auto_subtitle_generator_create_body_assets.py +33 -0
- magic_hour/types/params/v1_auto_subtitle_generator_create_body_style.py +56 -0
- magic_hour/types/params/v1_auto_subtitle_generator_create_body_style_custom_config.py +86 -0
- magic_hour/types/params/v1_auto_subtitle_generator_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_face_detection_create_body.py +44 -0
- magic_hour/types/params/v1_face_detection_create_body_assets.py +33 -0
- magic_hour/types/params/v1_face_detection_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_face_swap_create_body.py +92 -0
- magic_hour/types/params/v1_face_swap_create_body_assets.py +91 -0
- magic_hour/types/params/v1_face_swap_create_body_assets_face_mappings_item.py +44 -0
- magic_hour/types/params/v1_face_swap_create_body_style.py +33 -0
- magic_hour/types/params/v1_face_swap_generate_body_assets.py +56 -0
- magic_hour/types/params/v1_face_swap_generate_body_assets_face_mappings_item.py +25 -0
- magic_hour/types/params/v1_face_swap_photo_create_body.py +40 -0
- magic_hour/types/params/v1_face_swap_photo_create_body_assets.py +76 -0
- magic_hour/types/params/v1_face_swap_photo_create_body_assets_face_mappings_item.py +44 -0
- magic_hour/types/params/v1_face_swap_photo_generate_body_assets.py +47 -0
- magic_hour/types/params/v1_face_swap_photo_generate_body_assets_face_mappings_item.py +25 -0
- magic_hour/types/params/v1_files_upload_urls_create_body.py +36 -0
- magic_hour/types/params/v1_files_upload_urls_create_body_items_item.py +38 -0
- magic_hour/types/params/v1_image_background_remover_create_body.py +40 -0
- magic_hour/types/params/v1_image_background_remover_create_body_assets.py +49 -0
- magic_hour/types/params/v1_image_background_remover_generate_body_assets.py +27 -0
- magic_hour/types/params/v1_image_to_video_create_body.py +101 -0
- magic_hour/types/params/v1_image_to_video_create_body_assets.py +33 -0
- magic_hour/types/params/v1_image_to_video_create_body_style.py +53 -0
- magic_hour/types/params/v1_image_to_video_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_lip_sync_create_body.py +100 -0
- magic_hour/types/params/{post_v1_lip_sync_body_assets.py → v1_lip_sync_create_body_assets.py} +15 -5
- magic_hour/types/params/v1_lip_sync_create_body_style.py +37 -0
- magic_hour/types/params/v1_lip_sync_generate_body_assets.py +36 -0
- magic_hour/types/params/v1_photo_colorizer_create_body.py +40 -0
- magic_hour/types/params/v1_photo_colorizer_create_body_assets.py +33 -0
- magic_hour/types/params/v1_photo_colorizer_generate_body_assets.py +17 -0
- magic_hour/types/params/v1_text_to_video_create_body.py +78 -0
- magic_hour/types/params/v1_text_to_video_create_body_style.py +43 -0
- magic_hour/types/params/v1_video_to_video_create_body.py +101 -0
- magic_hour/types/params/{post_v1_video_to_video_body_assets.py → v1_video_to_video_create_body_assets.py} +9 -4
- magic_hour/types/params/{post_v1_video_to_video_body_style.py → v1_video_to_video_create_body_style.py} +68 -26
- magic_hour/types/params/v1_video_to_video_generate_body_assets.py +27 -0
- magic_hour-0.44.0.dist-info/METADATA +328 -0
- magic_hour-0.44.0.dist-info/RECORD +231 -0
- magic_hour/core/__init__.py +0 -52
- magic_hour/core/api_error.py +0 -56
- magic_hour/core/auth.py +0 -314
- magic_hour/core/base_client.py +0 -618
- magic_hour/core/binary_response.py +0 -23
- magic_hour/core/query.py +0 -106
- magic_hour/core/request.py +0 -156
- magic_hour/core/response.py +0 -293
- magic_hour/core/type_utils.py +0 -28
- magic_hour/core/utils.py +0 -55
- magic_hour/types/models/post_v1_ai_clothes_changer_response.py +0 -25
- magic_hour/types/models/post_v1_ai_headshot_generator_response.py +0 -25
- magic_hour/types/models/post_v1_ai_image_generator_response.py +0 -25
- magic_hour/types/models/post_v1_ai_image_upscaler_response.py +0 -25
- magic_hour/types/models/post_v1_ai_photo_editor_response.py +0 -25
- magic_hour/types/models/post_v1_ai_qr_code_generator_response.py +0 -25
- magic_hour/types/models/post_v1_animation_response.py +0 -25
- magic_hour/types/models/post_v1_face_swap_photo_response.py +0 -25
- magic_hour/types/models/post_v1_face_swap_response.py +0 -25
- magic_hour/types/models/post_v1_files_upload_urls_response.py +0 -21
- magic_hour/types/models/post_v1_image_background_remover_response.py +0 -25
- magic_hour/types/models/post_v1_image_to_video_response.py +0 -25
- magic_hour/types/models/post_v1_lip_sync_response.py +0 -25
- magic_hour/types/models/post_v1_text_to_video_response.py +0 -25
- magic_hour/types/models/post_v1_video_to_video_response.py +0 -25
- magic_hour/types/params/post_v1_ai_clothes_changer_body.py +0 -40
- magic_hour/types/params/post_v1_ai_clothes_changer_body_assets.py +0 -45
- magic_hour/types/params/post_v1_ai_headshot_generator_body.py +0 -40
- magic_hour/types/params/post_v1_ai_headshot_generator_body_assets.py +0 -28
- magic_hour/types/params/post_v1_ai_image_upscaler_body.py +0 -57
- magic_hour/types/params/post_v1_ai_image_upscaler_body_assets.py +0 -28
- magic_hour/types/params/post_v1_ai_photo_editor_body_assets.py +0 -28
- magic_hour/types/params/post_v1_ai_qr_code_generator_body.py +0 -45
- magic_hour/types/params/post_v1_face_swap_body.py +0 -72
- magic_hour/types/params/post_v1_face_swap_body_assets.py +0 -52
- magic_hour/types/params/post_v1_face_swap_photo_body.py +0 -40
- magic_hour/types/params/post_v1_face_swap_photo_body_assets.py +0 -36
- magic_hour/types/params/post_v1_files_upload_urls_body.py +0 -31
- magic_hour/types/params/post_v1_files_upload_urls_body_items_item.py +0 -38
- magic_hour/types/params/post_v1_image_background_remover_body.py +0 -40
- magic_hour/types/params/post_v1_image_background_remover_body_assets.py +0 -28
- magic_hour/types/params/post_v1_image_to_video_body.py +0 -73
- magic_hour/types/params/post_v1_image_to_video_body_assets.py +0 -28
- magic_hour/types/params/post_v1_image_to_video_body_style.py +0 -37
- magic_hour/types/params/post_v1_lip_sync_body.py +0 -80
- magic_hour/types/params/post_v1_text_to_video_body.py +0 -57
- magic_hour/types/params/post_v1_text_to_video_body_style.py +0 -28
- magic_hour/types/params/post_v1_video_to_video_body.py +0 -93
- magic_hour-0.9.5.dist-info/METADATA +0 -133
- magic_hour-0.9.5.dist-info/RECORD +0 -132
- {magic_hour-0.9.5.dist-info → magic_hour-0.44.0.dist-info}/LICENSE +0 -0
- {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
|
+
)
|