everypixel-cli 0.2.0__tar.gz → 0.2.2__tar.gz
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.
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/CHANGELOG.md +8 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/PKG-INFO +9 -7
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/README.md +8 -6
- everypixel_cli-0.2.2/src/everypixel_cli/__init__.py +1 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/application/models.py +1 -1
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/application/services.py +8 -1
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/cli.py +14 -4
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/mcp_server.py +3 -1
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/resources/openapi.json +73 -1
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/schemas.py +31 -4
- everypixel_cli-0.2.0/src/everypixel_cli/__init__.py +0 -1
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/.gitignore +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/LICENSE +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/pyproject.toml +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/__main__.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/application/__init__.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/application/serialization.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/client.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/config.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/errors.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/files.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/openapi.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/output.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/resources/__init__.py +0 -0
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.2] - 2026-09-11
|
|
4
|
+
|
|
5
|
+
- Increase the default task wait timeout to 30 minutes for long video generation.
|
|
6
|
+
|
|
7
|
+
## [0.2.1] - 2026-09-11
|
|
8
|
+
|
|
9
|
+
- Support up to 9 image, 3 video, and 3 audio references for MiniMax H3/Turbo.
|
|
10
|
+
|
|
3
11
|
## [0.2.0] - 2026-09-09
|
|
4
12
|
|
|
5
13
|
- Add MiniMax H3/Turbo, WAN 3.0, Flux 3, and Seedance 2.5 video models.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: everypixel-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Official command line interface for Everypixel API
|
|
5
5
|
Project-URL: Homepage, https://labs.everypixel.com
|
|
6
6
|
Project-URL: Repository, https://github.com/everypixel/everypixel-cli
|
|
@@ -230,20 +230,22 @@ New video models use these provider defaults and limits:
|
|
|
230
230
|
|
|
231
231
|
| Model | Duration | Default resolution / aspect ratio | Inputs |
|
|
232
232
|
| --- | --- | --- | --- |
|
|
233
|
-
| `minimax-h3-turbo`, `minimax-h3` | 3–15 s | 768p / 7:4 | Text, first/last frames, or
|
|
233
|
+
| `minimax-h3-turbo`, `minimax-h3` | 3–15 s | 768p / 7:4 | Text, first/last frames, or up to 9 image, 3 video, and 3 audio references |
|
|
234
234
|
| `wan3.0` | 2–30 s | 1080p / adaptive | Text, frames, or up to 10 reference images and 5 reference videos |
|
|
235
235
|
| `flux3` | 5–20 s generation; 5–15 s continuation | 720p / 16:9 | Text, frames, or `video edit --video` for continuation |
|
|
236
236
|
| `seedance2.5` | 4–30 s | 720p / 16:9 | Text or `video edit` references, including audio alone |
|
|
237
237
|
|
|
238
|
-
|
|
239
|
-
|
|
238
|
+
Use repeatable `--reference-image`, `--reference-video`, and `--reference-audio`
|
|
239
|
+
options for MiniMax references. References cannot be combined with first/last
|
|
240
|
+
frames. WAN 3.0 also separates frame and reference inputs. Seedance 2.5 supports
|
|
241
|
+
up to 1080p;
|
|
240
242
|
Seedance 2 and Mini retain their 15-second limit. Grok video model names are
|
|
241
243
|
`grok-imagine` and `grok-imagine-1.5` (image required); `grok` and `grok15`
|
|
242
244
|
remain accepted aliases. The CLI's default video model remains `ltx23`.
|
|
243
245
|
|
|
244
246
|
Topaz upscaling models are `topaz-prob-4`, `topaz-slp-2.5`, and `topaz-ast-2`.
|
|
245
247
|
They support 4K output. The default `seedvr2` supports up to 1440p, with a
|
|
246
|
-
20-second source limit at 1440p.
|
|
248
|
+
20-second source limit at 1080p and a 10-second limit at 1440p, inclusive.
|
|
247
249
|
|
|
248
250
|
### Lipsync and Audio
|
|
249
251
|
|
|
@@ -397,7 +399,7 @@ Global options must appear before the command they apply to.
|
|
|
397
399
|
| `--output-json`, `-j` | Shortcut for JSON output |
|
|
398
400
|
| `--jq EXPRESSION` | Filter JSON output |
|
|
399
401
|
| `--wait`, `--no-wait` | Control async task polling |
|
|
400
|
-
| `--timeout SECONDS` | Set the polling timeout |
|
|
402
|
+
| `--timeout SECONDS` | Set the polling timeout (default: 30 minutes) |
|
|
401
403
|
| `--poll-interval SECONDS` | Set the delay between status requests |
|
|
402
404
|
| `--download DIRECTORY`, `-d DIRECTORY` | Download completed result files |
|
|
403
405
|
| `--no-color` | Disable colored terminal output |
|
|
@@ -488,7 +490,7 @@ everypixel --show-completion
|
|
|
488
490
|
- Authentication failure: run `everypixel auth check`, then configure the
|
|
489
491
|
credentials again if needed.
|
|
490
492
|
- Wait timeout: increase the global timeout, for example
|
|
491
|
-
`everypixel --timeout
|
|
493
|
+
`everypixel --timeout 7200 wait TASK_ID`.
|
|
492
494
|
- Invalid media: pass an existing local file, an HTTP(S) URL, or a supported
|
|
493
495
|
data URI.
|
|
494
496
|
- File not found: use an absolute path or run the command from the directory
|
|
@@ -196,20 +196,22 @@ New video models use these provider defaults and limits:
|
|
|
196
196
|
|
|
197
197
|
| Model | Duration | Default resolution / aspect ratio | Inputs |
|
|
198
198
|
| --- | --- | --- | --- |
|
|
199
|
-
| `minimax-h3-turbo`, `minimax-h3` | 3–15 s | 768p / 7:4 | Text, first/last frames, or
|
|
199
|
+
| `minimax-h3-turbo`, `minimax-h3` | 3–15 s | 768p / 7:4 | Text, first/last frames, or up to 9 image, 3 video, and 3 audio references |
|
|
200
200
|
| `wan3.0` | 2–30 s | 1080p / adaptive | Text, frames, or up to 10 reference images and 5 reference videos |
|
|
201
201
|
| `flux3` | 5–20 s generation; 5–15 s continuation | 720p / 16:9 | Text, frames, or `video edit --video` for continuation |
|
|
202
202
|
| `seedance2.5` | 4–30 s | 720p / 16:9 | Text or `video edit` references, including audio alone |
|
|
203
203
|
|
|
204
|
-
|
|
205
|
-
|
|
204
|
+
Use repeatable `--reference-image`, `--reference-video`, and `--reference-audio`
|
|
205
|
+
options for MiniMax references. References cannot be combined with first/last
|
|
206
|
+
frames. WAN 3.0 also separates frame and reference inputs. Seedance 2.5 supports
|
|
207
|
+
up to 1080p;
|
|
206
208
|
Seedance 2 and Mini retain their 15-second limit. Grok video model names are
|
|
207
209
|
`grok-imagine` and `grok-imagine-1.5` (image required); `grok` and `grok15`
|
|
208
210
|
remain accepted aliases. The CLI's default video model remains `ltx23`.
|
|
209
211
|
|
|
210
212
|
Topaz upscaling models are `topaz-prob-4`, `topaz-slp-2.5`, and `topaz-ast-2`.
|
|
211
213
|
They support 4K output. The default `seedvr2` supports up to 1440p, with a
|
|
212
|
-
20-second source limit at 1440p.
|
|
214
|
+
20-second source limit at 1080p and a 10-second limit at 1440p, inclusive.
|
|
213
215
|
|
|
214
216
|
### Lipsync and Audio
|
|
215
217
|
|
|
@@ -363,7 +365,7 @@ Global options must appear before the command they apply to.
|
|
|
363
365
|
| `--output-json`, `-j` | Shortcut for JSON output |
|
|
364
366
|
| `--jq EXPRESSION` | Filter JSON output |
|
|
365
367
|
| `--wait`, `--no-wait` | Control async task polling |
|
|
366
|
-
| `--timeout SECONDS` | Set the polling timeout |
|
|
368
|
+
| `--timeout SECONDS` | Set the polling timeout (default: 30 minutes) |
|
|
367
369
|
| `--poll-interval SECONDS` | Set the delay between status requests |
|
|
368
370
|
| `--download DIRECTORY`, `-d DIRECTORY` | Download completed result files |
|
|
369
371
|
| `--no-color` | Disable colored terminal output |
|
|
@@ -454,7 +456,7 @@ everypixel --show-completion
|
|
|
454
456
|
- Authentication failure: run `everypixel auth check`, then configure the
|
|
455
457
|
credentials again if needed.
|
|
456
458
|
- Wait timeout: increase the global timeout, for example
|
|
457
|
-
`everypixel --timeout
|
|
459
|
+
`everypixel --timeout 7200 wait TASK_ID`.
|
|
458
460
|
- Invalid media: pass an existing local file, an HTTP(S) URL, or a supported
|
|
459
461
|
data URI.
|
|
460
462
|
- File not found: use an absolute path or run the command from the directory
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.2"
|
|
@@ -651,6 +651,7 @@ def build_video_generate_payload(**values: Any) -> dict[str, Any]:
|
|
|
651
651
|
last_image = values.pop("last_image", None)
|
|
652
652
|
reference_images = values.pop("reference_images", [])
|
|
653
653
|
reference_videos = values.pop("reference_videos", [])
|
|
654
|
+
reference_audios = values.pop("reference_audios", [])
|
|
654
655
|
values = normalize_grok_model(values)
|
|
655
656
|
if values.get("duration") is None:
|
|
656
657
|
model = values.get("model")
|
|
@@ -677,6 +678,10 @@ def build_video_generate_payload(**values: Any) -> dict[str, Any]:
|
|
|
677
678
|
payload["reference_video_urls"] = [
|
|
678
679
|
media_value(value) for value in reference_videos
|
|
679
680
|
]
|
|
681
|
+
if reference_audios:
|
|
682
|
+
payload["reference_audio_urls"] = [
|
|
683
|
+
media_value(value) for value in reference_audios
|
|
684
|
+
]
|
|
680
685
|
validated = _VIDEO_GENERATE_ADAPTER.validate_python(
|
|
681
686
|
{key: value for key, value in payload.items() if value is not None}
|
|
682
687
|
)
|
|
@@ -971,6 +976,7 @@ class ApplicationServices:
|
|
|
971
976
|
aspect_ratio: str | None,
|
|
972
977
|
reference_images: list[str] | None = None,
|
|
973
978
|
reference_videos: list[str] | None = None,
|
|
979
|
+
reference_audios: list[str] | None = None,
|
|
974
980
|
image: str | None = None,
|
|
975
981
|
last_image: str | None = None,
|
|
976
982
|
seed: int | None = None,
|
|
@@ -986,6 +992,7 @@ class ApplicationServices:
|
|
|
986
992
|
aspect_ratio=aspect_ratio,
|
|
987
993
|
reference_images=reference_images or [],
|
|
988
994
|
reference_videos=reference_videos or [],
|
|
995
|
+
reference_audios=reference_audios or [],
|
|
989
996
|
image=image,
|
|
990
997
|
last_image=last_image,
|
|
991
998
|
seed=seed,
|
|
@@ -1427,7 +1434,7 @@ def normalize_video_edit_content(payload: dict[str, Any]) -> None:
|
|
|
1427
1434
|
value = payload.get(key)
|
|
1428
1435
|
if isinstance(value, str):
|
|
1429
1436
|
payload[key] = media_value(value)
|
|
1430
|
-
for key in ("reference_image_urls", "reference_video_urls"):
|
|
1437
|
+
for key in ("reference_image_urls", "reference_video_urls", "reference_audio_urls"):
|
|
1431
1438
|
values = payload.get(key)
|
|
1432
1439
|
if isinstance(values, list):
|
|
1433
1440
|
payload[key] = [
|
|
@@ -267,7 +267,7 @@ def main(
|
|
|
267
267
|
callback=positive_float,
|
|
268
268
|
help="Task wait timeout in seconds.",
|
|
269
269
|
),
|
|
270
|
-
] =
|
|
270
|
+
] = 1800.0,
|
|
271
271
|
poll_interval: Annotated[
|
|
272
272
|
float,
|
|
273
273
|
typer.Option(
|
|
@@ -807,7 +807,14 @@ def video_generate(
|
|
|
807
807
|
list[str],
|
|
808
808
|
typer.Option(
|
|
809
809
|
"--reference-video",
|
|
810
|
-
help="Wan reference video URL or local path. Can be repeated.",
|
|
810
|
+
help="MiniMax or Wan reference video URL or local path. Can be repeated.",
|
|
811
|
+
),
|
|
812
|
+
] = [],
|
|
813
|
+
reference_audio: Annotated[
|
|
814
|
+
list[str],
|
|
815
|
+
typer.Option(
|
|
816
|
+
"--reference-audio",
|
|
817
|
+
help="MiniMax reference audio URL or local path. Can be repeated.",
|
|
811
818
|
),
|
|
812
819
|
] = [],
|
|
813
820
|
seed: Optional[int] = None,
|
|
@@ -839,6 +846,7 @@ def video_generate(
|
|
|
839
846
|
aspect_ratio=aspect_ratio,
|
|
840
847
|
reference_images=reference_image,
|
|
841
848
|
reference_videos=reference_video,
|
|
849
|
+
reference_audios=reference_audio,
|
|
842
850
|
seed=seed,
|
|
843
851
|
generate_audio=generate_audio,
|
|
844
852
|
callback_url=callback_url,
|
|
@@ -1025,7 +1033,8 @@ def video_upscale(
|
|
|
1025
1033
|
typer.Option(
|
|
1026
1034
|
"--resolution",
|
|
1027
1035
|
help=(
|
|
1028
|
-
"720p, 1080p, 1440p, or 4k (Topaz only).
|
|
1036
|
+
"720p, 1080p, 1440p, or 4k (Topaz only). "
|
|
1037
|
+
"SeedVR2: up to 20s at 1080p, 10s at 1440p."
|
|
1029
1038
|
),
|
|
1030
1039
|
),
|
|
1031
1040
|
] = "1080p",
|
|
@@ -1036,7 +1045,8 @@ def video_upscale(
|
|
|
1036
1045
|
) -> None:
|
|
1037
1046
|
"""Start video upscale from a URL/file or task_id.
|
|
1038
1047
|
|
|
1039
|
-
SeedVR2 source videos
|
|
1048
|
+
SeedVR2 accepts source videos up to 20 seconds at 1080p or 10 seconds at
|
|
1049
|
+
1440p, inclusive.
|
|
1040
1050
|
"""
|
|
1041
1051
|
|
|
1042
1052
|
runtime = apply_common_options(
|
|
@@ -99,7 +99,7 @@ class MCPExecutionOptions(BaseModel):
|
|
|
99
99
|
description="Local directory for completed result files; implies waiting.",
|
|
100
100
|
)
|
|
101
101
|
timeout: float = Field(
|
|
102
|
-
default=
|
|
102
|
+
default=1800.0,
|
|
103
103
|
gt=0,
|
|
104
104
|
description="Maximum task wait time in seconds.",
|
|
105
105
|
)
|
|
@@ -225,6 +225,7 @@ class VideoGenerateInput(MCPToolInput):
|
|
|
225
225
|
aspect_ratio: VideoGenerateAspectRatio | None = None
|
|
226
226
|
reference_images: list[str] | None = None
|
|
227
227
|
reference_videos: list[str] | None = None
|
|
228
|
+
reference_audios: list[str] | None = None
|
|
228
229
|
image: str | None = None
|
|
229
230
|
last_image: str | None = None
|
|
230
231
|
seed: int | None = None
|
|
@@ -576,6 +577,7 @@ def create_mcp_server(
|
|
|
576
577
|
aspect_ratio=arguments.aspect_ratio,
|
|
577
578
|
reference_images=arguments.reference_images,
|
|
578
579
|
reference_videos=arguments.reference_videos,
|
|
580
|
+
reference_audios=arguments.reference_audios,
|
|
579
581
|
image=arguments.image,
|
|
580
582
|
last_image=arguments.last_image,
|
|
581
583
|
seed=arguments.seed,
|
|
@@ -2073,14 +2073,30 @@
|
|
|
2073
2073
|
"title": "Prompt",
|
|
2074
2074
|
"type": "string"
|
|
2075
2075
|
},
|
|
2076
|
+
"reference_audio_urls": {
|
|
2077
|
+
"items": {
|
|
2078
|
+
"type": "string"
|
|
2079
|
+
},
|
|
2080
|
+
"maxItems": 3,
|
|
2081
|
+
"title": "Reference Audio Urls",
|
|
2082
|
+
"type": "array"
|
|
2083
|
+
},
|
|
2076
2084
|
"reference_image_urls": {
|
|
2077
2085
|
"items": {
|
|
2078
2086
|
"type": "string"
|
|
2079
2087
|
},
|
|
2080
|
-
"maxItems":
|
|
2088
|
+
"maxItems": 9,
|
|
2081
2089
|
"title": "Reference Image Urls",
|
|
2082
2090
|
"type": "array"
|
|
2083
2091
|
},
|
|
2092
|
+
"reference_video_urls": {
|
|
2093
|
+
"items": {
|
|
2094
|
+
"type": "string"
|
|
2095
|
+
},
|
|
2096
|
+
"maxItems": 3,
|
|
2097
|
+
"title": "Reference Video Urls",
|
|
2098
|
+
"type": "array"
|
|
2099
|
+
},
|
|
2084
2100
|
"resolution": {
|
|
2085
2101
|
"const": "768p",
|
|
2086
2102
|
"default": "768p",
|
|
@@ -4852,6 +4868,62 @@
|
|
|
4852
4868
|
]
|
|
4853
4869
|
}
|
|
4854
4870
|
},
|
|
4871
|
+
"/v1/tasks/{task_id}": {
|
|
4872
|
+
"delete": {
|
|
4873
|
+
"description": "Cancel an owned task while cancellation is still available. Repeated cancellation is idempotent.",
|
|
4874
|
+
"operationId": "delete_task_v1_tasks__task_id__delete",
|
|
4875
|
+
"parameters": [
|
|
4876
|
+
{
|
|
4877
|
+
"in": "path",
|
|
4878
|
+
"name": "task_id",
|
|
4879
|
+
"required": true,
|
|
4880
|
+
"schema": {
|
|
4881
|
+
"format": "uuid",
|
|
4882
|
+
"title": "Task Id",
|
|
4883
|
+
"type": "string"
|
|
4884
|
+
}
|
|
4885
|
+
}
|
|
4886
|
+
],
|
|
4887
|
+
"responses": {
|
|
4888
|
+
"200": {
|
|
4889
|
+
"content": {
|
|
4890
|
+
"application/json": {
|
|
4891
|
+
"schema": {
|
|
4892
|
+
"$ref": "#/components/schemas/ImgenStatusResponse"
|
|
4893
|
+
}
|
|
4894
|
+
}
|
|
4895
|
+
},
|
|
4896
|
+
"description": "Successful Response"
|
|
4897
|
+
},
|
|
4898
|
+
"401": {
|
|
4899
|
+
"description": "Authentication required"
|
|
4900
|
+
},
|
|
4901
|
+
"404": {
|
|
4902
|
+
"description": "Task not found for this client"
|
|
4903
|
+
},
|
|
4904
|
+
"409": {
|
|
4905
|
+
"description": "Task cannot be cancelled in its current state"
|
|
4906
|
+
},
|
|
4907
|
+
"422": {
|
|
4908
|
+
"content": {
|
|
4909
|
+
"application/json": {
|
|
4910
|
+
"schema": {
|
|
4911
|
+
"$ref": "#/components/schemas/HTTPValidationError"
|
|
4912
|
+
}
|
|
4913
|
+
}
|
|
4914
|
+
},
|
|
4915
|
+
"description": "Validation Error"
|
|
4916
|
+
},
|
|
4917
|
+
"503": {
|
|
4918
|
+
"description": "Cancellation temporarily unavailable; retry the request"
|
|
4919
|
+
}
|
|
4920
|
+
},
|
|
4921
|
+
"summary": "Cancel a queued task",
|
|
4922
|
+
"tags": [
|
|
4923
|
+
"imgen"
|
|
4924
|
+
]
|
|
4925
|
+
}
|
|
4926
|
+
},
|
|
4855
4927
|
"/v1/transcribe": {
|
|
4856
4928
|
"post": {
|
|
4857
4929
|
"operationId": "transcribe_v1_transcribe_post",
|
|
@@ -6,6 +6,7 @@ media sources, model limits, enum values, and numeric ranges.
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
+
import re
|
|
9
10
|
from typing import Annotated, Any, Literal
|
|
10
11
|
|
|
11
12
|
from pydantic import (
|
|
@@ -424,7 +425,9 @@ class MiniMaxH3VideoGenRequest(_StrictVideoPayload):
|
|
|
424
425
|
seed: int = Field(default=-1, ge=-1, le=18_446_744_073_709_551_615)
|
|
425
426
|
image_url: str | None = None
|
|
426
427
|
image_last_url: str | None = None
|
|
427
|
-
reference_image_urls: list[str] = Field(default_factory=list, max_length=
|
|
428
|
+
reference_image_urls: list[str] = Field(default_factory=list, max_length=9)
|
|
429
|
+
reference_video_urls: list[str] = Field(default_factory=list, max_length=3)
|
|
430
|
+
reference_audio_urls: list[str] = Field(default_factory=list, max_length=3)
|
|
428
431
|
callback_url: str | None = None
|
|
429
432
|
|
|
430
433
|
@model_validator(mode="after")
|
|
@@ -433,8 +436,29 @@ class MiniMaxH3VideoGenRequest(_StrictVideoPayload):
|
|
|
433
436
|
raise ValueError("prompt must not be blank")
|
|
434
437
|
validate_frame_inputs(self.image_url, self.image_last_url)
|
|
435
438
|
validate_reference_inputs(self.reference_image_urls, [])
|
|
436
|
-
|
|
437
|
-
|
|
439
|
+
for media_type, values in (
|
|
440
|
+
("video", self.reference_video_urls),
|
|
441
|
+
("audio", self.reference_audio_urls),
|
|
442
|
+
):
|
|
443
|
+
for value in values:
|
|
444
|
+
if value.startswith("data:"):
|
|
445
|
+
if not re.fullmatch(
|
|
446
|
+
rf"data:{media_type}/[a-zA-Z0-9.+\-]+;base64,[A-Za-z0-9+/]+=*",
|
|
447
|
+
value,
|
|
448
|
+
):
|
|
449
|
+
raise ValueError(
|
|
450
|
+
f"reference_{media_type}_urls requires {media_type} "
|
|
451
|
+
"base64 data URIs"
|
|
452
|
+
)
|
|
453
|
+
else:
|
|
454
|
+
HttpUrl(value)
|
|
455
|
+
references = (
|
|
456
|
+
self.reference_image_urls
|
|
457
|
+
or self.reference_video_urls
|
|
458
|
+
or self.reference_audio_urls
|
|
459
|
+
)
|
|
460
|
+
if references and (self.image_url or self.image_last_url):
|
|
461
|
+
raise ValueError("Frame images and reference media cannot be combined")
|
|
438
462
|
return self
|
|
439
463
|
|
|
440
464
|
|
|
@@ -975,7 +999,10 @@ class VideoUpscalePayload(BaseModel):
|
|
|
975
999
|
callback_url: str | None = None
|
|
976
1000
|
resolution: VideoUpscaleResolution = Field(
|
|
977
1001
|
default="1080p",
|
|
978
|
-
description=
|
|
1002
|
+
description=(
|
|
1003
|
+
"Output resolution; SeedVR2 source limits: "
|
|
1004
|
+
"20s at 1080p, 10s at 1440p, inclusive."
|
|
1005
|
+
),
|
|
979
1006
|
)
|
|
980
1007
|
|
|
981
1008
|
@model_validator(mode="after")
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.2.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/application/serialization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|