magic_hour 0.9.3__py3-none-any.whl → 0.9.4__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 (37) hide show
  1. magic_hour/client.py +1 -1
  2. magic_hour/core/__init__.py +2 -3
  3. magic_hour/core/query.py +106 -0
  4. magic_hour/core/request.py +3 -5
  5. magic_hour/core/utils.py +1 -1
  6. magic_hour/environment.py +1 -1
  7. magic_hour/types/models/get_v1_image_projects_id_response.py +1 -1
  8. magic_hour/types/models/get_v1_video_projects_id_response.py +1 -1
  9. magic_hour/types/models/post_v1_ai_clothes_changer_response.py +1 -1
  10. magic_hour/types/models/post_v1_ai_headshot_generator_response.py +1 -1
  11. magic_hour/types/models/post_v1_ai_image_generator_response.py +1 -1
  12. magic_hour/types/models/post_v1_ai_image_upscaler_response.py +1 -1
  13. magic_hour/types/models/post_v1_ai_photo_editor_response.py +1 -1
  14. magic_hour/types/models/post_v1_ai_qr_code_generator_response.py +1 -1
  15. magic_hour/types/models/post_v1_animation_response.py +1 -1
  16. magic_hour/types/models/post_v1_face_swap_photo_response.py +1 -1
  17. magic_hour/types/models/post_v1_face_swap_response.py +1 -1
  18. magic_hour/types/models/post_v1_image_background_remover_response.py +1 -1
  19. magic_hour/types/models/post_v1_image_to_video_response.py +1 -1
  20. magic_hour/types/models/post_v1_lip_sync_response.py +1 -1
  21. magic_hour/types/models/post_v1_text_to_video_response.py +1 -1
  22. magic_hour/types/models/post_v1_video_to_video_response.py +1 -1
  23. magic_hour/types/params/post_v1_ai_clothes_changer_body_assets.py +2 -2
  24. magic_hour/types/params/post_v1_ai_headshot_generator_body_assets.py +1 -1
  25. magic_hour/types/params/post_v1_ai_image_upscaler_body_assets.py +1 -1
  26. magic_hour/types/params/post_v1_ai_photo_editor_body_assets.py +1 -1
  27. magic_hour/types/params/post_v1_animation_body_assets.py +2 -2
  28. magic_hour/types/params/post_v1_face_swap_body_assets.py +2 -2
  29. magic_hour/types/params/post_v1_face_swap_photo_body_assets.py +2 -2
  30. magic_hour/types/params/post_v1_image_background_remover_body_assets.py +1 -1
  31. magic_hour/types/params/post_v1_image_to_video_body_assets.py +1 -1
  32. magic_hour/types/params/post_v1_lip_sync_body_assets.py +2 -2
  33. magic_hour/types/params/post_v1_video_to_video_body_assets.py +1 -1
  34. {magic_hour-0.9.3.dist-info → magic_hour-0.9.4.dist-info}/METADATA +1 -1
  35. {magic_hour-0.9.3.dist-info → magic_hour-0.9.4.dist-info}/RECORD +37 -36
  36. {magic_hour-0.9.3.dist-info → magic_hour-0.9.4.dist-info}/LICENSE +0 -0
  37. {magic_hour-0.9.3.dist-info → magic_hour-0.9.4.dist-info}/WHEEL +0 -0
magic_hour/client.py CHANGED
@@ -1,9 +1,9 @@
1
1
  import httpx
2
2
  import typing
3
3
 
4
- from magic_hour.resources.v1 import AsyncV1Client, V1Client
5
4
  from magic_hour.environment import Environment
6
5
  from magic_hour.core import AsyncBaseClient, AuthBearer, SyncBaseClient
6
+ from magic_hour.resources.v1 import AsyncV1Client, V1Client
7
7
 
8
8
 
9
9
  class Client:
@@ -13,14 +13,13 @@ from .auth import (
13
13
  )
14
14
  from .base_client import AsyncBaseClient, BaseClient, SyncBaseClient
15
15
  from .binary_response import BinaryResponse
16
+ from .query import encode_query_param, QueryParams
16
17
  from .request import (
17
- encode_param,
18
18
  filter_not_given,
19
19
  to_content,
20
20
  to_encodable,
21
21
  RequestOptions,
22
22
  default_request_options,
23
- QueryParams,
24
23
  )
25
24
  from .response import from_encodable, AsyncStreamResponse, StreamResponse
26
25
 
