magic_hour 0.11.0__py3-none-any.whl → 0.12.1__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.
Potentially problematic release.
This version of magic_hour might be problematic. Click here for more details.
- magic_hour/environment.py +1 -1
- magic_hour/resources/v1/ai_talking_photo/README.md +43 -0
- magic_hour/resources/v1/ai_talking_photo/__init__.py +4 -0
- magic_hour/resources/v1/ai_talking_photo/client.py +147 -0
- magic_hour/resources/v1/client.py +6 -0
- magic_hour/types/models/__init__.py +2 -0
- magic_hour/types/models/v1_ai_talking_photo_create_response.py +25 -0
- magic_hour/types/models/v1_video_projects_get_response.py +2 -2
- magic_hour/types/params/__init__.py +12 -0
- magic_hour/types/params/v1_ai_talking_photo_create_body.py +56 -0
- magic_hour/types/params/v1_ai_talking_photo_create_body_assets.py +36 -0
- magic_hour/types/params/v1_video_to_video_create_body_style.py +10 -0
- {magic_hour-0.11.0.dist-info → magic_hour-0.12.1.dist-info}/METADATA +5 -1
- {magic_hour-0.11.0.dist-info → magic_hour-0.12.1.dist-info}/RECORD +16 -10
- {magic_hour-0.11.0.dist-info → magic_hour-0.12.1.dist-info}/LICENSE +0 -0
- {magic_hour-0.11.0.dist-info → magic_hour-0.12.1.dist-info}/WHEEL +0 -0
magic_hour/environment.py
CHANGED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
|
|
2
|
+
### create <a name="create"></a>
|
|
3
|
+
AI Talking Photo
|
|
4
|
+
|
|
5
|
+
Create a talking photo from an image and audio or text input.
|
|
6
|
+
|
|
7
|
+
**API Endpoint**: `POST /v1/ai-talking-photo`
|
|
8
|
+
|
|
9
|
+
#### Synchronous Client
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
from magic_hour import Client
|
|
13
|
+
from os import getenv
|
|
14
|
+
|
|
15
|
+
client = Client(token=getenv("API_TOKEN"))
|
|
16
|
+
res = client.v1.ai_talking_photo.create(
|
|
17
|
+
assets={
|
|
18
|
+
"audio_file_path": "api-assets/id/1234.mp3",
|
|
19
|
+
"image_file_path": "api-assets/id/1234.png",
|
|
20
|
+
},
|
|
21
|
+
end_seconds=15.0,
|
|
22
|
+
start_seconds=0.0,
|
|
23
|
+
name="Talking Photo image",
|
|
24
|
+
)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
#### Asynchronous Client
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
from magic_hour import AsyncClient
|
|
31
|
+
from os import getenv
|
|
32
|
+
|
|
33
|
+
client = AsyncClient(token=getenv("API_TOKEN"))
|
|
34
|
+
res = await client.v1.ai_talking_photo.create(
|
|
35
|
+
assets={
|
|
36
|
+
"audio_file_path": "api-assets/id/1234.mp3",
|
|
37
|
+
"image_file_path": "api-assets/id/1234.png",
|
|
38
|
+
},
|
|
39
|
+
end_seconds=15.0,
|
|
40
|
+
start_seconds=0.0,
|
|
41
|
+
name="Talking Photo image",
|
|
42
|
+
)
|
|
43
|
+
```
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import typing
|
|
2
|
+
|
|
3
|
+
from magic_hour.core import (
|
|
4
|
+
AsyncBaseClient,
|
|
5
|
+
RequestOptions,
|
|
6
|
+
SyncBaseClient,
|
|
7
|
+
default_request_options,
|
|
8
|
+
to_encodable,
|
|
9
|
+
type_utils,
|
|
10
|
+
)
|
|
11
|
+
from magic_hour.types import models, params
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class AiTalkingPhotoClient:
|
|
15
|
+
def __init__(self, *, base_client: SyncBaseClient):
|
|
16
|
+
self._base_client = base_client
|
|
17
|
+
|
|
18
|
+
def create(
|
|
19
|
+
self,
|
|
20
|
+
*,
|
|
21
|
+
assets: params.V1AiTalkingPhotoCreateBodyAssets,
|
|
22
|
+
end_seconds: float,
|
|
23
|
+
start_seconds: float,
|
|
24
|
+
name: typing.Union[
|
|
25
|
+
typing.Optional[str], type_utils.NotGiven
|
|
26
|
+
] = type_utils.NOT_GIVEN,
|
|
27
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
28
|
+
) -> models.V1AiTalkingPhotoCreateResponse:
|
|
29
|
+
"""
|
|
30
|
+
AI Talking Photo
|
|
31
|
+
|
|
32
|
+
Create a talking photo from an image and audio or text input.
|
|
33
|
+
|
|
34
|
+
POST /v1/ai-talking-photo
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
name: The name of image
|
|
38
|
+
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
|
|
41
|
+
request_options: Additional options to customize the HTTP request
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
Success
|
|
45
|
+
|
|
46
|
+
Raises:
|
|
47
|
+
ApiError: A custom exception class that provides additional context
|
|
48
|
+
for API errors, including the HTTP status code and response body.
|
|
49
|
+
|
|
50
|
+
Examples:
|
|
51
|
+
```py
|
|
52
|
+
client.v1.ai_talking_photo.create(
|
|
53
|
+
assets={
|
|
54
|
+
"audio_file_path": "api-assets/id/1234.mp3",
|
|
55
|
+
"image_file_path": "api-assets/id/1234.png",
|
|
56
|
+
},
|
|
57
|
+
end_seconds=15.0,
|
|
58
|
+
start_seconds=0.0,
|
|
59
|
+
name="Talking Photo image",
|
|
60
|
+
)
|
|
61
|
+
```
|
|
62
|
+
"""
|
|
63
|
+
_json = to_encodable(
|
|
64
|
+
item={
|
|
65
|
+
"name": name,
|
|
66
|
+
"assets": assets,
|
|
67
|
+
"end_seconds": end_seconds,
|
|
68
|
+
"start_seconds": start_seconds,
|
|
69
|
+
},
|
|
70
|
+
dump_with=params._SerializerV1AiTalkingPhotoCreateBody,
|
|
71
|
+
)
|
|
72
|
+
return self._base_client.request(
|
|
73
|
+
method="POST",
|
|
74
|
+
path="/v1/ai-talking-photo",
|
|
75
|
+
auth_names=["bearerAuth"],
|
|
76
|
+
json=_json,
|
|
77
|
+
cast_to=models.V1AiTalkingPhotoCreateResponse,
|
|
78
|
+
request_options=request_options or default_request_options(),
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class AsyncAiTalkingPhotoClient:
|
|
83
|
+
def __init__(self, *, base_client: AsyncBaseClient):
|
|
84
|
+
self._base_client = base_client
|
|
85
|
+
|
|
86
|
+
async def create(
|
|
87
|
+
self,
|
|
88
|
+
*,
|
|
89
|
+
assets: params.V1AiTalkingPhotoCreateBodyAssets,
|
|
90
|
+
end_seconds: float,
|
|
91
|
+
start_seconds: float,
|
|
92
|
+
name: typing.Union[
|
|
93
|
+
typing.Optional[str], type_utils.NotGiven
|
|
94
|
+
] = type_utils.NOT_GIVEN,
|
|
95
|
+
request_options: typing.Optional[RequestOptions] = None,
|
|
96
|
+
) -> models.V1AiTalkingPhotoCreateResponse:
|
|
97
|
+
"""
|
|
98
|
+
AI Talking Photo
|
|
99
|
+
|
|
100
|
+
Create a talking photo from an image and audio or text input.
|
|
101
|
+
|
|
102
|
+
POST /v1/ai-talking-photo
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
name: The name of image
|
|
106
|
+
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
|
|
109
|
+
request_options: Additional options to customize the HTTP request
|
|
110
|
+
|
|
111
|
+
Returns:
|
|
112
|
+
Success
|
|
113
|
+
|
|
114
|
+
Raises:
|
|
115
|
+
ApiError: A custom exception class that provides additional context
|
|
116
|
+
for API errors, including the HTTP status code and response body.
|
|
117
|
+
|
|
118
|
+
Examples:
|
|
119
|
+
```py
|
|
120
|
+
await client.v1.ai_talking_photo.create(
|
|
121
|
+
assets={
|
|
122
|
+
"audio_file_path": "api-assets/id/1234.mp3",
|
|
123
|
+
"image_file_path": "api-assets/id/1234.png",
|
|
124
|
+
},
|
|
125
|
+
end_seconds=15.0,
|
|
126
|
+
start_seconds=0.0,
|
|
127
|
+
name="Talking Photo image",
|
|
128
|
+
)
|
|
129
|
+
```
|
|
130
|
+
"""
|
|
131
|
+
_json = to_encodable(
|
|
132
|
+
item={
|
|
133
|
+
"name": name,
|
|
134
|
+
"assets": assets,
|
|
135
|
+
"end_seconds": end_seconds,
|
|
136
|
+
"start_seconds": start_seconds,
|
|
137
|
+
},
|
|
138
|
+
dump_with=params._SerializerV1AiTalkingPhotoCreateBody,
|
|
139
|
+
)
|
|
140
|
+
return await self._base_client.request(
|
|
141
|
+
method="POST",
|
|
142
|
+
path="/v1/ai-talking-photo",
|
|
143
|
+
auth_names=["bearerAuth"],
|
|
144
|
+
json=_json,
|
|
145
|
+
cast_to=models.V1AiTalkingPhotoCreateResponse,
|
|
146
|
+
request_options=request_options or default_request_options(),
|
|
147
|
+
)
|
|
@@ -23,6 +23,10 @@ from magic_hour.resources.v1.ai_qr_code_generator import (
|
|
|
23
23
|
AiQrCodeGeneratorClient,
|
|
24
24
|
AsyncAiQrCodeGeneratorClient,
|
|
25
25
|
)
|
|
26
|
+
from magic_hour.resources.v1.ai_talking_photo import (
|
|
27
|
+
AiTalkingPhotoClient,
|
|
28
|
+
AsyncAiTalkingPhotoClient,
|
|
29
|
+
)
|
|
26
30
|
from magic_hour.resources.v1.animation import AnimationClient, AsyncAnimationClient
|
|
27
31
|
from magic_hour.resources.v1.face_swap import AsyncFaceSwapClient, FaceSwapClient
|
|
28
32
|
from magic_hour.resources.v1.face_swap_photo import (
|
|
@@ -72,6 +76,7 @@ class V1Client:
|
|
|
72
76
|
self.ai_qr_code_generator = AiQrCodeGeneratorClient(
|
|
73
77
|
base_client=self._base_client
|
|
74
78
|
)
|
|
79
|
+
self.ai_talking_photo = AiTalkingPhotoClient(base_client=self._base_client)
|
|
75
80
|
self.animation = AnimationClient(base_client=self._base_client)
|
|
76
81
|
self.face_swap = FaceSwapClient(base_client=self._base_client)
|
|
77
82
|
self.face_swap_photo = FaceSwapPhotoClient(base_client=self._base_client)
|
|
@@ -106,6 +111,7 @@ class AsyncV1Client:
|
|
|
106
111
|
self.ai_qr_code_generator = AsyncAiQrCodeGeneratorClient(
|
|
107
112
|
base_client=self._base_client
|
|
108
113
|
)
|
|
114
|
+
self.ai_talking_photo = AsyncAiTalkingPhotoClient(base_client=self._base_client)
|
|
109
115
|
self.animation = AsyncAnimationClient(base_client=self._base_client)
|
|
110
116
|
self.face_swap = AsyncFaceSwapClient(base_client=self._base_client)
|
|
111
117
|
self.face_swap_photo = AsyncFaceSwapPhotoClient(base_client=self._base_client)
|
|
@@ -6,6 +6,7 @@ from .v1_ai_image_generator_create_response import V1AiImageGeneratorCreateRespo
|
|
|
6
6
|
from .v1_ai_image_upscaler_create_response import V1AiImageUpscalerCreateResponse
|
|
7
7
|
from .v1_ai_photo_editor_create_response import V1AiPhotoEditorCreateResponse
|
|
8
8
|
from .v1_ai_qr_code_generator_create_response import V1AiQrCodeGeneratorCreateResponse
|
|
9
|
+
from .v1_ai_talking_photo_create_response import V1AiTalkingPhotoCreateResponse
|
|
9
10
|
from .v1_animation_create_response import V1AnimationCreateResponse
|
|
10
11
|
from .v1_face_swap_create_response import V1FaceSwapCreateResponse
|
|
11
12
|
from .v1_face_swap_photo_create_response import V1FaceSwapPhotoCreateResponse
|
|
@@ -40,6 +41,7 @@ __all__ = [
|
|
|
40
41
|
"V1AiImageUpscalerCreateResponse",
|
|
41
42
|
"V1AiPhotoEditorCreateResponse",
|
|
42
43
|
"V1AiQrCodeGeneratorCreateResponse",
|
|
44
|
+
"V1AiTalkingPhotoCreateResponse",
|
|
43
45
|
"V1AnimationCreateResponse",
|
|
44
46
|
"V1FaceSwapCreateResponse",
|
|
45
47
|
"V1FaceSwapPhotoCreateResponse",
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import pydantic
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class V1AiTalkingPhotoCreateResponse(pydantic.BaseModel):
|
|
5
|
+
"""
|
|
6
|
+
Success
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
model_config = pydantic.ConfigDict(
|
|
10
|
+
arbitrary_types_allowed=True,
|
|
11
|
+
populate_by_name=True,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
estimated_frame_cost: int = pydantic.Field(
|
|
15
|
+
alias="estimated_frame_cost",
|
|
16
|
+
)
|
|
17
|
+
"""
|
|
18
|
+
Estimated cost of the video in terms of number of frames needed to render the video. Frames will be adjusted when the video completes
|
|
19
|
+
"""
|
|
20
|
+
id: str = pydantic.Field(
|
|
21
|
+
alias="id",
|
|
22
|
+
)
|
|
23
|
+
"""
|
|
24
|
+
Unique ID of the video. This value can be used in the [get video project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch additional details such as status
|
|
25
|
+
"""
|
|
@@ -59,7 +59,7 @@ class V1VideoProjectsGetResponse(pydantic.BaseModel):
|
|
|
59
59
|
alias="height",
|
|
60
60
|
)
|
|
61
61
|
"""
|
|
62
|
-
The height of the final output video.
|
|
62
|
+
The height of the final output video. A value of -1 indicates the height can be ignored.
|
|
63
63
|
"""
|
|
64
64
|
id: str = pydantic.Field(
|
|
65
65
|
alias="id",
|
|
@@ -109,5 +109,5 @@ class V1VideoProjectsGetResponse(pydantic.BaseModel):
|
|
|
109
109
|
alias="width",
|
|
110
110
|
)
|
|
111
111
|
"""
|
|
112
|
-
The width of the final output video.
|
|
112
|
+
The width of the final output video. A value of -1 indicates the width can be ignored.
|
|
113
113
|
"""
|
|
@@ -58,6 +58,14 @@ from .v1_ai_qr_code_generator_create_body_style import (
|
|
|
58
58
|
V1AiQrCodeGeneratorCreateBodyStyle,
|
|
59
59
|
_SerializerV1AiQrCodeGeneratorCreateBodyStyle,
|
|
60
60
|
)
|
|
61
|
+
from .v1_ai_talking_photo_create_body import (
|
|
62
|
+
V1AiTalkingPhotoCreateBody,
|
|
63
|
+
_SerializerV1AiTalkingPhotoCreateBody,
|
|
64
|
+
)
|
|
65
|
+
from .v1_ai_talking_photo_create_body_assets import (
|
|
66
|
+
V1AiTalkingPhotoCreateBodyAssets,
|
|
67
|
+
_SerializerV1AiTalkingPhotoCreateBodyAssets,
|
|
68
|
+
)
|
|
61
69
|
from .v1_animation_create_body import (
|
|
62
70
|
V1AnimationCreateBody,
|
|
63
71
|
_SerializerV1AnimationCreateBody,
|
|
@@ -157,6 +165,8 @@ __all__ = [
|
|
|
157
165
|
"V1AiPhotoEditorCreateBodyStyle",
|
|
158
166
|
"V1AiQrCodeGeneratorCreateBody",
|
|
159
167
|
"V1AiQrCodeGeneratorCreateBodyStyle",
|
|
168
|
+
"V1AiTalkingPhotoCreateBody",
|
|
169
|
+
"V1AiTalkingPhotoCreateBodyAssets",
|
|
160
170
|
"V1AnimationCreateBody",
|
|
161
171
|
"V1AnimationCreateBodyAssets",
|
|
162
172
|
"V1AnimationCreateBodyStyle",
|
|
@@ -193,6 +203,8 @@ __all__ = [
|
|
|
193
203
|
"_SerializerV1AiPhotoEditorCreateBodyStyle",
|
|
194
204
|
"_SerializerV1AiQrCodeGeneratorCreateBody",
|
|
195
205
|
"_SerializerV1AiQrCodeGeneratorCreateBodyStyle",
|
|
206
|
+
"_SerializerV1AiTalkingPhotoCreateBody",
|
|
207
|
+
"_SerializerV1AiTalkingPhotoCreateBodyAssets",
|
|
196
208
|
"_SerializerV1AnimationCreateBody",
|
|
197
209
|
"_SerializerV1AnimationCreateBodyAssets",
|
|
198
210
|
"_SerializerV1AnimationCreateBodyStyle",
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import pydantic
|
|
2
|
+
import typing
|
|
3
|
+
import typing_extensions
|
|
4
|
+
|
|
5
|
+
from .v1_ai_talking_photo_create_body_assets import (
|
|
6
|
+
V1AiTalkingPhotoCreateBodyAssets,
|
|
7
|
+
_SerializerV1AiTalkingPhotoCreateBodyAssets,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class V1AiTalkingPhotoCreateBody(typing_extensions.TypedDict):
|
|
12
|
+
"""
|
|
13
|
+
Provide the assets for creating a talking photo
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
assets: typing_extensions.Required[V1AiTalkingPhotoCreateBodyAssets]
|
|
17
|
+
"""
|
|
18
|
+
Provide the assets for creating a talking photo
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
end_seconds: typing_extensions.Required[float]
|
|
22
|
+
"""
|
|
23
|
+
The end time of the input video in seconds
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
name: typing_extensions.NotRequired[str]
|
|
27
|
+
"""
|
|
28
|
+
The name of image
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
start_seconds: typing_extensions.Required[float]
|
|
32
|
+
"""
|
|
33
|
+
The start time of the input video in seconds
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class _SerializerV1AiTalkingPhotoCreateBody(pydantic.BaseModel):
|
|
38
|
+
"""
|
|
39
|
+
Serializer for V1AiTalkingPhotoCreateBody handling case conversions
|
|
40
|
+
and file omissions as dictated by the API
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
model_config = pydantic.ConfigDict(
|
|
44
|
+
populate_by_name=True,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
assets: _SerializerV1AiTalkingPhotoCreateBodyAssets = pydantic.Field(
|
|
48
|
+
alias="assets",
|
|
49
|
+
)
|
|
50
|
+
end_seconds: float = pydantic.Field(
|
|
51
|
+
alias="end_seconds",
|
|
52
|
+
)
|
|
53
|
+
name: typing.Optional[str] = pydantic.Field(alias="name", default=None)
|
|
54
|
+
start_seconds: float = pydantic.Field(
|
|
55
|
+
alias="start_seconds",
|
|
56
|
+
)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import pydantic
|
|
2
|
+
import typing_extensions
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class V1AiTalkingPhotoCreateBodyAssets(typing_extensions.TypedDict):
|
|
6
|
+
"""
|
|
7
|
+
Provide the assets for creating a talking photo
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
audio_file_path: typing_extensions.Required[str]
|
|
11
|
+
"""
|
|
12
|
+
The audio file to sync with the image. This value can be either the `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls), or the url of the file.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
image_file_path: typing_extensions.Required[str]
|
|
16
|
+
"""
|
|
17
|
+
The source image to animate. This value can be either the `file_path` field from the response of the [upload urls API](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls), or the url of the file.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class _SerializerV1AiTalkingPhotoCreateBodyAssets(pydantic.BaseModel):
|
|
22
|
+
"""
|
|
23
|
+
Serializer for V1AiTalkingPhotoCreateBodyAssets 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
|
+
audio_file_path: str = pydantic.Field(
|
|
32
|
+
alias="audio_file_path",
|
|
33
|
+
)
|
|
34
|
+
image_file_path: str = pydantic.Field(
|
|
35
|
+
alias="image_file_path",
|
|
36
|
+
)
|
|
@@ -20,6 +20,7 @@ class V1VideoToVideoCreateBodyStyle(typing_extensions.TypedDict):
|
|
|
20
20
|
"Black Spiderman",
|
|
21
21
|
"Boba Fett",
|
|
22
22
|
"Celestial Skin",
|
|
23
|
+
"Chinese Swordsmen",
|
|
23
24
|
"Clay",
|
|
24
25
|
"Comic",
|
|
25
26
|
"Cyberpunk",
|
|
@@ -41,14 +42,17 @@ class V1VideoToVideoCreateBodyStyle(typing_extensions.TypedDict):
|
|
|
41
42
|
"Lego",
|
|
42
43
|
"Link",
|
|
43
44
|
"Marble",
|
|
45
|
+
"Mario",
|
|
44
46
|
"Master Chief",
|
|
45
47
|
"Mech",
|
|
46
48
|
"Minecraft",
|
|
49
|
+
"Mystique",
|
|
47
50
|
"Naruto",
|
|
48
51
|
"Neon Dream",
|
|
49
52
|
"Oil Painting",
|
|
50
53
|
"On Fire",
|
|
51
54
|
"Origami",
|
|
55
|
+
"Pixar",
|
|
52
56
|
"Pixel",
|
|
53
57
|
"Power Armor",
|
|
54
58
|
"Power Ranger",
|
|
@@ -63,6 +67,7 @@ class V1VideoToVideoCreateBodyStyle(typing_extensions.TypedDict):
|
|
|
63
67
|
"Studio Ghibli",
|
|
64
68
|
"Sub-Zero",
|
|
65
69
|
"The Void",
|
|
70
|
+
"Tomb Raider",
|
|
66
71
|
"Underwater",
|
|
67
72
|
"Van Gogh",
|
|
68
73
|
"Viking",
|
|
@@ -129,6 +134,7 @@ class _SerializerV1VideoToVideoCreateBodyStyle(pydantic.BaseModel):
|
|
|
129
134
|
"Black Spiderman",
|
|
130
135
|
"Boba Fett",
|
|
131
136
|
"Celestial Skin",
|
|
137
|
+
"Chinese Swordsmen",
|
|
132
138
|
"Clay",
|
|
133
139
|
"Comic",
|
|
134
140
|
"Cyberpunk",
|
|
@@ -150,14 +156,17 @@ class _SerializerV1VideoToVideoCreateBodyStyle(pydantic.BaseModel):
|
|
|
150
156
|
"Lego",
|
|
151
157
|
"Link",
|
|
152
158
|
"Marble",
|
|
159
|
+
"Mario",
|
|
153
160
|
"Master Chief",
|
|
154
161
|
"Mech",
|
|
155
162
|
"Minecraft",
|
|
163
|
+
"Mystique",
|
|
156
164
|
"Naruto",
|
|
157
165
|
"Neon Dream",
|
|
158
166
|
"Oil Painting",
|
|
159
167
|
"On Fire",
|
|
160
168
|
"Origami",
|
|
169
|
+
"Pixar",
|
|
161
170
|
"Pixel",
|
|
162
171
|
"Power Armor",
|
|
163
172
|
"Power Ranger",
|
|
@@ -172,6 +181,7 @@ class _SerializerV1VideoToVideoCreateBodyStyle(pydantic.BaseModel):
|
|
|
172
181
|
"Studio Ghibli",
|
|
173
182
|
"Sub-Zero",
|
|
174
183
|
"The Void",
|
|
184
|
+
"Tomb Raider",
|
|
175
185
|
"Underwater",
|
|
176
186
|
"Van Gogh",
|
|
177
187
|
"Viking",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: magic_hour
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12.1
|
|
4
4
|
Summary: Python SDK for Magic Hour API
|
|
5
5
|
Requires-Python: >=3.8,<4.0
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -83,6 +83,10 @@ client = AsyncClient(token="my api key")
|
|
|
83
83
|
|
|
84
84
|
* [create](magic_hour/resources/v1/ai_qr_code_generator/README.md#create) - AI QR Code
|
|
85
85
|
|
|
86
|
+
### [v1.ai_talking_photo](magic_hour/resources/v1/ai_talking_photo/README.md)
|
|
87
|
+
|
|
88
|
+
* [create](magic_hour/resources/v1/ai_talking_photo/README.md#create) - AI Talking Photo
|
|
89
|
+
|
|
86
90
|
### [v1.animation](magic_hour/resources/v1/animation/README.md)
|
|
87
91
|
|
|
88
92
|
* [create](magic_hour/resources/v1/animation/README.md#create) - Animation
|
|
@@ -10,7 +10,7 @@ magic_hour/core/request.py,sha256=lyHrh2VWY238D7JPbgZJlodTqBlHSmQn4fBJiBfE1Es,50
|
|
|
10
10
|
magic_hour/core/response.py,sha256=Sl7nPL2axmz7em_6d9TkFSnQQKUpalWaVWbPPWoXJgM,10180
|
|
11
11
|
magic_hour/core/type_utils.py,sha256=4bU9WXnMXJ6YTtuqOMiB8t6Xw0RlfVWJ-IDBONlqEtQ,461
|
|
12
12
|
magic_hour/core/utils.py,sha256=34SiC1vw2A0TkYHONgMA_d09soIIYiiBWRXCZGdwGIk,1669
|
|
13
|
-
magic_hour/environment.py,sha256=
|
|
13
|
+
magic_hour/environment.py,sha256=tqH9ZaxIF0YLgdIaWnfq-blet6WZjApoo6VRUzbsu2U,213
|
|
14
14
|
magic_hour/resources/v1/__init__.py,sha256=Aj0sjVcoijjQyieNBxv2_uewPYC2vO2UG-ehoBgCz5E,86
|
|
15
15
|
magic_hour/resources/v1/ai_clothes_changer/README.md,sha256=KQTvbttct5GcdOJW3NG5gCsWF6G2qlwIoBjBd92TjUs,977
|
|
16
16
|
magic_hour/resources/v1/ai_clothes_changer/__init__.py,sha256=6W_Y2HxG2sDOBiJyzngK3Q2S3xfQgpK-j8xFRmBAhbQ,142
|
|
@@ -30,10 +30,13 @@ magic_hour/resources/v1/ai_photo_editor/client.py,sha256=sgoGs68vduah23tIdmRHi5X
|
|
|
30
30
|
magic_hour/resources/v1/ai_qr_code_generator/README.md,sha256=w6IE0mm_D-PnW-bDsIu9k8oPePekZ2TuW3gOFhi95_w,734
|
|
31
31
|
magic_hour/resources/v1/ai_qr_code_generator/__init__.py,sha256=HnSTg7tB8M5LibZoCDRdE5Q71efmiqZIkNEve5SO1Mg,146
|
|
32
32
|
magic_hour/resources/v1/ai_qr_code_generator/client.py,sha256=jeqU-1cDWHTpYrfeEq-ABIQqC-jO2elusrfo69Q6pDI,3849
|
|
33
|
+
magic_hour/resources/v1/ai_talking_photo/README.md,sha256=xZnMuFMiuk7C_v0DNQGV1CRLjOgCkpxMcdeyEu93dsc,942
|
|
34
|
+
magic_hour/resources/v1/ai_talking_photo/__init__.py,sha256=ZTDD_IRBoR7GSdGWCVEK2-LOEsKUdGEHZZvDHa9MOnA,134
|
|
35
|
+
magic_hour/resources/v1/ai_talking_photo/client.py,sha256=TQNwMP3DhDj5jb51diMxcONDbdMPsIe_GSnNahZg8AM,4623
|
|
33
36
|
magic_hour/resources/v1/animation/README.md,sha256=uIVfUwD7iAOe2eJDgrxj4UyYmq9R30fdI3Z0JuEChc4,1477
|
|
34
37
|
magic_hour/resources/v1/animation/__init__.py,sha256=M6KUe6TEZl_DAdyn1HFQ2kHYanZo6xy3mvUdCN264hQ,114
|
|
35
38
|
magic_hour/resources/v1/animation/client.py,sha256=LQcUmFJEmO-0syfJPU14ck-n9VGZ-KRy4AyKyxMaaAw,6095
|
|
36
|
-
magic_hour/resources/v1/client.py,sha256=
|
|
39
|
+
magic_hour/resources/v1/client.py,sha256=5Dysdx4DmtBsAZlmODOaWNMOpDSR3CuyiUd6mme3JBs,5466
|
|
37
40
|
magic_hour/resources/v1/face_swap/README.md,sha256=7b6OeNBhMHJkxaQ7NFEuGUtgDUHOkpasXlU05KE5jkQ,1306
|
|
38
41
|
magic_hour/resources/v1/face_swap/__init__.py,sha256=lyg5uAHyYHEUVAiAZtP3zwjGCEGqq8IWbQKexVdhr00,110
|
|
39
42
|
magic_hour/resources/v1/face_swap/client.py,sha256=iwWbDqqYDFWCUoGDz3tPPbvc_1w0PsHubFyantCd4lM,6167
|
|
@@ -66,13 +69,14 @@ magic_hour/resources/v1/video_projects/client.py,sha256=JvhYhf3phYkdVj8VpWxvxF8q
|
|
|
66
69
|
magic_hour/resources/v1/video_to_video/README.md,sha256=yzTvpH-7hwXiuwNDykzVIfzrKpFgZPe3E0nNahjgOG0,1622
|
|
67
70
|
magic_hour/resources/v1/video_to_video/__init__.py,sha256=1SHaRLlsrlBkdxxKBYgdbHrGATlRvqlXc22RpjjHaOA,126
|
|
68
71
|
magic_hour/resources/v1/video_to_video/client.py,sha256=kfKdA1ESV-h3GyPfiet3zlVcFgNs0GdXXNM_3eS4V7Q,8184
|
|
69
|
-
magic_hour/types/models/__init__.py,sha256=
|
|
72
|
+
magic_hour/types/models/__init__.py,sha256=4o_3nWmvGp_nPZTkCsdOTh-ktsvvqDf-y5uHjUOexoA,2955
|
|
70
73
|
magic_hour/types/models/v1_ai_clothes_changer_create_response.py,sha256=gpPZLGvSukhBSK2LzTckn4HFcNDseP_XtfwasxzE2uc,625
|
|
71
74
|
magic_hour/types/models/v1_ai_headshot_generator_create_response.py,sha256=s4OheUpwh5jW1XAP4x_M7j-Xafq_gq9Lbz3NbUsFhs8,628
|
|
72
75
|
magic_hour/types/models/v1_ai_image_generator_create_response.py,sha256=gqRQUTb1dznt9trj5i4vIc2GcPac910ti7EXzz49btc,625
|
|
73
76
|
magic_hour/types/models/v1_ai_image_upscaler_create_response.py,sha256=u5z8WHJA7iT3u3EsTcDuAzwJ9JL9wMi0K93JhahjpGk,624
|
|
74
77
|
magic_hour/types/models/v1_ai_photo_editor_create_response.py,sha256=6a72cPZeaMUxIwbViir682fOBYDpy-REcIQOQHv_Yd8,622
|
|
75
78
|
magic_hour/types/models/v1_ai_qr_code_generator_create_response.py,sha256=N38DZ71d3w2DumFlsj48D8ItRxb_AybRL1znBR-X7tM,626
|
|
79
|
+
magic_hour/types/models/v1_ai_talking_photo_create_response.py,sha256=2R3_2-1KkDZCMOcm4pMM0RxUFb0Qqoch_-wkcXzZO0Q,738
|
|
76
80
|
magic_hour/types/models/v1_animation_create_response.py,sha256=5Icy8sus_C0hbcZBqmUjo4cGsoXZs7WuKf02dSp6Qco,733
|
|
77
81
|
magic_hour/types/models/v1_face_swap_create_response.py,sha256=Ou6p3XPwLsadO3h291zfbj2Zu-5k_XFXcYqNdMUB-a8,732
|
|
78
82
|
magic_hour/types/models/v1_face_swap_photo_create_response.py,sha256=d68oxwceXyaT05mzdKMU_tUKql1Gch91NXULyFnVG-M,622
|
|
@@ -85,12 +89,12 @@ magic_hour/types/models/v1_image_projects_get_response_error.py,sha256=R1qg-aIt6
|
|
|
85
89
|
magic_hour/types/models/v1_image_to_video_create_response.py,sha256=9I3MptKUR2gdQW6SbGSZr5Usdte9PRSniq-pjwJySk4,736
|
|
86
90
|
magic_hour/types/models/v1_lip_sync_create_response.py,sha256=YtxDlPf9LdW8awpxoahwrleIeqOsrbpHQFQE0DgOKUg,731
|
|
87
91
|
magic_hour/types/models/v1_text_to_video_create_response.py,sha256=B7Lx3XNbqZIVA5SESc_g-ShktN9uC-bGtdgeXKKCww0,735
|
|
88
|
-
magic_hour/types/models/v1_video_projects_get_response.py,sha256=
|
|
92
|
+
magic_hour/types/models/v1_video_projects_get_response.py,sha256=tHxM7JKNfR5Xj4ULRHMz6HOmjepYG489-GLgTFWt4cQ,3291
|
|
89
93
|
magic_hour/types/models/v1_video_projects_get_response_download.py,sha256=nudDCN30TsVk9UE_uXMtTT0JHIAGlWgjDeHpkZ0vIfU,450
|
|
90
94
|
magic_hour/types/models/v1_video_projects_get_response_downloads_item.py,sha256=DlUuLBSGa7jWoozxferkaOsGc4jASItcjjWbBXGu620,410
|
|
91
95
|
magic_hour/types/models/v1_video_projects_get_response_error.py,sha256=49QxnXAmYHcvSWuuhbQZeGlUfqVcO4YwZ414GczQnvA,568
|
|
92
96
|
magic_hour/types/models/v1_video_to_video_create_response.py,sha256=dRQql5qEQvcF0wbGO8M0yabgMef26w5T3JGtgnqLZ-Y,736
|
|
93
|
-
magic_hour/types/params/__init__.py,sha256=
|
|
97
|
+
magic_hour/types/params/__init__.py,sha256=gO9OjzbbTV8YAoBT1eieRukaXfkxX5_lasGP5QvJp4M,8292
|
|
94
98
|
magic_hour/types/params/v1_ai_clothes_changer_create_body.py,sha256=X5koqrTxYLiKcRMqPF7r-VwQzy4r_7k81o1289zHJvo,1006
|
|
95
99
|
magic_hour/types/params/v1_ai_clothes_changer_create_body_assets.py,sha256=GGnXOExxXtnHT9wQpDCEkLHQlQB5MbAbYuU47iHGf70,1509
|
|
96
100
|
magic_hour/types/params/v1_ai_headshot_generator_create_body.py,sha256=Ydzqxzfo6mMEIUc8R_PTWJujfnTDdzt7Ze4ZYiWxWJM,1405
|
|
@@ -106,6 +110,8 @@ magic_hour/types/params/v1_ai_photo_editor_create_body_assets.py,sha256=xoDh4VwV
|
|
|
106
110
|
magic_hour/types/params/v1_ai_photo_editor_create_body_style.py,sha256=VPBkdZRjQ7rAFLBcwWt7I-sWmD_oApCa0gyMM0P2-DQ,2073
|
|
107
111
|
magic_hour/types/params/v1_ai_qr_code_generator_create_body.py,sha256=_O1654Mbl77SGi9lH4FmKkTwtCXCArH9BeSlgTuLyT0,1109
|
|
108
112
|
magic_hour/types/params/v1_ai_qr_code_generator_create_body_style.py,sha256=i3ldwmoQPEnrw654PNIARmpsX-kUHZqaT8wjcc22JoA,839
|
|
113
|
+
magic_hour/types/params/v1_ai_talking_photo_create_body.py,sha256=YOIaCrhespIr0Ue6cOF4R2bg00BGZXQeJwP7RwhJhRI,1408
|
|
114
|
+
magic_hour/types/params/v1_ai_talking_photo_create_body_assets.py,sha256=_xNq6uVb6h7TYsNGesEbpAvrGKmVgqXwVV7Hq7jyEO4,1230
|
|
109
115
|
magic_hour/types/params/v1_animation_create_body.py,sha256=QB0zxAhNDV8BEd6vuTAUoZaF2E0PNKwfzV7OrsdueGk,2221
|
|
110
116
|
magic_hour/types/params/v1_animation_create_body_assets.py,sha256=Iot5sbRKLlXCHZS1X5tGICSRKOneBcqaDijYm5_BaUA,1965
|
|
111
117
|
magic_hour/types/params/v1_animation_create_body_style.py,sha256=1ujex1BXQq70rp10Pxs8wkb6pkM7fP6fojTW5ATdXyo,8045
|
|
@@ -126,8 +132,8 @@ magic_hour/types/params/v1_text_to_video_create_body.py,sha256=ax7CQZQ7keVjOWIsY
|
|
|
126
132
|
magic_hour/types/params/v1_text_to_video_create_body_style.py,sha256=rMzJdsin-C9hdbMOt6VqGySTTClcVbICqwlw2OZQiW0,601
|
|
127
133
|
magic_hour/types/params/v1_video_to_video_create_body.py,sha256=iOb3qGXySlI4unyWPAXDmiLMUSHH6ymuDHeiwpmhKeE,2942
|
|
128
134
|
magic_hour/types/params/v1_video_to_video_create_body_assets.py,sha256=_-6iA5d8ndka6iJWyWvlJwzRkQcmurJE6hkg-fDwBmQ,1531
|
|
129
|
-
magic_hour/types/params/v1_video_to_video_create_body_style.py,sha256=
|
|
130
|
-
magic_hour-0.
|
|
131
|
-
magic_hour-0.
|
|
132
|
-
magic_hour-0.
|
|
133
|
-
magic_hour-0.
|
|
135
|
+
magic_hour/types/params/v1_video_to_video_create_body_style.py,sha256=2jgpJ3A8LNXksTPQ5pp1tWXtd753zBuhBjA22qqCsTE,5697
|
|
136
|
+
magic_hour-0.12.1.dist-info/LICENSE,sha256=F3fxj7JXPgB2K0uj8YXRsVss4u-Dgt_-U3V4VXsivNI,1070
|
|
137
|
+
magic_hour-0.12.1.dist-info/METADATA,sha256=7FhwlTUojEI5LB-mJyAcLLANx3Rs4eJi2Uw8CIH4c5I,4824
|
|
138
|
+
magic_hour-0.12.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
139
|
+
magic_hour-0.12.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|