diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 2aca35a..4208b5c 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.5.0" + ".": "0.6.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 8ba35ff..b9a7880 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 7 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/luma-ai-karanganesan/luma-agents-8c5b06cd9d673015a5a9c1790d7fee4ce93fd10b2d9e3ee27cf29fbc03d1f829.yml -openapi_spec_hash: 9c99c38e4976acbd2ebcb09fac7cd8bf +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/luma-ai-karanganesan/luma-agents-690b84ec62465721a7fb3fd96190470c2c1bf4bce414a1e18e0080709b35bc86.yml +openapi_spec_hash: 0252c8ca4a93918f5154a3b01fc777c0 config_hash: cc17190a7b86cf4c8868ec2f674b5221 diff --git a/CHANGELOG.md b/CHANGELOG.md index 05d3583..c8b7011 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 0.6.0 (2026-08-05) + +Full Changelog: [v0.5.0...v0.6.0](https://github.com/lumalabs/luma-agents-python/compare/v0.5.0...v0.6.0) + +### Features + +* **api:** add guide_frame parameter to VideoOptionsParam ([d42b991](https://github.com/lumalabs/luma-agents-python/commit/d42b99172419ab73ad94c82ec70dd77b476c7c74)) +* **api:** add LayerBounds model and bounds field to Layer ([8c33feb](https://github.com/lumalabs/luma-agents-python/commit/8c33feba3a0ec4594118cb808a71ca61801cbd2f)) + ## 0.5.0 (2026-08-04) Full Changelog: [v0.4.0...v0.5.0](https://github.com/lumalabs/luma-agents-python/compare/v0.4.0...v0.5.0) diff --git a/pyproject.toml b/pyproject.toml index 0c14e18..f1e547b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "luma-agents" -version = "0.5.0" +version = "0.6.0" description = "The official Python library for the luma API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/luma_agents/_version.py b/src/luma_agents/_version.py index 518edd3..db243aa 100644 --- a/src/luma_agents/_version.py +++ b/src/luma_agents/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "luma_agents" -__version__ = "0.5.0" # x-release-please-version +__version__ = "0.6.0" # x-release-please-version diff --git a/src/luma_agents/types/generation_output.py b/src/luma_agents/types/generation_output.py index ec34670..efa1cd6 100644 --- a/src/luma_agents/types/generation_output.py +++ b/src/luma_agents/types/generation_output.py @@ -4,7 +4,32 @@ from .._models import BaseModel -__all__ = ["GenerationOutput", "Layer"] +__all__ = ["GenerationOutput", "Layer", "LayerBounds"] + + +class LayerBounds(BaseModel): + """Where a layer's returned pixels sit inside the full composite frame. + + Layer images are cropped to their visible-alpha bounding box, so layers of one stack have differing pixel dimensions. Composite onto a transparent canvas_width x canvas_height image by pasting each layer at (x, y), iterating the output list in reverse (back-to-front), to reconstruct the source frame. + """ + + canvas_height: int + """Height of the full composite canvas the layers reassemble into""" + + canvas_width: int + """Width of the full composite canvas the layers reassemble into""" + + height: int + """Pixel height of the returned layer image""" + + width: int + """Pixel width of the returned layer image""" + + x: int + """Left offset of this layer's pixels within the composite canvas""" + + y: int + """Top offset of this layer's pixels within the composite canvas""" class Layer(BaseModel): @@ -25,6 +50,15 @@ class Layer(BaseModel): label: str """Short (1-2 word) layer name""" + bounds: Optional[LayerBounds] = None + """Where a layer's returned pixels sit inside the full composite frame. + + Layer images are cropped to their visible-alpha bounding box, so layers of one + stack have differing pixel dimensions. Composite onto a transparent canvas_width + x canvas_height image by pasting each layer at (x, y), iterating the output list + in reverse (back-to-front), to reconstruct the source frame. + """ + class GenerationOutput(BaseModel): """A single generated output""" diff --git a/src/luma_agents/types/video_options_param.py b/src/luma_agents/types/video_options_param.py index 53ea267..b43f333 100644 --- a/src/luma_agents/types/video_options_param.py +++ b/src/luma_agents/types/video_options_param.py @@ -45,6 +45,18 @@ class VideoOptionsParam(TypedDict, total=False): exr_export: Optional[bool] """Export EXR alongside the MP4. Requires hdr=true.""" + guide_frame: Optional[ImageRefParam] + """Media reference for guided generation. + + Provide exactly one of url, inline base64 data, generation_id, or file_id. + URL/data references accept image media at image positions; video_edit and + video_reframe sources also accept source.url or source.data when + source.media_type is a video/\\** MIME. generation_id chains image_edit off a + prior image output, video_edit/video_reframe off a prior video output, and + video.start_frame/end_frame for extension. file_id references a file previously + uploaded via POST /files — see the Files API. + """ + hdr: Optional[bool] """Generate HDR video. Requires HDR access. Not supported for video_reframe.""" diff --git a/tests/api_resources/test_generations.py b/tests/api_resources/test_generations.py index 153b675..9899c6d 100644 --- a/tests/api_resources/test_generations.py +++ b/tests/api_resources/test_generations.py @@ -94,6 +94,13 @@ def test_method_create_with_all_params(self, client: Luma) -> None: "url": "url", }, "exr_export": True, + "guide_frame": { + "data": "data", + "file_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", + "generation_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", + "media_type": "media_type", + "url": "url", + }, "hdr": True, "keyframe_indexes": [0], "keyframes": [ @@ -270,6 +277,13 @@ async def test_method_create_with_all_params(self, async_client: AsyncLuma) -> N "url": "url", }, "exr_export": True, + "guide_frame": { + "data": "data", + "file_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", + "generation_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", + "media_type": "media_type", + "url": "url", + }, "hdr": True, "keyframe_indexes": [0], "keyframes": [