magic_hour 0.23.0__py3-none-any.whl → 0.24.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 (30) hide show
  1. magic_hour/core/query.py +5 -6
  2. magic_hour/environment.py +1 -1
  3. magic_hour/resources/v1/ai_clothes_changer/README.md +9 -0
  4. magic_hour/resources/v1/ai_face_editor/README.md +10 -0
  5. magic_hour/resources/v1/ai_gif_generator/README.md +9 -0
  6. magic_hour/resources/v1/ai_headshot_generator/README.md +10 -0
  7. magic_hour/resources/v1/ai_image_generator/README.md +13 -2
  8. magic_hour/resources/v1/ai_image_generator/client.py +2 -2
  9. magic_hour/resources/v1/ai_image_upscaler/README.md +11 -0
  10. magic_hour/resources/v1/ai_meme_generator/README.md +9 -0
  11. magic_hour/resources/v1/ai_photo_editor/README.md +12 -0
  12. magic_hour/resources/v1/ai_qr_code_generator/README.md +10 -0
  13. magic_hour/resources/v1/ai_talking_photo/README.md +12 -0
  14. magic_hour/resources/v1/animation/README.md +14 -0
  15. magic_hour/resources/v1/face_swap/README.md +13 -0
  16. magic_hour/resources/v1/face_swap_photo/README.md +9 -0
  17. magic_hour/resources/v1/files/upload_urls/README.md +8 -0
  18. magic_hour/resources/v1/image_background_remover/README.md +9 -0
  19. magic_hour/resources/v1/image_projects/README.md +16 -0
  20. magic_hour/resources/v1/image_to_video/README.md +13 -0
  21. magic_hour/resources/v1/lip_sync/README.md +14 -0
  22. magic_hour/resources/v1/photo_colorizer/README.md +9 -0
  23. magic_hour/resources/v1/text_to_video/README.md +11 -0
  24. magic_hour/resources/v1/video_projects/README.md +16 -0
  25. magic_hour/resources/v1/video_to_video/README.md +15 -0
  26. magic_hour/types/params/v1_ai_image_generator_create_body_style.py +83 -0
  27. {magic_hour-0.23.0.dist-info → magic_hour-0.24.0.dist-info}/METADATA +1 -1
  28. {magic_hour-0.23.0.dist-info → magic_hour-0.24.0.dist-info}/RECORD +30 -30
  29. {magic_hour-0.23.0.dist-info → magic_hour-0.24.0.dist-info}/LICENSE +0 -0
  30. {magic_hour-0.23.0.dist-info → magic_hour-0.24.0.dist-info}/WHEEL +0 -0
magic_hour/core/query.py CHANGED
@@ -2,7 +2,6 @@ import json
2
2
 
3
3
  from typing import Any, Dict, Union
4
4
  from typing_extensions import Literal, Sequence
5
- from urllib.parse import quote_plus, quote
6
5
 
7
6
  import httpx
8
7
 
@@ -47,19 +46,19 @@ def _encode_form(params: QueryParams, name: str, value: Any, explode: bool):
47
46
  """
48
47
  if isinstance(value, list) and not explode:
49
48
  # non-explode form lists should be encoded like /users?id=3,4,5
50
- params[name] = quote_plus(",".join(map(_query_str, value)))
49
+ params[name] = ",".join(map(_query_str, value))
51
50
  elif isinstance(value, dict):
52
51
  if explode:
53
52
  # explode form objects should be encoded like /users?key0=val0&key1=val1
54
53
  # the input param name will be omitted
55
54
  for k, v in value.items():
56
- params[k] = quote_plus(_query_str(v))
55
+ params[k] = _query_str(v)
57
56
  else:
58
57
  # non-explode form objects should be encoded like /users?id=key0,val0,key1,val1
59
58
  encoded_chunks = []
60
59
  for k, v in value.items():
61
60
  encoded_chunks.extend([str(k), _query_str(v)])
62
- params[name] = quote_plus(",".join(encoded_chunks))
61
+ params[name] = ",".join(encoded_chunks)
63
62
  else:
64
63
  params[name] = value
65
64
 
@@ -71,7 +70,7 @@ def _encode_spaced_delimited(params: QueryParams, name: str, value: Any, explode
71
70
  """
72
71
  if isinstance(value, list) and not explode:
73
72
  # non-explode spaceDelimited lists should be encoded like /users?id=3%204%205
74
- params[name] = quote(" ".join(map(_query_str, value)))
73
+ params[name] = " ".join(map(_query_str, value))
75
74
  else:
76
75
  # according to the docs, spaceDelimited + explode=false only effects lists,
77
76
  # all other encodings are marked as n/a or are the same as `form` style