@@ -45,7 +44,7 @@ __all__ = [
45
44
  "to_encodable",
46
45
  "filter_not_given",
47
46
  "to_content",
48
- "encode_param",
47
+ "encode_query_param",
49
48
  "from_encodable",
50
49
  "AsyncStreamResponse",
51
50
  "StreamResponse",
@@ -0,0 +1,106 @@
1
+ from typing import Any, Dict, Union
2
+ from typing_extensions import Literal, Sequence
3
+ from urllib.parse import quote_plus, quote
4
+
5
+ import httpx
6
+
7
+
8
+ # Type alias for query parameters that can handle both primitive data and sequences
9
+ QueryParams = Dict[
10
+ str, Union[httpx._types.PrimitiveData, Sequence[httpx._types.PrimitiveData]]
11
+ ]
12
+
13
+
14
+ def encode_query_param(
15
+ params: QueryParams,
16
+ name: str,
17
+ value: Any,
18
+ style: Literal["form", "spaceDelimited", "pipeDelimited", "deepObject"] = "form",
19
+ explode: bool = True,
20
+ ):
21
+ if style == "form":
22
+ _encode_form(params, name, value, explode)
23
+ elif style == "spaceDelimited":
24
+ _encode_spaced_delimited(params, name, value, explode)
25
+ elif style == "pipeDelimited":
26
+ _encode_pipe_delimited(params, name, value, explode)
27
+ elif style == "deepObject":
28
+ _encode_deep_object(params, name, value, explode)
29
+ else:
30
+ raise NotImplementedError(f"query param style '{style}' not implemented")
31
+
32
+
33
+ def _encode_form(params: QueryParams, name: str, value: Any, explode: bool):
34
+ """
35
+ Encodes query params in the `form` style as defined by OpenAPI with both explode and non-explode
36
+ variants.
37
+ """
38
+ if isinstance(value, list) and not explode:
39
+ # non-explode form lists should be encoded like /users?id=3,4,5
40
+ params[name] = quote_plus(",".join(map(str, value)))
41
+ elif isinstance(value, dict):
42
+ if explode:
43
+ # explode form objects should be encoded like /users?key0=val0&key1=val1
44
+ # the input param name will be omitted
45
+ for k, v in value.items():
46
+ params[k] = quote_plus(str(v))
47
+ else:
48
+ # non-explode form objects should be encoded like /users?id=key0,val0,key1,val1
49
+ encoded_chunks = []
50
+ for k, v in value.items():
51
+ encoded_chunks.extend([str(k), str(v)])
52
+ params[name] = quote_plus(",".join(encoded_chunks))
53
+ else:
54
+ params[name] = value
55
+
56
+
57
+ def _encode_spaced_delimited(params: QueryParams, name: str, value: Any, explode: bool):
58
+ """
59
+ Encodes query params in the `spaceDelimited` style as defined by OpenAPI with both explode and non-explode
60
+ variants.
61
+ """
62
+ if isinstance(value, list) and not explode:
63
+ # non-explode spaceDelimited lists should be encoded like /users?id=3%204%205
64
+ params[name] = quote(" ".join(map(str, value)))
65
+ else:
66
+ # according to the docs, spaceDelimited + explode=false only effects lists,
67
+ # all other encodings are marked as n/a or are the same as `form` style
68
+ # fall back on form style as it is the default for query params
69
+ _encode_form(params, name, value, explode)
70
+
71
+
72
+ def _encode_pipe_delimited(params: QueryParams, name: str, value: Any, explode: bool):
73
+ """
74
+ Encodes query params in the `pipeDelimited` style as defined by OpenAPI with both explode and non-explode
75
+ variants.
76
+ """
77
+ if isinstance(value, list) and not explode:
78
+ # non-explode pipeDelimited lists should be encoded like /users?id=3|4|5
79
+ params[name] = quote("|".join(map(str, value)))
80
+ else:
81
+ # according to the docs, pipeDelimited + explode=false only effects lists,
82
+ # all other encodings are marked as n/a or are the same as `form` style
83
+ # fall back on form style as it is the default for query params
84
+ _encode_form(params, name, value, explode)
85
+
86
+
87
+ def _encode_deep_object(params: QueryParams, name: str, value: Any, explode: bool):
88
+ """ """
89
+ if isinstance(value, dict):
90
+ _encode_deep_object_key(params, name, value)
91
+ else:
92
+ # according to the docs, deepObject style only applies to
93
+ # object encodes, encodings for primitives & arrays are listed as n/a,
94
+ # fall back on form style as it is the default for query params
95
+ _encode_form(params, name, value, explode)
96
+
97
+
98
+ def _encode_deep_object_key(params: QueryParams, key: str, value: Any):
99
+ if isinstance(value, dict):
100
+ for k, v in value.items():
101
+ _encode_deep_object_key(params, f"{key}[{k}]", v)
102
+ elif isinstance(value, list):
103
+ for i, v in enumerate(value):
104
+ _encode_deep_object_key(params, f"{key}[{i}]", v)
105
+ else:
106
+ params[key] = value
@@ -1,9 +1,12 @@
1
1
  from typing import Any, Dict, Type, Union, Sequence, List
2
2
  from urllib.parse import quote_plus
3
+
3
4
  import httpx
4
5
  from typing_extensions import TypedDict, Required, NotRequired
5
6
  from pydantic import TypeAdapter, BaseModel
7
+
6
8
  from .type_utils import NotGiven
9
+ from .query import QueryParams
7
10
 
8
11
  """
9
12
  Request configuration and utility functions for handling HTTP requests.
@@ -11,11 +14,6 @@ This module provides type definitions and helper functions for building
11
14
  and processing HTTP requests in a type-safe manner.
12
15
  """
13
16
 
14
- # Type alias for query parameters that can handle both primitive data and sequences
15
- QueryParams = Dict[
16
- str, Union[httpx._types.PrimitiveData, Sequence[httpx._types.PrimitiveData]]
17
- ]
18
-
19
17
 
20
18
  class RequestConfig(TypedDict):
21
19
  """
magic_hour/core/utils.py CHANGED
@@ -21,7 +21,7 @@ def get_response_type(headers: httpx.Headers) -> Literal["json", "text", "binary
21
21
  """Check response type based on content type"""
22
22
  content_type = headers.get("content-type")
23
23
 
24
- if re.search("^application/(.+\+)?json", content_type):
24
+ if re.search("^application/(.+[+])?json", content_type):
25
25
  return "json"
26
26
  elif re.search("^text/(.+)", content_type):
27
27
  return "text"
magic_hour/environment.py CHANGED
@@ -3,4 +3,4 @@ import enum
3
3
 
4
4
  class Environment(enum.Enum):
5
5
  ENVIRONMENT = "https://api.magichour.ai"
6
- MOCK_SERVER = "https://api.sideko.dev/v1/mock/magichour/magic-hour/0.9.3"
6
+ MOCK_SERVER = "https://api.sideko.dev/v1/mock/magichour/magic-hour/0.9.4"
@@ -40,7 +40,7 @@ class GetV1ImageProjectsIdResponse(pydantic.BaseModel):
40
40
  alias="id",
41
41
  )
42
42
  """
43
- Unique ID of the image. This value can be used in the [get image project API](/api/tag/image-projects/get/v1/image-projects/{id}) to fetch additional details such as status
43
+ Unique ID of the image. This value can be used in the [get image project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch additional details such as status
44
44
  """
45
45
  image_count: int = pydantic.Field(
46
46
  alias="image_count",
@@ -67,7 +67,7 @@ class GetV1VideoProjectsIdResponse(pydantic.BaseModel):
67
67
  alias="id",
68
68
  )
69
69
  """
70
- Unique ID of the video. This value can be used in the [get video project API](/api/tag/video-projects/get/v1/video-projects/{id}) to fetch additional details such as status
70
+ 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
71
71
  """
72
72
  name: typing.Optional[str] = pydantic.Field(
73
73
  alias="name",
@@ -21,5 +21,5 @@ class PostV1AiClothesChangerResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the image. This value can be used in the [get image project API](/api/tag/image-projects/get/v1/image-projects/{id}) to fetch additional details such as status
24
+ Unique ID of the image. This value can be used in the [get image project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch additional details such as status
25
25
  """
@@ -21,5 +21,5 @@ class PostV1AiHeadshotGeneratorResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the image. This value can be used in the [get image project API](/api/tag/image-projects/get/v1/image-projects/{id}) to fetch additional details such as status
24
+ Unique ID of the image. This value can be used in the [get image project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch additional details such as status
25
25
  """
@@ -21,5 +21,5 @@ class PostV1AiImageGeneratorResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the image. This value can be used in the [get image project API](/api/tag/image-projects/get/v1/image-projects/{id}) to fetch additional details such as status
24
+ Unique ID of the image. This value can be used in the [get image project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch additional details such as status
25
25
  """
@@ -21,5 +21,5 @@ class PostV1AiImageUpscalerResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the image. This value can be used in the [get image project API](/api/tag/image-projects/get/v1/image-projects/{id}) to fetch additional details such as status
24
+ Unique ID of the image. This value can be used in the [get image project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch additional details such as status
25
25
  """
@@ -21,5 +21,5 @@ class PostV1AiPhotoEditorResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the image. This value can be used in the [get image project API](/api/tag/image-projects/get/v1/image-projects/{id}) to fetch additional details such as status
24
+ Unique ID of the image. This value can be used in the [get image project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch additional details such as status
25
25
  """
@@ -21,5 +21,5 @@ class PostV1AiQrCodeGeneratorResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the image. This value can be used in the [get image project API](/api/tag/image-projects/get/v1/image-projects/{id}) to fetch additional details such as status
24
+ Unique ID of the image. This value can be used in the [get image project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch additional details such as status
25
25
  """
@@ -21,5 +21,5 @@ class PostV1AnimationResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the video. This value can be used in the [get video project API](/api/tag/video-projects/get/v1/video-projects/{id}) to fetch additional details such as status
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
25
  """
@@ -21,5 +21,5 @@ class PostV1FaceSwapPhotoResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the image. This value can be used in the [get image project API](/api/tag/image-projects/get/v1/image-projects/{id}) to fetch additional details such as status
24
+ Unique ID of the image. This value can be used in the [get image project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch additional details such as status
25
25
  """
@@ -21,5 +21,5 @@ class PostV1FaceSwapResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the image. This value can be used in the [get image project API](/api/tag/image-projects/get/v1/image-projects/{id}) to fetch additional details such as status
24
+ Unique ID of the image. This value can be used in the [get image project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch additional details such as status
25
25
  """
@@ -21,5 +21,5 @@ class PostV1ImageBackgroundRemoverResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the image. This value can be used in the [get image project API](/api/tag/image-projects/get/v1/image-projects/{id}) to fetch additional details such as status
24
+ Unique ID of the image. This value can be used in the [get image project API](https://docs.magichour.ai/api-reference/image-projects/get-image-details) to fetch additional details such as status
25
25
  """
@@ -21,5 +21,5 @@ class PostV1ImageToVideoResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the video. This value can be used in the [get video project API](/api/tag/video-projects/get/v1/video-projects/{id}) to fetch additional details such as status
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
25
  """
@@ -21,5 +21,5 @@ class PostV1LipSyncResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the video. This value can be used in the [get video project API](/api/tag/video-projects/get/v1/video-projects/{id}) to fetch additional details such as status
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
25
  """
@@ -21,5 +21,5 @@ class PostV1TextToVideoResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the video. This value can be used in the [get video project API](/api/tag/video-projects/get/v1/video-projects/{id}) to fetch additional details such as status
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
25
  """
@@ -21,5 +21,5 @@ class PostV1VideoToVideoResponse(pydantic.BaseModel):
21
21
  alias="id",
22
22
  )
23
23
  """
24
- Unique ID of the video. This value can be used in the [get video project API](/api/tag/video-projects/get/v1/video-projects/{id}) to fetch additional details such as status
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
25
  """
@@ -9,7 +9,7 @@ class PostV1AiClothesChangerBodyAssets(typing_extensions.TypedDict):
9
9
 
10
10
  garment_file_path: typing_extensions.Required[str]
11
11
  """
12
- The image of the outfit. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file..
12
+ The image of the outfit. 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
13
  """
14
14
 
15
15
  garment_type: typing_extensions.Required[
@@ -18,7 +18,7 @@ class PostV1AiClothesChangerBodyAssets(typing_extensions.TypedDict):
18
18
 
19
19
  person_file_path: typing_extensions.Required[str]
20
20
  """
21
- The image with the person. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file..
21
+ The image with the person. 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..
22
22
  """
23
23
 
24
24
 
@@ -9,7 +9,7 @@ class PostV1AiHeadshotGeneratorBodyAssets(typing_extensions.TypedDict):
9
9
 
10
10
  image_file_path: typing_extensions.Required[str]
11
11
  """
12
- The image used to generate the headshot. This image must contain one detectable face. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
12
+ The image used to generate the headshot. This image must contain one detectable face. 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
13
  """
14
14
 
15
15
 
@@ -9,7 +9,7 @@ class PostV1AiImageUpscalerBodyAssets(typing_extensions.TypedDict):
9
9
 
10
10
  image_file_path: typing_extensions.Required[str]
11
11
  """
12
- The image to upscale. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
12
+ The image to upscale. 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
13
  """
14
14
 
15
15
 
@@ -9,7 +9,7 @@ class PostV1AiPhotoEditorBodyAssets(typing_extensions.TypedDict):
9
9
 
10
10
  image_file_path: typing_extensions.Required[str]
11
11
  """
12
- The image used to generate the output. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
12
+ The image used to generate the output. 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
13
  """
14
14
 
15
15
 
@@ -10,7 +10,7 @@ class PostV1AnimationBodyAssets(typing_extensions.TypedDict):
10
10
 
11
11
  audio_file_path: typing_extensions.NotRequired[str]
12
12
  """
13
- The path of the input audio. This field is required if `audio_source` is `file`. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
13
+ The path of the input audio. This field is required if `audio_source` is `file`. 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.
14
14
  """
15
15
 
16
16
  audio_source: typing_extensions.Required[
@@ -22,7 +22,7 @@ class PostV1AnimationBodyAssets(typing_extensions.TypedDict):
22
22
 
23
23
  image_file_path: typing_extensions.NotRequired[str]
24
24
  """
25
- An initial image to use a the first frame of the video. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
25
+ An initial image to use a the first frame of the video. 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.
26
26
  """
27
27
 
28
28
  youtube_url: typing_extensions.NotRequired[str]
@@ -10,12 +10,12 @@ class PostV1FaceSwapBodyAssets(typing_extensions.TypedDict):
10
10
 
11
11
  image_file_path: typing_extensions.Required[str]
12
12
  """
13
- The path of the input image. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
13
+ The path of the input 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.
14
14
  """
15
15
 
16
16
  video_file_path: typing_extensions.NotRequired[str]
17
17
  """
18
- The path of the input video. This field is required if `video_source` is `file`. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
18
+ The path of the input video. This field is required if `video_source` is `file`. 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.
19
19
  """
20
20
 
21
21
  video_source: typing_extensions.Required[
@@ -9,12 +9,12 @@ class PostV1FaceSwapPhotoBodyAssets(typing_extensions.TypedDict):
9
9
 
10
10
  source_file_path: typing_extensions.Required[str]
11
11
  """
12
- This is the image from which the face is extracted. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
12
+ This is the image from which the face is extracted. 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
13
  """
14
14
 
15
15
  target_file_path: typing_extensions.Required[str]
16
16
  """
17
- This is the image where the face from the source image will be placed. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
17
+ This is the image where the face from the source image will be placed. 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
18
  """
19
19
 
20
20
 
@@ -9,7 +9,7 @@ class PostV1ImageBackgroundRemoverBodyAssets(typing_extensions.TypedDict):
9
9
 
10
10
  image_file_path: typing_extensions.Required[str]
11
11
  """
12
- The image used to generate the image. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
12
+ The image used to generate 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
13
  """
14
14
 
15
15
 
@@ -9,7 +9,7 @@ class PostV1ImageToVideoBodyAssets(typing_extensions.TypedDict):
9
9
 
10
10
  image_file_path: typing_extensions.Required[str]
11
11
  """
12
- The path of the image file. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
12
+ The path of the image file. 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
13
  """
14
14
 
15
15
 
@@ -10,12 +10,12 @@ class PostV1LipSyncBodyAssets(typing_extensions.TypedDict):
10
10
 
11
11
  audio_file_path: typing_extensions.Required[str]
12
12
  """
13
- The path of the audio file. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
13
+ The path of the audio file. 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.
14
14
  """
15
15
 
16
16
  video_file_path: typing_extensions.NotRequired[str]
17
17
  """
18
- The path of the input video. This field is required if `video_source` is `file`. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
18
+ The path of the input video. This field is required if `video_source` is `file`. 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.
19
19
  """
20
20
 
21
21
  video_source: typing_extensions.Required[
@@ -10,7 +10,7 @@ class PostV1VideoToVideoBodyAssets(typing_extensions.TypedDict):
10
10
 
11
11
  video_file_path: typing_extensions.NotRequired[str]
12
12
  """
13
- The path of the input video. This field is required if `video_source` is `file`. This value can be either the `file_path` field from the response of the [upload urls API](/docs/api/tag/files/post/v1/files/upload-urls), or the url of the file.
13
+ The path of the input video. This field is required if `video_source` is `file`. 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.
14
14
  """
15
15
 
16
16
  video_source: typing_extensions.Required[
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: magic_hour
3
- Version: 0.9.3
3
+ Version: 0.9.4
4
4
  Summary: Python SDK for Magic Hour API
5
5
  Requires-Python: >=3.8,<4.0
6
6
  Classifier: Programming Language :: Python :: 3
@@ -1,15 +1,16 @@
1
1
  magic_hour/__init__.py,sha256=9mcpfN52bfc0cw9wEz7dXOVpOsUuGmVdqFQ79NdnGYU,203
2
- magic_hour/client.py,sha256=2UhLa0mDgXsr5PQuPT5DUgwvXBVrwV1GskWUy5nKrr8,2014
3
- magic_hour/core/__init__.py,sha256=i6cIezufptVYpQS9F90nLCDIliQVXjUBsufIXmuI_9g,1145
2
+ magic_hour/client.py,sha256=PL9UGz8eA4fSqP-xuo4znQYO27rOyr8fSf2z7DA6yBY,2014
3
+ magic_hour/core/__init__.py,sha256=s2y_QWfn976ilhDlvKGz-QWhAYcRDzvtAYnLbMMOTEA,1167
4
4
  magic_hour/core/api_error.py,sha256=K1d47qRbhLBNEaUVbs0NPgxee24X3qGZ37gBhleUzEE,1760
5
5
  magic_hour/core/auth.py,sha256=NSjPcmTyHelRag9FqH1ufbchBWQgGDpH2P0akfppIPo,9130
6
6
  magic_hour/core/base_client.py,sha256=H9FJtNvN3ZfjjnPq4t9HXgh0c1324x1RFtAHXWEnqWk,18846
7
7
  magic_hour/core/binary_response.py,sha256=T-DATvb21P2ZRnYa4LlXmF77VfM8Tut2951QHEQct_U,681
8
- magic_hour/core/request.py,sha256=zdw-rie5wCy9MxIQ5ilhnZaBVPRyF8WAiZ5pGTam7Oc,5224
8
+ magic_hour/core/query.py,sha256=Z4NB5gSkJ8KMJU2vleHP_dx0NisP0v8S0em5XVlS_tE,4247
9
+ magic_hour/core/request.py,sha256=lyHrh2VWY238D7JPbgZJlodTqBlHSmQn4fBJiBfE1Es,5069
9
10
  magic_hour/core/response.py,sha256=Sl7nPL2axmz7em_6d9TkFSnQQKUpalWaVWbPPWoXJgM,10180
10
11
  magic_hour/core/type_utils.py,sha256=4bU9WXnMXJ6YTtuqOMiB8t6Xw0RlfVWJ-IDBONlqEtQ,461
11
- magic_hour/core/utils.py,sha256=Cp0SH9nBsdL53kCJSCsHgoJoo0HuXYmxShhQgeHw0KQ,1668
12
- magic_hour/environment.py,sha256=UPk4hchifaXp_W47nz38Dvv-A228cSWxi3EO1-8_4c0,167
12
+ magic_hour/core/utils.py,sha256=34SiC1vw2A0TkYHONgMA_d09soIIYiiBWRXCZGdwGIk,1669
13
+ magic_hour/environment.py,sha256=7sYhqvIiBoGQZQ_Q_OS09mpUx0fMGm1D1nv1azv65cI,167
13
14
  magic_hour/resources/v1/__init__.py,sha256=Aj0sjVcoijjQyieNBxv2_uewPYC2vO2UG-ehoBgCz5E,86
14
15
  magic_hour/resources/v1/ai_clothes_changer/README.md,sha256=KQTvbttct5GcdOJW3NG5gCsWF6G2qlwIoBjBd92TjUs,977
15
16
  magic_hour/resources/v1/ai_clothes_changer/__init__.py,sha256=6W_Y2HxG2sDOBiJyzngK3Q2S3xfQgpK-j8xFRmBAhbQ,142
@@ -66,66 +67,66 @@ magic_hour/resources/v1/video_to_video/README.md,sha256=yzTvpH-7hwXiuwNDykzVIfzr
66
67
  magic_hour/resources/v1/video_to_video/__init__.py,sha256=1SHaRLlsrlBkdxxKBYgdbHrGATlRvqlXc22RpjjHaOA,126
67
68
  magic_hour/resources/v1/video_to_video/client.py,sha256=2ITdQuy2t8oxQCJ23YKqX_XSmQpoiJlivP6wo5qwDn8,8162
68
69
  magic_hour/types/models/__init__.py,sha256=fNhJtvVAFiSKzXt57UnvNozv6QYWZURU36pWTVoZQ-M,2790
69
- magic_hour/types/models/get_v1_image_projects_id_response.py,sha256=8SsbpC_HTl1TDmqRgpKK7Vbj4kM_vnuhm_AZ4uIaf80,2140
70
+ magic_hour/types/models/get_v1_image_projects_id_response.py,sha256=5bLmMY2Hr83SIen1JR-tCX_IHBkAEvWAl519DrQ3x1A,2162
70
71
  magic_hour/types/models/get_v1_image_projects_id_response_downloads_item.py,sha256=ianjZWSKWOIRWAtakZKO_nn9YZXUuhVRatzXJnzQwKg,412
71
72
  magic_hour/types/models/get_v1_image_projects_id_response_error.py,sha256=nsgmUJ4wxhgRaBuOLSGw6c7AZcj7QZ8EUbuyR1Y0rZg,576
72
- magic_hour/types/models/get_v1_video_projects_id_response.py,sha256=VI5QFe3yjDWtynFKj7YItAXXwZ8u1NXZvorSnTsEx2U,3441
73
+ magic_hour/types/models/get_v1_video_projects_id_response.py,sha256=iSnHXHEjLRUBey6rK_cQfI7dJhuuVOXeDJ1WWUpQEO4,3463
73
74
  magic_hour/types/models/get_v1_video_projects_id_response_download.py,sha256=2UMuKoaYw75FI2Fy0vxiOmhCZTyqp8CqCnzrRoOmCuM,452
74
75
  magic_hour/types/models/get_v1_video_projects_id_response_downloads_item.py,sha256=u7yc9t6ezffB-QY95LrmE5NULdsQr0LqrJHGf3v8FYU,412
75
76
  magic_hour/types/models/get_v1_video_projects_id_response_error.py,sha256=5kkCjHrcT2WkyEyGkbkhhbfOTRFR6kmxxVG1OvSVzh0,576
76
- magic_hour/types/models/post_v1_ai_clothes_changer_response.py,sha256=kB_9-I21NNkBW61P3DXseqRkFZY07FRTcB5nsqf6P9w,601
77
- magic_hour/types/models/post_v1_ai_headshot_generator_response.py,sha256=g7hveQ-iPWutYEllQWkQoSPQ-pzza7UoS_s0uXd3MV4,604
78
- magic_hour/types/models/post_v1_ai_image_generator_response.py,sha256=trxRXIUj8-wE1gymgBus0IugYmxMxcnXl-5Z7-oESkQ,601
79
- magic_hour/types/models/post_v1_ai_image_upscaler_response.py,sha256=1gtVv85HHTmO9rq-wdVS2bCv-_6v2hjrT87h-Grr4yw,600
80
- magic_hour/types/models/post_v1_ai_photo_editor_response.py,sha256=DieY2kQHeeB2Tc1Ovp4_byvQn0ZvJUPRcSeJhL8j6_o,598
81
- magic_hour/types/models/post_v1_ai_qr_code_generator_response.py,sha256=vVwyjHrz7hIR44XORGAlVEs_WMisiCU9bf1nI7qSA2Y,602
82
- magic_hour/types/models/post_v1_animation_response.py,sha256=XGtj99dWPgP2L7YrQUx7NubyIPAJKG_STu1Spyqr8nY,709
83
- magic_hour/types/models/post_v1_face_swap_photo_response.py,sha256=HD2MSTT6IPbadLJN_MbwEw3geaDOXKyA5xNV465ZQSM,598
84
- magic_hour/types/models/post_v1_face_swap_response.py,sha256=bCfyKgEoK5RzELuyvsZYwEHyHDhuRLmo4fZuOmow11M,708
77
+ magic_hour/types/models/post_v1_ai_clothes_changer_response.py,sha256=V_rk2UV7b06knrVik-vvAQdMCv0uz_P6V7aV5FmMRZQ,623
78
+ magic_hour/types/models/post_v1_ai_headshot_generator_response.py,sha256=gs5Fw7EL3G-6pjTIq7nz_rUKAPjlQT8Yh1O4Pl2liSE,626
79
+ magic_hour/types/models/post_v1_ai_image_generator_response.py,sha256=07lgeQTwvtmst3QWY2B1HXZ4reaNY7lGbvFAJzxjZR0,623
80
+ magic_hour/types/models/post_v1_ai_image_upscaler_response.py,sha256=L4BbZeaoiWm3tIkr9Q_Xtng0cfOmhxIUvMHS5cHqzTE,622
81
+ magic_hour/types/models/post_v1_ai_photo_editor_response.py,sha256=F508dGQqh4-EKhKOre5gi4VFVYWJtVs-MIKj7OlEBXw,620
82
+ magic_hour/types/models/post_v1_ai_qr_code_generator_response.py,sha256=XIgb2ctWKIK_sMctwt1Dmm6HyEltTlGuI-a2wazXeIU,624
83
+ magic_hour/types/models/post_v1_animation_response.py,sha256=Hvz5a8MDAUjCA_8Zf_db1H7shO364tAOBayDHvGEoeQ,731
84
+ magic_hour/types/models/post_v1_face_swap_photo_response.py,sha256=VZYNPAZUTYOnHROI50Q_nojWPcvYdb-b-IQw2uWgtbw,620
85
+ magic_hour/types/models/post_v1_face_swap_response.py,sha256=h3TtemKBbbuXGwKrGj8ced10jkrFrAoMxTWAaUF6_Vg,730
85
86
  magic_hour/types/models/post_v1_files_upload_urls_response.py,sha256=dPHBPnCyigVy2GJptnFazGUgweE1CUzQsSXYrvNNOaE,452
86
87
  magic_hour/types/models/post_v1_files_upload_urls_response_items_item.py,sha256=ABemYYr4T6GOocxngMXq33gfM7oW_r6fqpPQypyNnNU,795
87
- magic_hour/types/models/post_v1_image_background_remover_response.py,sha256=3MoAbkFWYzXXPzhpdJF7599uUbRa7IcQhpBdS25o0PY,607
88
- magic_hour/types/models/post_v1_image_to_video_response.py,sha256=k6QtHzASUQhWLqVPOFXA5_mhIRoqo6YWUgMSxfeLnBg,712
89
- magic_hour/types/models/post_v1_lip_sync_response.py,sha256=rgNo935rl_5vuA0egLblAUVnOjvS2edd1D-rdfr9KcY,707
90
- magic_hour/types/models/post_v1_text_to_video_response.py,sha256=GJM5dSpXFZMQL-DO1DJVCtTqy4qmWadxh0vvZ5h7p6g,711
91
- magic_hour/types/models/post_v1_video_to_video_response.py,sha256=vZmfR3YnvVn6uLNJQax1iVs1o0nkHqabUEgEM5C0xn4,712
88
+ magic_hour/types/models/post_v1_image_background_remover_response.py,sha256=A2RPPB0b2PSmdvhoc1W9zuLMRi_O4nbA1_kllRdxFF8,629
89
+ magic_hour/types/models/post_v1_image_to_video_response.py,sha256=IZ-itRZq-5y4wdn1K7j_DzMzRgcLP5V9GT7UrApUias,734
90
+ magic_hour/types/models/post_v1_lip_sync_response.py,sha256=2dFcwP4NhTbkHAhgC1zbch2dImE2WBfM6aPkNOeTdwI,729
91
+ magic_hour/types/models/post_v1_text_to_video_response.py,sha256=j--7szYxsDP_MDHTGUvo5WVzOqw0zceW3WKO3LPuQfE,733
92
+ magic_hour/types/models/post_v1_video_to_video_response.py,sha256=X1SwCuS4vdLVEz_5fkWG1ujupsGVmSyaVSN4Kpnd928,734
92
93
  magic_hour/types/params/__init__.py,sha256=Jhjcz5AamCr5Uv5YK1PStOOsYlFTwzzhd1rPvSAcmz8,7225
93
94
  magic_hour/types/params/post_v1_ai_clothes_changer_body.py,sha256=Bbj8EeRMWCnogOhkJ7PiKGlwa6_Jqde1uzU5HTgJ6X4,988
94
- magic_hour/types/params/post_v1_ai_clothes_changer_body_assets.py,sha256=KVUTyMBLsddJypIF60emDlUhI2dPNA0x1CFXRFt0uM4,1449
95
+ magic_hour/types/params/post_v1_ai_clothes_changer_body_assets.py,sha256=wpQVW5jflf3ID2TViBHY9RkQ9PCZa9ClKz-UvINL_Ag,1503
95
96
  magic_hour/types/params/post_v1_ai_headshot_generator_body.py,sha256=-HDQNE7hg45EPQVBYs-144l5pEjhHZeXlHSf2g7wlYY,1014
96
- magic_hour/types/params/post_v1_ai_headshot_generator_body_assets.py,sha256=Zs8ADjqKExW2TIGOeyKWCdD_wAkDCumX9DHOGcYq4ks,875
97
+ magic_hour/types/params/post_v1_ai_headshot_generator_body_assets.py,sha256=k_ADY5wlQn0YNoFXRd0hojG7SE7Tyapk7R5S3optDqY,902
97
98
  magic_hour/types/params/post_v1_ai_image_generator_body.py,sha256=R1Soif6cetbQQDAzEBjhSOjYb0InZyBYpg8xJ8yGAeY,1370
98
99
  magic_hour/types/params/post_v1_ai_image_generator_body_style.py,sha256=vU83w7LRyQDXFgsS9-Q7W1HZ7Gz9pQNYFxAQCVwe-KY,613
99
100
  magic_hour/types/params/post_v1_ai_image_upscaler_body.py,sha256=KohjidTxMB4_JBzO4QAicfkNX7iv6zi7qqr4KLRmfcE,1483
100
- magic_hour/types/params/post_v1_ai_image_upscaler_body_assets.py,sha256=IgyUbwD4ygjvDyc2hjX-cQsxY-kjFSZ2UVacxgIM11A,794
101
+ magic_hour/types/params/post_v1_ai_image_upscaler_body_assets.py,sha256=kkPzpDWXxO9E3jB_DOJyHqAZvYLZUQsrJ4DVeEa2Ypk,821
101
102
  magic_hour/types/params/post_v1_ai_image_upscaler_body_style.py,sha256=RgQT3tigTxb5-QDLbpIE_nzVdUHdHuqv_eUhKVuyY5g,985
102
103
  magic_hour/types/params/post_v1_ai_photo_editor_body.py,sha256=ZccSuSVOmtH-E-r6kIjFFk0xbcNlEfBafzuDyS9CuX4,1912
103
- magic_hour/types/params/post_v1_ai_photo_editor_body_assets.py,sha256=U96Iobt-UHhdh8EVvWcHU3wLkrtrx1t-UNZtMdD2rCM,808
104
+ magic_hour/types/params/post_v1_ai_photo_editor_body_assets.py,sha256=DnJddrUK-RZ0Av538L9TpNYGQcawBfg4JY42ADb4HpY,835
104
105
  magic_hour/types/params/post_v1_ai_photo_editor_body_style.py,sha256=d_BCTM1MEHP7mL6jWIs5LOYacTOvu1ftzusmGi9fvJk,2065
105
106
  magic_hour/types/params/post_v1_ai_qr_code_generator_body.py,sha256=J0IT4WRRIBGZjfu_eCvq1UenT0irY1Cf5nxdl9K9TOE,1091
106
107
  magic_hour/types/params/post_v1_ai_qr_code_generator_body_style.py,sha256=c523YFzkZb0nnzFzGbmX1YPuXuT_PEs7mOW_unLFOFw,831
107
108
  magic_hour/types/params/post_v1_animation_body.py,sha256=AmO2QsJ09Q5MyjwdZTsasflibsQyYEUI7S1R028cToQ,2193
108
- magic_hour/types/params/post_v1_animation_body_assets.py,sha256=tPItT9Ly-KUs_q886L8gVAuAExZoRlg7TbSmerAFP9I,1905
109
+ magic_hour/types/params/post_v1_animation_body_assets.py,sha256=rDvL-1M37L80pd2XOhMFTRnzSKdnNy2rlcwbzatt8qw,1959
109
110
  magic_hour/types/params/post_v1_animation_body_style.py,sha256=oBy3jEiP7ptqmoMxr9OUTaWyt_4MrBjRO46034FqAB4,8039
110
111
  magic_hour/types/params/post_v1_face_swap_body.py,sha256=Hlvv6OFy9UuhaUVX-887dJx3uIKwS3MLphZEhvgLFtU,1995
111
- magic_hour/types/params/post_v1_face_swap_body_assets.py,sha256=e8_1b8nE4HOas6DeZLxVHKPrlFKCDV2rjesqvfD-NUs,1828
112
+ magic_hour/types/params/post_v1_face_swap_body_assets.py,sha256=B-OmdG2CuQ3He5053McQodfCOoLg70gXJkjtBt96rM8,1882
112
113
  magic_hour/types/params/post_v1_face_swap_photo_body.py,sha256=EEvxhjVZdlKMlCbdhDo6DAXLIRnPR3VwdEioXBWXfYo,961
113
- magic_hour/types/params/post_v1_face_swap_photo_body_assets.py,sha256=HZtyTcPZWGShDa44SC_PRckMlIIIvgECFw2BWhSPo0U,1219
114
+ magic_hour/types/params/post_v1_face_swap_photo_body_assets.py,sha256=9ewZtmUDR-KhqSjgevy40tmlyWfgGln9vCHdgSGGUFU,1273
114
115
  magic_hour/types/params/post_v1_files_upload_urls_body.py,sha256=njjElsiBXMs_qVij4hx-YdguMFZQqaVqhtYGOr2hAlo,799
115
116
  magic_hour/types/params/post_v1_files_upload_urls_body_items_item.py,sha256=bKZAxXRC_ShAZJJe8iF8Y7ixWt7KSWD3G53vIt2qCQ0,964
116
117
  magic_hour/types/params/post_v1_image_background_remover_body.py,sha256=NGJj0iwpm-zD7iAV5jkuroAHtD9PtcHKGsFykTzQ__Y,1045
117
- magic_hour/types/params/post_v1_image_background_remover_body_assets.py,sha256=ILA6p3oEM_kMwXXunnDI4bvECscS6Ugza2awenL3dMk,840
118
+ magic_hour/types/params/post_v1_image_background_remover_body_assets.py,sha256=uQQY5DZwIHMNqHfgt_l20eLqp3mJ07IqW-Wn6DPqbZA,867
118
119
  magic_hour/types/params/post_v1_image_to_video_body.py,sha256=r7xgMOKA8mKS_btf0glgEH4bkfsUwhXLBhqhJ6tTafM,2014
119
- magic_hour/types/params/post_v1_image_to_video_body_assets.py,sha256=VwuT9RsSLbim46Vrq5EjpqPwFD0Gyip37_ndRjY6dpg,797
120
+ magic_hour/types/params/post_v1_image_to_video_body_assets.py,sha256=ZD3Jf1kydjHDsWLsaYYeBo4AaX4kUmdFLMgDxoKjSsk,824
120
121
  magic_hour/types/params/post_v1_image_to_video_body_style.py,sha256=V2gCgFwFVlDfM_mjYNVrBYDw2wuYf7FNqS80XOWDcfw,952
121
122
  magic_hour/types/params/post_v1_lip_sync_body.py,sha256=9X-gk-hLBx8eXXTE4Rgo1EPTDwSOC5FQzBdw-rIFFm8,2430
122
- magic_hour/types/params/post_v1_lip_sync_body_assets.py,sha256=taDZlsw2R6IW3g6OQEZQyWq0azjYci859CKpPWxNd9w,1823
123
+ magic_hour/types/params/post_v1_lip_sync_body_assets.py,sha256=GqygQRU02ldsT9qwZhdfTvqd1FOJCWb1Nb6Eoddzz60,1877
123
124
  magic_hour/types/params/post_v1_text_to_video_body.py,sha256=q9aFGvmh6xEu_1quAB1O5qqvn0Vt9dXt_7vxgxDqBkI,1418
124
125
  magic_hour/types/params/post_v1_text_to_video_body_style.py,sha256=8-zyz32Gz3qkeuL4y-ZWxdx-fktecKoOKtkqQRoLDMY,593
125
126
  magic_hour/types/params/post_v1_video_to_video_body.py,sha256=dbazkWaGco73sSirtD-Q6vnLzF4BZa4Od87UTih1_-o,2914
126
- magic_hour/types/params/post_v1_video_to_video_body_assets.py,sha256=0q7LCWMYJlAOjxl0b9F2BLIZbX40H16RJf8teg-TGGM,1498
127
+ magic_hour/types/params/post_v1_video_to_video_body_assets.py,sha256=k_CmCxlLf1m5wCswW2exjOxMiqMeD-nqvMLwIzrb97k,1525
127
128
  magic_hour/types/params/post_v1_video_to_video_body_style.py,sha256=RQWr8VJqipM4YmNwGCQXWf7XT7O8Y2hgqxRRH1Vh7Cs,5457
128
- magic_hour-0.9.3.dist-info/LICENSE,sha256=F3fxj7JXPgB2K0uj8YXRsVss4u-Dgt_-U3V4VXsivNI,1070
129
- magic_hour-0.9.3.dist-info/METADATA,sha256=BWkes17TXOOPoo8b7xh-2VOm2hvih4Nu5Cpa8olXNqM,4654
130
- magic_hour-0.9.3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
131
- magic_hour-0.9.3.dist-info/RECORD,,
129
+ magic_hour-0.9.4.dist-info/LICENSE,sha256=F3fxj7JXPgB2K0uj8YXRsVss4u-Dgt_-U3V4VXsivNI,1070
130
+ magic_hour-0.9.4.dist-info/METADATA,sha256=AAZJVakiHucZr2Qwg9yq_DLdjewa56MnUFMiLn4ssxw,4654
131
+ magic_hour-0.9.4.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
132
+ magic_hour-0.9.4.dist-info/RECORD,,