layer 1.0.45__tar.gz → 1.0.50__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 (30) hide show
  1. {layer-1.0.45 → layer-1.0.50}/PKG-INFO +1 -1
  2. {layer-1.0.45 → layer-1.0.50}/pyproject.toml +1 -1
  3. {layer-1.0.45 → layer-1.0.50}/pyproject.toml.orig +1 -1
  4. {layer-1.0.45 → layer-1.0.50}/src/layer/_api/models.py +74 -0
  5. {layer-1.0.45 → layer-1.0.50}/README.md +0 -0
  6. {layer-1.0.45 → layer-1.0.50}/src/layer/__init__.py +0 -0
  7. {layer-1.0.45 → layer-1.0.50}/src/layer/__main__.py +0 -0
  8. {layer-1.0.45 → layer-1.0.50}/src/layer/_api/__init__.py +0 -0
  9. {layer-1.0.45 → layer-1.0.50}/src/layer/_api/client.py +0 -0
  10. {layer-1.0.45 → layer-1.0.50}/src/layer/_cli/__init__.py +0 -0
  11. {layer-1.0.45 → layer-1.0.50}/src/layer/_cli/auth_commands.py +0 -0
  12. {layer-1.0.45 → layer-1.0.50}/src/layer/_cli/base_model_commands.py +0 -0
  13. {layer-1.0.45 → layer-1.0.50}/src/layer/_cli/context.py +0 -0
  14. {layer-1.0.45 → layer-1.0.50}/src/layer/_cli/context_commands.py +0 -0
  15. {layer-1.0.45 → layer-1.0.50}/src/layer/_cli/generate_commands.py +0 -0
  16. {layer-1.0.45 → layer-1.0.50}/src/layer/_cli/main.py +0 -0
  17. {layer-1.0.45 → layer-1.0.50}/src/layer/_cli/output.py +0 -0
  18. {layer-1.0.45 → layer-1.0.50}/src/layer/auth.py +0 -0
  19. {layer-1.0.45 → layer-1.0.50}/src/layer/catalog.py +0 -0
  20. {layer-1.0.45 → layer-1.0.50}/src/layer/config.py +0 -0
  21. {layer-1.0.45 → layer-1.0.50}/src/layer/credentials.py +0 -0
  22. {layer-1.0.45 → layer-1.0.50}/src/layer/download.py +0 -0
  23. {layer-1.0.45 → layer-1.0.50}/src/layer/exit_codes.py +0 -0
  24. {layer-1.0.45 → layer-1.0.50}/src/layer/generate.py +0 -0
  25. {layer-1.0.45 → layer-1.0.50}/src/layer/oauth.py +0 -0
  26. {layer-1.0.45 → layer-1.0.50}/src/layer/params.py +0 -0
  27. {layer-1.0.45 → layer-1.0.50}/src/layer/sessions.py +0 -0
  28. {layer-1.0.45 → layer-1.0.50}/src/layer/sse.py +0 -0
  29. {layer-1.0.45 → layer-1.0.50}/src/layer/uploads.py +0 -0
  30. {layer-1.0.45 → layer-1.0.50}/src/layer/workspaces.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: layer
3
- Version: 1.0.45
3
+ Version: 1.0.50
4
4
  Summary: Command-line interface for Layer — AI asset generation for game studios.
5
5
  Keywords: layer,ai,generative,game-development,cli
6
6
  Author: Layer
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "layer"
3
- version = "1.0.45"
3
+ version = "1.0.50"
4
4
  description = "Command-line interface for Layer — AI asset generation for game studios."
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "layer"
3
- version = "1.0.45"
3
+ version = "1.0.50"
4
4
  description = "Command-line interface for Layer — AI asset generation for game studios."
5
5
  readme = "README.md"
6
6
  authors = [{ name = "Layer", email = "info@layer.ai" }]
@@ -52,6 +52,15 @@ class AudioEditSection(BaseModel):
52
52
  anchor: AudioAnchor | None = "START"
53
53
 
54
54
 
