magic_hour 0.9.4__py3-none-any.whl → 0.10.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.

Potentially problematic release.


This version of magic_hour might be problematic. Click here for more details.

Files changed (69) hide show
  1. magic_hour/__init__.py +1 -1
  2. magic_hour/client.py +9 -11
  3. magic_hour/environment.py +3 -1
  4. magic_hour/resources/v1/ai_clothes_changer/client.py +0 -2
  5. magic_hour/resources/v1/ai_headshot_generator/client.py +12 -4
  6. magic_hour/resources/v1/ai_image_generator/client.py +1 -3
  7. magic_hour/resources/v1/ai_image_upscaler/client.py +0 -2
  8. magic_hour/resources/v1/ai_photo_editor/client.py +0 -2
  9. magic_hour/resources/v1/ai_qr_code_generator/client.py +0 -2
  10. magic_hour/resources/v1/animation/client.py +0 -2
  11. magic_hour/resources/v1/client.py +8 -42
  12. magic_hour/resources/v1/face_swap/client.py +0 -2
  13. magic_hour/resources/v1/face_swap_photo/client.py +0 -2
  14. magic_hour/resources/v1/files/client.py +0 -2
  15. magic_hour/resources/v1/files/upload_urls/client.py +0 -2
  16. magic_hour/resources/v1/image_background_remover/client.py +0 -2
  17. magic_hour/resources/v1/image_projects/README.md +1 -1
  18. magic_hour/resources/v1/image_projects/client.py +2 -6
  19. magic_hour/resources/v1/image_to_video/client.py +0 -2
  20. magic_hour/resources/v1/lip_sync/client.py +0 -2
  21. magic_hour/resources/v1/text_to_video/client.py +1 -3
  22. magic_hour/resources/v1/video_projects/README.md +1 -1
  23. magic_hour/resources/v1/video_projects/client.py +2 -6
  24. magic_hour/resources/v1/video_to_video/client.py +0 -2
  25. magic_hour/types/models/__init__.py +4 -4
  26. magic_hour/types/models/get_v1_image_projects_id_response.py +1 -1
  27. magic_hour/types/models/get_v1_video_projects_id_response.py +1 -1
  28. magic_hour/types/models/post_v1_files_upload_urls_response.py +1 -1
  29. magic_hour/types/params/__init__.py +57 -51
  30. magic_hour/types/params/post_v1_ai_clothes_changer_body.py +1 -1
  31. magic_hour/types/params/post_v1_ai_clothes_changer_body_assets.py +1 -1
  32. magic_hour/types/params/post_v1_ai_headshot_generator_body.py +10 -1
  33. magic_hour/types/params/post_v1_ai_headshot_generator_body_assets.py +1 -1
  34. magic_hour/types/params/post_v1_ai_headshot_generator_body_style.py +27 -0
  35. magic_hour/types/params/post_v1_ai_image_generator_body.py +1 -1
  36. magic_hour/types/params/post_v1_ai_image_generator_body_style.py +1 -1
  37. magic_hour/types/params/post_v1_ai_image_upscaler_body.py +1 -1
  38. magic_hour/types/params/post_v1_ai_image_upscaler_body_assets.py +1 -1
  39. magic_hour/types/params/post_v1_ai_image_upscaler_body_style.py +1 -1
  40. magic_hour/types/params/post_v1_ai_photo_editor_body.py +1 -1
  41. magic_hour/types/params/post_v1_ai_photo_editor_body_assets.py +1 -1
  42. magic_hour/types/params/post_v1_ai_photo_editor_body_style.py +1 -1
  43. magic_hour/types/params/post_v1_ai_qr_code_generator_body.py +1 -1
  44. magic_hour/types/params/post_v1_ai_qr_code_generator_body_style.py +1 -1
  45. magic_hour/types/params/post_v1_animation_body.py +1 -1
  46. magic_hour/types/params/post_v1_animation_body_assets.py +1 -1
  47. magic_hour/types/params/post_v1_animation_body_style.py +1 -1
  48. magic_hour/types/params/post_v1_face_swap_body.py +1 -1
  49. magic_hour/types/params/post_v1_face_swap_body_assets.py +1 -1
  50. magic_hour/types/params/post_v1_face_swap_photo_body.py +1 -1
  51. magic_hour/types/params/post_v1_face_swap_photo_body_assets.py +1 -1
  52. magic_hour/types/params/post_v1_files_upload_urls_body.py +1 -1
  53. magic_hour/types/params/post_v1_files_upload_urls_body_items_item.py +1 -1
  54. magic_hour/types/params/post_v1_image_background_remover_body.py +1 -1
  55. magic_hour/types/params/post_v1_image_background_remover_body_assets.py +1 -1
  56. magic_hour/types/params/post_v1_image_to_video_body.py +1 -1
  57. magic_hour/types/params/post_v1_image_to_video_body_assets.py +1 -1
  58. magic_hour/types/params/post_v1_image_to_video_body_style.py +1 -1
  59. magic_hour/types/params/post_v1_lip_sync_body.py +1 -1
  60. magic_hour/types/params/post_v1_lip_sync_body_assets.py +1 -1
  61. magic_hour/types/params/post_v1_text_to_video_body.py +1 -1
  62. magic_hour/types/params/post_v1_text_to_video_body_style.py +1 -1
  63. magic_hour/types/params/post_v1_video_to_video_body.py +1 -1
  64. magic_hour/types/params/post_v1_video_to_video_body_assets.py +1 -1
  65. magic_hour/types/params/post_v1_video_to_video_body_style.py +1 -1
  66. {magic_hour-0.9.4.dist-info → magic_hour-0.10.0.dist-info}/METADATA +1 -1
  67. {magic_hour-0.9.4.dist-info → magic_hour-0.10.0.dist-info}/RECORD +69 -68
  68. {magic_hour-0.9.4.dist-info → magic_hour-0.10.0.dist-info}/LICENSE +0 -0
  69. {magic_hour-0.9.4.dist-info → magic_hour-0.10.0.dist-info}/WHEEL +0 -0