@@ -86,7 +85,7 @@ def _encode_pipe_delimited(params: QueryParams, name: str, value: Any, explode:
86
85
  """
87
86
  if isinstance(value, list) and not explode:
88
87
  # non-explode pipeDelimited lists should be encoded like /users?id=3|4|5
89
- params[name] = quote("|".join(map(_query_str, value)))
88
+ params[name] = "|".join(map(_query_str, value))
90
89
  else:
91
90
  # according to the docs, pipeDelimited + explode=false only effects lists,
92
91
  # all other encodings are marked as n/a or are the same as `form` style
magic_hour/environment.py CHANGED
@@ -6,7 +6,7 @@ class Environment(enum.Enum):
6
6
  """Pre-defined base URLs for the API"""
7
7
 
8
8
  ENVIRONMENT = "https://api.magichour.ai"
9
- MOCK_SERVER = "https://api.sideko.dev/v1/mock/magichour/magic-hour/0.23.0"
9
+ MOCK_SERVER = "https://api.sideko.dev/v1/mock/magichour/magic-hour/0.24.0"
10
10
 
11
11
 
12
12
  def _get_base_url(
@@ -20,6 +20,7 @@ res = client.v1.ai_clothes_changer.create(
20
20
  },
21
21
  name="Clothes Changer image",
22
22
  )
23
+
23
24
  ```
24
25
 
25
26
  #### Asynchronous Client
@@ -37,4 +38,12 @@ res = await client.v1.ai_clothes_changer.create(
37
38
  },
38
39
  name="Clothes Changer image",
39
40
  )
41
+
40
42
  ```
43
+
44
+ #### Parameters
45
+
46
+ | Parameter | Required | Description | Example |
47
+ |-----------|:--------:|-------------|--------|
48
+ | `assets` | ✓ | Provide the assets for clothes changer | `{"garment_file_path": "api-assets/id/outfit.png", "garment_type": "dresses", "person_file_path": "api-assets/id/model.png"}` |
49
+ | `name` | ✗ | The name of image | `"Clothes Changer image"` |
@@ -33,6 +33,7 @@ res = client.v1.ai_face_editor.create(
33
33
  },
34
34
  name="Face Editor image",
35
35
  )
36
+
36
37
  ```
37
38
 
38
39
  #### Asynchronous Client
@@ -63,4 +64,13 @@ res = await client.v1.ai_face_editor.create(
63
64
  },
64
65
  name="Face Editor image",
65
66
  )
67
+
66
68
  ```
69
+
70
+ #### Parameters
71
+
72
+ | Parameter | Required | Description | Example |
73
+ |-----------|:--------:|-------------|--------|
74
+ | `assets` | ✓ | Provide the assets for face editor | `{"image_file_path": "api-assets/id/1234.png"}` |
75
+ | `style` | ✓ | Face editing parameters | `{"enhance_face": False, "eye_gaze_horizontal": 0.0, "eye_gaze_vertical": 0.0, "eye_open_ratio": 0.0, "eyebrow_direction": 0.0, "head_pitch": 0.0, "head_roll": 0.0, "head_yaw": 0.0, "lip_open_ratio": 0.0, "mouth_grim": 0.0, "mouth_position_horizontal": 0.0, "mouth_position_vertical": 0.0, "mouth_pout": 0.0, "mouth_purse": 0.0, "mouth_smile": 0.0}` |
76
+ | `name` | ✗ | The name of image | `"Face Editor image"` |
@@ -15,6 +15,7 @@ client = Client(token=getenv("API_TOKEN"))
15
15
  res = client.v1.ai_gif_generator.create(
16
16
  style={"prompt": "Cute dancing cat, pixel art"}, name="Ai Gif gif"
17
17
  )
18
+
18
19
  ```
19
20
 
20
21
  #### Asynchronous Client
@@ -27,4 +28,12 @@ client = AsyncClient(token=getenv("API_TOKEN"))
27
28
  res = await client.v1.ai_gif_generator.create(
28
29
  style={"prompt": "Cute dancing cat, pixel art"}, name="Ai Gif gif"
29
30
  )
31
+
30
32
  ```
33
+
34
+ #### Parameters
35
+
36
+ | Parameter | Required | Description | Example |
37
+ |-----------|:--------:|-------------|--------|
38
+ | `style` | ✓ | | `{"prompt": "Cute dancing cat, pixel art"}` |
39
+ | `name` | ✗ | The name of gif | `"Ai Gif gif"` |
@@ -15,6 +15,7 @@ client = Client(token=getenv("API_TOKEN"))
15
15
  res = client.v1.ai_headshot_generator.create(
16
16
  assets={"image_file_path": "api-assets/id/1234.png"}, name="Ai Headshot image"
17
17
  )
18
+
18
19
  ```
19
20
 
20
21
  #### Asynchronous Client
@@ -27,4 +28,13 @@ client = AsyncClient(token=getenv("API_TOKEN"))
27
28
  res = await client.v1.ai_headshot_generator.create(
28
29
  assets={"image_file_path": "api-assets/id/1234.png"}, name="Ai Headshot image"
29
30
  )
31
+
30
32
  ```
33
+
34
+ #### Parameters
35
+
36
+ | Parameter | Required | Description | Example |
37
+ |-----------|:--------:|-------------|--------|
38
+ | `assets` | ✓ | Provide the assets for headshot photo | `{"image_file_path": "api-assets/id/1234.png"}` |
39
+ | `name` | ✗ | The name of image | `"Ai Headshot image"` |
40
+ | `style` | ✗ | | `{"prompt": "professional passport photo, business attire, smiling, good posture, light blue background, centered, plain background"}` |
@@ -15,9 +15,10 @@ client = Client(token=getenv("API_TOKEN"))
15
15
  res = client.v1.ai_image_generator.create(
16
16
  image_count=1,
17
17
  orientation="landscape",
18
- style={"prompt": "Cool image"},
18
+ style={"prompt": "Cool image", "tool": "ai-anime-generator"},
19
19
  name="Ai Image image",
20
20
  )
21
+
21
22
  ```
22
23
 
23
24
  #### Asynchronous Client
@@ -30,7 +31,17 @@ client = AsyncClient(token=getenv("API_TOKEN"))
30
31
  res = await client.v1.ai_image_generator.create(
31
32
  image_count=1,
32
33
  orientation="landscape",
33
- style={"prompt": "Cool image"},
34
+ style={"prompt": "Cool image", "tool": "ai-anime-generator"},
34
35
  name="Ai Image image",
35
36
  )
37
+
36
38
  ```
39
+
40
+ #### Parameters
41
+
42
+ | Parameter | Required | Description | Example |
43
+ |-----------|:--------:|-------------|--------|
44
+ | `image_count` | ✓ | number to images to generate | `1` |
45
+ | `orientation` | ✓ | | `"landscape"` |
46
+ | `style` | ✓ | | `{"prompt": "Cool image", "tool": "ai-anime-generator"}` |
47
+ | `name` | ✗ | The name of image | `"Ai Image image"` |
@@ -53,7 +53,7 @@ class AiImageGeneratorClient:
53
53
  client.v1.ai_image_generator.create(
54
54
  image_count=1,
55
55
  orientation="landscape",
56
- style={"prompt": "Cool image"},
56
+ style={"prompt": "Cool image", "tool": "ai-anime-generator"},
57
57
  name="Ai Image image",
58
58
  )
59
59
  ```
@@ -118,7 +118,7 @@ class AsyncAiImageGeneratorClient:
118
118
  await client.v1.ai_image_generator.create(
119
119
  image_count=1,
120
120
  orientation="landscape",
121
- style={"prompt": "Cool image"},
121
+ style={"prompt": "Cool image", "tool": "ai-anime-generator"},
122
122
  name="Ai Image image",
123
123
  )
124
124
  ```
@@ -18,6 +18,7 @@ res = client.v1.ai_image_upscaler.create(
18
18
  style={"enhancement": "Balanced"},
19
19
  name="Image Upscaler image",
20
20
  )
21
+
21
22
  ```
22
23
 
23
24
  #### Asynchronous Client
@@ -33,4 +34,14 @@ res = await client.v1.ai_image_upscaler.create(
33
34
  style={"enhancement": "Balanced"},
34
35
  name="Image Upscaler image",
35
36
  )
37
+
36
38
  ```
39
+
40
+ #### Parameters
41
+
42
+ | Parameter | Required | Description | Example |
43
+ |-----------|:--------:|-------------|--------|
44
+ | `assets` | ✓ | Provide the assets for upscaling | `{"image_file_path": "api-assets/id/1234.png"}` |
45
+ | `scale_factor` | ✓ | How much to scale the image. Must be either 2 or 4 | `2.0` |
46
+ | `style` | ✓ | | `{"enhancement": "Balanced"}` |
47
+ | `name` | ✗ | The name of image | `"Image Upscaler image"` |
@@ -20,6 +20,7 @@ res = client.v1.ai_meme_generator.create(
20
20
  },
21
21
  name="My Funny Meme",
22
22
  )
23
+
23
24
  ```
24
25
 
25
26
  #### Asynchronous Client
@@ -37,4 +38,12 @@ res = await client.v1.ai_meme_generator.create(
37
38
  },
38
39
  name="My Funny Meme",
39
40
  )
41
+
40
42
  ```
43
+
44
+ #### Parameters
45
+
46
+ | Parameter | Required | Description | Example |
47
+ |-----------|:--------:|-------------|--------|
48
+ | `style` | ✓ | | `{"search_web": False, "template": "Drake Hotline Bling", "topic": "When the code finally works"}` |
49
+ | `name` | ✗ | The name of the meme. | `"My Funny Meme"` |
@@ -29,6 +29,7 @@ res = client.v1.ai_photo_editor.create(
29
29
  },
30
30
  name="Photo Editor image",
31
31
  )
32
+
32
33
  ```
33
34
 
34
35
  #### Asynchronous Client
@@ -53,4 +54,15 @@ res = await client.v1.ai_photo_editor.create(
53
54
  },
54
55
  name="Photo Editor image",
55
56
  )
57
+
56
58
  ```
59
+
60
+ #### Parameters
61
+
62
+ | Parameter | Required | Description | Example |
63
+ |-----------|:--------:|-------------|--------|
64
+ | `assets` | ✓ | Provide the assets for photo editor | `{"image_file_path": "api-assets/id/1234.png"}` |
65
+ | `resolution` | ✓ | The resolution of the final output image. The allowed value is based on your subscription. Please refer to our [pricing page](https://magichour.ai/pricing) for more details | `768` |
66
+ | `style` | ✓ | | `{"image_description": "A photo of a person", "likeness_strength": 5.2, "negative_prompt": "painting, cartoon, sketch", "prompt": "A photo portrait of a person wearing a hat", "prompt_strength": 3.75, "steps": 4, "upscale_factor": 2, "upscale_fidelity": 0.5}` |
67
+ | `name` | ✗ | The name of image | `"Photo Editor image"` |
68
+ | `steps` | ✗ | Deprecated: Please use `.style.steps` instead. Number of iterations used to generate the output. Higher values improve quality and increase the strength of the prompt but increase processing time. | `123` |
@@ -17,6 +17,7 @@ res = client.v1.ai_qr_code_generator.create(
17
17
  style={"art_style": "Watercolor"},
18
18
  name="Qr Code image",
19
19
  )
20
+
20
21
  ```
21
22
 
22
23
  #### Asynchronous Client
@@ -31,4 +32,13 @@ res = await client.v1.ai_qr_code_generator.create(
31
32
  style={"art_style": "Watercolor"},
32
33
  name="Qr Code image",
33
34
  )
35
+
34
36
  ```
37
+
38
+ #### Parameters
39
+
40
+ | Parameter | Required | Description | Example |
41
+ |-----------|:--------:|-------------|--------|
42
+ | `content` | ✓ | The content of the QR code. | `"https://magichour.ai"` |
43
+ | `style` | ✓ | | `{"art_style": "Watercolor"}` |
44
+ | `name` | ✗ | The name of image | `"Qr Code image"` |
@@ -21,6 +21,7 @@ res = client.v1.ai_talking_photo.create(
21
21
  start_seconds=0.0,
22
22
  name="Talking Photo image",
23
23
  )
24
+
24
25
  ```
25
26
 
26
27
  #### Asynchronous Client
@@ -39,4 +40,15 @@ res = await client.v1.ai_talking_photo.create(
39
40
  start_seconds=0.0,
40
41
  name="Talking Photo image",
41
42
  )
43
+
42
44
  ```
45
+
46
+ #### Parameters
47
+
48
+ | Parameter | Required | Description | Example |
49
+ |-----------|:--------:|-------------|--------|
50
+ | `assets` | ✓ | Provide the assets for creating a talking photo | `{"audio_file_path": "api-assets/id/1234.mp3", "image_file_path": "api-assets/id/1234.png"}` |
51
+ | `end_seconds` | ✓ | The end time of the input audio in seconds. The maximum duration allowed is 30 seconds. | `15.0` |
52
+ | `start_seconds` | ✓ | The start time of the input audio in seconds. The maximum duration allowed is 30 seconds. | `0.0` |
53
+ | `name` | ✗ | The name of image | `"Talking Photo image"` |
54
+ | `style` | ✗ | Attributes used to dictate the style of the output | `{"generation_mode": "expressive", "intensity": 1.5}` |
@@ -31,6 +31,7 @@ res = client.v1.animation.create(
31
31
  width=512,
32
32
  name="Animation video",
33
33
  )
34
+
34
35
  ```
35
36
 
36
37
  #### Asynchronous Client
@@ -59,4 +60,17 @@ res = await client.v1.animation.create(
59
60
  width=512,
60
61
  name="Animation video",
61
62
  )
63
+
62
64
  ```
65
+
66
+ #### Parameters
67
+
68
+ | Parameter | Required | Description | Example |
69
+ |-----------|:--------:|-------------|--------|
70
+ | `assets` | ✓ | Provide the assets for animation. | `{"audio_file_path": "api-assets/id/1234.mp3", "audio_source": "file", "image_file_path": "api-assets/id/1234.png"}` |
71
+ | `end_seconds` | ✓ | The end time of the input video in seconds | `15.0` |
72
+ | `fps` | ✓ | The desire output video frame rate | `12.0` |
73
+ | `height` | ✓ | The height of the final output video. The maximum height depends on your subscription. Please refer to our [pricing page](https://magichour.ai/pricing) for more details | `960` |
74
+ | `style` | ✓ | Defines the style of the output video | `{"art_style": "Painterly Illustration", "camera_effect": "Accelerate", "prompt": "Cyberpunk city", "prompt_type": "ai_choose", "transition_speed": 5}` |
75
+ | `width` | ✓ | The width of the final output video. The maximum width depends on your subscription. Please refer to our [pricing page](https://magichour.ai/pricing) for more details | `512` |
76
+ | `name` | ✗ | The name of video | `"Animation video"` |
@@ -27,6 +27,7 @@ res = client.v1.face_swap.create(
27
27
  name="Face Swap video",
28
28
  width=512,
29
29
  )
30
+
30
31
  ```
31
32
 
32
33
  #### Asynchronous Client
@@ -48,4 +49,16 @@ res = await client.v1.face_swap.create(
48
49
  name="Face Swap video",
49
50
  width=512,
50
51
  )
52
+
51
53
  ```
54
+
55
+ #### Parameters
56
+
57
+ | Parameter | Required | Description | Example |
58
+ |-----------|:--------:|-------------|--------|
59
+ | `assets` | ✓ | Provide the assets for face swap. For video, The `video_source` field determines whether `video_file_path` or `youtube_url` field is used | `{"image_file_path": "image/id/1234.png", "video_file_path": "api-assets/id/1234.mp4", "video_source": "file"}` |
60
+ | `end_seconds` | ✓ | The end time of the input video in seconds | `15.0` |
61
+ | `start_seconds` | ✓ | The start time of the input video in seconds | `0.0` |
62
+ | `height` | ✗ | Used to determine the dimensions of the output video. * If height is provided, width will also be required. The larger value between width and height will be used to determine the maximum output resolution while maintaining the original aspect ratio. * If both height and width are omitted, the video will be resized according to your subscription's maximum resolution, while preserving aspect ratio. Note: if the video's original resolution is less than the maximum, the video will not be resized. See our [pricing page](https://magichour.ai/pricing) for more details. | `960` |
63
+ | `name` | ✗ | The name of video | `"Face Swap video"` |
64
+ | `width` | ✗ | Used to determine the dimensions of the output video. * If width is provided, height will also be required. The larger value between width and height will be used to determine the maximum output resolution while maintaining the original aspect ratio. * If both height and width are omitted, the video will be resized according to your subscription's maximum resolution, while preserving aspect ratio. Note: if the video's original resolution is less than the maximum, the video will not be resized. See our [pricing page](https://magichour.ai/pricing) for more details. | `512` |
@@ -19,6 +19,7 @@ res = client.v1.face_swap_photo.create(
19
19
  },
20
20
  name="Face Swap image",
21
21
  )
22
+
22
23
  ```
23
24
 
24
25
  #### Asynchronous Client
@@ -35,4 +36,12 @@ res = await client.v1.face_swap_photo.create(
35
36
  },
36
37
  name="Face Swap image",
37
38
  )
39
+
38
40
  ```
41
+
42
+ #### Parameters
43
+
44
+ | Parameter | Required | Description | Example |
45
+ |-----------|:--------:|-------------|--------|
46
+ | `assets` | ✓ | Provide the assets for face swap photo | `{"source_file_path": "api-assets/id/1234.png", "target_file_path": "api-assets/id/1234.png"}` |
47
+ | `name` | ✗ | The name of image | `"Face Swap image"` |
@@ -37,6 +37,7 @@ res = client.v1.files.upload_urls.create(
37
37
  {"extension": "mp3", "type_": "audio"},
38
38
  ]
39
39
  )
40
+
40
41
  ```
41
42
 
42
43
  #### Asynchronous Client
@@ -52,4 +53,11 @@ res = await client.v1.files.upload_urls.create(
52
53
  {"extension": "mp3", "type_": "audio"},
53
54
  ]
54
55
  )
56
+
55
57
  ```
58
+
59
+ #### Parameters
60
+
61
+ | Parameter | Required | Description | Example |
62
+ |-----------|:--------:|-------------|--------|
63
+ | `items` | ✓ | | `[{"extension": "mp4", "type_": "video"}, {"extension": "mp3", "type_": "audio"}]` |
@@ -16,6 +16,7 @@ res = client.v1.image_background_remover.create(
16
16
  assets={"image_file_path": "api-assets/id/1234.png"},
17
17
  name="Background Remover image",
18
18
  )
19
+
19
20
  ```
20
21
 
21
22
  #### Asynchronous Client
@@ -29,4 +30,12 @@ res = await client.v1.image_background_remover.create(
29
30
  assets={"image_file_path": "api-assets/id/1234.png"},
30
31
  name="Background Remover image",
31
32
  )
33
+
32
34
  ```
35
+
36
+ #### Parameters
37
+
38
+ | Parameter | Required | Description | Example |
39
+ |-----------|:--------:|-------------|--------|
40
+ | `assets` | ✓ | Provide the assets for background removal | `{"image_file_path": "api-assets/id/1234.png"}` |
41
+ | `name` | ✗ | The name of image | `"Background Remover image"` |
@@ -13,6 +13,7 @@ from os import getenv
13
13
 
14
14
  client = Client(token=getenv("API_TOKEN"))
15
15
  res = client.v1.image_projects.delete(id="cm6pvghix03bvyz0zwash6noj")
16
+
16
17
  ```
17
18
 
18
19
  #### Asynchronous Client
@@ -23,8 +24,15 @@ from os import getenv
23
24
 
24
25
  client = AsyncClient(token=getenv("API_TOKEN"))
25
26
  res = await client.v1.image_projects.delete(id="cm6pvghix03bvyz0zwash6noj")
27
+
26
28
  ```
27
29
 
30
+ #### Parameters
31
+
32
+ | Parameter | Required | Description | Example |
33
+ |-----------|:--------:|-------------|--------|
34
+ | `id` | ✓ | The id of the image project | `"cm6pvghix03bvyz0zwash6noj"` |
35
+
28
36
  ### Get image details <a name="get"></a>
29
37
 
30
38
  Get the details of a image project. The `downloads` field will be empty unless the image was successfully rendered.
@@ -48,6 +56,7 @@ from os import getenv
48
56
 
49
57
  client = Client(token=getenv("API_TOKEN"))
50
58
  res = client.v1.image_projects.get(id="cm6pvghix03bvyz0zwash6noj")
59
+
51
60
  ```
52
61
 
53
62
  #### Asynchronous Client
@@ -58,4 +67,11 @@ from os import getenv
58
67
 
59
68
  client = AsyncClient(token=getenv("API_TOKEN"))
60
69
  res = await client.v1.image_projects.get(id="cm6pvghix03bvyz0zwash6noj")
70
+
61
71
  ```
72
+
73
+ #### Parameters
74
+
75
+ | Parameter | Required | Description | Example |
76
+ |-----------|:--------:|-------------|--------|
77
+ | `id` | ✓ | The id of the image project | `"cm6pvghix03bvyz0zwash6noj"` |
@@ -23,6 +23,7 @@ res = client.v1.image_to_video.create(
23
23
  name="Image To Video video",
24
24
  width=512,
25
25
  )
26
+
26
27
  ```
27
28
 
28
29
  #### Asynchronous Client
@@ -40,4 +41,16 @@ res = await client.v1.image_to_video.create(
40
41
  name="Image To Video video",
41
42
  width=512,
42
43
  )
44
+
43
45
  ```
46
+
47
+ #### Parameters
48
+
49
+ | Parameter | Required | Description | Example |
50
+ |-----------|:--------:|-------------|--------|
51
+ | `assets` | ✓ | Provide the assets for image-to-video. | `{"image_file_path": "api-assets/id/1234.png"}` |
52
+ | `end_seconds` | ✓ | The total duration of the output video in seconds. | `5.0` |
53
+ | `style` | ✓ | Attributed used to dictate the style of the output | `{"prompt": "a dog running"}` |
54
+ | `height` | ✗ | This field does not affect the output video's resolution. The video's orientation will match that of the input image. It is retained solely for backward compatibility and will be deprecated in the future. | `960` |
55
+ | `name` | ✗ | The name of video | `"Image To Video video"` |
56
+ | `width` | ✗ | This field does not affect the output video's resolution. The video's orientation will match that of the input image. It is retained solely for backward compatibility and will be deprecated in the future. | `512` |
@@ -28,6 +28,7 @@ res = client.v1.lip_sync.create(
28
28
  name="Lip Sync video",
29
29
  width=512,
30
30
  )
31
+
31
32
  ```
32
33
 
33
34
  #### Asynchronous Client
@@ -50,4 +51,17 @@ res = await client.v1.lip_sync.create(
50
51
  name="Lip Sync video",
51
52
  width=512,
52
53
  )
54
+
53
55
  ```
56
+
57
+ #### Parameters
58
+
59
+ | Parameter | Required | Description | Example |
60
+ |-----------|:--------:|-------------|--------|
61
+ | `assets` | ✓ | Provide the assets for lip-sync. For video, The `video_source` field determines whether `video_file_path` or `youtube_url` field is used | `{"audio_file_path": "api-assets/id/1234.mp3", "video_file_path": "api-assets/id/1234.mp4", "video_source": "file"}` |
62
+ | `end_seconds` | ✓ | The end time of the input video in seconds | `15.0` |
63
+ | `start_seconds` | ✓ | The start time of the input video in seconds | `0.0` |
64
+ | `height` | ✗ | Used to determine the dimensions of the output video. * If height is provided, width will also be required. The larger value between width and height will be used to determine the maximum output resolution while maintaining the original aspect ratio. * If both height and width are omitted, the video will be resized according to your subscription's maximum resolution, while preserving aspect ratio. Note: if the video's original resolution is less than the maximum, the video will not be resized. See our [pricing page](https://magichour.ai/pricing) for more details. | `960` |
65
+ | `max_fps_limit` | ✗ | Defines the maximum FPS (frames per second) for the output video. If the input video's FPS is lower than this limit, the output video will retain the input FPS. This is useful for reducing unnecessary frame usage in scenarios where high FPS is not required. | `12.0` |
66
+ | `name` | ✗ | The name of video | `"Lip Sync video"` |
67
+ | `width` | ✗ | Used to determine the dimensions of the output video. * If width is provided, height will also be required. The larger value between width and height will be used to determine the maximum output resolution while maintaining the original aspect ratio. * If both height and width are omitted, the video will be resized according to your subscription's maximum resolution, while preserving aspect ratio. Note: if the video's original resolution is less than the maximum, the video will not be resized. See our [pricing page](https://magichour.ai/pricing) for more details. | `512` |
@@ -15,6 +15,7 @@ client = Client(token=getenv("API_TOKEN"))
15
15
  res = client.v1.photo_colorizer.create(
16
16
  assets={"image_file_path": "api-assets/id/1234.png"}, name="Photo Colorizer image"
17
17
  )
18
+
18
19
  ```
19
20
 
20
21
  #### Asynchronous Client
@@ -27,4 +28,12 @@ client = AsyncClient(token=getenv("API_TOKEN"))
27
28
  res = await client.v1.photo_colorizer.create(
28
29
  assets={"image_file_path": "api-assets/id/1234.png"}, name="Photo Colorizer image"
29
30
  )
31
+
30
32
  ```
33
+
34
+ #### Parameters
35
+
36
+ | Parameter | Required | Description | Example |
37
+ |-----------|:--------:|-------------|--------|
38
+ | `assets` | ✓ | Provide the assets for photo colorization | `{"image_file_path": "api-assets/id/1234.png"}` |
39
+ | `name` | ✗ | The name of image | `"Photo Colorizer image"` |
@@ -21,6 +21,7 @@ res = client.v1.text_to_video.create(
21
21
  style={"prompt": "a dog running"},
22
22
  name="Text To Video video",
23
23
  )
24
+
24
25
  ```
25
26
 
26
27
  #### Asynchronous Client
@@ -36,4 +37,14 @@ res = await client.v1.text_to_video.create(
36
37
  style={"prompt": "a dog running"},
37
38
  name="Text To Video video",
38
39
  )
40
+
39
41
  ```
42
+
43
+ #### Parameters
44
+
45
+ | Parameter | Required | Description | Example |
46
+ |-----------|:--------:|-------------|--------|
47
+ | `end_seconds` | ✓ | The total duration of the output video in seconds. | `5.0` |
48
+ | `orientation` | ✓ | Determines the orientation of the output video | `"landscape"` |
49
+ | `style` | ✓ | | `{"prompt": "a dog running"}` |
50
+ | `name` | ✗ | The name of video | `"Text To Video video"` |
@@ -13,6 +13,7 @@ from os import getenv
13
13
 
14
14
  client = Client(token=getenv("API_TOKEN"))
15
15
  res = client.v1.video_projects.delete(id="cm6pvghix03bvyz0zwash6noj")
16
+
16
17
  ```
17
18
 
18
19
  #### Asynchronous Client
@@ -23,8 +24,15 @@ from os import getenv
23
24
 
24
25
  client = AsyncClient(token=getenv("API_TOKEN"))
25
26
  res = await client.v1.video_projects.delete(id="cm6pvghix03bvyz0zwash6noj")
27
+
26
28
  ```
27
29
 
30
+ #### Parameters
31
+
32
+ | Parameter | Required | Description | Example |
33
+ |-----------|:--------:|-------------|--------|
34
+ | `id` | ✓ | The id of the video project | `"cm6pvghix03bvyz0zwash6noj"` |
35
+
28
36
  ### Get video details <a name="get"></a>
29
37
 
30
38
  Get the details of a video project. The `downloads` field will be empty unless the video was successfully rendered.
@@ -48,6 +56,7 @@ from os import getenv
48
56
 
49
57
  client = Client(token=getenv("API_TOKEN"))
50
58
  res = client.v1.video_projects.get(id="cm6pvghix03bvyz0zwash6noj")
59
+
51
60
  ```
52
61
 
53
62
  #### Asynchronous Client
@@ -58,4 +67,11 @@ from os import getenv
58
67
 
59
68
  client = AsyncClient(token=getenv("API_TOKEN"))
60
69
  res = await client.v1.video_projects.get(id="cm6pvghix03bvyz0zwash6noj")
70
+
61
71
  ```
72
+
73
+ #### Parameters
74
+
75
+ | Parameter | Required | Description | Example |
76
+ |-----------|:--------:|-------------|--------|
77
+ | `id` | ✓ | The id of the video | `"cm6pvghix03bvyz0zwash6noj"` |
@@ -31,6 +31,7 @@ res = client.v1.video_to_video.create(
31
31
  name="Video To Video video",
32
32
  width=512,
33
33
  )
34
+
34
35
  ```
35
36
 
36
37
  #### Asynchronous Client
@@ -56,4 +57,18 @@ res = await client.v1.video_to_video.create(
56
57
  name="Video To Video video",
57
58
  width=512,
58
59
  )
60
+
59
61
  ```
62
+
63
+ #### Parameters
64
+
65
+ | Parameter | Required | Description | Example |
66
+ |-----------|:--------:|-------------|--------|
67
+ | `assets` | ✓ | Provide the assets for video-to-video. For video, The `video_source` field determines whether `video_file_path` or `youtube_url` field is used | `{"video_file_path": "api-assets/id/1234.mp4", "video_source": "file"}` |
68
+ | `end_seconds` | ✓ | The end time of the input video in seconds | `15.0` |
69
+ | `start_seconds` | ✓ | The start time of the input video in seconds | `0.0` |
70
+ | `style` | ✓ | | `{"art_style": "3D Render", "model": "Absolute Reality", "prompt": "string", "prompt_type": "append_default", "version": "default"}` |
71
+ | `fps_resolution` | ✗ | Determines whether the resulting video will have the same frame per second as the original video, or half. * `FULL` - the result video will have the same FPS as the input video * `HALF` - the result video will have half the FPS as the input video | `"HALF"` |
72
+ | `height` | ✗ | Used to determine the dimensions of the output video. * If height is provided, width will also be required. The larger value between width and height will be used to determine the maximum output resolution while maintaining the original aspect ratio. * If both height and width are omitted, the video will be resized according to your subscription's maximum resolution, while preserving aspect ratio. Note: if the video's original resolution is less than the maximum, the video will not be resized. See our [pricing page](https://magichour.ai/pricing) for more details. | `960` |
73
+ | `name` | ✗ | The name of video | `"Video To Video video"` |
74
+ | `width` | ✗ | Used to determine the dimensions of the output video. * If width is provided, height will also be required. The larger value between width and height will be used to determine the maximum output resolution while maintaining the original aspect ratio. * If both height and width are omitted, the video will be resized according to your subscription's maximum resolution, while preserving aspect ratio. Note: if the video's original resolution is less than the maximum, the video will not be resized. See our [pricing page](https://magichour.ai/pricing) for more details. | `512` |
@@ -1,4 +1,5 @@
1
1
  import pydantic
2
+ import typing
2
3
  import typing_extensions
3
4
 
4
5
 
@@ -12,6 +13,49 @@ class V1AiImageGeneratorCreateBodyStyle(typing_extensions.TypedDict):
12
13
  The prompt used for the image.
13
14
  """
14
15
 
16
+ tool: typing_extensions.NotRequired[
17
+ typing_extensions.Literal[
18
+ "ai-anime-generator",
19
+ "ai-art-generator",
20
+ "ai-background-generator",
21
+ "ai-character-generator",
22
+ "ai-face-generator",
23
+ "ai-fashion-generator",
24
+ "ai-icon-generator",
25
+ "ai-illustration-generator",
26
+ "ai-interior-design-generator",
27
+ "ai-landscape-generator",
28
+ "ai-logo-generator",
29
+ "ai-manga-generator",
30
+ "ai-outfit-generator",
31
+ "ai-pattern-generator",
32
+ "ai-photo-generator",
33
+ "ai-sketch-generator",
34
+ "ai-tattoo-generator",
35
+ "album-cover-generator",
36
+ "animated-characters-generator",
37
+ "architecture-generator",
38
+ "book-cover-generator",
39
+ "comic-book-generator",
40
+ "dark-fantasy-ai",
41
+ "disney-ai-generator",
42
+ "dnd-ai-art-generator",
43
+ "emoji-generator",
44
+ "fantasy-map-generator",
45
+ "general",
46
+ "graffiti-generator",
47
+ "movie-poster-generator",
48
+ "optical-illusion-generator",
49
+ "pokemon-generator",
50
+ "south-park-character-generator",
51
+ "superhero-generator",
52
+ "thumbnail-maker",
53
+ ]
54
+ ]
55
+ """
56
+ The art style to use for image generation. Defaults to 'general' if not provided.
57
+ """
58
+
15
59
 
16
60
  class _SerializerV1AiImageGeneratorCreateBodyStyle(pydantic.BaseModel):
17
61
  """
@@ -26,3 +70,42 @@ class _SerializerV1AiImageGeneratorCreateBodyStyle(pydantic.BaseModel):
26
70
  prompt: str = pydantic.Field(
27
71
  alias="prompt",
28
72
  )
73
+ tool: typing.Optional[
74
+ typing_extensions.Literal[
75
+ "ai-anime-generator",
76
+ "ai-art-generator",
77
+ "ai-background-generator",
78
+ "ai-character-generator",
79
+ "ai-face-generator",
80
+ "ai-fashion-generator",
81
+ "ai-icon-generator",
82
+ "ai-illustration-generator",
83
+ "ai-interior-design-generator",
84
+ "ai-landscape-generator",
85
+ "ai-logo-generator",
86
+ "ai-manga-generator",
87
+ "ai-outfit-generator",
88
+ "ai-pattern-generator",
89
+ "ai-photo-generator",
90
+ "ai-sketch-generator",
91
+ "ai-tattoo-generator",
92
+ "album-cover-generator",
93
+ "animated-characters-generator",
94
+ "architecture-generator",
95
+ "book-cover-generator",
96
+ "comic-book-generator",
97
+ "dark-fantasy-ai",
98
+ "disney-ai-generator",
99
+ "dnd-ai-art-generator",
100
+ "emoji-generator",
101
+ "fantasy-map-generator",
102
+ "general",
103
+ "graffiti-generator",
104
+ "movie-poster-generator",
105
+ "optical-illusion-generator",
106
+ "pokemon-generator",
107
+ "south-park-character-generator",
108
+ "superhero-generator",
109
+ "thumbnail-maker",
110
+ ]
111
+ ] = pydantic.Field(alias="tool", default=None)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: magic_hour
3
- Version: 0.23.0
3
+ Version: 0.24.0
4
4
  Summary: Python SDK for Magic Hour API
5
5
  Requires-Python: >=3.8,<4.0
6
6
  Classifier: Programming Language :: Python :: 3
@@ -5,80 +5,80 @@ magic_hour/core/api_error.py,sha256=K1d47qRbhLBNEaUVbs0NPgxee24X3qGZ37gBhleUzEE,
5
5
  magic_hour/core/auth.py,sha256=NSjPcmTyHelRag9FqH1ufbchBWQgGDpH2P0akfppIPo,9130
6
6
  magic_hour/core/base_client.py,sha256=cKJxEuqaOUUXSzJYtJosMvFbvdaTaeCqX8_O8mlSmtw,19489
7
7
  magic_hour/core/binary_response.py,sha256=T-DATvb21P2ZRnYa4LlXmF77VfM8Tut2951QHEQct_U,681
8
- magic_hour/core/query.py,sha256=FdGdyHggFc8weFDSiUuVIEfZ7B2UAU0QOS38bp2ud9o,4627
8
+ magic_hour/core/query.py,sha256=ibD41bf-Yc1iOFNaRzSR97dK-mIpy1VwXcFCyI4vovc,4534
9
9
  magic_hour/core/request.py,sha256=_ikn8iZ2fU9Ubqnt7M9hdEnXGV6AAFHJYmDKBtxEY4I,5263
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=e9Vh0yGfeTIQJk7Dw_0XB8R54n0Dp611FTW7m9guGRU,535
13
+ magic_hour/environment.py,sha256=cSLIJ-7FO9sQO6LmtIPc3v8Nww20MyrmEEL3CG-nOwQ,535
14
14
  magic_hour/resources/v1/__init__.py,sha256=Aj0sjVcoijjQyieNBxv2_uewPYC2vO2UG-ehoBgCz5E,86
15
- magic_hour/resources/v1/ai_clothes_changer/README.md,sha256=Bf0C0DQu-5tW696Ft7H4NYC3592XeZjl1RSbR-hw2ss,971
15
+ magic_hour/resources/v1/ai_clothes_changer/README.md,sha256=NNrHOinbZ2OriGVbJrcjTKG5X0bH1qSQ0mCFAVTQnTQ,1341
16
16
  magic_hour/resources/v1/ai_clothes_changer/__init__.py,sha256=6W_Y2HxG2sDOBiJyzngK3Q2S3xfQgpK-j8xFRmBAhbQ,142
17
17
  magic_hour/resources/v1/ai_clothes_changer/client.py,sha256=VRvAM-45M-1SYkZCKD1LqCg2RBGHFfgfFsPiMx47NUE,4011
18
- magic_hour/resources/v1/ai_face_editor/README.md,sha256=kbq0iKNbBLvMmJD3zkywQACQddiLXq3yhSpbppXmkpM,1804
18
+ magic_hour/resources/v1/ai_face_editor/README.md,sha256=vdklwrOP9sXqQlnrpHCJJSEdyWqYipdJDUOAX3VFfrI,2484
19
19
  magic_hour/resources/v1/ai_face_editor/__init__.py,sha256=RY8GBMQcqsDFbFcUuK-4LPvablq-U9XmSSlQk4HLKmM,126
20
20
  magic_hour/resources/v1/ai_face_editor/client.py,sha256=N5toTWe-Ag2iAhwk-CbWQxGnK6fZ2uHAFEKx15SPl-I,5315
21
- magic_hour/resources/v1/ai_gif_generator/README.md,sha256=pBYCoKDpCzTvP3wBAAVfKJndJZVIpZuM--VZoqqtnGM,645
21
+ magic_hour/resources/v1/ai_gif_generator/README.md,sha256=IYCTXFfocP-hJ8_2UhymCy6SCcIHlVG4IQHvyvwnCDA,881
22
22
  magic_hour/resources/v1/ai_gif_generator/__init__.py,sha256=SG_WmxUnpQWlfNQoHfdXPEGQEPC0WZPgom8ATaR9jiY,134
23
23
  magic_hour/resources/v1/ai_gif_generator/client.py,sha256=B0MiUoO0GBA57C6H5_6dDI7xIvDQ6i85Xw7Vz58mccg,3491
24
- magic_hour/resources/v1/ai_headshot_generator/README.md,sha256=VD4MgQygf5ht4jUtLMGFtY4f_VVTmSE7FWpSHk1j6SI,699
24
+ magic_hour/resources/v1/ai_headshot_generator/README.md,sha256=Fb8dnoWF3uTEqeuGFafGjhG-DJM62QGcCA8WvffWpF8,1144
25
25
  magic_hour/resources/v1/ai_headshot_generator/__init__.py,sha256=4WZ3jfrL2yPhQaPalMJrUEykwUoF3KBtop2VJEij-0s,154
26
26
  magic_hour/resources/v1/ai_headshot_generator/client.py,sha256=epFzgwy9AcDRXqLBSE8cJhNNYPFJubev4n8A_k8V10g,4161
27
- magic_hour/resources/v1/ai_image_generator/README.md,sha256=CaM34fGc0cX8jQienSmJey9BR7g4uzVT2SvqqyC-MYs,736
27
+ magic_hour/resources/v1/ai_image_generator/README.md,sha256=bQWdgFAiA7LQTSyFXn9D6x5mzz-OqF7A44eqTNR2nEQ,1155
28
28
  magic_hour/resources/v1/ai_image_generator/__init__.py,sha256=qZws7N5CALYAbnIUc2ERV8Cy-QJmHcJ9tU7W-epEnaQ,142
29
- magic_hour/resources/v1/ai_image_generator/client.py,sha256=_F3e14otBlp_UY5Tm6z1jnXcZI-GKuw5jk5R7oc-BAM,4462
30
- magic_hour/resources/v1/ai_image_upscaler/README.md,sha256=7wIDRx0MqD7BMSWRRD9O1zUC-E5F_ZlQQF0sDeQRm1Q,872
29
+ magic_hour/resources/v1/ai_image_generator/client.py,sha256=kvSaPQ18fx4l-iSJcfP-pXttQH2kDkr_-wmy4Uk5Z6w,4522
30
+ magic_hour/resources/v1/ai_image_upscaler/README.md,sha256=04zmJTq5PE8_wRlEak1xy4S4dsZb7PDg8iDAkfqRb8c,1296
31
31
  magic_hour/resources/v1/ai_image_upscaler/__init__.py,sha256=9b1-2XfnAVa4qE3S-4WL8vN3wuqLkUuHKjdl_km8hUc,138
32
32
  magic_hour/resources/v1/ai_image_upscaler/client.py,sha256=MVRxTdc41Fs9eScL0GNkokmXdMKKgAgCiTBT7ZjHoy0,4535
33
- magic_hour/resources/v1/ai_meme_generator/README.md,sha256=AoePVgcYTuBA-gI36E-x8DlW7OVrKpJg9suR3Z3QGBY,858
33
+ magic_hour/resources/v1/ai_meme_generator/README.md,sha256=7ktOo4ApfaoBu1pIvE0BcGqK6LVvta5-EE2_koiXIZU,1158
34
34
  magic_hour/resources/v1/ai_meme_generator/__init__.py,sha256=x4vtin1KKvoA-va7vhaQ91c__M2z3PmDySLX7yJpRDA,138
35
35
  magic_hour/resources/v1/ai_meme_generator/client.py,sha256=r3PCBwQR40aGMTICPERCSpi-Tendlk9fPpo3jbSHAcE,3833
36
- magic_hour/resources/v1/ai_photo_editor/README.md,sha256=wzB383MrYqv9NuBTCvD9KEcn1FssQJz6zrtK27u6Rvg,1552
36
+ magic_hour/resources/v1/ai_photo_editor/README.md,sha256=yNNihv_BQvGk_QagZJFw_ofhJ4Gu7UB7DOOeiEjUDXc,2552
37
37
  magic_hour/resources/v1/ai_photo_editor/__init__.py,sha256=RPG6WaL2KN_DmgrtxImA_jNnEDMm-Ku2o2m2EnNwxts,130
38
38
  magic_hour/resources/v1/ai_photo_editor/client.py,sha256=EAh-urQN2XWHTO1WLLYhXgoJsH6e1-_uX2dEkoBvRFE,6391
39
- magic_hour/resources/v1/ai_qr_code_generator/README.md,sha256=l_7pmyYY9tPdHQgkEG2BZ-DFaGheqf601r69E5_wxZQ,728
39
+ magic_hour/resources/v1/ai_qr_code_generator/README.md,sha256=K21Lqray8alJ4H3nmLLp0-Ph8HWwi4thRtXnNN5oU3I,1032
40
40
  magic_hour/resources/v1/ai_qr_code_generator/__init__.py,sha256=HnSTg7tB8M5LibZoCDRdE5Q71efmiqZIkNEve5SO1Mg,146
41
41
  magic_hour/resources/v1/ai_qr_code_generator/client.py,sha256=mmdGgUSVoMTazmGiB24mc2sXsfaAtx-Fbgcu_SncW-Q,3851
42
- magic_hour/resources/v1/ai_talking_photo/README.md,sha256=3IskEBX7J4mQO1ndzv3v1LdtNJxxEyS9ogPYAWt5IIo,935
42
+ magic_hour/resources/v1/ai_talking_photo/README.md,sha256=CUGjZGIPXjARqOTetyypedHpzavfISbkBLGQEzIqB-U,1655
43
43
  magic_hour/resources/v1/ai_talking_photo/__init__.py,sha256=ZTDD_IRBoR7GSdGWCVEK2-LOEsKUdGEHZZvDHa9MOnA,134
44
44
  magic_hour/resources/v1/ai_talking_photo/client.py,sha256=Y4p5HAlbCAe2NNqekdllSZ0jRhzwCcjAIHO0zlqxi3Q,5311
45
- magic_hour/resources/v1/animation/README.md,sha256=QQqzioZ8qnBlv6TiE2utyIxcpUnRheMz4vCJTROvdwM,1470
45
+ magic_hour/resources/v1/animation/README.md,sha256=xsMIVbBwTI6aUwHvqgMPCxr5zPrv9fmC2AXX-WbZU_8,2565
46
46
  magic_hour/resources/v1/animation/__init__.py,sha256=M6KUe6TEZl_DAdyn1HFQ2kHYanZo6xy3mvUdCN264hQ,114
47
47
  magic_hour/resources/v1/animation/client.py,sha256=YYjggl_hszTW-Sn9SFs3m7bz7PvtRTruhHSSnrkkD9c,6401
48
48
  magic_hour/resources/v1/client.py,sha256=kxrv1LfFHebey-tVjxlBN6c-9hSYMBqno9rVl54pUUg,6626
49
- magic_hour/resources/v1/face_swap/README.md,sha256=WjJZOVHHTB78o0TFjzNJFMBUqdzFU5juR4eyJ8t9jw8,1299
49
+ magic_hour/resources/v1/face_swap/README.md,sha256=pall5GBnJVGbC_S4SSXR6SOxQBgiFwveev2_dEAlJP4,3116
50
50
  magic_hour/resources/v1/face_swap/__init__.py,sha256=lyg5uAHyYHEUVAiAZtP3zwjGCEGqq8IWbQKexVdhr00,110
51
51
  magic_hour/resources/v1/face_swap/client.py,sha256=-BpJae7J4PZPUG45BMA3HBB2XhrbHpgWqwwyaDFH88A,8519
52
- magic_hour/resources/v1/face_swap_photo/README.md,sha256=poRTD4t4XqOZdMvo9Ye1HYMWjWB5n3973gKdH57QsUQ,958
52
+ magic_hour/resources/v1/face_swap_photo/README.md,sha256=-lzDeDFYM3QysC6FMxiQtAtFoYMUJBQ_-bZhbnNq9Hk,1291
53
53
  magic_hour/resources/v1/face_swap_photo/__init__.py,sha256=NZEplYX5kDPL_0qY0Q5tuxhDevipN0otByTYKMmF_1k,130
54
54
  magic_hour/resources/v1/face_swap_photo/client.py,sha256=edftw7OkiGoF8Lyamn4XXgooJJnLEvGnzhk7TUxZbP4,4029
55
55
  magic_hour/resources/v1/files/__init__.py,sha256=ucXmaXDdZqXfRhnnioJeQAXeRLzBDb44gTfWijrub28,98
56
56
  magic_hour/resources/v1/files/client.py,sha256=kJ636UbY_XZENwpqIKdz_2bxnr1P7TK9SDj_epNnItw,562
57
- magic_hour/resources/v1/files/upload_urls/README.md,sha256=43KAJiFhVlcHoC1YHhQnLWUb-HqzZMRE1H6Bdp2Rm1w,1579
57
+ magic_hour/resources/v1/files/upload_urls/README.md,sha256=nLHsRbG61xf3Q_34W91MGB_tNBNO_ZzVoCdW0pifsxE,1802
58
58
  magic_hour/resources/v1/files/upload_urls/__init__.py,sha256=hRp0s_emx-wib7z42V4L9VzYR9MQ3hnmS5bNv4QtfFM,118
59
59
  magic_hour/resources/v1/files/upload_urls/client.py,sha256=SlRMGZtMRDUiHwZIIXPjl9FDdipJ-SIs5nfHMwBl3ns,5315
60
- magic_hour/resources/v1/image_background_remover/README.md,sha256=9HbWD1xxl__jTTiDQIYLCONsv3Kc-sGH1jJ24EEJy3s,747
60
+ magic_hour/resources/v1/image_background_remover/README.md,sha256=WMpQPfTUihlot6vnr8DK5Xh3YagL9Wlw5b2aR25KzTQ,1045
61
61
  magic_hour/resources/v1/image_background_remover/__init__.py,sha256=Vb_e8zKEh7bdrq0q1175DqyOd1ptPBUIfSKSLFPBVU4,166
62
62
  magic_hour/resources/v1/image_background_remover/client.py,sha256=A6T1Kq3Lh4dsCVbBS9X-mmE9e5XK3fDkDAQQ1qjZTkA,3777
63
- magic_hour/resources/v1/image_projects/README.md,sha256=TBeO2Ogd4xD02aTjazOpYDO9DlkUpz8w91E9_wvMsBI,1578
63
+ magic_hour/resources/v1/image_projects/README.md,sha256=Nm3ZbF129v_H2M5yS0JfVVBEXxo-lx5u_5ckvlgBzJw,1966
64
64
  magic_hour/resources/v1/image_projects/__init__.py,sha256=oBlV4e5IVYe8SclhoEy2VOYB53kKP2DORXwcztAwU3E,130
65
65
  magic_hour/resources/v1/image_projects/client.py,sha256=FbqvgvoLFcAjBtqgGtQZMNT8jG5f2bJH7Poxod446sw,5527
66
- magic_hour/resources/v1/image_to_video/README.md,sha256=wu3rX5Vlb5nldhlMsMsLuQw8dAHlRpDFwEHoo_uJrdc,1173
66
+ magic_hour/resources/v1/image_to_video/README.md,sha256=b0uksE5_r0OPI10R8dWEnoVpIXZ8Ad1xZ9pGpHxf3cI,2121
67
67
  magic_hour/resources/v1/image_to_video/__init__.py,sha256=tY_ABo6evwKQBRSq-M84lNX-pXqmxoozukmrO6NhCgA,126
68
68
  magic_hour/resources/v1/image_to_video/client.py,sha256=W3meTAs3ii6JDI8xi5Adv9ZKi9pMWMLENdLiqvXV08g,6657
69
- magic_hour/resources/v1/lip_sync/README.md,sha256=s0lRw8O-MmoJmIOIrHjG_qZ7ZLvOnLyAGNiFh62rHhU,1343
69
+ magic_hour/resources/v1/lip_sync/README.md,sha256=ehYFLSd8OPmLEfhXb2K_wJEUnbTk3Qtuz88XpUzFm2A,3458
70
70
  magic_hour/resources/v1/lip_sync/__init__.py,sha256=MlKUAoHNSKcuNzVyqNfLnLtD_PsqEn3l1TtVpPC1JqQ,106
71
71
  magic_hour/resources/v1/lip_sync/client.py,sha256=LnIzY3bTqSwB0h-44d9Escv7iQAiYsGOSzL4GKn3iMs,9475
72
- magic_hour/resources/v1/photo_colorizer/README.md,sha256=14RYl8BYtmFa9j1Ug3ciUAt9Jagu_-pt3N52MNrUV1E,681
72
+ magic_hour/resources/v1/photo_colorizer/README.md,sha256=_F-_8MeI4EHPlTz1SuQ8okaBjtqrI3msQwXaLYoWRGw,976
73
73
  magic_hour/resources/v1/photo_colorizer/__init__.py,sha256=7rDjkeUzWG5GXw_4RD1XH7Ygy-_0_OUFX99IgE_RVbE,134
74
74
  magic_hour/resources/v1/photo_colorizer/client.py,sha256=hsGfDYN4wjzxk4kM193IJhxgAp8XaMaPJ2biB4Y-yns,3591
75
- magic_hour/resources/v1/text_to_video/README.md,sha256=3J45rIqTs9ext_06NttcP7D3bNLY3-lucKxZjhFPuxM,1045
75
+ magic_hour/resources/v1/text_to_video/README.md,sha256=G6T0xIH6KOsr7Da9VzYE_CBGlx6kzqSA0OOYivevF9g,1452
76
76
  magic_hour/resources/v1/text_to_video/__init__.py,sha256=F18iHSi9tuYSdgpatznBzb7lbSySNpK-82w96-Om_k4,122
77
77
  magic_hour/resources/v1/text_to_video/client.py,sha256=HFFj6a9VaYEzEsa--5lI8HhsS9az-mpDtpIgjV_Nf6M,5028
78
- magic_hour/resources/v1/video_projects/README.md,sha256=gb_8pbyFnnFW-LmETNtlOjFmv3SKL9ZAcMJjdIq9GTE,1578
78
+ magic_hour/resources/v1/video_projects/README.md,sha256=w9Oy-NlIbsZvmaqk6j4bi2hiollDffVnLTUfhj7qo-Q,1958
79
79
  magic_hour/resources/v1/video_projects/__init__.py,sha256=1aj_tE-GAf8BuQ76RQvjGVn8Y39CjdAJDlcsCPucX0w,130
80
80
  magic_hour/resources/v1/video_projects/client.py,sha256=JvhYhf3phYkdVj8VpWxvxF8qWBRU-WaZYi-8lhVgpSQ,5511
81
- magic_hour/resources/v1/video_to_video/README.md,sha256=0prLVa6JwUdAekPJj8AeunXfC-zE3pVOOa8S0CtAc7g,1623
81
+ magic_hour/resources/v1/video_to_video/README.md,sha256=4wRpgpILXnX_ipCJPypwU4HyPn4FI6UTSGDHhGpkdk4,3854
82
82
  magic_hour/resources/v1/video_to_video/__init__.py,sha256=1SHaRLlsrlBkdxxKBYgdbHrGATlRvqlXc22RpjjHaOA,126
83
83
  magic_hour/resources/v1/video_to_video/client.py,sha256=WFmYL3ZBLyKLDBOOOc9tJigtwviI6JLjbH7yJSsiIyM,10404
84
84
  magic_hour/types/models/__init__.py,sha256=Zv5G1HTpnPT94bSWyVhAxrijRGsInkXbBaifvaJxsr8,3423
@@ -122,7 +122,7 @@ magic_hour/types/params/v1_ai_headshot_generator_create_body.py,sha256=Ydzqxzfo6
122
122
  magic_hour/types/params/v1_ai_headshot_generator_create_body_assets.py,sha256=Zzb_CjU9PjGIugafxPIY59JiS1wABQRod29hPRm7xLc,908
123
123
  magic_hour/types/params/v1_ai_headshot_generator_create_body_style.py,sha256=DrX20IwvAhoO0ETO3aNn4YLpfQM5nbUNyz0pm8AO_38,670
124
124
  magic_hour/types/params/v1_ai_image_generator_create_body.py,sha256=sUWw_xXdzhU9bnPkr0xNMdezm8x4YkPzJODtfQHNmjk,1388
125
- magic_hour/types/params/v1_ai_image_generator_create_body_style.py,sha256=IJ5utgUtn8Da66z6-3aNkZFDSE-Xb-0I7TLUw8-x8Ks,621
125
+ magic_hour/types/params/v1_ai_image_generator_create_body_style.py,sha256=k7DQQXJiY_nGBq5WyMw35k3bXXurniBjT0aSwvJMCdQ,3461
126
126
  magic_hour/types/params/v1_ai_image_upscaler_create_body.py,sha256=aoD7r6Vkho__ZvzXlhr8neNdxETISr6B9hRRjFQnXxs,1511
127
127
  magic_hour/types/params/v1_ai_image_upscaler_create_body_assets.py,sha256=M1RgIPdfvTz4Eu7fLi-47hXTaTTFelEKoEHuVoA3M8M,827
128
128
  magic_hour/types/params/v1_ai_image_upscaler_create_body_style.py,sha256=XRNxQslCeMQ9RD6gV-bqOGB62tVE-u_mlBYmBzgPRyA,993
@@ -159,7 +159,7 @@ magic_hour/types/params/v1_text_to_video_create_body_style.py,sha256=9NTboy7J4ef
159
159
  magic_hour/types/params/v1_video_to_video_create_body.py,sha256=Pgok6GUVHrpW6H3rwdVFA3O5YJvjgviCZkmmHddOSWo,3802
160
160
  magic_hour/types/params/v1_video_to_video_create_body_assets.py,sha256=_-6iA5d8ndka6iJWyWvlJwzRkQcmurJE6hkg-fDwBmQ,1531
161
161
  magic_hour/types/params/v1_video_to_video_create_body_style.py,sha256=RrDBhN2KQnCf9hGsnl3sAYvuFRsxth2JXfe5la0IYJg,5749
162
- magic_hour-0.23.0.dist-info/LICENSE,sha256=F3fxj7JXPgB2K0uj8YXRsVss4u-Dgt_-U3V4VXsivNI,1070
163
- magic_hour-0.23.0.dist-info/METADATA,sha256=W0vahZcyfUqxLtUDqSxjto2iy8wnmtZYRhTV_9pqpxQ,5478
164
- magic_hour-0.23.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
165
- magic_hour-0.23.0.dist-info/RECORD,,
162
+ magic_hour-0.24.0.dist-info/LICENSE,sha256=F3fxj7JXPgB2K0uj8YXRsVss4u-Dgt_-U3V4VXsivNI,1070
163
+ magic_hour-0.24.0.dist-info/METADATA,sha256=-8qg_xPOdmMcaAMEf8VxHAFrvHrXXvh_9pQbdGWQFVw,5478
164
+ magic_hour-0.24.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
165
+ magic_hour-0.24.0.dist-info/RECORD,,