diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5c973cf6..7bcc0a32 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: lint: timeout-minutes: 10 name: lint - runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: ubuntu-latest if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata') steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -44,7 +44,7 @@ jobs: permissions: contents: read id-token: write - runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -61,44 +61,3 @@ jobs: - name: Run build run: rye build - - - name: Get GitHub OIDC Token - if: |- - github.repository == 'stainless-sdks/runwayml-python' && - !startsWith(github.ref, 'refs/heads/stl/') - id: github-oidc - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 - with: - script: core.setOutput('github_token', await core.getIDToken()); - - - name: Upload tarball - if: |- - github.repository == 'stainless-sdks/runwayml-python' && - !startsWith(github.ref, 'refs/heads/stl/') - env: - URL: https://pkg.stainless.com/s - AUTH: ${{ steps.github-oidc.outputs.github_token }} - SHA: ${{ github.sha }} - run: ./scripts/utils/upload-artifact.sh - - test: - timeout-minutes: 10 - name: test - runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} - if: github.event_name == 'push' || github.event.pull_request.head.repo.fork - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - - name: Install Rye - run: | - curl -sSf https://rye.astral.sh/get | bash - echo "$HOME/.rye/shims" >> $GITHUB_PATH - env: - RYE_VERSION: '0.44.0' - RYE_INSTALL_OPTION: '--yes' - - - name: Bootstrap - run: ./scripts/bootstrap - - - name: Run tests - run: ./scripts/test diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml index 04ee844a..7f4d3abb 100644 --- a/.github/workflows/publish-pypi.yml +++ b/.github/workflows/publish-pypi.yml @@ -1,13 +1,9 @@ -# This workflow is triggered when a GitHub release is created. -# It can also be run manually to re-publish to PyPI in case it failed for some reason. -# You can run this workflow by navigating to https://www.github.com/runwayml/sdk-python/actions/workflows/publish-pypi.yml +# workflow for re-running publishing to PyPI in case it fails for some reason +# you can run this workflow by navigating to https://www.github.com/runwayml/sdk-python/actions/workflows/publish-pypi.yml name: Publish PyPI on: workflow_dispatch: - release: - types: [published] - jobs: publish: name: publish diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml index e9f84456..240e4346 100644 --- a/.github/workflows/release-doctor.yml +++ b/.github/workflows/release-doctor.yml @@ -18,4 +18,5 @@ jobs: run: | bash ./bin/check-release-environment env: + RELEASE_PLEASE_TOKEN: ${{ secrets.RELEASE_PLEASE_TOKEN }} PYPI_TOKEN: ${{ secrets.RUNWAYML_PYPI_TOKEN || secrets.PYPI_TOKEN }} diff --git a/.release-please-manifest.json b/.release-please-manifest.json index aab82c2e..f385763e 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "5.15.0" + ".": "5.16.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 9d90380d..c9a9bfa4 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1 @@ configured_endpoints: 63 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runwayml/runwayml-673462285f9cc77f80b538a726a55a7d003ce89b0dd5aeacf45b3901459abfa7.yml -openapi_spec_hash: 130cf273e4489beb3b7e2922f1ff26ae -config_hash: 8bd51a43d85b7a841080e78e6f673b63 diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f0b40cc..74738e6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,39 @@ # Changelog +## 5.16.0 (2026-08-20) + +Full Changelog: [v5.15.0...v5.16.0](https://github.com/runwayml/sdk-python/compare/v5.15.0...v5.16.0) + +### Features + +* **api:** stlc build onto staging next ([7449a94](https://github.com/runwayml/sdk-python/commit/7449a949278146acc7e9a3780a4aaa1ee2f6f205)) + + +### Bug Fixes + +* **client:** drop duplicate generate/routers properties ([499c3c8](https://github.com/runwayml/sdk-python/commit/499c3c8f1c8ad3ef1033d55c8b7128c96c1e4cef)) +* **client:** restore Client/AsyncClient aliases ([a45e3af](https://github.com/runwayml/sdk-python/commit/a45e3aff6bf892cf442b0ba78a5e8f846bdf6d2e)) + + +### Chores + +* **internal:** allow the mock server port to be set with STAINLESS_MOCK_PORT ([4046920](https://github.com/runwayml/sdk-python/commit/40469209ce682ca9a70b9f9eda52a8c0843c5764)) +* local reseal after client.uploads + generate/routers fix ([3929658](https://github.com/runwayml/sdk-python/commit/3929658bd55493e866cde357c26f399aa2b24e48)) + + +### Documentation + +* expand 5.15.0 changelog with customer-facing API surface ([dca7f1b](https://github.com/runwayml/sdk-python/commit/dca7f1beb9b76c96be39ff3aec10eae586baf451)) + ## 5.15.0 (2026-08-18) Full Changelog: [v5.14.0...v5.15.0](https://github.com/runwayml/sdk-python/compare/v5.14.0...v5.15.0) ### Features -* **api:** Seedance 2.5 1080p, Grok Imagine Video 1.5, Grok Imagine Image 2 ([46f53db](https://github.com/runwayml/sdk-python/commit/46f53dbc5ea2a643bacaf4a702974c5baebd45a0)) +* **api:** add 1080p on seedance2_5 (text/image/video-to-video) ([46f53db](https://github.com/runwayml/sdk-python/commit/46f53dbc5ea2a643bacaf4a702974c5baebd45a0)) +* **api:** add grok_imagine_1_5 (text/image-to-video) ([46f53db](https://github.com/runwayml/sdk-python/commit/46f53dbc5ea2a643bacaf4a702974c5baebd45a0)) +* **api:** add grok_imagine_image_2 (text-to-image) ([46f53db](https://github.com/runwayml/sdk-python/commit/46f53dbc5ea2a643bacaf4a702974c5baebd45a0)) ### Bug Fixes diff --git a/README.md b/README.md index 974bdac4..4b05efcc 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,8 @@ Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typ Typed requests and responses provide autocomplete and documentation within your editor. If you would like to see type errors in VS Code to help catch bugs earlier, set `python.analysis.typeCheckingMode` to `basic`. +from datetime import datetime + ## Pagination List methods in the RunwayML API are paginated. @@ -132,14 +134,16 @@ from runwayml import RunwayML client = RunwayML() -all_routers = [] +all_webapps = [] # Automatically fetches more pages as needed. -for router in client.routers.list( +for webapp in client.organization.webapp.list_usage( + from_=datetime.fromisoformat("2019-12-27T18:11:19.117"), limit=1, + to=datetime.fromisoformat("2019-12-27T18:11:19.117"), ): - # Do something with router here - all_routers.append(router) -print(all_routers) + # Do something with webapp here + all_webapps.append(webapp) +print(all_webapps) ``` Or, asynchronously: @@ -152,13 +156,15 @@ client = AsyncRunwayML() async def main() -> None: - all_routers = [] + all_webapps = [] # Iterate through items across all pages, issuing requests as needed. - async for router in client.routers.list( + async for webapp in client.organization.webapp.list_usage( + from_=datetime.fromisoformat("2019-12-27T18:11:19.117"), limit=1, + to=datetime.fromisoformat("2019-12-27T18:11:19.117"), ): - all_routers.append(router) - print(all_routers) + all_webapps.append(webapp) + print(all_webapps) asyncio.run(main()) @@ -167,8 +173,10 @@ asyncio.run(main()) Alternatively, you can use the `.has_next_page()`, `.next_page_info()`, or `.get_next_page()` methods for more granular control working with pages: ```python -first_page = await client.routers.list( +first_page = await client.organization.webapp.list_usage( + from_=datetime.fromisoformat("2019-12-27T18:11:19.117"), limit=1, + to=datetime.fromisoformat("2019-12-27T18:11:19.117"), ) if first_page.has_next_page(): print(f"will fetch next page using these details: {first_page.next_page_info()}") @@ -181,13 +189,15 @@ if first_page.has_next_page(): Or just work directly with the returned data: ```python -first_page = await client.routers.list( +first_page = await client.organization.webapp.list_usage( + from_=datetime.fromisoformat("2019-12-27T18:11:19.117"), limit=1, + to=datetime.fromisoformat("2019-12-27T18:11:19.117"), ) print(f"next page cursor: {first_page.next_cursor}") # => "next page cursor: ..." -for router in first_page.data: - print(router.id) +for webapp in first_page.data: + print(webapp.credits) # Remove `await` for non-async usage. ``` @@ -201,13 +211,15 @@ from runwayml import RunwayML client = RunwayML() -text_to_image = client.text_to_image.create( +image_to_video = client.image_to_video.create( duration=2, - model="gen4_image", - prompt_text="promptText", - ratio="1920:1080", + model="gen4.5", + prompt_image="https://example.com/image.jpg", + prompt_text="x", + ratio="1280:720", + content_moderation={}, ) -print(text_to_image.id) +print(image_to_video.content_moderation) ``` ## Handling errors diff --git a/api.md b/api.md index 4124e1c5..19a0f699 100644 --- a/api.md +++ b/api.md @@ -411,3 +411,64 @@ from runwayml.types import WorkflowInvocationRetrieveResponse Methods: - client.workflow_invocations.retrieve(id) -> WorkflowInvocationRetrieveResponse + +# Generate + +## Video + +Types: + +```python +from runwayml.types.generate import VideoCreateResponse +``` + +Methods: + +- client.generate.video.create(\*\*params) -> VideoCreateResponse + +## Image + +Types: + +```python +from runwayml.types.generate import ImageCreateResponse +``` + +Methods: + +- client.generate.image.create(\*\*params) -> ImageCreateResponse + +## Audio + +Types: + +```python +from runwayml.types.generate import ReferenceVoice, ReferenceAudio, AudioCreateResponse +``` + +Methods: + +- client.generate.audio.create(\*\*params) -> AudioCreateResponse + +# Routers + +Types: + +```python +from runwayml.types import ( + RouterCreateResponse, + RouterRetrieveResponse, + RouterUpdateResponse, + RouterListResponse, + RouterListRequestsResponse, +) +``` + +Methods: + +- client.routers.create(\*\*params) -> RouterCreateResponse +- client.routers.retrieve(id) -> RouterRetrieveResponse +- client.routers.update(id, \*\*params) -> RouterUpdateResponse +- client.routers.list(\*\*params) -> SyncCursorPage[RouterListResponse] +- client.routers.delete(id) -> None +- client.routers.list_requests(id, \*\*params) -> SyncCursorPage[RouterListRequestsResponse] diff --git a/bin/check-release-environment b/bin/check-release-environment index b845b0f4..98d98fbc 100644 --- a/bin/check-release-environment +++ b/bin/check-release-environment @@ -2,6 +2,10 @@ errors=() +if [ -z "${RELEASE_PLEASE_TOKEN}" ]; then + errors+=("The RELEASE_PLEASE_TOKEN secret has not been set. Create a fine-grained GitHub PAT and add it as a repository secret.") +fi + if [ -z "${PYPI_TOKEN}" ]; then errors+=("The PYPI_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets.") fi diff --git a/pyproject.toml b/pyproject.toml index 61d041fb..48935072 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "runwayml" -version = "5.15.0" +version = "5.16.0" description = "The official Python library for the runwayml API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/release-please-config.json b/release-please-config.json index 53d36ce4..16a0d696 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -2,7 +2,7 @@ "packages": { ".": {} }, - "$schema": "https://raw.githubusercontent.com/stainless-api/release-please/main/schemas/config.json", + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", "include-v-in-tag": true, "include-component-in-tag": false, "versioning": "prerelease", diff --git a/scripts/mock b/scripts/mock index feebe5ed..04d8d827 100755 --- a/scripts/mock +++ b/scripts/mock @@ -7,14 +7,15 @@ cd "$(dirname "$0")/.." if [[ -n "$1" && "$1" != '--'* ]]; then URL="$1" shift +elif [ -n "$STAINLESS_OPENAPI_SPEC_URL" ]; then + URL="$STAINLESS_OPENAPI_SPEC_URL" else - URL="$(grep 'openapi_spec_url' .stats.yml | cut -d' ' -f2)" -fi - -# Check if the URL is empty -if [ -z "$URL" ]; then - echo "Error: No OpenAPI spec path/url provided or found in .stats.yml" - exit 1 + # Embedded OpenAPI spec (base64-encoded, gzipped) + EMBEDDED_SPEC="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" + SPEC_TMPFILE="$(mktemp)" + trap 'rm -f "$SPEC_TMPFILE"' EXIT + echo "$EMBEDDED_SPEC" | base64 --decode | gunzip > "$SPEC_TMPFILE" + URL="$SPEC_TMPFILE" fi echo "==> Starting mock server with URL ${URL}" diff --git a/src/runwayml/_version.py b/src/runwayml/_version.py index b915d049..ab25cefe 100644 --- a/src/runwayml/_version.py +++ b/src/runwayml/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "runwayml" -__version__ = "5.15.0" # x-release-please-version +__version__ = "5.16.0" # x-release-please-version diff --git a/src/runwayml/resources/image_to_video.py b/src/runwayml/resources/image_to_video.py index 01b1e5ad..0d9ac0ff 100644 --- a/src/runwayml/resources/image_to_video.py +++ b/src/runwayml/resources/image_to_video.py @@ -62,7 +62,19 @@ def create( prompt_text: str, ratio: Literal["1280:720", "720:1280", "1104:832", "960:960", "832:1104", "1584:672"], content_moderation: image_to_video_create_params.Gen4_5ContentModeration | Omit = omit, - output_format: Literal["mp4", "prores", "png_sequence"] | Omit = omit, + output_format: Literal[ + "mp4", + "prores", + "png_sequence", + "hdr10", + "hlg", + "sdr_rec709_10bit", + "hdr_pq_12bit_master", + "hdr_prores", + "hdr_png_sequence", + "hdr_exr_sequence", + ] + | Omit = omit, prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit, seed: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -92,11 +104,29 @@ def create( output_format: The container/encoding of the output. `mp4` (default) returns an H.264 .mp4. `prores` returns a ProRes .mov. `png_sequence` returns a .zip of PNG frames - (plus a separate .wav artifact when the output has audio). Non-mp4 formats incur - an additional surcharge of 5 credits per second of output. - - prores_profile: The ProRes profile to use. Only valid when `outputFormat` is `prores`. Defaults - to `4444`. + (plus a separate .wav artifact when the output has audio). `hdr10` (HEVC Main + 10, BT.2020 + PQ) and `hlg` (HEVC Main 10, BT.2020 + HLG) return true-HDR 10-bit + .mp4s; `sdr_rec709_10bit` returns a 10-bit Rec.709 HEVC .mp4 for SDR grading + pipelines; `hdr_pq_12bit_master` returns a 12-bit 4:4:4 BT.2020 + PQ HEVC .mov + with measured HDR10 content-light metadata for mastering; `hdr_prores` returns a + BT.2020 + PQ ProRes .mov editorial mezzanine, whose tier is selectable with + `proresProfile` (`422`, `422 HQ`, or `4444`; defaults to `422 HQ`); + `hdr_png_sequence` returns a .zip of 16-bit PNG frames carrying the PQ signal + losslessly (plus a colorimetry.json sidecar and a separate .wav when the output + has audio); `hdr_exr_sequence` returns a .zip of half-float OpenEXR frames + carrying the HDR signal as linear BT.2020 display light, 1.0 = 100 nits (plus a + colorimetry.json sidecar and a separate .wav when the output has audio). Non-mp4 + formats incur an additional per-second credit surcharge: 5 credits per second + for `prores` and `png_sequence`, and 20 credits per second for every 10-bit and + deeper profile (including the 12-bit, 16-bit, and EXR ones), rising to 40 + credits per second when the output is larger than 4 megapixels (roughly 4K). + + prores_profile: The ProRes profile to use. Only valid when `outputFormat` is `prores` or + `hdr_prores`. For `prores`, any profile is accepted and the default is `4444`. + For `hdr_prores`, only `422`, `422 HQ` and `4444` are available and the default + is `422 HQ` — `422 Proxy` and `422 LT` quantize too heavily to hold the HDR + gradients, and 12-bit output is served by `hdr_pq_12bit_master` instead of + `4444 XQ`. seed: If unspecified, a random number is chosen. Varying the seed integer is a way to get different results for the same other request parameters. Using the same seed @@ -290,7 +320,7 @@ def create( reference_audio: An optional array of audio references. Audio references require a text prompt, and the total combined duration must not exceed 15 seconds. - resolution: The output resolution. Hailuo 3.0 supports 768P and 2K. + resolution: The output resolution. MiniMax H3 supports 768P and 2K. extra_headers: Send extra headers @@ -792,7 +822,19 @@ def create( content_moderation: image_to_video_create_params.Gen4_5ContentModeration | image_to_video_create_params.Gen4TurboContentModeration | Omit = omit, - output_format: Literal["mp4", "prores", "png_sequence"] | Omit = omit, + output_format: Literal[ + "mp4", + "prores", + "png_sequence", + "hdr10", + "hlg", + "sdr_rec709_10bit", + "hdr_pq_12bit_master", + "hdr_prores", + "hdr_png_sequence", + "hdr_exr_sequence", + ] + | Omit = omit, prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit, seed: int | Omit = omit, audio: bool | Omit = omit, @@ -870,7 +912,19 @@ async def create( prompt_text: str, ratio: Literal["1280:720", "720:1280", "1104:832", "960:960", "832:1104", "1584:672"], content_moderation: image_to_video_create_params.Gen4_5ContentModeration | Omit = omit, - output_format: Literal["mp4", "prores", "png_sequence"] | Omit = omit, + output_format: Literal[ + "mp4", + "prores", + "png_sequence", + "hdr10", + "hlg", + "sdr_rec709_10bit", + "hdr_pq_12bit_master", + "hdr_prores", + "hdr_png_sequence", + "hdr_exr_sequence", + ] + | Omit = omit, prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit, seed: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -900,11 +954,29 @@ async def create( output_format: The container/encoding of the output. `mp4` (default) returns an H.264 .mp4. `prores` returns a ProRes .mov. `png_sequence` returns a .zip of PNG frames - (plus a separate .wav artifact when the output has audio). Non-mp4 formats incur - an additional surcharge of 5 credits per second of output. - - prores_profile: The ProRes profile to use. Only valid when `outputFormat` is `prores`. Defaults - to `4444`. + (plus a separate .wav artifact when the output has audio). `hdr10` (HEVC Main + 10, BT.2020 + PQ) and `hlg` (HEVC Main 10, BT.2020 + HLG) return true-HDR 10-bit + .mp4s; `sdr_rec709_10bit` returns a 10-bit Rec.709 HEVC .mp4 for SDR grading + pipelines; `hdr_pq_12bit_master` returns a 12-bit 4:4:4 BT.2020 + PQ HEVC .mov + with measured HDR10 content-light metadata for mastering; `hdr_prores` returns a + BT.2020 + PQ ProRes .mov editorial mezzanine, whose tier is selectable with + `proresProfile` (`422`, `422 HQ`, or `4444`; defaults to `422 HQ`); + `hdr_png_sequence` returns a .zip of 16-bit PNG frames carrying the PQ signal + losslessly (plus a colorimetry.json sidecar and a separate .wav when the output + has audio); `hdr_exr_sequence` returns a .zip of half-float OpenEXR frames + carrying the HDR signal as linear BT.2020 display light, 1.0 = 100 nits (plus a + colorimetry.json sidecar and a separate .wav when the output has audio). Non-mp4 + formats incur an additional per-second credit surcharge: 5 credits per second + for `prores` and `png_sequence`, and 20 credits per second for every 10-bit and + deeper profile (including the 12-bit, 16-bit, and EXR ones), rising to 40 + credits per second when the output is larger than 4 megapixels (roughly 4K). + + prores_profile: The ProRes profile to use. Only valid when `outputFormat` is `prores` or + `hdr_prores`. For `prores`, any profile is accepted and the default is `4444`. + For `hdr_prores`, only `422`, `422 HQ` and `4444` are available and the default + is `422 HQ` — `422 Proxy` and `422 LT` quantize too heavily to hold the HDR + gradients, and 12-bit output is served by `hdr_pq_12bit_master` instead of + `4444 XQ`. seed: If unspecified, a random number is chosen. Varying the seed integer is a way to get different results for the same other request parameters. Using the same seed @@ -1098,7 +1170,7 @@ async def create( reference_audio: An optional array of audio references. Audio references require a text prompt, and the total combined duration must not exceed 15 seconds. - resolution: The output resolution. Hailuo 3.0 supports 768P and 2K. + resolution: The output resolution. MiniMax H3 supports 768P and 2K. extra_headers: Send extra headers @@ -1600,7 +1672,19 @@ async def create( content_moderation: image_to_video_create_params.Gen4_5ContentModeration | image_to_video_create_params.Gen4TurboContentModeration | Omit = omit, - output_format: Literal["mp4", "prores", "png_sequence"] | Omit = omit, + output_format: Literal[ + "mp4", + "prores", + "png_sequence", + "hdr10", + "hlg", + "sdr_rec709_10bit", + "hdr_pq_12bit_master", + "hdr_prores", + "hdr_png_sequence", + "hdr_exr_sequence", + ] + | Omit = omit, prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit, seed: int | Omit = omit, audio: bool | Omit = omit, diff --git a/src/runwayml/resources/text_to_video.py b/src/runwayml/resources/text_to_video.py index e698b56b..eaadae5c 100644 --- a/src/runwayml/resources/text_to_video.py +++ b/src/runwayml/resources/text_to_video.py @@ -61,7 +61,19 @@ def create( prompt_text: str, ratio: Literal["1280:720", "720:1280"], content_moderation: text_to_video_create_params.Gen4_5ContentModeration | Omit = omit, - output_format: Literal["mp4", "prores", "png_sequence"] | Omit = omit, + output_format: Literal[ + "mp4", + "prores", + "png_sequence", + "hdr10", + "hlg", + "sdr_rec709_10bit", + "hdr_pq_12bit_master", + "hdr_prores", + "hdr_png_sequence", + "hdr_exr_sequence", + ] + | Omit = omit, prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit, seed: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -87,11 +99,29 @@ def create( output_format: The container/encoding of the output. `mp4` (default) returns an H.264 .mp4. `prores` returns a ProRes .mov. `png_sequence` returns a .zip of PNG frames - (plus a separate .wav artifact when the output has audio). Non-mp4 formats incur - an additional surcharge of 5 credits per second of output. - - prores_profile: The ProRes profile to use. Only valid when `outputFormat` is `prores`. Defaults - to `4444`. + (plus a separate .wav artifact when the output has audio). `hdr10` (HEVC Main + 10, BT.2020 + PQ) and `hlg` (HEVC Main 10, BT.2020 + HLG) return true-HDR 10-bit + .mp4s; `sdr_rec709_10bit` returns a 10-bit Rec.709 HEVC .mp4 for SDR grading + pipelines; `hdr_pq_12bit_master` returns a 12-bit 4:4:4 BT.2020 + PQ HEVC .mov + with measured HDR10 content-light metadata for mastering; `hdr_prores` returns a + BT.2020 + PQ ProRes .mov editorial mezzanine, whose tier is selectable with + `proresProfile` (`422`, `422 HQ`, or `4444`; defaults to `422 HQ`); + `hdr_png_sequence` returns a .zip of 16-bit PNG frames carrying the PQ signal + losslessly (plus a colorimetry.json sidecar and a separate .wav when the output + has audio); `hdr_exr_sequence` returns a .zip of half-float OpenEXR frames + carrying the HDR signal as linear BT.2020 display light, 1.0 = 100 nits (plus a + colorimetry.json sidecar and a separate .wav when the output has audio). Non-mp4 + formats incur an additional per-second credit surcharge: 5 credits per second + for `prores` and `png_sequence`, and 20 credits per second for every 10-bit and + deeper profile (including the 12-bit, 16-bit, and EXR ones), rising to 40 + credits per second when the output is larger than 4 megapixels (roughly 4K). + + prores_profile: The ProRes profile to use. Only valid when `outputFormat` is `prores` or + `hdr_prores`. For `prores`, any profile is accepted and the default is `4444`. + For `hdr_prores`, only `422`, `422 HQ` and `4444` are available and the default + is `422 HQ` — `422 Proxy` and `422 LT` quantize too heavily to hold the HDR + gradients, and 12-bit output is served by `hdr_pq_12bit_master` instead of + `4444 XQ`. seed: If unspecified, a random number is chosen. Varying the seed integer is a way to get different results for the same other request parameters. Using the same seed @@ -231,7 +261,7 @@ def create( references must not exceed 15 seconds. See [our docs](/assets/inputs#videos) on video inputs for more information. - resolution: The output resolution. Hailuo 3.0 supports 768P and 2K. + resolution: The output resolution. MiniMax H3 supports 768P and 2K. extra_headers: Send extra headers @@ -758,7 +788,19 @@ def create( | Literal["1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"] | Omit = omit, content_moderation: text_to_video_create_params.Gen4_5ContentModeration | Omit = omit, - output_format: Literal["mp4", "prores", "png_sequence"] | Omit = omit, + output_format: Literal[ + "mp4", + "prores", + "png_sequence", + "hdr10", + "hlg", + "sdr_rec709_10bit", + "hdr_pq_12bit_master", + "hdr_prores", + "hdr_png_sequence", + "hdr_exr_sequence", + ] + | Omit = omit, prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit, seed: int | Omit = omit, audio: bool | Omit = omit, @@ -850,7 +892,19 @@ async def create( prompt_text: str, ratio: Literal["1280:720", "720:1280"], content_moderation: text_to_video_create_params.Gen4_5ContentModeration | Omit = omit, - output_format: Literal["mp4", "prores", "png_sequence"] | Omit = omit, + output_format: Literal[ + "mp4", + "prores", + "png_sequence", + "hdr10", + "hlg", + "sdr_rec709_10bit", + "hdr_pq_12bit_master", + "hdr_prores", + "hdr_png_sequence", + "hdr_exr_sequence", + ] + | Omit = omit, prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit, seed: int | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -876,11 +930,29 @@ async def create( output_format: The container/encoding of the output. `mp4` (default) returns an H.264 .mp4. `prores` returns a ProRes .mov. `png_sequence` returns a .zip of PNG frames - (plus a separate .wav artifact when the output has audio). Non-mp4 formats incur - an additional surcharge of 5 credits per second of output. - - prores_profile: The ProRes profile to use. Only valid when `outputFormat` is `prores`. Defaults - to `4444`. + (plus a separate .wav artifact when the output has audio). `hdr10` (HEVC Main + 10, BT.2020 + PQ) and `hlg` (HEVC Main 10, BT.2020 + HLG) return true-HDR 10-bit + .mp4s; `sdr_rec709_10bit` returns a 10-bit Rec.709 HEVC .mp4 for SDR grading + pipelines; `hdr_pq_12bit_master` returns a 12-bit 4:4:4 BT.2020 + PQ HEVC .mov + with measured HDR10 content-light metadata for mastering; `hdr_prores` returns a + BT.2020 + PQ ProRes .mov editorial mezzanine, whose tier is selectable with + `proresProfile` (`422`, `422 HQ`, or `4444`; defaults to `422 HQ`); + `hdr_png_sequence` returns a .zip of 16-bit PNG frames carrying the PQ signal + losslessly (plus a colorimetry.json sidecar and a separate .wav when the output + has audio); `hdr_exr_sequence` returns a .zip of half-float OpenEXR frames + carrying the HDR signal as linear BT.2020 display light, 1.0 = 100 nits (plus a + colorimetry.json sidecar and a separate .wav when the output has audio). Non-mp4 + formats incur an additional per-second credit surcharge: 5 credits per second + for `prores` and `png_sequence`, and 20 credits per second for every 10-bit and + deeper profile (including the 12-bit, 16-bit, and EXR ones), rising to 40 + credits per second when the output is larger than 4 megapixels (roughly 4K). + + prores_profile: The ProRes profile to use. Only valid when `outputFormat` is `prores` or + `hdr_prores`. For `prores`, any profile is accepted and the default is `4444`. + For `hdr_prores`, only `422`, `422 HQ` and `4444` are available and the default + is `422 HQ` — `422 Proxy` and `422 LT` quantize too heavily to hold the HDR + gradients, and 12-bit output is served by `hdr_pq_12bit_master` instead of + `4444 XQ`. seed: If unspecified, a random number is chosen. Varying the seed integer is a way to get different results for the same other request parameters. Using the same seed @@ -1020,7 +1092,7 @@ async def create( references must not exceed 15 seconds. See [our docs](/assets/inputs#videos) on video inputs for more information. - resolution: The output resolution. Hailuo 3.0 supports 768P and 2K. + resolution: The output resolution. MiniMax H3 supports 768P and 2K. extra_headers: Send extra headers @@ -1547,7 +1619,19 @@ async def create( | Literal["1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"] | Omit = omit, content_moderation: text_to_video_create_params.Gen4_5ContentModeration | Omit = omit, - output_format: Literal["mp4", "prores", "png_sequence"] | Omit = omit, + output_format: Literal[ + "mp4", + "prores", + "png_sequence", + "hdr10", + "hlg", + "sdr_rec709_10bit", + "hdr_pq_12bit_master", + "hdr_prores", + "hdr_png_sequence", + "hdr_exr_sequence", + ] + | Omit = omit, prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit, seed: int | Omit = omit, audio: bool | Omit = omit, diff --git a/src/runwayml/resources/video_to_video.py b/src/runwayml/resources/video_to_video.py index b2ca4ae8..e87d5463 100644 --- a/src/runwayml/resources/video_to_video.py +++ b/src/runwayml/resources/video_to_video.py @@ -60,7 +60,7 @@ def create( video_uri: str, content_moderation: video_to_video_create_params.Variant0ContentModeration | Omit = omit, keyframes: Iterable[video_to_video_create_params.Variant0Keyframe] | Omit = omit, - output_format: Literal["mp4", "prores", "png_sequence"] | Omit = omit, + output_format: Literal["mp4", "prores", "png_sequence", "sdr_rec709_10bit"] | Omit = omit, prompt_text: str | Omit = omit, prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit, ratio: str | Omit = omit, @@ -87,9 +87,11 @@ def create( keyframes. output_format: The container/encoding of the output. `mp4` (default) returns an H.264 .mp4. - `prores` returns a ProRes .mov. `png_sequence` returns a .zip of PNG frames - (plus a separate .wav artifact when the output has audio). Non-mp4 formats incur - an additional surcharge of 5 credits per second of output. + `prores` returns a ProRes .mov. `png_sequence` returns a .zip of PNG frames. + `sdr_rec709_10bit` returns a 10-bit Rec.709 HEVC .mp4 for SDR grading pipelines. + Non-mp4 formats incur an additional surcharge: 5 credits per second for `prores` + and `png_sequence`, and 20 credits per second for `sdr_rec709_10bit` — 40 + credits per second when the output is larger than 4 megapixels (roughly 4K). prompt_text: A non-empty and optional string describing what should appear in the output. @@ -158,7 +160,7 @@ def create( references must not exceed 15 seconds. See [our docs](/assets/inputs#videos) on video inputs for more information. - resolution: The output resolution. Hailuo 3.0 supports 768P and 2K. + resolution: The output resolution. MiniMax H3 supports 768P and 2K. extra_headers: Send extra headers @@ -536,7 +538,7 @@ def create( video_uri: str | Omit = omit, content_moderation: video_to_video_create_params.Variant0ContentModeration | Omit = omit, keyframes: Iterable[video_to_video_create_params.Variant0Keyframe] | Omit = omit, - output_format: Literal["mp4", "prores", "png_sequence"] | Omit = omit, + output_format: Literal["mp4", "prores", "png_sequence", "sdr_rec709_10bit"] | Omit = omit, prompt_text: str | Omit = omit, prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit, ratio: str @@ -697,7 +699,7 @@ async def create( video_uri: str, content_moderation: video_to_video_create_params.Variant0ContentModeration | Omit = omit, keyframes: Iterable[video_to_video_create_params.Variant0Keyframe] | Omit = omit, - output_format: Literal["mp4", "prores", "png_sequence"] | Omit = omit, + output_format: Literal["mp4", "prores", "png_sequence", "sdr_rec709_10bit"] | Omit = omit, prompt_text: str | Omit = omit, prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit, ratio: str | Omit = omit, @@ -724,9 +726,11 @@ async def create( keyframes. output_format: The container/encoding of the output. `mp4` (default) returns an H.264 .mp4. - `prores` returns a ProRes .mov. `png_sequence` returns a .zip of PNG frames - (plus a separate .wav artifact when the output has audio). Non-mp4 formats incur - an additional surcharge of 5 credits per second of output. + `prores` returns a ProRes .mov. `png_sequence` returns a .zip of PNG frames. + `sdr_rec709_10bit` returns a 10-bit Rec.709 HEVC .mp4 for SDR grading pipelines. + Non-mp4 formats incur an additional surcharge: 5 credits per second for `prores` + and `png_sequence`, and 20 credits per second for `sdr_rec709_10bit` — 40 + credits per second when the output is larger than 4 megapixels (roughly 4K). prompt_text: A non-empty and optional string describing what should appear in the output. @@ -795,7 +799,7 @@ async def create( references must not exceed 15 seconds. See [our docs](/assets/inputs#videos) on video inputs for more information. - resolution: The output resolution. Hailuo 3.0 supports 768P and 2K. + resolution: The output resolution. MiniMax H3 supports 768P and 2K. extra_headers: Send extra headers @@ -1173,7 +1177,7 @@ async def create( video_uri: str | Omit = omit, content_moderation: video_to_video_create_params.Variant0ContentModeration | Omit = omit, keyframes: Iterable[video_to_video_create_params.Variant0Keyframe] | Omit = omit, - output_format: Literal["mp4", "prores", "png_sequence"] | Omit = omit, + output_format: Literal["mp4", "prores", "png_sequence", "sdr_rec709_10bit"] | Omit = omit, prompt_text: str | Omit = omit, prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit, ratio: str diff --git a/src/runwayml/types/generate/audio_create_params.py b/src/runwayml/types/generate/audio_create_params.py index 1ada4c89..43676073 100644 --- a/src/runwayml/types/generate/audio_create_params.py +++ b/src/runwayml/types/generate/audio_create_params.py @@ -6,15 +6,10 @@ from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict from ..._utils import PropertyInfo +from .reference_audio_param import ReferenceAudioParam +from .reference_voice_param import ReferenceVoiceParam -__all__ = [ - "AudioCreateParams", - "Input", - "InputReferenceAudio", - "InputVoice", - "InputVoicePreset", - "InputVoiceReferenceAudio", -] +__all__ = ["AudioCreateParams", "Input", "InputVoice", "InputVoicePreset"] class AudioCreateParams(TypedDict, total=False): @@ -28,15 +23,6 @@ class AudioCreateParams(TypedDict, total=False): """ -class InputReferenceAudio(TypedDict, total=False): - uri: Required[str] - """A HTTPS URL, Runway upload URI, or base64 data URI (e.g. - - `data:audio/mp3;base64,...`, up to 16MB) containing an encoded audio. See - [our docs](/assets/inputs#audio) on audio inputs for more information. - """ - - class InputVoicePreset(TypedDict, total=False): """A preset voice.""" @@ -104,23 +90,7 @@ class InputVoicePreset(TypedDict, total=False): type: Required[Literal["preset"]] -class InputVoiceReferenceAudio(TypedDict, total=False): - """Clone a voice from a reference audio clip, then speak promptText in that voice. - - Routes only to models that support voice cloning. - """ - - audio_uri: Required[Annotated[str, PropertyInfo(alias="audioUri")]] - """A HTTPS URL, Runway upload URI, or base64 data URI (e.g. - - `data:audio/mp3;base64,...`, up to 16MB) containing an encoded audio. See - [our docs](/assets/inputs#audio) on audio inputs for more information. - """ - - type: Required[Literal["reference-audio"]] - - -InputVoice: TypeAlias = Union[InputVoicePreset, InputVoiceReferenceAudio] +InputVoice: TypeAlias = Union[InputVoicePreset, ReferenceVoiceParam] class Input(TypedDict, total=False): @@ -154,7 +124,7 @@ class Input(TypedDict, total=False): Models without loop support are excluded. """ - reference_audios: Annotated[Iterable[InputReferenceAudio], PropertyInfo(alias="referenceAudios")] + reference_audios: Annotated[Iterable[ReferenceAudioParam], PropertyInfo(alias="referenceAudios")] """ Optional reference audio clips guiding `audio` generation, for models that support them. Reference each clip in promptText as @Audio1, @Audio2, and @Audio3 diff --git a/src/runwayml/types/image_to_video_create_params.py b/src/runwayml/types/image_to_video_create_params.py index 53b7148b..b9aa634f 100644 --- a/src/runwayml/types/image_to_video_create_params.py +++ b/src/runwayml/types/image_to_video_create_params.py @@ -72,13 +72,41 @@ class Gen4_5(TypedDict, total=False): content_moderation: Annotated[Gen4_5ContentModeration, PropertyInfo(alias="contentModeration")] """Settings that affect the behavior of the content moderation system.""" - output_format: Annotated[Literal["mp4", "prores", "png_sequence"], PropertyInfo(alias="outputFormat")] + output_format: Annotated[ + Literal[ + "mp4", + "prores", + "png_sequence", + "hdr10", + "hlg", + "sdr_rec709_10bit", + "hdr_pq_12bit_master", + "hdr_prores", + "hdr_png_sequence", + "hdr_exr_sequence", + ], + PropertyInfo(alias="outputFormat"), + ] """The container/encoding of the output. `mp4` (default) returns an H.264 .mp4. `prores` returns a ProRes .mov. `png_sequence` returns a .zip of PNG frames (plus a separate .wav artifact when - the output has audio). Non-mp4 formats incur an additional surcharge of 5 - credits per second of output. + the output has audio). `hdr10` (HEVC Main 10, BT.2020 + PQ) and `hlg` (HEVC Main + 10, BT.2020 + HLG) return true-HDR 10-bit .mp4s; `sdr_rec709_10bit` returns a + 10-bit Rec.709 HEVC .mp4 for SDR grading pipelines; `hdr_pq_12bit_master` + returns a 12-bit 4:4:4 BT.2020 + PQ HEVC .mov with measured HDR10 content-light + metadata for mastering; `hdr_prores` returns a BT.2020 + PQ ProRes .mov + editorial mezzanine, whose tier is selectable with `proresProfile` (`422`, + `422 HQ`, or `4444`; defaults to `422 HQ`); `hdr_png_sequence` returns a .zip of + 16-bit PNG frames carrying the PQ signal losslessly (plus a colorimetry.json + sidecar and a separate .wav when the output has audio); `hdr_exr_sequence` + returns a .zip of half-float OpenEXR frames carrying the HDR signal as linear + BT.2020 display light, 1.0 = 100 nits (plus a colorimetry.json sidecar and a + separate .wav when the output has audio). Non-mp4 formats incur an additional + per-second credit surcharge: 5 credits per second for `prores` and + `png_sequence`, and 20 credits per second for every 10-bit and deeper profile + (including the 12-bit, 16-bit, and EXR ones), rising to 40 credits per second + when the output is larger than 4 megapixels (roughly 4K). """ prores_profile: Annotated[ @@ -86,7 +114,11 @@ class Gen4_5(TypedDict, total=False): ] """The ProRes profile to use. - Only valid when `outputFormat` is `prores`. Defaults to `4444`. + Only valid when `outputFormat` is `prores` or `hdr_prores`. For `prores`, any + profile is accepted and the default is `4444`. For `hdr_prores`, only `422`, + `422 HQ` and `4444` are available and the default is `422 HQ` — `422 Proxy` and + `422 LT` quantize too heavily to hold the HDR gradients, and 12-bit output is + served by `hdr_pq_12bit_master` instead of `4444 XQ`. """ seed: int @@ -309,7 +341,7 @@ class Hailuo3(TypedDict, total=False): """ resolution: Literal["2K", "768P"] - """The output resolution. Hailuo 3.0 supports 768P and 2K.""" + """The output resolution. MiniMax H3 supports 768P and 2K.""" class Hailuo3ReferenceAudio(TypedDict, total=False): @@ -322,7 +354,7 @@ class Hailuo3ReferenceAudio(TypedDict, total=False): uri: Required[str] """A HTTPS URL, Runway upload URI, or base64 data URI (e.g. - `data:audio/mp3;base64,...`, up to 16MB) containing an encoded audio. See + `data:audio/mp3;base64,...`) containing an encoded audio. See [our docs](/assets/inputs#audio) on audio inputs for more information. """ diff --git a/src/runwayml/types/text_to_video_create_params.py b/src/runwayml/types/text_to_video_create_params.py index c618ce76..92d17ce8 100644 --- a/src/runwayml/types/text_to_video_create_params.py +++ b/src/runwayml/types/text_to_video_create_params.py @@ -62,13 +62,41 @@ class Gen4_5(TypedDict, total=False): content_moderation: Annotated[Gen4_5ContentModeration, PropertyInfo(alias="contentModeration")] """Settings that affect the behavior of the content moderation system.""" - output_format: Annotated[Literal["mp4", "prores", "png_sequence"], PropertyInfo(alias="outputFormat")] + output_format: Annotated[ + Literal[ + "mp4", + "prores", + "png_sequence", + "hdr10", + "hlg", + "sdr_rec709_10bit", + "hdr_pq_12bit_master", + "hdr_prores", + "hdr_png_sequence", + "hdr_exr_sequence", + ], + PropertyInfo(alias="outputFormat"), + ] """The container/encoding of the output. `mp4` (default) returns an H.264 .mp4. `prores` returns a ProRes .mov. `png_sequence` returns a .zip of PNG frames (plus a separate .wav artifact when - the output has audio). Non-mp4 formats incur an additional surcharge of 5 - credits per second of output. + the output has audio). `hdr10` (HEVC Main 10, BT.2020 + PQ) and `hlg` (HEVC Main + 10, BT.2020 + HLG) return true-HDR 10-bit .mp4s; `sdr_rec709_10bit` returns a + 10-bit Rec.709 HEVC .mp4 for SDR grading pipelines; `hdr_pq_12bit_master` + returns a 12-bit 4:4:4 BT.2020 + PQ HEVC .mov with measured HDR10 content-light + metadata for mastering; `hdr_prores` returns a BT.2020 + PQ ProRes .mov + editorial mezzanine, whose tier is selectable with `proresProfile` (`422`, + `422 HQ`, or `4444`; defaults to `422 HQ`); `hdr_png_sequence` returns a .zip of + 16-bit PNG frames carrying the PQ signal losslessly (plus a colorimetry.json + sidecar and a separate .wav when the output has audio); `hdr_exr_sequence` + returns a .zip of half-float OpenEXR frames carrying the HDR signal as linear + BT.2020 display light, 1.0 = 100 nits (plus a colorimetry.json sidecar and a + separate .wav when the output has audio). Non-mp4 formats incur an additional + per-second credit surcharge: 5 credits per second for `prores` and + `png_sequence`, and 20 credits per second for every 10-bit and deeper profile + (including the 12-bit, 16-bit, and EXR ones), rising to 40 credits per second + when the output is larger than 4 megapixels (roughly 4K). """ prores_profile: Annotated[ @@ -76,7 +104,11 @@ class Gen4_5(TypedDict, total=False): ] """The ProRes profile to use. - Only valid when `outputFormat` is `prores`. Defaults to `4444`. + Only valid when `outputFormat` is `prores` or `hdr_prores`. For `prores`, any + profile is accepted and the default is `4444`. For `hdr_prores`, only `422`, + `422 HQ` and `4444` are available and the default is `422 HQ` — `422 Proxy` and + `422 LT` quantize too heavily to hold the HDR gradients, and 12-bit output is + served by `hdr_pq_12bit_master` instead of `4444 XQ`. """ seed: int @@ -179,7 +211,7 @@ class Hailuo3(TypedDict, total=False): """ resolution: Literal["2K", "768P"] - """The output resolution. Hailuo 3.0 supports 768P and 2K.""" + """The output resolution. MiniMax H3 supports 768P and 2K.""" class Hailuo3ReferenceAudio(TypedDict, total=False): diff --git a/src/runwayml/types/video_to_video_create_params.py b/src/runwayml/types/video_to_video_create_params.py index 559b93fa..8b6dc5d4 100644 --- a/src/runwayml/types/video_to_video_create_params.py +++ b/src/runwayml/types/video_to_video_create_params.py @@ -60,13 +60,17 @@ class Variant0(TypedDict, total=False): Up to 5 keyframes. """ - output_format: Annotated[Literal["mp4", "prores", "png_sequence"], PropertyInfo(alias="outputFormat")] + output_format: Annotated[ + Literal["mp4", "prores", "png_sequence", "sdr_rec709_10bit"], PropertyInfo(alias="outputFormat") + ] """The container/encoding of the output. `mp4` (default) returns an H.264 .mp4. `prores` returns a ProRes .mov. - `png_sequence` returns a .zip of PNG frames (plus a separate .wav artifact when - the output has audio). Non-mp4 formats incur an additional surcharge of 5 - credits per second of output. + `png_sequence` returns a .zip of PNG frames. `sdr_rec709_10bit` returns a 10-bit + Rec.709 HEVC .mp4 for SDR grading pipelines. Non-mp4 formats incur an additional + surcharge: 5 credits per second for `prores` and `png_sequence`, and 20 credits + per second for `sdr_rec709_10bit` — 40 credits per second when the output is + larger than 4 megapixels (roughly 4K). """ prompt_text: Annotated[str, PropertyInfo(alias="promptText")] @@ -232,7 +236,7 @@ class Hailuo3(TypedDict, total=False): """ resolution: Literal["2K", "768P"] - """The output resolution. Hailuo 3.0 supports 768P and 2K.""" + """The output resolution. MiniMax H3 supports 768P and 2K.""" class Hailuo3ReferenceAudio(TypedDict, total=False): diff --git a/tests/api_resources/test_image_to_video.py b/tests/api_resources/test_image_to_video.py index 10e561db..d0e41865 100644 --- a/tests/api_resources/test_image_to_video.py +++ b/tests/api_resources/test_image_to_video.py @@ -578,51 +578,6 @@ def test_streaming_response_create_overload_11(self, client: RunwayML) -> None: assert cast(Any, response.is_closed) is True - @parametrize - def test_method_create_overload_12(self, client: RunwayML) -> None: - image_to_video = client.image_to_video.create( - model="grok_imagine_1_5", - prompt_image="https://example.com/image.jpg", - ) - assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"]) - - @parametrize - def test_method_create_with_all_params_overload_12(self, client: RunwayML) -> None: - image_to_video = client.image_to_video.create( - model="grok_imagine_1_5", - prompt_image="https://example.com/image.jpg", - duration=1, - prompt_text="x", - resolution="480p", - ) - assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"]) - - @parametrize - def test_raw_response_create_overload_12(self, client: RunwayML) -> None: - response = client.image_to_video.with_raw_response.create( - model="grok_imagine_1_5", - prompt_image="https://example.com/image.jpg", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - image_to_video = response.parse() - assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"]) - - @parametrize - def test_streaming_response_create_overload_12(self, client: RunwayML) -> None: - with client.image_to_video.with_streaming_response.create( - model="grok_imagine_1_5", - prompt_image="https://example.com/image.jpg", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - image_to_video = response.parse() - assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"]) - - assert cast(Any, response.is_closed) is True - class TestAsyncImageToVideo: parametrize = pytest.mark.parametrize( @@ -1189,48 +1144,3 @@ async def test_streaming_response_create_overload_11(self, async_client: AsyncRu assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"]) assert cast(Any, response.is_closed) is True - - @parametrize - async def test_method_create_overload_12(self, async_client: AsyncRunwayML) -> None: - image_to_video = await async_client.image_to_video.create( - model="grok_imagine_1_5", - prompt_image="https://example.com/image.jpg", - ) - assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"]) - - @parametrize - async def test_method_create_with_all_params_overload_12(self, async_client: AsyncRunwayML) -> None: - image_to_video = await async_client.image_to_video.create( - model="grok_imagine_1_5", - prompt_image="https://example.com/image.jpg", - duration=1, - prompt_text="x", - resolution="480p", - ) - assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"]) - - @parametrize - async def test_raw_response_create_overload_12(self, async_client: AsyncRunwayML) -> None: - response = await async_client.image_to_video.with_raw_response.create( - model="grok_imagine_1_5", - prompt_image="https://example.com/image.jpg", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - image_to_video = await response.parse() - assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"]) - - @parametrize - async def test_streaming_response_create_overload_12(self, async_client: AsyncRunwayML) -> None: - async with async_client.image_to_video.with_streaming_response.create( - model="grok_imagine_1_5", - prompt_image="https://example.com/image.jpg", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - image_to_video = await response.parse() - assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"]) - - assert cast(Any, response.is_closed) is True diff --git a/tests/api_resources/test_text_to_video.py b/tests/api_resources/test_text_to_video.py index 3747b642..05a6d865 100644 --- a/tests/api_resources/test_text_to_video.py +++ b/tests/api_resources/test_text_to_video.py @@ -544,58 +544,6 @@ def test_streaming_response_create_overload_10(self, client: RunwayML) -> None: assert cast(Any, response.is_closed) is True - @parametrize - def test_method_create_overload_11(self, client: RunwayML) -> None: - text_to_video = client.text_to_video.create( - model="grok_imagine_1_5", - prompt_text="x", - ) - assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"]) - - @parametrize - def test_method_create_with_all_params_overload_11(self, client: RunwayML) -> None: - text_to_video = client.text_to_video.create( - model="grok_imagine_1_5", - prompt_text="x", - duration=1, - ratio="1:1", - reference_audio=[ - { - "type": "audio", - "uri": "https://example.com/audio.mp3", - } - ], - references=[{"uri": "https://example.com/image.jpg"}], - resolution="480p", - ) - assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"]) - - @parametrize - def test_raw_response_create_overload_11(self, client: RunwayML) -> None: - response = client.text_to_video.with_raw_response.create( - model="grok_imagine_1_5", - prompt_text="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - text_to_video = response.parse() - assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"]) - - @parametrize - def test_streaming_response_create_overload_11(self, client: RunwayML) -> None: - with client.text_to_video.with_streaming_response.create( - model="grok_imagine_1_5", - prompt_text="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - text_to_video = response.parse() - assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"]) - - assert cast(Any, response.is_closed) is True - class TestAsyncTextToVideo: parametrize = pytest.mark.parametrize( @@ -1128,55 +1076,3 @@ async def test_streaming_response_create_overload_10(self, async_client: AsyncRu assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"]) assert cast(Any, response.is_closed) is True - - @parametrize - async def test_method_create_overload_11(self, async_client: AsyncRunwayML) -> None: - text_to_video = await async_client.text_to_video.create( - model="grok_imagine_1_5", - prompt_text="x", - ) - assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"]) - - @parametrize - async def test_method_create_with_all_params_overload_11(self, async_client: AsyncRunwayML) -> None: - text_to_video = await async_client.text_to_video.create( - model="grok_imagine_1_5", - prompt_text="x", - duration=1, - ratio="1:1", - reference_audio=[ - { - "type": "audio", - "uri": "https://example.com/audio.mp3", - } - ], - references=[{"uri": "https://example.com/image.jpg"}], - resolution="480p", - ) - assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"]) - - @parametrize - async def test_raw_response_create_overload_11(self, async_client: AsyncRunwayML) -> None: - response = await async_client.text_to_video.with_raw_response.create( - model="grok_imagine_1_5", - prompt_text="x", - ) - - assert response.is_closed is True - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - text_to_video = await response.parse() - assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"]) - - @parametrize - async def test_streaming_response_create_overload_11(self, async_client: AsyncRunwayML) -> None: - async with async_client.text_to_video.with_streaming_response.create( - model="grok_imagine_1_5", - prompt_text="x", - ) as response: - assert not response.is_closed - assert response.http_request.headers.get("X-Stainless-Lang") == "python" - - text_to_video = await response.parse() - assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"]) - - assert cast(Any, response.is_closed) is True