magic_hour/__init__.py CHANGED
@@ -1,5 +1,5 @@
1
- from .core import ApiError, BinaryResponse
2
1
  from .client import AsyncClient, Client
2
+ from .core import ApiError, BinaryResponse
3
3
  from .environment import Environment
4
4
 
5
5
 
magic_hour/client.py CHANGED
@@ -1,8 +1,8 @@
1
1
  import httpx
2
2
  import typing
3
3
 
4
- from magic_hour.environment import Environment
5
4
  from magic_hour.core import AsyncBaseClient, AuthBearer, SyncBaseClient
5
+ from magic_hour.environment import Environment
6
6
  from magic_hour.resources.v1 import AsyncV1Client, V1Client
7
7
 
8
8
 
@@ -16,14 +16,14 @@ class Client:
16
16
  environment: Environment = Environment.ENVIRONMENT,
17
17
  token: typing.Optional[str] = None,
18
18
  ):
19
+ """Initialize root client"""
19
20
  self._base_client = SyncBaseClient(
20
21
  base_url=_get_base_url(base_url=base_url, environment=environment),
21
- httpx_client=(
22
- httpx.Client(timeout=timeout) if httpx_client is None else httpx_client
23
- ),
22
+ httpx_client=httpx.Client(timeout=timeout)
23
+ if httpx_client is None
24
+ else httpx_client,
24
25
  )
25
26
  self._base_client.register_auth("bearerAuth", AuthBearer(val=token))
26
-
27
27
  self.v1 = V1Client(base_client=self._base_client)
28
28
 
29
29
 
@@ -37,16 +37,14 @@ class AsyncClient:
37
37
  environment: Environment = Environment.ENVIRONMENT,
38
38
  token: typing.Optional[str] = None,
39
39
  ):
40
+ """Initialize root client"""
40
41
  self._base_client = AsyncBaseClient(
41
42
  base_url=_get_base_url(base_url=base_url, environment=environment),
42
- httpx_client=(
43
- httpx.AsyncClient(timeout=timeout)
44
- if httpx_client is None
45
- else httpx_client
46
- ),
43
+ httpx_client=httpx.AsyncClient(timeout=timeout)
44
+ if httpx_client is None
45
+ else httpx_client,
47
46
  )
48
47
  self._base_client.register_auth("bearerAuth", AuthBearer(val=token))
49
-
50
48
  self.v1 = AsyncV1Client(base_client=self._base_client)
51
49
 
52
50
 