55
+ class AudioExtension(BaseModel):
56
+ """
57
+ Outpaint: how much audio to add before/after the source clip.
58
+ """
59
+
60
+ before_seconds: float | None = Field(0.0, ge=0.0, title="Before Seconds")
61
+ after_seconds: float | None = Field(0.0, ge=0.0, title="After Seconds")
62
+
63
+
55
64
  class AudioOutputFormat(Enum):
56
65
  """
57
66
  Container for a delivered audio file.
@@ -80,6 +89,23 @@ class BlueprintRunStatus(Enum):
80
89
  cancelled = "cancelled"
81
90
 
82
91
 
92
+ class BodyExchangeToken(BaseModel):
93
+ grant_type: str = Field(..., description="Must be `client_credentials`.", title="Grant Type")
94
+ client_id: str | None = Field(None, description="The service account's id.", title="Client Id")
95
+ client_secret: str | None = Field(None, description="One of the service account's keys.", title="Client Secret")
96
+ scope: str | None = Field(
97
+ None,
98
+ description="Space-delimited scopes to narrow the token to.",
99
+ title="Scope",
100
+ )
101
+
102
+
103
+ class BodyRevokeToken(BaseModel):
104
+ token: str = Field(..., description="The service account key to revoke.", title="Token")
105
+ client_id: str | None = Field(None, description="The service account's id.", title="Client Id")
106
+ client_secret: str | None = Field(None, description="One of the service account's keys.", title="Client Secret")
107
+
108
+
83
109
  class CameraRotationDelta(BaseModel):
84
110
  pitch_delta: float | None = Field(None, title="Pitch Delta")
85
111
  yaw_delta: float | None = Field(None, title="Yaw Delta")
@@ -852,6 +878,7 @@ class InferenceUseCase(Enum):
852
878
  denoise_video = "denoise_video"
853
879
  denoise_audio = "denoise_audio"
854
880
  audio_separation = "audio_separation"
881
+ audio_isolation = "audio_isolation"
855
882
  deblur_video = "deblur_video"
856
883
  restore_image = "restore_image"
857
884
  sdr_to_hdr_video = "sdr_to_hdr_video"
@@ -865,6 +892,7 @@ class InferenceUseCase(Enum):
865
892
  erase_object = "erase_object"
866
893
  edit_text = "edit_text"
867
894
  dub_video = "dub_video"
895
+ extend_audio = "extend_audio"
868
896
  generate_pbr_materials = "generate_pbr_materials"
869
897
  complete_draft = "complete_draft"
870
898
 
@@ -900,6 +928,11 @@ class ModelCapabilitiesREST(BaseModel):
900
928
  )
901
929
  text_prompt: bool | None = Field(False, title="Text Prompt")
902
930
  text_prompt_required: bool | None = Field(False, title="Text Prompt Required")
931
+ max_prompt_chars: int | None = Field(
932
+ None,
933
+ description="Longest prompt, in characters, the model accepts; null when unbounded.",
934
+ title="Max Prompt Chars",
935
+ )
903
936
  negative_prompt: bool | None = Field(False, title="Negative Prompt")
904
937
  seed: bool | None = Field(False, title="Seed")
905
938
  inpainting: bool | None = Field(False, title="Inpainting")
@@ -1214,6 +1247,8 @@ class Role(Enum):
1214
1247
  art_director = "art_director"
1215
1248
  artist = "artist"
1216
1249
  member = "member"
1250
+ installation = "installation"
1251
+ provisioning = "provisioning"
1217
1252
 
1218
1253
 
1219
1254
  class RotateWebhookSecretResponse(BaseModel):
@@ -1406,6 +1441,17 @@ class TargetRegion(Enum):
1406
1441
  background = "background"
1407
1442
 
1408
1443
 
1444
+ class TokenResponse(BaseModel):
1445
+ access_token: str = Field(
1446
+ ...,
1447
+ description="A signed JWT access token (RFC 9068), sent as `Authorization: Bearer <token>`. Treat it as opaque.",
1448
+ title="Access Token",
1449
+ )
1450
+ token_type: str = Field(..., description="Always `Bearer`.", title="Token Type")
1451
+ expires_in: int = Field(..., description="Seconds until the token expires.", title="Expires In")
1452
+ scope: str = Field(..., description="The space-delimited scopes the token carries.", title="Scope")
1453
+
1454
+
1409
1455
  class ToolGuidanceFileTypeSupport(BaseModel):
1410
1456
  type: str = Field(
1411
1457
  ...,
@@ -1931,6 +1977,11 @@ class BaseModelCapabilitiesREST(BaseModel):
1931
1977
  )
1932
1978
  text_prompt: bool | None = Field(False, title="Text Prompt")
1933
1979
  text_prompt_required: bool | None = Field(False, title="Text Prompt Required")
1980
+ max_prompt_chars: int | None = Field(
1981
+ None,
1982
+ description="Longest prompt, in characters, the model accepts; null when unbounded.",
1983
+ title="Max Prompt Chars",
1984
+ )
1934
1985
  negative_prompt: bool | None = Field(False, title="Negative Prompt")
1935
1986
  seed: bool | None = Field(False, title="Seed")
1936
1987
  inpainting: bool | None = Field(False, title="Inpainting")
@@ -3220,6 +3271,17 @@ class EstimateInferencePriceRequest(BaseModel):
3220
3271
  )
3221
3272
  reframe: bool | None = Field(None, description="Reframe/extend the image.", title="Reframe")
3222
3273
  refill: bool | None = Field(None, description="Outpaint/refill transparent areas.", title="Refill")
3274
+ guidance_files: list[ForgeGuidanceFileInput] | None = Field(
3275
+ [],
3276
+ description="The guidance files the execute call will pass. An upscale or a per-megapixel background removal is priced by its source file's size, and on some models an input image bills the edit rate.",
3277
+ max_length=20,
3278
+ title="Guidance Files",
3279
+ validate_default=True,
3280
+ )
3281
+ mask: ForgeMaskInput | None = Field(
3282
+ None,
3283
+ description="The mask the execute call will pass. Some models bill a masked edit at a different rate.",
3284
+ )
3223
3285
 
3224
3286
 
3225
3287
  class EstimateInferencePriceV2Request(BaseModel):
@@ -3536,6 +3598,10 @@ class EstimateInferencePriceV2Request(BaseModel):
3536
3598
  title="Audio Sections",
3537
3599
  validate_default=True,
3538
3600
  )
3601
+ audio_extension: AudioExtension | None = Field(
3602
+ None,
3603
+ description="Extend the init audio: `after_seconds` of new audio past its end (and, where the model allows it, `before_seconds` ahead of its start). Honored by the audio models listed for the `extend_audio` use case.",
3604
+ )
3539
3605
  video_section: VideoSection | None = Field(
3540
3606
  None,
3541
3607
  description="Replace a span of the init video with a generated scene: the source cuts at `start_seconds` and picks up again at `end_seconds`, both from the clip's start, while `duration_seconds` sets the new scene's length. Required by the video models listed for the `insert_video` use case.",
@@ -3547,6 +3613,10 @@ class EstimateInferencePriceV2Request(BaseModel):
3547
3613
  title="Guidance Files",
3548
3614
  validate_default=True,
3549
3615
  )
3616
+ mask: ForgeMaskInput | None = Field(
3617
+ None,
3618
+ description="The mask the execute call will pass. Some models bill a masked edit at a different rate.",
3619
+ )
3550
3620
 
3551
3621
 
3552
3622
  class ExecuteInferenceRequest(BaseModel):
@@ -3995,6 +4065,10 @@ class ExecuteInferenceV2Request(BaseModel):
3995
4065
  title="Audio Sections",
3996
4066
  validate_default=True,
3997
4067
  )
4068
+ audio_extension: AudioExtension | None = Field(
4069
+ None,
4070
+ description="Extend the init audio: `after_seconds` of new audio past its end (and, where the model allows it, `before_seconds` ahead of its start). Honored by the audio models listed for the `extend_audio` use case.",
4071
+ )
3998
4072
  video_section: VideoSection | None = Field(
3999
4073
  None,
4000
4074
  description="Replace a span of the init video with a generated scene: the source cuts at `start_seconds` and picks up again at `end_seconds`, both from the clip's start, while `duration_seconds` sets the new scene's length. Required by the video models listed for the `insert_video` use case.",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes