everypixel-cli 0.2.0__tar.gz → 0.2.1__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.1}/CHANGELOG.md +4 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/PKG-INFO +7 -5
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/README.md +6 -4
- everypixel_cli-0.2.1/src/everypixel_cli/__init__.py +1 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/application/services.py +8 -1
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/cli.py +13 -3
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/mcp_server.py +2 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/resources/openapi.json +73 -1
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/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.1}/.gitignore +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/LICENSE +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/pyproject.toml +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/__main__.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/application/__init__.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/application/models.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/application/serialization.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/client.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/config.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/errors.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/files.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/openapi.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/output.py +0 -0
- {everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/src/everypixel_cli/resources/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: everypixel-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
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
|
|
|
@@ -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
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.1"
|
|
@@ -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] = [
|
|
@@ -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(
|
|
@@ -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
|
|
File without changes
|
{everypixel_cli-0.2.0 → everypixel_cli-0.2.1}/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
|