magic_hour/environment.py CHANGED
@@ -2,5 +2,7 @@ import enum
2
2
 
3
3
 
4
4
  class Environment(enum.Enum):
5
+ """Pre-defined base URLs for the API"""
6
+
5
7
  ENVIRONMENT = "https://api.magichour.ai"
6
- MOCK_SERVER = "https://api.sideko.dev/v1/mock/magichour/magic-hour/0.9.4"
8
+ MOCK_SERVER = "https://api.sideko.dev/v1/mock/magichour/magic-hour/0.10.0"
@@ -54,7 +54,6 @@ class AiClothesChangerClient:
54
54
  name="Clothes Changer image",
55
55
  )
56
56
  ```
57
-
58
57
  """
59
58
  _json = to_encodable(
60
59
  item={"name": name, "assets": assets},
@@ -113,7 +112,6 @@ class AsyncAiClothesChangerClient:
113
112
  name="Clothes Changer image",
114
113
  )
115
114
  ```
116
-
117
115
  """
118
116
  _json = to_encodable(
119
117
  item={"name": name, "assets": assets},
@@ -22,6 +22,10 @@ class AiHeadshotGeneratorClient:
22
22
  name: typing.Union[
23
23
  typing.Optional[str], type_utils.NotGiven
24
24
  ] = type_utils.NOT_GIVEN,
25
+ style: typing.Union[
26
+ typing.Optional[params.PostV1AiHeadshotGeneratorBodyStyle],
27
+ type_utils.NotGiven,
28
+ ] = type_utils.NOT_GIVEN,
25
29
  request_options: typing.Optional[RequestOptions] = None,
26
30
  ) -> models.PostV1AiHeadshotGeneratorResponse:
27
31
  """
@@ -33,6 +37,7 @@ class AiHeadshotGeneratorClient:
33
37
 
34
38
  Args:
35
39
  name: The name of image
40
+ style: PostV1AiHeadshotGeneratorBodyStyle
36
41
  assets: Provide the assets for headshot photo
37
42
  request_options: Additional options to customize the HTTP request
38
43
 
@@ -50,10 +55,9 @@ class AiHeadshotGeneratorClient:
50
55
  name="Ai Headshot image",
51
56
  )
52
57
  ```
53
-
54
58
  """
55
59
  _json = to_encodable(
56
- item={"name": name, "assets": assets},
60
+ item={"name": name, "style": style, "assets": assets},
57
61
  dump_with=params._SerializerPostV1AiHeadshotGeneratorBody,
58
62
  )
59
63
  return self._base_client.request(
@@ -77,6 +81,10 @@ class AsyncAiHeadshotGeneratorClient:
77
81
  name: typing.Union[
78
82
  typing.Optional[str], type_utils.NotGiven
79
83
  ] = type_utils.NOT_GIVEN,
84
+ style: typing.Union[
85
+ typing.Optional[params.PostV1AiHeadshotGeneratorBodyStyle],
86
+ type_utils.NotGiven,
87
+ ] = type_utils.NOT_GIVEN,
80
88
  request_options: typing.Optional[RequestOptions] = None,
81
89
  ) -> models.PostV1AiHeadshotGeneratorResponse:
82
90
  """
@@ -88,6 +96,7 @@ class AsyncAiHeadshotGeneratorClient:
88
96
 
89
97
  Args:
90
98
  name: The name of image
99
+ style: PostV1AiHeadshotGeneratorBodyStyle
91
100
  assets: Provide the assets for headshot photo
92
101
  request_options: Additional options to customize the HTTP request
93
102
 
@@ -105,10 +114,9 @@ class AsyncAiHeadshotGeneratorClient:
105
114
  name="Ai Headshot image",
106
115
  )
107
116
  ```
108
-
109
117
  """
110
118
  _json = to_encodable(
111
- item={"name": name, "assets": assets},
119
+ item={"name": name, "style": style, "assets": assets},
112
120
  dump_with=params._SerializerPostV1AiHeadshotGeneratorBody,
113
121
  )
114
122
  return await self._base_client.request(
@@ -1,5 +1,5 @@
1
- import typing_extensions
2
1
  import typing
2
+ import typing_extensions
3
3
 
4
4
  from magic_hour.core import (
5
5
  AsyncBaseClient,
@@ -57,7 +57,6 @@ class AiImageGeneratorClient:
57
57
  name="Ai Image image",
58
58
  )
59
59
  ```
60
-
61
60
  """
