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.
Files changed (24) hide show
  1. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/CHANGELOG.md +8 -0
  2. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/PKG-INFO +9 -7
  3. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/README.md +8 -6
  4. everypixel_cli-0.2.2/src/everypixel_cli/__init__.py +1 -0
  5. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/application/models.py +1 -1
  6. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/application/services.py +8 -1
  7. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/cli.py +14 -4
  8. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/mcp_server.py +3 -1
  9. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/resources/openapi.json +73 -1
  10. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/schemas.py +31 -4
  11. everypixel_cli-0.2.0/src/everypixel_cli/__init__.py +0 -1
  12. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/.gitignore +0 -0
  13. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/LICENSE +0 -0
  14. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/pyproject.toml +0 -0
  15. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/__main__.py +0 -0
  16. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/application/__init__.py +0 -0
  17. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/application/serialization.py +0 -0
  18. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/client.py +0 -0
  19. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/config.py +0 -0
  20. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/errors.py +0 -0
  21. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/files.py +0 -0
  22. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/openapi.py +0 -0
  23. {everypixel_cli-0.2.0 → everypixel_cli-0.2.2}/src/everypixel_cli/output.py +0 -0
  24. {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.0
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 one `--reference-image` |
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
- MiniMax reference images cannot be combined with first/last frames. WAN 3.0
239
- also separates frame and reference inputs. Seedance 2.5 supports up to 1080p;
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 600 wait TASK_ID`.
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 one `--reference-image` |
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
- MiniMax reference images cannot be combined with first/last frames. WAN 3.0
205
- also separates frame and reference inputs. Seedance 2.5 supports up to 1080p;
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 600 wait TASK_ID`.
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"
@@ -18,7 +18,7 @@ class ExecutionOptions:
18
18
 
19
19
  wait: bool = False
20
20
  download_directory: Path | None = None
21
- timeout: float = 300.0
21
+ timeout: float = 1800.0
22
22
  poll_interval: float = 2.0
23
23
  cancel_event: Event | None = field(
24
24
  default=None,
@@ -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
- ] = 300.0,
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). SeedVR2: up to 20s at 1440p."
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 longer than 20 seconds cannot be upscaled to 1440p.
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=300.0,
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": 1,
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=1)
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
- if self.reference_image_urls and (self.image_url or self.image_last_url):
437
- raise ValueError("Frame images and reference_image_urls cannot be combined")
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="Output resolution; SeedVR2 accepts up to 20 seconds at 1440p.",
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