62
61
  _json = to_encodable(
63
62
  item={
@@ -123,7 +122,6 @@ class AsyncAiImageGeneratorClient:
123
122
  name="Ai Image image",
124
123
  )
125
124
  ```
126
-
127
125
  """
128
126
  _json = to_encodable(
129
127
  item={
@@ -56,7 +56,6 @@ class AiImageUpscalerClient:
56
56
  name="Image Upscaler image",
57
57
  )
58
58
  ```
59
-
60
59
  """
61
60
  _json = to_encodable(
62
61
  item={
@@ -122,7 +121,6 @@ class AsyncAiImageUpscalerClient:
122
121
  name="Image Upscaler image",
123
122
  )
124
123
  ```
125
-
126
124
  """
127
125
  _json = to_encodable(
128
126
  item={
@@ -67,7 +67,6 @@ class AiPhotoEditorClient:
67
67
  name="Photo Editor image",
68
68
  )
69
69
  ```
70
-
71
70
  """
72
71
  _json = to_encodable(
73
72
  item={
@@ -145,7 +144,6 @@ class AsyncAiPhotoEditorClient:
145
144
  name="Photo Editor image",
146
145
  )
147
146
  ```
148
-
149
147
  """
150
148
  _json = to_encodable(
151
149
  item={
@@ -53,7 +53,6 @@ class AiQrCodeGeneratorClient:
53
53
  name="Qr Code image",
54
54
  )
55
55
  ```
56
-
57
56
  """
58
57
  _json = to_encodable(
59
58
  item={"name": name, "content": content, "style": style},
@@ -111,7 +110,6 @@ class AsyncAiQrCodeGeneratorClient:
111
110
  name="Qr Code image",
112
111
  )
113
112
  ```
114
-
115
113
  """
116
114
  _json = to_encodable(
117
115
  item={"name": name, "content": content, "style": style},
@@ -71,7 +71,6 @@ class AnimationClient:
71
71
  name="Animation video",
72
72
  )
73
73
  ```
74
-
75
74
  """
76
75
  _json = to_encodable(
77
76
  item={
@@ -155,7 +154,6 @@ class AsyncAnimationClient:
155
154
  name="Animation video",
156
155
  )
157
156
  ```
158
-
159
157
  """
160
158
  _json = to_encodable(
161
159
  item={
@@ -1,12 +1,4 @@
1
1
  from magic_hour.core import AsyncBaseClient, SyncBaseClient
2
- from magic_hour.resources.v1.image_projects import (
3
- AsyncImageProjectsClient,
4
- ImageProjectsClient,
5
- )
6
- from magic_hour.resources.v1.video_projects import (
7
- AsyncVideoProjectsClient,
8
- VideoProjectsClient,
9
- )
10
2
  from magic_hour.resources.v1.ai_clothes_changer import (
11
3
  AiClothesChangerClient,
12
4
  AsyncAiClothesChangerClient,
@@ -42,6 +34,10 @@ from magic_hour.resources.v1.image_background_remover import (
42
34
  AsyncImageBackgroundRemoverClient,
43
35
  ImageBackgroundRemoverClient,
44
36
  )
37
+ from magic_hour.resources.v1.image_projects import (
38
+ AsyncImageProjectsClient,
39
+ ImageProjectsClient,
40
+ )
45
41
  from magic_hour.resources.v1.image_to_video import (
46
42
  AsyncImageToVideoClient,
47
43
  ImageToVideoClient,
@@ -51,6 +47,10 @@ from magic_hour.resources.v1.text_to_video import (
51
47
  AsyncTextToVideoClient,
52
48
  TextToVideoClient,
53
49
  )
50
+ from magic_hour.resources.v1.video_projects import (
51
+ AsyncVideoProjectsClient,
52
+ VideoProjectsClient,
53
+ )
54
54
  from magic_hour.resources.v1.video_to_video import (
55
55
  AsyncVideoToVideoClient,
56
56
  VideoToVideoClient,
@@ -60,94 +60,60 @@ from magic_hour.resources.v1.video_to_video import (
60
60
  class V1Client:
61
61
  def __init__(self, *, base_client: SyncBaseClient):
62
62
  self._base_client = base_client
63
-
64
63
  self.image_projects = ImageProjectsClient(base_client=self._base_client)
65
-
66
64
  self.video_projects = VideoProjectsClient(base_client=self._base_client)
67
-
68
65
  self.ai_clothes_changer = AiClothesChangerClient(base_client=self._base_client)
69
-
70
66
  self.ai_headshot_generator = AiHeadshotGeneratorClient(
71
67
  base_client=self._base_client
72
68
  )
73
-
74
69
  self.ai_image_generator = AiImageGeneratorClient(base_client=self._base_client)
75
-
76
70
  self.ai_image_upscaler = AiImageUpscalerClient(base_client=self._base_client)
77
-
78
71
  self.ai_photo_editor = AiPhotoEditorClient(base_client=self._base_client)
79
-
80
72
  self.ai_qr_code_generator = AiQrCodeGeneratorClient(
81
73
  base_client=self._base_client
82
74
  )
83
-
84
75
  self.animation = AnimationClient(base_client=self._base_client)
85
-
86
76
  self.face_swap = FaceSwapClient(base_client=self._base_client)
87
-
88
77
  self.face_swap_photo = FaceSwapPhotoClient(base_client=self._base_client)
89
-
90
78
  self.files = FilesClient(base_client=self._base_client)
91
-
92
79
  self.image_background_remover = ImageBackgroundRemoverClient(
93
80
  base_client=self._base_client
94
81
  )
95
-
96
82
  self.image_to_video = ImageToVideoClient(base_client=self._base_client)
97
-
98
83
  self.lip_sync = LipSyncClient(base_client=self._base_client)
99
-
100
84
  self.text_to_video = TextToVideoClient(base_client=self._base_client)
101
-
102
85
  self.video_to_video = VideoToVideoClient(base_client=self._base_client)
103
86
 
104
87
 
105
88
  class AsyncV1Client:
106
89
  def __init__(self, *, base_client: AsyncBaseClient):
107
90
  self._base_client = base_client
108
-
109
91
  self.image_projects = AsyncImageProjectsClient(base_client=self._base_client)
110
-
111
92
  self.video_projects = AsyncVideoProjectsClient(base_client=self._base_client)
112
-
113
93
  self.ai_clothes_changer = AsyncAiClothesChangerClient(
114
94
  base_client=self._base_client
115
95
  )
116
-
117
96
  self.ai_headshot_generator = AsyncAiHeadshotGeneratorClient(
118
97
  base_client=self._base_client
119
98
  )
120
-
121
99
  self.ai_image_generator = AsyncAiImageGeneratorClient(
122
100
  base_client=self._base_client
123
101
  )
124
-
125
102
  self.ai_image_upscaler = AsyncAiImageUpscalerClient(
126
103
  base_client=self._base_client
127
104
  )
128
-
129
105
  self.ai_photo_editor = AsyncAiPhotoEditorClient(base_client=self._base_client)
130
-
131
106
  self.ai_qr_code_generator = AsyncAiQrCodeGeneratorClient(
132
107
  base_client=self._base_client
133
108
  )
134
-
135
109
  self.animation = AsyncAnimationClient(base_client=self._base_client)
136
-
137
110
  self.face_swap = AsyncFaceSwapClient(base_client=self._base_client)
138
-
139
111
  self.face_swap_photo = AsyncFaceSwapPhotoClient(base_client=self._base_client)
140
-
141
112
  self.files = AsyncFilesClient(base_client=self._base_client)
142
-
143
113
  self.image_background_remover = AsyncImageBackgroundRemoverClient(
144
114
  base_client=self._base_client
145
115
  )
146
-
147
116
  self.image_to_video = AsyncImageToVideoClient(base_client=self._base_client)
148
-
149
117
  self.lip_sync = AsyncLipSyncClient(base_client=self._base_client)
150
-
151
118
  self.text_to_video = AsyncTextToVideoClient(base_client=self._base_client)
152
-
153
119
  self.video_to_video = AsyncVideoToVideoClient(base_client=self._base_client)
@@ -65,7 +65,6 @@ class FaceSwapClient:
65
65
  name="Face Swap video",
66
66
  )
67
67
  ```
68
-
69
68
  """
70
69
  _json = to_encodable(
71
70
  item={
@@ -142,7 +141,6 @@ class AsyncFaceSwapClient:
142
141
  name="Face Swap video",
143
142
  )
144
143
  ```
145
-
146
144
  """
147
145
  _json = to_encodable(
148
146
  item={
@@ -53,7 +53,6 @@ class FaceSwapPhotoClient:
53
53
  name="Face Swap image",
54
54
  )
55
55
  ```
56
-
57
56
  """
58
57
  _json = to_encodable(
59
58
  item={"name": name, "assets": assets},
@@ -111,7 +110,6 @@ class AsyncFaceSwapPhotoClient:
111
110
  name="Face Swap image",
112
111
  )
113
112
  ```
114
-
115
113
  """
116
114
  _json = to_encodable(
117
115
  item={"name": name, "assets": assets},
@@ -8,12 +8,10 @@ from magic_hour.resources.v1.files.upload_urls import (
8
8
  class FilesClient:
9
9
  def __init__(self, *, base_client: SyncBaseClient):
10
10
  self._base_client = base_client
11
-
12
11
  self.upload_urls = UploadUrlsClient(base_client=self._base_client)
13
12
 
14
13
 
15
14
  class AsyncFilesClient:
16
15
  def __init__(self, *, base_client: AsyncBaseClient):
17
16
  self._base_client = base_client
18
-
19
17
  self.upload_urls = AsyncUploadUrlsClient(base_client=self._base_client)
@@ -61,7 +61,6 @@ class UploadUrlsClient:
61
61
  ```py
62
62
  client.v1.files.upload_urls.create(items=[{"extension": "mp4", "type_field": "video"}, {"extension": "mp3", "type_field": "audio"}])
63
63
  ```
64
-
65
64
  """
66
65
  _json = to_encodable(
67
66
  item={"items": items}, dump_with=params._SerializerPostV1FilesUploadUrlsBody
@@ -127,7 +126,6 @@ class AsyncUploadUrlsClient:
127
126
  ```py
128
127
  await client.v1.files.upload_urls.create(items=[{"extension": "mp4", "type_field": "video"}, {"extension": "mp3", "type_field": "audio"}])
129
128
  ```
130
-
131
129
  """
132
130
  _json = to_encodable(
133
131
  item={"items": items}, dump_with=params._SerializerPostV1FilesUploadUrlsBody
@@ -50,7 +50,6 @@ class ImageBackgroundRemoverClient:
50
50
  name="Background Remover image",
51
51
  )
52
52
  ```
53
-
54
53
  """
55
54
  _json = to_encodable(
56
55
  item={"name": name, "assets": assets},
@@ -105,7 +104,6 @@ class AsyncImageBackgroundRemoverClient:
105
104
  name="Background Remover image",
106
105
  )
107
106
  ```
108
-
109
107
  """
110
108
  _json = to_encodable(
111
109
  item={"name": name, "assets": assets},
@@ -29,7 +29,7 @@ res = await client.v1.image_projects.delete(id="cm6pvghix03bvyz0zwash6noj")
29
29
  ### get <a name="get"></a>
30
30
  Get image details
31
31
 
32
- Get the details of a image project. The `download` field will be `null` unless the image was successfully rendered.
32
+ Get the details of a image project. The `downloads` field will be empty unless the image was successfully rendered.
33
33
 
34
34
  The image can be one of the following status
35
35
  - `draft` - not currently used
@@ -38,7 +38,6 @@ class ImageProjectsClient:
38
38
  ```py
39
39
  client.v1.image_projects.delete(id="cm6pvghix03bvyz0zwash6noj")
40
40
  ```
41
-
42
41
  """
43
42
  self._base_client.request(
44
43
  method="DELETE",
@@ -54,7 +53,7 @@ class ImageProjectsClient:
54
53
  """
55
54
  Get image details
56
55
 
57
- Get the details of a image project. The `download` field will be `null` unless the image was successfully rendered.
56
+ Get the details of a image project. The `downloads` field will be empty unless the image was successfully rendered.
58
57
 
59
58
  The image can be one of the following status
60
59
  - `draft` - not currently used
@@ -82,7 +81,6 @@ class ImageProjectsClient:
82
81
  ```py
83
82
  client.v1.image_projects.get(id="cm6pvghix03bvyz0zwash6noj")
84
83
  ```
85
-
86
84
  """
87
85
  return self._base_client.request(
88
86
  method="GET",
@@ -122,7 +120,6 @@ class AsyncImageProjectsClient:
122
120
  ```py
123
121
  await client.v1.image_projects.delete(id="cm6pvghix03bvyz0zwash6noj")
124
122
  ```
125
-
126
123
  """
127
124
  await self._base_client.request(
128
125
  method="DELETE",
@@ -138,7 +135,7 @@ class AsyncImageProjectsClient:
138
135
  """
139
136
  Get image details
140
137
 
141
- Get the details of a image project. The `download` field will be `null` unless the image was successfully rendered.
138
+ Get the details of a image project. The `downloads` field will be empty unless the image was successfully rendered.
142
139
 
143
140
  The image can be one of the following status
144
141
  - `draft` - not currently used
@@ -166,7 +163,6 @@ class AsyncImageProjectsClient:
166
163
  ```py
167
164
  await client.v1.image_projects.get(id="cm6pvghix03bvyz0zwash6noj")
168
165
  ```
169
-
170
166
  """
171
167
  return await self._base_client.request(
172
168
  method="GET",
@@ -65,7 +65,6 @@ class ImageToVideoClient:
65
65
  name="Image To Video video",
66
66
  )
67
67
  ```
68
-
69
68
  """
70
69
  _json = to_encodable(
71
70
  item={
@@ -142,7 +141,6 @@ class AsyncImageToVideoClient:
142
141
  name="Image To Video video",
143
142
  )
144
143
  ```
145
-
146
144
  """
147
145
  _json = to_encodable(
148
146
  item={
@@ -73,7 +73,6 @@ class LipSyncClient:
73
73
  name="Lip Sync video",
74
74
  )
75
75
  ```
76
-
77
76
  """
78
77
  _json = to_encodable(
79
78
  item={
@@ -159,7 +158,6 @@ class AsyncLipSyncClient:
159
158
  name="Lip Sync video",
160
159
  )
161
160
  ```
162
-
163
161
  """
164
162
  _json = to_encodable(
165
163
  item={
@@ -1,5 +1,5 @@
1
- import typing_extensions
2
1
  import typing
2
+ import typing_extensions
3
3
 
4
4
  from magic_hour.core import (
5
5
  AsyncBaseClient,
@@ -60,7 +60,6 @@ class TextToVideoClient:
60
60
  name="Text To Video video",
61
61
  )
62
62
  ```
63
-
64
63
  """
65
64
  _json = to_encodable(
66
65
  item={
@@ -129,7 +128,6 @@ class AsyncTextToVideoClient:
129
128
  name="Text To Video video",
130
129
  )
131
130
  ```
132
-
133
131
  """
134
132
  _json = to_encodable(
135
133
  item={
@@ -29,7 +29,7 @@ res = await client.v1.video_projects.delete(id="cm6pvghix03bvyz0zwash6noj")
29
29
  ### get <a name="get"></a>
30
30
  Get video details
31
31
 
32
- Get the details of a video project. The `download` field will be `null` unless the video was successfully rendered.
32
+ Get the details of a video project. The `downloads` field will be empty unless the video was successfully rendered.
33
33
 
34
34
  The video can be one of the following status
35
35
  - `draft` - not currently used
@@ -38,7 +38,6 @@ class VideoProjectsClient:
38
38
  ```py
39
39
  client.v1.video_projects.delete(id="cm6pvghix03bvyz0zwash6noj")
40
40
  ```
41
-
42
41
  """
43
42
  self._base_client.request(
44
43
  method="DELETE",
@@ -54,7 +53,7 @@ class VideoProjectsClient:
54
53
  """
55
54
  Get video details
56
55
 
57
- Get the details of a video project. The `download` field will be `null` unless the video was successfully rendered.
56
+ Get the details of a video project. The `downloads` field will be empty unless the video was successfully rendered.
58
57
 
59
58
  The video can be one of the following status
60
59
  - `draft` - not currently used
@@ -82,7 +81,6 @@ class VideoProjectsClient:
82
81
  ```py
83
82
  client.v1.video_projects.get(id="cm6pvghix03bvyz0zwash6noj")
84
83
  ```
85
-
86
84
  """
87
85
  return self._base_client.request(
88
86
  method="GET",
@@ -122,7 +120,6 @@ class AsyncVideoProjectsClient:
122
120
  ```py
123
121
  await client.v1.video_projects.delete(id="cm6pvghix03bvyz0zwash6noj")
124
122
  ```
125
-
126
123
  """
127
124
  await self._base_client.request(
128
125
  method="DELETE",
@@ -138,7 +135,7 @@ class AsyncVideoProjectsClient:
138
135
  """
139
136
  Get video details
140
137
 
141
- Get the details of a video project. The `download` field will be `null` unless the video was successfully rendered.
138
+ Get the details of a video project. The `downloads` field will be empty unless the video was successfully rendered.
142
139
 
143
140
  The video can be one of the following status
144
141
  - `draft` - not currently used
@@ -166,7 +163,6 @@ class AsyncVideoProjectsClient:
166
163
  ```py
167
164
  await client.v1.video_projects.get(id="cm6pvghix03bvyz0zwash6noj")
168
165
  ```
169
-
170
166
  """
171
167
  return await self._base_client.request(
172
168
  method="GET",
@@ -83,7 +83,6 @@ class VideoToVideoClient:
83
83
  name="Video To Video video",
84
84
  )
85
85
  ```
86
-
87
86
  """
88
87
  _json = to_encodable(
89
88
  item={
@@ -179,7 +178,6 @@ class AsyncVideoToVideoClient:
179
178
  name="Video To Video video",
180
179
  )
181
180
  ```
182
-
183
181
  """
184
182
  _json = to_encodable(
185
183
  item={
@@ -1,7 +1,9 @@
1
+ from .get_v1_image_projects_id_response import GetV1ImageProjectsIdResponse
1
2
  from .get_v1_image_projects_id_response_downloads_item import (
2
3
  GetV1ImageProjectsIdResponseDownloadsItem,
3
4
  )
4
5
  from .get_v1_image_projects_id_response_error import GetV1ImageProjectsIdResponseError
6
+ from .get_v1_video_projects_id_response import GetV1VideoProjectsIdResponse
5
7
  from .get_v1_video_projects_id_response_download import (
6
8
  GetV1VideoProjectsIdResponseDownload,
7
9
  )
@@ -16,8 +18,9 @@ from .post_v1_ai_image_upscaler_response import PostV1AiImageUpscalerResponse
16
18
  from .post_v1_ai_photo_editor_response import PostV1AiPhotoEditorResponse
17
19
  from .post_v1_ai_qr_code_generator_response import PostV1AiQrCodeGeneratorResponse
18
20
  from .post_v1_animation_response import PostV1AnimationResponse
19
- from .post_v1_face_swap_response import PostV1FaceSwapResponse
20
21
  from .post_v1_face_swap_photo_response import PostV1FaceSwapPhotoResponse
22
+ from .post_v1_face_swap_response import PostV1FaceSwapResponse
23
+ from .post_v1_files_upload_urls_response import PostV1FilesUploadUrlsResponse
21
24
  from .post_v1_files_upload_urls_response_items_item import (
22
25
  PostV1FilesUploadUrlsResponseItemsItem,
23
26
  )
@@ -28,9 +31,6 @@ from .post_v1_image_to_video_response import PostV1ImageToVideoResponse
28
31
  from .post_v1_lip_sync_response import PostV1LipSyncResponse
29
32
  from .post_v1_text_to_video_response import PostV1TextToVideoResponse
30
33
  from .post_v1_video_to_video_response import PostV1VideoToVideoResponse
31
- from .get_v1_image_projects_id_response import GetV1ImageProjectsIdResponse
32
- from .get_v1_video_projects_id_response import GetV1VideoProjectsIdResponse
33
- from .post_v1_files_upload_urls_response import PostV1FilesUploadUrlsResponse
34
34
 
35
35
 
36
36
  __all__ = [
@@ -1,6 +1,6 @@
1
+ import pydantic
1
2
  import typing
2
3
  import typing_extensions
3
- import pydantic
4
4
 
5
5
  from .get_v1_image_projects_id_response_downloads_item import (
6
6
  GetV1ImageProjectsIdResponseDownloadsItem,