diff --git a/.stats.yml b/.stats.yml
index d24d405..8191416 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1 +1 @@
-configured_endpoints: 64
+configured_endpoints: 65
diff --git a/api.md b/api.md
index 40a2e05..91729b7 100644
--- a/api.md
+++ b/api.md
@@ -35,6 +35,18 @@ Methods:
- client.video_to_video.create(\*\*params) -> VideoToVideoCreateResponse
+# VideoToAudio
+
+Types:
+
+```python
+from runwayml.types import VideoToAudioCreateResponse
+```
+
+Methods:
+
+- client.video_to_audio.create(\*\*params) -> VideoToAudioCreateResponse
+
# VideoToHdr
Types:
diff --git a/scripts/mock b/scripts/mock
index 8e2299b..013df5d 100755
--- a/scripts/mock
+++ b/scripts/mock
@@ -16,7 +16,7 @@ elif [ -n "$STAINLESS_OPENAPI_SPEC_URL" ]; then
URL="$STAINLESS_OPENAPI_SPEC_URL"
else
# Embedded OpenAPI spec (base64-encoded, gzipped)
- EMBEDDED_SPEC="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"
+ EMBEDDED_SPEC="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"
SPEC_TMPFILE="$(mktemp)"
trap 'rm -f "$SPEC_TMPFILE"' EXIT
echo "$EMBEDDED_SPEC" | base64 --decode | gunzip > "$SPEC_TMPFILE"
diff --git a/src/runwayml/_client.py b/src/runwayml/_client.py
index a38f539..11ee112 100644
--- a/src/runwayml/_client.py
+++ b/src/runwayml/_client.py
@@ -56,6 +56,7 @@
voice_dubbing,
image_to_video,
text_to_speech,
+ video_to_audio,
video_to_video,
voice_isolation,
speech_to_speech,
@@ -82,6 +83,7 @@
from .resources.voice_dubbing import VoiceDubbingResource, AsyncVoiceDubbingResource
from .resources.image_to_video import ImageToVideoResource, AsyncImageToVideoResource
from .resources.text_to_speech import TextToSpeechResource, AsyncTextToSpeechResource
+ from .resources.video_to_audio import VideoToAudioResource, AsyncVideoToAudioResource
from .resources.video_to_video import VideoToVideoResource, AsyncVideoToVideoResource
from .resources.voice_isolation import VoiceIsolationResource, AsyncVoiceIsolationResource
from .resources.speech_to_speech import SpeechToSpeechResource, AsyncSpeechToSpeechResource
@@ -201,6 +203,13 @@ def video_to_video(self) -> VideoToVideoResource:
return VideoToVideoResource(self)
+ @cached_property
+ def video_to_audio(self) -> VideoToAudioResource:
+ """These endpoints all kick off tasks to create generations."""
+ from .resources.video_to_audio import VideoToAudioResource
+
+ return VideoToAudioResource(self)
+
@cached_property
def video_to_hdr(self) -> VideoToHdrResource:
"""These endpoints all kick off tasks to create generations."""
@@ -563,6 +572,13 @@ def video_to_video(self) -> AsyncVideoToVideoResource:
return AsyncVideoToVideoResource(self)
+ @cached_property
+ def video_to_audio(self) -> AsyncVideoToAudioResource:
+ """These endpoints all kick off tasks to create generations."""
+ from .resources.video_to_audio import AsyncVideoToAudioResource
+
+ return AsyncVideoToAudioResource(self)
+
@cached_property
def video_to_hdr(self) -> AsyncVideoToHdrResource:
"""These endpoints all kick off tasks to create generations."""
@@ -861,6 +877,13 @@ def video_to_video(self) -> video_to_video.VideoToVideoResourceWithRawResponse:
return VideoToVideoResourceWithRawResponse(self._client.video_to_video)
+ @cached_property
+ def video_to_audio(self) -> video_to_audio.VideoToAudioResourceWithRawResponse:
+ """These endpoints all kick off tasks to create generations."""
+ from .resources.video_to_audio import VideoToAudioResourceWithRawResponse
+
+ return VideoToAudioResourceWithRawResponse(self._client.video_to_audio)
+
@cached_property
def video_to_hdr(self) -> video_to_hdr.VideoToHdrResourceWithRawResponse:
"""These endpoints all kick off tasks to create generations."""
@@ -1044,6 +1067,13 @@ def video_to_video(self) -> video_to_video.AsyncVideoToVideoResourceWithRawRespo
return AsyncVideoToVideoResourceWithRawResponse(self._client.video_to_video)
+ @cached_property
+ def video_to_audio(self) -> video_to_audio.AsyncVideoToAudioResourceWithRawResponse:
+ """These endpoints all kick off tasks to create generations."""
+ from .resources.video_to_audio import AsyncVideoToAudioResourceWithRawResponse
+
+ return AsyncVideoToAudioResourceWithRawResponse(self._client.video_to_audio)
+
@cached_property
def video_to_hdr(self) -> video_to_hdr.AsyncVideoToHdrResourceWithRawResponse:
"""These endpoints all kick off tasks to create generations."""
@@ -1227,6 +1257,13 @@ def video_to_video(self) -> video_to_video.VideoToVideoResourceWithStreamingResp
return VideoToVideoResourceWithStreamingResponse(self._client.video_to_video)
+ @cached_property
+ def video_to_audio(self) -> video_to_audio.VideoToAudioResourceWithStreamingResponse:
+ """These endpoints all kick off tasks to create generations."""
+ from .resources.video_to_audio import VideoToAudioResourceWithStreamingResponse
+
+ return VideoToAudioResourceWithStreamingResponse(self._client.video_to_audio)
+
@cached_property
def video_to_hdr(self) -> video_to_hdr.VideoToHdrResourceWithStreamingResponse:
"""These endpoints all kick off tasks to create generations."""
@@ -1410,6 +1447,13 @@ def video_to_video(self) -> video_to_video.AsyncVideoToVideoResourceWithStreamin
return AsyncVideoToVideoResourceWithStreamingResponse(self._client.video_to_video)
+ @cached_property
+ def video_to_audio(self) -> video_to_audio.AsyncVideoToAudioResourceWithStreamingResponse:
+ """These endpoints all kick off tasks to create generations."""
+ from .resources.video_to_audio import AsyncVideoToAudioResourceWithStreamingResponse
+
+ return AsyncVideoToAudioResourceWithStreamingResponse(self._client.video_to_audio)
+
@cached_property
def video_to_hdr(self) -> video_to_hdr.AsyncVideoToHdrResourceWithStreamingResponse:
"""These endpoints all kick off tasks to create generations."""
diff --git a/src/runwayml/resources/__init__.py b/src/runwayml/resources/__init__.py
index 84096a8..63194fb 100644
--- a/src/runwayml/resources/__init__.py
+++ b/src/runwayml/resources/__init__.py
@@ -160,6 +160,14 @@
TextToSpeechResourceWithStreamingResponse,
AsyncTextToSpeechResourceWithStreamingResponse,
)
+from .video_to_audio import (
+ VideoToAudioResource,
+ AsyncVideoToAudioResource,
+ VideoToAudioResourceWithRawResponse,
+ AsyncVideoToAudioResourceWithRawResponse,
+ VideoToAudioResourceWithStreamingResponse,
+ AsyncVideoToAudioResourceWithStreamingResponse,
+)
from .video_to_video import (
VideoToVideoResource,
AsyncVideoToVideoResource,
@@ -236,6 +244,12 @@
"AsyncVideoToVideoResourceWithRawResponse",
"VideoToVideoResourceWithStreamingResponse",
"AsyncVideoToVideoResourceWithStreamingResponse",
+ "VideoToAudioResource",
+ "AsyncVideoToAudioResource",
+ "VideoToAudioResourceWithRawResponse",
+ "AsyncVideoToAudioResourceWithRawResponse",
+ "VideoToAudioResourceWithStreamingResponse",
+ "AsyncVideoToAudioResourceWithStreamingResponse",
"VideoToHdrResource",
"AsyncVideoToHdrResource",
"VideoToHdrResourceWithRawResponse",
diff --git a/src/runwayml/resources/avatar_conversations.py b/src/runwayml/resources/avatar_conversations.py
index 654db7e..b9d16d3 100644
--- a/src/runwayml/resources/avatar_conversations.py
+++ b/src/runwayml/resources/avatar_conversations.py
@@ -160,7 +160,7 @@ def delete(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> None:
"""
- Delete a conversation and its associated data.
+ Permanently delete a conversation, including its transcript and recording.
Args:
extra_headers: Send extra headers
@@ -317,7 +317,7 @@ async def delete(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> None:
"""
- Delete a conversation and its associated data.
+ Permanently delete a conversation, including its transcript and recording.
Args:
extra_headers: Send extra headers
diff --git a/src/runwayml/resources/image_to_video.py b/src/runwayml/resources/image_to_video.py
index 1b2ba81..05f4d87 100644
--- a/src/runwayml/resources/image_to_video.py
+++ b/src/runwayml/resources/image_to_video.py
@@ -302,6 +302,57 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["klingO3_4k"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.KlingO3_4kPromptImagePromptImage]],
+ audio: bool | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: image_to_video_create_params.KlingO3_4kProviderSettings | Omit = omit,
+ ratio: Literal["3840:2160", "2160:3840", "2880:2880"] | Omit = omit,
+ references: Union[str, Iterable[image_to_video_create_params.KlingO3_4kReferencesReferenceImage]] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+
+ audio: Whether to generate audio for the video.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ ratio: The resolution of the output video.
+
+ references: An optional array of reference images (up to 7). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -352,6 +403,57 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["kling3.0_4k"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Kling3_0_4kPromptImagePromptImage]],
+ audio: bool | Omit = omit,
+ cfg_scale: float | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: image_to_video_create_params.Kling3_0_4kProviderSettings | Omit = omit,
+ ratio: Literal["3840:2160", "2160:3840", "2880:2880"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+
+ audio: Whether to generate audio for the video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ ratio: The resolution of the output video.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -400,40 +502,11 @@ def create(
def create(
self,
*,
- model: Literal["seedance2"],
- prompt_image: Union[str, Iterable[image_to_video_create_params.Seedance2PromptImagePromptImage]],
- audio: bool | Omit = omit,
- duration: Union[int, Literal["auto"]] | Omit = omit,
- prompt_text: str | Omit = omit,
- ratio: Literal[
- "992:432",
- "864:496",
- "752:560",
- "640:640",
- "560:752",
- "496:864",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- "2206:946",
- "1920:1080",
- "1664:1248",
- "1440:1440",
- "1248:1664",
- "1080:1920",
- "3840:1646",
- "3840:2160",
- "3840:2880",
- "3840:3840",
- "2880:3840",
- "2160:3840",
- ]
- | Omit = omit,
- reference_audio: Iterable[image_to_video_create_params.Seedance2ReferenceAudio] | Omit = omit,
- seed: int | Omit = omit,
+ model: Literal["kling2.5_turbo_pro"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Kling2_5TurboProPromptImagePromptImage]],
+ prompt_text: str,
+ cfg_scale: float | Omit = omit,
+ duration: Literal[5, 10] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -445,26 +518,17 @@ def create(
This endpoint will start a new task to generate a video from an image.
Args:
- prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
- omit position for reference images. The two modes cannot be mixed.
-
- audio: Whether to generate audio for the video.
-
- duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
- billed at the variant maximum up front; unused credits are refunded after the
- generation finishes.
-
- prompt_text: An optional text prompt up to 3500 characters describing what should appear in
- the output.
+ prompt_image: Image for the first frame of the output video, or an array with first and
+ optionally last frames. Output aspect ratio follows the input image; `ratio` is
+ not supported on image-to-video. See [image inputs](/assets/inputs#images) for
+ file size limits.
- ratio: The resolution of the output video.
+ prompt_text: A text prompt describing what should appear in the output video.
- reference_audio: An optional array of audio references. The total combined duration must not
- exceed 15 seconds.
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
- 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
- integer for an identical request will produce similar results.
+ duration: The duration of the output video in seconds. Defaults to 5.
extra_headers: Send extra headers
@@ -480,28 +544,14 @@ def create(
def create(
self,
*,
- model: Literal["seedance2_fast"],
- prompt_image: Union[str, Iterable[image_to_video_create_params.Seedance2FastPromptImagePromptImage]],
+ model: Literal["kling3.0_pro"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Kling3_0ProPromptImagePromptImage]],
audio: bool | Omit = omit,
- duration: Union[int, Literal["auto"]] | Omit = omit,
+ cfg_scale: float | Omit = omit,
+ duration: int | Omit = omit,
prompt_text: str | Omit = omit,
- ratio: Literal[
- "992:432",
- "864:496",
- "752:560",
- "640:640",
- "560:752",
- "496:864",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- ]
- | Omit = omit,
- reference_audio: Iterable[image_to_video_create_params.Seedance2FastReferenceAudio] | Omit = omit,
- seed: int | Omit = omit,
+ provider_settings: image_to_video_create_params.Kling3_0ProProviderSettings | Omit = omit,
+ ratio: Literal["1920:1080", "1080:1920", "1440:1440"] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -513,27 +563,23 @@ def create(
This endpoint will start a new task to generate a video from an image.
Args:
- prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
- omit position for reference images. The two modes cannot be mixed.
+ prompt_image: You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
audio: Whether to generate audio for the video.
- duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
- billed at the variant maximum up front; unused credits are refunded after the
- generation finishes.
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
- prompt_text: An optional text prompt up to 3500 characters describing what should appear in
- the output.
+ duration: The number of seconds of duration for the output video.
- ratio: The resolution of the output video. Seedance 2.0 Fast supports 480p and 720p
- only.
+ prompt_text: A text prompt describing what should appear in the output video.
- reference_audio: An optional array of audio references. The total combined duration must not
- exceed 15 seconds.
+ provider_settings: Provider-specific settings for multishot video generation.
- 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
- integer for an identical request will produce similar results.
+ ratio: The resolution of the output video.
extra_headers: Send extra headers
@@ -549,28 +595,14 @@ def create(
def create(
self,
*,
- model: Literal["seedance2_mini"],
- prompt_image: Union[str, Iterable[image_to_video_create_params.Seedance2MiniPromptImagePromptImage]],
+ model: Literal["kling3.0_standard"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Kling3_0StandardPromptImagePromptImage]],
audio: bool | Omit = omit,
- duration: Union[int, Literal["auto"]] | Omit = omit,
+ cfg_scale: float | Omit = omit,
+ duration: int | Omit = omit,
prompt_text: str | Omit = omit,
- ratio: Literal[
- "992:432",
- "864:496",
- "752:560",
- "640:640",
- "560:752",
- "496:864",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- ]
- | Omit = omit,
- reference_audio: Iterable[image_to_video_create_params.Seedance2MiniReferenceAudio] | Omit = omit,
- seed: int | Omit = omit,
+ provider_settings: image_to_video_create_params.Kling3_0StandardProviderSettings | Omit = omit,
+ ratio: Literal["1280:720", "720:1280", "960:960"] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -582,27 +614,23 @@ def create(
This endpoint will start a new task to generate a video from an image.
Args:
- prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
- omit position for reference images. The two modes cannot be mixed.
+ prompt_image: You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
audio: Whether to generate audio for the video.
- duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
- billed at the variant maximum up front; unused credits are refunded after the
- generation finishes.
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
- prompt_text: An optional text prompt up to 3500 characters describing what should appear in
- the output.
+ duration: The number of seconds of duration for the output video.
- ratio: The resolution of the output video. Seedance 2.0 Mini supports 480p and 720p
- only.
+ prompt_text: A text prompt describing what should appear in the output video.
- reference_audio: An optional array of audio references. The total combined duration must not
- exceed 15 seconds.
+ provider_settings: Provider-specific settings for multishot video generation.
- 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
- integer for an identical request will produce similar results.
+ ratio: The resolution of the output video.
extra_headers: Send extra headers
@@ -618,11 +646,14 @@ def create(
def create(
self,
*,
- model: Literal["gemini_omni_flash"],
- prompt_image: Union[str, Iterable[image_to_video_create_params.GeminiOmniFlashPromptImagePromptImage]],
+ model: Literal["klingO3_pro"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.KlingO3ProPromptImagePromptImage]],
+ audio: bool | Omit = omit,
duration: int | Omit = omit,
prompt_text: str | Omit = omit,
- ratio: Literal["1280:720", "720:1280"] | Omit = omit,
+ provider_settings: image_to_video_create_params.KlingO3ProProviderSettings | Omit = omit,
+ ratio: Literal["1920:1080", "1080:1920", "1440:1440"] | Omit = omit,
+ references: Union[str, Iterable[image_to_video_create_params.KlingO3ProReferencesReferenceImage]] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -634,16 +665,23 @@ def create(
This endpoint will start a new task to generate a video from an image.
Args:
- prompt_image: An image to use as the first frame of the output video. Gemini Omni Flash only
- supports a first frame.
+ prompt_image: You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
- duration: The duration of the output video in seconds, as a whole number from 3 to 10.
+ audio: Whether to generate audio for the video.
- prompt_text: An optional text prompt describing how the video should evolve from the first
- frame.
+ duration: The number of seconds of duration for the output video.
- ratio: The aspect ratio of the output video: `1280:720` (landscape) or `720:1280`
- (portrait).
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ ratio: The resolution of the output video.
+
+ references: An optional array of reference images (up to 7). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
extra_headers: Send extra headers
@@ -659,34 +697,15 @@ def create(
def create(
self,
*,
- model: Literal["seedance2_5"],
- prompt_image: Union[str, Iterable[image_to_video_create_params.Seedance2_5PromptImagePromptImage]],
+ model: Literal["klingO3_standard"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.KlingO3StandardPromptImagePromptImage]],
audio: bool | Omit = omit,
- duration: Union[int, Literal["auto"]] | Omit = omit,
+ duration: int | Omit = omit,
prompt_text: str | Omit = omit,
- ratio: Literal[
- "992:432",
- "854:480",
- "752:560",
- "640:640",
- "560:752",
- "480:854",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- "2206:946",
- "1920:1080",
- "1664:1248",
- "1440:1440",
- "1248:1664",
- "1080:1920",
- ]
+ provider_settings: image_to_video_create_params.KlingO3StandardProviderSettings | Omit = omit,
+ ratio: Literal["1280:720", "720:1280", "960:960"] | Omit = omit,
+ references: Union[str, Iterable[image_to_video_create_params.KlingO3StandardReferencesReferenceImage]]
| Omit = omit,
- reference_audio: Iterable[image_to_video_create_params.Seedance2_5ReferenceAudio] | 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.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -698,22 +717,99 @@ def create(
This endpoint will start a new task to generate a video from an image.
Args:
- prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
- omit position for reference images. The two modes cannot be mixed.
+ prompt_image: You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
audio: Whether to generate audio for the video.
- duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ ratio: The resolution of the output video.
+
+ references: An optional array of reference images (up to 7). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["seedance2"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Seedance2PromptImagePromptImage]],
+ audio: bool | Omit = omit,
+ duration: Union[int, Literal["auto"]] | Omit = omit,
+ prompt_text: str | Omit = omit,
+ ratio: Literal[
+ "992:432",
+ "864:496",
+ "752:560",
+ "640:640",
+ "560:752",
+ "496:864",
+ "1470:630",
+ "1280:720",
+ "1112:834",
+ "960:960",
+ "834:1112",
+ "720:1280",
+ "2206:946",
+ "1920:1080",
+ "1664:1248",
+ "1440:1440",
+ "1248:1664",
+ "1080:1920",
+ "3840:1646",
+ "3840:2160",
+ "3840:2880",
+ "3840:3840",
+ "2880:3840",
+ "2160:3840",
+ ]
+ | Omit = omit,
+ reference_audio: Iterable[image_to_video_create_params.Seedance2ReferenceAudio] | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
+ omit position for reference images. The two modes cannot be mixed.
+
+ audio: Whether to generate audio for the video.
+
+ duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
billed at the variant maximum up front; unused credits are refunded after the
generation finishes.
- prompt_text: An optional text prompt up to 15000 characters describing what should appear in
+ prompt_text: An optional text prompt up to 3500 characters describing what should appear in
the output.
- ratio: The resolution of the output video. Seedance 2.5 supports 480p, 720p, and 1080p.
+ ratio: The resolution of the output video.
reference_audio: An optional array of audio references. The total combined duration must not
- exceed 30 seconds.
+ exceed 15 seconds.
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
@@ -733,11 +829,28 @@ def create(
def create(
self,
*,
- model: Literal["grok_imagine_1_5"],
- prompt_image: Union[str, Iterable[image_to_video_create_params.GrokImagine1_5PromptImagePromptImage]],
- duration: int | Omit = omit,
+ model: Literal["seedance2_fast"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Seedance2FastPromptImagePromptImage]],
+ audio: bool | Omit = omit,
+ duration: Union[int, Literal["auto"]] | Omit = omit,
prompt_text: str | Omit = omit,
- resolution: Literal["480p", "720p", "1080p"] | Omit = omit,
+ ratio: Literal[
+ "992:432",
+ "864:496",
+ "752:560",
+ "640:640",
+ "560:752",
+ "496:864",
+ "1470:630",
+ "1280:720",
+ "1112:834",
+ "960:960",
+ "834:1112",
+ "720:1280",
+ ]
+ | Omit = omit,
+ reference_audio: Iterable[image_to_video_create_params.Seedance2FastReferenceAudio] | 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.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -749,15 +862,27 @@ def create(
This endpoint will start a new task to generate a video from an image.
Args:
- prompt_image: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
- `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
- [our docs](/assets/inputs#images) on image inputs for more information.
+ prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
+ omit position for reference images. The two modes cannot be mixed.
- duration: The number of seconds of duration for the output video.
+ audio: Whether to generate audio for the video.
- prompt_text: An optional text prompt describing motion or changes in the output video.
+ duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
+ billed at the variant maximum up front; unused credits are refunded after the
+ generation finishes.
- resolution: The output resolution. Output aspect ratio follows the input image.
+ prompt_text: An optional text prompt up to 3500 characters describing what should appear in
+ the output.
+
+ ratio: The resolution of the output video. Seedance 2.0 Fast supports 480p and 720p
+ only.
+
+ reference_audio: An optional array of audio references. The total combined duration must not
+ exceed 15 seconds.
+
+ 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
+ integer for an identical request will produce similar results.
extra_headers: Send extra headers
@@ -773,34 +898,28 @@ def create(
def create(
self,
*,
- model: Literal["wan3"],
- prompt_image: Union[str, Iterable[object]],
- prompt_text: str,
+ model: Literal["seedance2_mini"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Seedance2MiniPromptImagePromptImage]],
audio: bool | Omit = omit,
- duration: int | Omit = omit,
+ duration: Union[int, Literal["auto"]] | Omit = omit,
+ prompt_text: str | Omit = omit,
ratio: Literal[
- "832:480",
- "720:544",
- "624:624",
- "544:720",
- "480:832",
+ "992:432",
+ "864:496",
+ "752:560",
+ "640:640",
+ "560:752",
+ "496:864",
+ "1470:630",
"1280:720",
- "1104:832",
+ "1112:834",
"960:960",
- "832:1104",
+ "834:1112",
"720:1280",
- "1920:1080",
- "1648:1248",
- "1440:1440",
- "1248:1648",
- "1080:1920",
- "auto_480p",
- "auto_720p",
- "auto_1080p",
]
| Omit = omit,
- reference_audio: Iterable[image_to_video_create_params.Wan3ReferenceAudio] | Omit = omit,
- reference_videos: Iterable[image_to_video_create_params.Wan3ReferenceVideo] | Omit = omit,
+ reference_audio: Iterable[image_to_video_create_params.Seedance2MiniReferenceAudio] | 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.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -815,22 +934,24 @@ def create(
prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
omit position for reference images. The two modes cannot be mixed.
- prompt_text: A non-empty text prompt describing what should appear in the output.
+ audio: Whether to generate audio for the video.
- audio: Whether to generate audio with the video.
+ duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
+ billed at the variant maximum up front; unused credits are refunded after the
+ generation finishes.
- duration: The number of seconds of duration for the output video.
+ prompt_text: An optional text prompt up to 3500 characters describing what should appear in
+ the output.
- ratio: The resolution of the output video, as `:`. Keyframe
- image-to-video requests must use `auto_480p`, `auto_720p`, or `auto_1080p`
- because their aspect ratio follows the first frame.
+ ratio: The resolution of the output video. Seedance 2.0 Mini supports 480p and 720p
+ only.
reference_audio: An optional array of audio references. The total combined duration must not
exceed 15 seconds.
- reference_videos: An optional array of video references. The combined duration across all video
- references must not exceed 15 seconds. See [our docs](/assets/inputs#videos) on
- video inputs for more information.
+ 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
+ integer for an identical request will produce similar results.
extra_headers: Send extra headers
@@ -846,12 +967,11 @@ def create(
def create(
self,
*,
- model: Literal["gemini_omni_flash_1.1"],
- prompt_image: Union[str, Iterable[image_to_video_create_params.GeminiOmniFlash1_1PromptImagePromptImage]],
- prompt_text: str,
- duration: Union[Literal["auto"], int] | Omit = omit,
- ratio: Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
- | Omit = omit,
+ model: Literal["gemini_omni_flash"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.GeminiOmniFlashPromptImagePromptImage]],
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ ratio: Literal["1280:720", "720:1280"] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -863,16 +983,16 @@ def create(
This endpoint will start a new task to generate a video from an image.
Args:
- prompt_image: An image to use as the first frame, or an array containing a first frame and
- optional last frame.
+ prompt_image: An image to use as the first frame of the output video. Gemini Omni Flash only
+ supports a first frame.
- prompt_text: A non-empty text prompt describing how the video should evolve between the
- provided frames.
+ duration: The duration of the output video in seconds, as a whole number from 3 to 10.
- duration: The duration of the output video in seconds. Use "auto" to let the model choose
- a duration. Numeric durations must be between 3 and 10 seconds.
+ prompt_text: An optional text prompt describing how the video should evolve from the first
+ frame.
- ratio: The resolution and aspect ratio of the output video.
+ ratio: The aspect ratio of the output video: `1280:720` (landscape) or `720:1280`
+ (portrait).
extra_headers: Send extra headers
@@ -888,7 +1008,47 @@ def create(
def create(
self,
*,
- model: Literal["wan3_prime"],
+ model: Literal["grok_imagine_1_5"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.GrokImagine1_5PromptImagePromptImage]],
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ resolution: Literal["480p", "720p", "1080p"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: The start frame of the output video. The output keeps its aspect ratio, which
+ (width / height) must be between 0.4 and 2.5. See
+ [our docs](/assets/inputs#images) for image input requirements.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: An optional text prompt describing motion or changes in the output video.
+
+ resolution: The output resolution. Output aspect ratio follows the input image.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["wan3"],
prompt_image: Union[str, Iterable[object]],
prompt_text: str,
audio: bool | Omit = omit,
@@ -914,8 +1074,8 @@ def create(
"auto_1080p",
]
| Omit = omit,
- reference_audio: Iterable[image_to_video_create_params.Wan3PrimeReferenceAudio] | Omit = omit,
- reference_videos: Iterable[image_to_video_create_params.Wan3PrimeReferenceVideo] | Omit = omit,
+ reference_audio: Iterable[image_to_video_create_params.Wan3ReferenceAudio] | Omit = omit,
+ reference_videos: Iterable[image_to_video_create_params.Wan3ReferenceVideo] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -961,8 +1121,123 @@ def create(
def create(
self,
*,
- model: Literal["h3_max"],
- prompt_image: Union[str, Iterable[image_to_video_create_params.H3MaxPromptImagePromptImage]],
+ model: Literal["gemini_omni_flash_1.1"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.GeminiOmniFlash1_1PromptImagePromptImage]],
+ prompt_text: str,
+ duration: Union[Literal["auto"], int] | Omit = omit,
+ ratio: Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
+ | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: An image to use as the first frame, or an array containing a first frame and
+ optional last frame.
+
+ prompt_text: A non-empty text prompt describing how the video should evolve between the
+ provided frames.
+
+ duration: The duration of the output video in seconds. Use "auto" to let the model choose
+ a duration. Numeric durations must be between 3 and 10 seconds.
+
+ ratio: The resolution and aspect ratio of the output video.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["wan3_prime"],
+ prompt_image: Union[str, Iterable[object]],
+ prompt_text: str,
+ audio: bool | Omit = omit,
+ duration: int | Omit = omit,
+ ratio: Literal[
+ "832:480",
+ "720:544",
+ "624:624",
+ "544:720",
+ "480:832",
+ "1280:720",
+ "1104:832",
+ "960:960",
+ "832:1104",
+ "720:1280",
+ "1920:1080",
+ "1648:1248",
+ "1440:1440",
+ "1248:1648",
+ "1080:1920",
+ "auto_480p",
+ "auto_720p",
+ "auto_1080p",
+ ]
+ | Omit = omit,
+ reference_audio: Iterable[image_to_video_create_params.Wan3PrimeReferenceAudio] | Omit = omit,
+ reference_videos: Iterable[image_to_video_create_params.Wan3PrimeReferenceVideo] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
+ omit position for reference images. The two modes cannot be mixed.
+
+ prompt_text: A non-empty text prompt describing what should appear in the output.
+
+ audio: Whether to generate audio with the video.
+
+ duration: The number of seconds of duration for the output video.
+
+ ratio: The resolution of the output video, as `:`. Keyframe
+ image-to-video requests must use `auto_480p`, `auto_720p`, or `auto_1080p`
+ because their aspect ratio follows the first frame.
+
+ reference_audio: An optional array of audio references. The total combined duration must not
+ exceed 15 seconds.
+
+ reference_videos: An optional array of video references. The combined duration across all video
+ references must not exceed 15 seconds. See [our docs](/assets/inputs#videos) on
+ video inputs for more information.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["h3_max"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.H3MaxPromptImagePromptImage]],
prompt_text: str,
duration: int | Omit = omit,
prompt_expansion_mode: Literal["disabled", "balanced", "quality"] | Omit = omit,
@@ -1007,6 +1282,90 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["seedance2_5"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Seedance2_5PromptImagePromptImage]],
+ audio: bool | Omit = omit,
+ draft: bool | Omit = omit,
+ duration: Union[int, Literal["auto"]] | Omit = omit,
+ output_format: Literal["mp4", "mov"] | Omit = omit,
+ prompt_text: str | Omit = omit,
+ ratio: Literal[
+ "992:432",
+ "854:480",
+ "752:560",
+ "640:640",
+ "560:752",
+ "480:854",
+ "1470:630",
+ "1280:720",
+ "1112:834",
+ "960:960",
+ "834:1112",
+ "720:1280",
+ "2206:946",
+ "1920:1080",
+ "1664:1248",
+ "1440:1440",
+ "1248:1664",
+ "1080:1920",
+ ]
+ | Omit = omit,
+ reference_audio: Iterable[image_to_video_create_params.Seedance2_5ReferenceAudio] | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
+ omit position for reference images. The two modes cannot be mixed.
+
+ audio: Whether to generate audio for the video.
+
+ draft: Generate a cheap 480p preview instead of a full-quality video. The returned task
+ ID can later be enhanced to a 1080p video with the same content by passing it as
+ `draftTaskId` to `text_to_video`. Drafts can be enhanced within 7 days of
+ creation. Defaults to false.
+
+ duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
+ billed at the variant maximum up front; unused credits are refunded after the
+ generation finishes.
+
+ output_format: Container for the output video. `mov` keeps high colour precision for grading
+ and compositing. Defaults to `mp4`. Draft mode only supports `mp4`.
+
+ prompt_text: An optional text prompt up to 15000 characters describing what should appear in
+ the output.
+
+ ratio: The resolution of the output video. Seedance 2.5 supports 480p, 720p, and 1080p.
+
+ reference_audio: An optional array of audio references. The total combined duration must not
+ exceed 30 seconds.
+
+ 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
+ integer for an identical request will produce similar results.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -1027,9 +1386,9 @@ def create(
This endpoint will start a new task to generate a video from an image.
Args:
- prompt_image: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
- `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
- [our docs](/assets/inputs#images) on image inputs for more information.
+ prompt_image: The start frame of the output video. The output keeps its aspect ratio, which
+ (width / height) must be between 0.4 and 2.5. See
+ [our docs](/assets/inputs#images) for image input requirements.
duration: The number of seconds of duration for the output video.
@@ -1051,50 +1410,72 @@ def create(
@required_args(
["duration", "model", "prompt_image", "prompt_text", "ratio"],
["model", "prompt_image", "ratio"],
- ["model", "prompt_image", "prompt_text"],
["model", "prompt_image"],
+ ["model", "prompt_image", "prompt_text"],
)
def create(
self,
*,
- duration: int | Literal[4, 6, 8] | Union[int, Literal["auto"]] | Union[Literal["auto"], int] | Omit = omit,
+ duration: int
+ | Literal[4, 6, 8]
+ | Literal[5, 10]
+ | Union[int, Literal["auto"]]
+ | Union[Literal["auto"], int]
+ | Omit = omit,
model: Literal["gen4.5"]
| Literal["gen4_turbo"]
| Literal["veo3.1"]
| Literal["veo3.1_fast"]
+ | Literal["klingO3_4k"]
| Literal["hailuo3"]
+ | Literal["kling3.0_4k"]
| Literal["happyhorse_1_0"]
+ | Literal["kling2.5_turbo_pro"]
+ | Literal["kling3.0_pro"]
+ | Literal["kling3.0_standard"]
+ | Literal["klingO3_pro"]
+ | Literal["klingO3_standard"]
| Literal["seedance2"]
| Literal["seedance2_fast"]
| Literal["seedance2_mini"]
| Literal["gemini_omni_flash"]
- | Literal["seedance2_5"]
| Literal["grok_imagine_1_5"]
| Literal["wan3"]
| Literal["gemini_omni_flash_1.1"]
| Literal["wan3_prime"]
| Literal["h3_max"]
+ | Literal["seedance2_5"]
| Literal["grok_imagine_1_5_lite"],
prompt_image: Union[str, Iterable[image_to_video_create_params.Gen4_5PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Gen4TurboPromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Veo3_1PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Veo3_1FastPromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.KlingO3_4kPromptImagePromptImage]]
| Union[str, Iterable[object]]
+ | Union[str, Iterable[image_to_video_create_params.Kling3_0_4kPromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Happyhorse1_0PromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.Kling2_5TurboProPromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.Kling3_0ProPromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.Kling3_0StandardPromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.KlingO3ProPromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.KlingO3StandardPromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Seedance2PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Seedance2FastPromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Seedance2MiniPromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.GeminiOmniFlashPromptImagePromptImage]]
- | Union[str, Iterable[image_to_video_create_params.Seedance2_5PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.GrokImagine1_5PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.GeminiOmniFlash1_1PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.H3MaxPromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.Seedance2_5PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.GrokImagine1_5LitePromptImagePromptImage]],
prompt_text: str | Omit = omit,
ratio: Literal["1280:720", "720:1280", "1104:832", "960:960", "832:1104", "1584:672"]
| Literal["1280:720", "720:1280", "1104:832", "832:1104", "960:960", "1584:672"]
| Literal["1280:720", "720:1280", "1080:1920", "1920:1080"]
+ | Literal["3840:2160", "2160:3840", "2880:2880"]
| Literal["adaptive", "21:9", "16:9", "4:3", "1:1", "3:4", "9:16"]
+ | Literal["1920:1080", "1080:1920", "1440:1440"]
+ | Literal["1280:720", "720:1280", "960:960"]
| Literal[
"992:432",
"864:496",
@@ -1136,26 +1517,6 @@ def create(
"720:1280",
]
| Literal["1280:720", "720:1280"]
- | Literal[
- "992:432",
- "854:480",
- "752:560",
- "640:640",
- "560:752",
- "480:854",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- "2206:946",
- "1920:1080",
- "1664:1248",
- "1440:1440",
- "1248:1664",
- "1080:1920",
- ]
| Literal[
"832:480",
"720:544",
@@ -1177,6 +1538,26 @@ def create(
"auto_1080p",
]
| Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
+ | Literal[
+ "992:432",
+ "854:480",
+ "752:560",
+ "640:640",
+ "560:752",
+ "480:854",
+ "1470:630",
+ "1280:720",
+ "1112:834",
+ "960:960",
+ "834:1112",
+ "720:1280",
+ "2206:946",
+ "1920:1080",
+ "1664:1248",
+ "1440:1440",
+ "1248:1664",
+ "1080:1920",
+ ]
| Literal["auto_480p", "auto_720p", "auto_1080p"]
| Omit = omit,
content_moderation: image_to_video_create_params.Gen4_5ContentModeration
@@ -1196,28 +1577,42 @@ def create(
"hdr_exr_acescg_sequence_1_3",
"hdr_exr_acescg_sequence_2_0",
]
+ | Literal["mp4", "mov"]
| 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,
negative_prompt: str | Omit = omit,
+ provider_settings: image_to_video_create_params.KlingO3_4kProviderSettings
+ | image_to_video_create_params.Kling3_0_4kProviderSettings
+ | image_to_video_create_params.Kling3_0ProProviderSettings
+ | image_to_video_create_params.Kling3_0StandardProviderSettings
+ | image_to_video_create_params.KlingO3ProProviderSettings
+ | image_to_video_create_params.KlingO3StandardProviderSettings
+ | Omit = omit,
+ references: Union[str, Iterable[image_to_video_create_params.KlingO3_4kReferencesReferenceImage]]
+ | Union[str, Iterable[image_to_video_create_params.KlingO3ProReferencesReferenceImage]]
+ | Union[str, Iterable[image_to_video_create_params.KlingO3StandardReferencesReferenceImage]]
+ | Omit = omit,
reference_audio: Iterable[image_to_video_create_params.Hailuo3ReferenceAudio]
| Iterable[image_to_video_create_params.Seedance2ReferenceAudio]
| Iterable[image_to_video_create_params.Seedance2FastReferenceAudio]
| Iterable[image_to_video_create_params.Seedance2MiniReferenceAudio]
- | Iterable[image_to_video_create_params.Seedance2_5ReferenceAudio]
| Iterable[image_to_video_create_params.Wan3ReferenceAudio]
| Iterable[image_to_video_create_params.Wan3PrimeReferenceAudio]
+ | Iterable[image_to_video_create_params.Seedance2_5ReferenceAudio]
| Omit = omit,
resolution: Literal["768p", "2k", "768P", "2K"]
| Literal["720p", "1080p", "720P", "1080P"]
| Literal["480p", "720p", "1080p"]
| Literal["480p", "768p"]
| Omit = omit,
+ cfg_scale: float | Omit = omit,
reference_videos: Iterable[image_to_video_create_params.Wan3ReferenceVideo]
| Iterable[image_to_video_create_params.Wan3PrimeReferenceVideo]
| Omit = omit,
prompt_expansion_mode: Literal["disabled", "balanced", "quality"] | Omit = omit,
+ draft: bool | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -1240,10 +1635,14 @@ def create(
"seed": seed,
"audio": audio,
"negative_prompt": negative_prompt,
+ "provider_settings": provider_settings,
+ "references": references,
"reference_audio": reference_audio,
"resolution": resolution,
+ "cfg_scale": cfg_scale,
"reference_videos": reference_videos,
"prompt_expansion_mode": prompt_expansion_mode,
+ "draft": draft,
},
image_to_video_create_params.ImageToVideoCreateParams,
),
@@ -1503,18 +1902,358 @@ async def create(
ratio: The resolution of the output video.
- audio: Whether to generate audio for the video. Audio inclusion affects pricing.
+ audio: Whether to generate audio for the video. Audio inclusion affects pricing.
+
+ duration: The number of seconds of duration for the output video.
+
+ negative_prompt: Text describing what should not appear in the output video.
+
+ prompt_text: A non-empty string up to 1000 characters (measured in UTF-16 code units). This
+ should describe in detail what should appear in the output.
+
+ 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
+ integer for an identical request will produce similar results.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["klingO3_4k"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.KlingO3_4kPromptImagePromptImage]],
+ audio: bool | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: image_to_video_create_params.KlingO3_4kProviderSettings | Omit = omit,
+ ratio: Literal["3840:2160", "2160:3840", "2880:2880"] | Omit = omit,
+ references: Union[str, Iterable[image_to_video_create_params.KlingO3_4kReferencesReferenceImage]] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+
+ audio: Whether to generate audio for the video.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ ratio: The resolution of the output video.
+
+ references: An optional array of reference images (up to 7). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["hailuo3"],
+ prompt_image: Union[str, Iterable[object]],
+ prompt_text: str,
+ duration: int | Omit = omit,
+ ratio: Literal["adaptive", "21:9", "16:9", "4:3", "1:1", "3:4", "9:16"] | Omit = omit,
+ reference_audio: Iterable[image_to_video_create_params.Hailuo3ReferenceAudio] | Omit = omit,
+ resolution: Literal["768p", "2k", "768P", "2K"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
+ omit position for reference images. The two modes cannot be mixed.
+
+ prompt_text: A non-empty text prompt describing what should appear in the output.
+
+ duration: The number of seconds of duration for the output video.
+
+ ratio: The aspect ratio of the output video. Use adaptive only when image or video
+ references are provided; text-only requests require a concrete ratio.
+
+ 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.
+
+ - `768P` - Deprecated: Use "768p" instead.
+ - `2K` - Deprecated: Use "2k" instead.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["kling3.0_4k"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Kling3_0_4kPromptImagePromptImage]],
+ audio: bool | Omit = omit,
+ cfg_scale: float | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: image_to_video_create_params.Kling3_0_4kProviderSettings | Omit = omit,
+ ratio: Literal["3840:2160", "2160:3840", "2880:2880"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+
+ audio: Whether to generate audio for the video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ ratio: The resolution of the output video.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["happyhorse_1_0"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Happyhorse1_0PromptImagePromptImage]],
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ resolution: Literal["720p", "1080p", "720P", "1080P"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A string up to 2500 characters (measured in UTF-16 code units) describing motion
+ or changes in the output video.
+
+ resolution: Output quality tier. Output aspect ratio follows the input image.
+
+ - `720P` - Deprecated: Use "720p" instead.
+ - `1080P` - Deprecated: Use "1080p" instead.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["kling2.5_turbo_pro"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Kling2_5TurboProPromptImagePromptImage]],
+ prompt_text: str,
+ cfg_scale: float | Omit = omit,
+ duration: Literal[5, 10] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: Image for the first frame of the output video, or an array with first and
+ optionally last frames. Output aspect ratio follows the input image; `ratio` is
+ not supported on image-to-video. See [image inputs](/assets/inputs#images) for
+ file size limits.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
+
+ duration: The duration of the output video in seconds. Defaults to 5.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["kling3.0_pro"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Kling3_0ProPromptImagePromptImage]],
+ audio: bool | Omit = omit,
+ cfg_scale: float | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: image_to_video_create_params.Kling3_0ProProviderSettings | Omit = omit,
+ ratio: Literal["1920:1080", "1080:1920", "1440:1440"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+
+ audio: Whether to generate audio for the video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ ratio: The resolution of the output video.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["kling3.0_standard"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Kling3_0StandardPromptImagePromptImage]],
+ audio: bool | Omit = omit,
+ cfg_scale: float | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: image_to_video_create_params.Kling3_0StandardProviderSettings | Omit = omit,
+ ratio: Literal["1280:720", "720:1280", "960:960"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+
+ audio: Whether to generate audio for the video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
duration: The number of seconds of duration for the output video.
- negative_prompt: Text describing what should not appear in the output video.
+ prompt_text: A text prompt describing what should appear in the output video.
- prompt_text: A non-empty string up to 1000 characters (measured in UTF-16 code units). This
- should describe in detail what should appear in the output.
+ provider_settings: Provider-specific settings for multishot video generation.
- 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
- integer for an identical request will produce similar results.
+ ratio: The resolution of the output video.
extra_headers: Send extra headers
@@ -1530,13 +2269,14 @@ async def create(
async def create(
self,
*,
- model: Literal["hailuo3"],
- prompt_image: Union[str, Iterable[object]],
- prompt_text: str,
+ model: Literal["klingO3_pro"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.KlingO3ProPromptImagePromptImage]],
+ audio: bool | Omit = omit,
duration: int | Omit = omit,
- ratio: Literal["adaptive", "21:9", "16:9", "4:3", "1:1", "3:4", "9:16"] | Omit = omit,
- reference_audio: Iterable[image_to_video_create_params.Hailuo3ReferenceAudio] | Omit = omit,
- resolution: Literal["768p", "2k", "768P", "2K"] | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: image_to_video_create_params.KlingO3ProProviderSettings | Omit = omit,
+ ratio: Literal["1920:1080", "1080:1920", "1440:1440"] | Omit = omit,
+ references: Union[str, Iterable[image_to_video_create_params.KlingO3ProReferencesReferenceImage]] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -1548,23 +2288,23 @@ async def create(
This endpoint will start a new task to generate a video from an image.
Args:
- prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
- omit position for reference images. The two modes cannot be mixed.
+ prompt_image: You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
- prompt_text: A non-empty text prompt describing what should appear in the output.
+ audio: Whether to generate audio for the video.
duration: The number of seconds of duration for the output video.
- ratio: The aspect ratio of the output video. Use adaptive only when image or video
- references are provided; text-only requests require a concrete ratio.
+ prompt_text: A text prompt describing what should appear in the output video.
- reference_audio: An optional array of audio references. Audio references require a text prompt,
- and the total combined duration must not exceed 15 seconds.
+ provider_settings: Provider-specific settings for multishot video generation.
- resolution: The output resolution. Hailuo 3.0 supports 768p and 2k.
+ ratio: The resolution of the output video.
- - `768P` - Deprecated: Use "768p" instead.
- - `2K` - Deprecated: Use "2k" instead.
+ references: An optional array of reference images (up to 7). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
extra_headers: Send extra headers
@@ -1580,11 +2320,15 @@ async def create(
async def create(
self,
*,
- model: Literal["happyhorse_1_0"],
- prompt_image: Union[str, Iterable[image_to_video_create_params.Happyhorse1_0PromptImagePromptImage]],
+ model: Literal["klingO3_standard"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.KlingO3StandardPromptImagePromptImage]],
+ audio: bool | Omit = omit,
duration: int | Omit = omit,
prompt_text: str | Omit = omit,
- resolution: Literal["720p", "1080p", "720P", "1080P"] | Omit = omit,
+ provider_settings: image_to_video_create_params.KlingO3StandardProviderSettings | Omit = omit,
+ ratio: Literal["1280:720", "720:1280", "960:960"] | Omit = omit,
+ references: Union[str, Iterable[image_to_video_create_params.KlingO3StandardReferencesReferenceImage]]
+ | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -1596,19 +2340,23 @@ async def create(
This endpoint will start a new task to generate a video from an image.
Args:
- prompt_image: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
- `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
- [our docs](/assets/inputs#images) on image inputs for more information.
+ prompt_image: You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+
+ audio: Whether to generate audio for the video.
duration: The number of seconds of duration for the output video.
- prompt_text: A string up to 2500 characters (measured in UTF-16 code units) describing motion
- or changes in the output video.
+ prompt_text: A text prompt describing what should appear in the output video.
- resolution: Output quality tier. Output aspect ratio follows the input image.
+ provider_settings: Provider-specific settings for multishot video generation.
- - `720P` - Deprecated: Use "720p" instead.
- - `1080P` - Deprecated: Use "1080p" instead.
+ ratio: The resolution of the output video.
+
+ references: An optional array of reference images (up to 7). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
extra_headers: Send extra headers
@@ -1879,80 +2627,6 @@ async def create(
"""
...
- @overload
- async def create(
- self,
- *,
- model: Literal["seedance2_5"],
- prompt_image: Union[str, Iterable[image_to_video_create_params.Seedance2_5PromptImagePromptImage]],
- audio: bool | Omit = omit,
- duration: Union[int, Literal["auto"]] | Omit = omit,
- prompt_text: str | Omit = omit,
- ratio: Literal[
- "992:432",
- "854:480",
- "752:560",
- "640:640",
- "560:752",
- "480:854",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- "2206:946",
- "1920:1080",
- "1664:1248",
- "1440:1440",
- "1248:1664",
- "1080:1920",
- ]
- | Omit = omit,
- reference_audio: Iterable[image_to_video_create_params.Seedance2_5ReferenceAudio] | 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.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> AsyncNewTaskCreatedResponse:
- """
- This endpoint will start a new task to generate a video from an image.
-
- Args:
- prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
- omit position for reference images. The two modes cannot be mixed.
-
- audio: Whether to generate audio for the video.
-
- duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
- billed at the variant maximum up front; unused credits are refunded after the
- generation finishes.
-
- prompt_text: An optional text prompt up to 15000 characters describing what should appear in
- the output.
-
- ratio: The resolution of the output video. Seedance 2.5 supports 480p, 720p, and 1080p.
-
- reference_audio: An optional array of audio references. The total combined duration must not
- exceed 30 seconds.
-
- 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
- integer for an identical request will produce similar results.
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- ...
-
@overload
async def create(
self,
@@ -1973,9 +2647,9 @@ async def create(
This endpoint will start a new task to generate a video from an image.
Args:
- prompt_image: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
- `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
- [our docs](/assets/inputs#images) on image inputs for more information.
+ prompt_image: The start frame of the output video. The output keeps its aspect ratio, which
+ (width / height) must be between 0.4 and 2.5. See
+ [our docs](/assets/inputs#images) for image input requirements.
duration: The number of seconds of duration for the output video.
@@ -2231,6 +2905,90 @@ async def create(
"""
...
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["seedance2_5"],
+ prompt_image: Union[str, Iterable[image_to_video_create_params.Seedance2_5PromptImagePromptImage]],
+ audio: bool | Omit = omit,
+ draft: bool | Omit = omit,
+ duration: Union[int, Literal["auto"]] | Omit = omit,
+ output_format: Literal["mp4", "mov"] | Omit = omit,
+ prompt_text: str | Omit = omit,
+ ratio: Literal[
+ "992:432",
+ "854:480",
+ "752:560",
+ "640:640",
+ "560:752",
+ "480:854",
+ "1470:630",
+ "1280:720",
+ "1112:834",
+ "960:960",
+ "834:1112",
+ "720:1280",
+ "2206:946",
+ "1920:1080",
+ "1664:1248",
+ "1440:1440",
+ "1248:1664",
+ "1080:1920",
+ ]
+ | Omit = omit,
+ reference_audio: Iterable[image_to_video_create_params.Seedance2_5ReferenceAudio] | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from an image.
+
+ Args:
+ prompt_image: An image or array of images. Use position `first`/`last` for keyframe mode, or
+ omit position for reference images. The two modes cannot be mixed.
+
+ audio: Whether to generate audio for the video.
+
+ draft: Generate a cheap 480p preview instead of a full-quality video. The returned task
+ ID can later be enhanced to a 1080p video with the same content by passing it as
+ `draftTaskId` to `text_to_video`. Drafts can be enhanced within 7 days of
+ creation. Defaults to false.
+
+ duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
+ billed at the variant maximum up front; unused credits are refunded after the
+ generation finishes.
+
+ output_format: Container for the output video. `mov` keeps high colour precision for grading
+ and compositing. Defaults to `mp4`. Draft mode only supports `mp4`.
+
+ prompt_text: An optional text prompt up to 15000 characters describing what should appear in
+ the output.
+
+ ratio: The resolution of the output video. Seedance 2.5 supports 480p, 720p, and 1080p.
+
+ reference_audio: An optional array of audio references. The total combined duration must not
+ exceed 30 seconds.
+
+ 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
+ integer for an identical request will produce similar results.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
async def create(
self,
@@ -2251,9 +3009,9 @@ async def create(
This endpoint will start a new task to generate a video from an image.
Args:
- prompt_image: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
- `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
- [our docs](/assets/inputs#images) on image inputs for more information.
+ prompt_image: The start frame of the output video. The output keeps its aspect ratio, which
+ (width / height) must be between 0.4 and 2.5. See
+ [our docs](/assets/inputs#images) for image input requirements.
duration: The number of seconds of duration for the output video.
@@ -2275,50 +3033,72 @@ async def create(
@required_args(
["duration", "model", "prompt_image", "prompt_text", "ratio"],
["model", "prompt_image", "ratio"],
- ["model", "prompt_image", "prompt_text"],
["model", "prompt_image"],
+ ["model", "prompt_image", "prompt_text"],
)
async def create(
self,
*,
- duration: int | Literal[4, 6, 8] | Union[int, Literal["auto"]] | Union[Literal["auto"], int] | Omit = omit,
+ duration: int
+ | Literal[4, 6, 8]
+ | Literal[5, 10]
+ | Union[int, Literal["auto"]]
+ | Union[Literal["auto"], int]
+ | Omit = omit,
model: Literal["gen4.5"]
| Literal["gen4_turbo"]
| Literal["veo3.1"]
| Literal["veo3.1_fast"]
+ | Literal["klingO3_4k"]
| Literal["hailuo3"]
+ | Literal["kling3.0_4k"]
| Literal["happyhorse_1_0"]
+ | Literal["kling2.5_turbo_pro"]
+ | Literal["kling3.0_pro"]
+ | Literal["kling3.0_standard"]
+ | Literal["klingO3_pro"]
+ | Literal["klingO3_standard"]
| Literal["seedance2"]
| Literal["seedance2_fast"]
| Literal["seedance2_mini"]
| Literal["gemini_omni_flash"]
- | Literal["seedance2_5"]
| Literal["grok_imagine_1_5"]
| Literal["wan3"]
| Literal["gemini_omni_flash_1.1"]
| Literal["wan3_prime"]
| Literal["h3_max"]
+ | Literal["seedance2_5"]
| Literal["grok_imagine_1_5_lite"],
prompt_image: Union[str, Iterable[image_to_video_create_params.Gen4_5PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Gen4TurboPromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Veo3_1PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Veo3_1FastPromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.KlingO3_4kPromptImagePromptImage]]
| Union[str, Iterable[object]]
+ | Union[str, Iterable[image_to_video_create_params.Kling3_0_4kPromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Happyhorse1_0PromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.Kling2_5TurboProPromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.Kling3_0ProPromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.Kling3_0StandardPromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.KlingO3ProPromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.KlingO3StandardPromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Seedance2PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Seedance2FastPromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.Seedance2MiniPromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.GeminiOmniFlashPromptImagePromptImage]]
- | Union[str, Iterable[image_to_video_create_params.Seedance2_5PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.GrokImagine1_5PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.GeminiOmniFlash1_1PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.H3MaxPromptImagePromptImage]]
+ | Union[str, Iterable[image_to_video_create_params.Seedance2_5PromptImagePromptImage]]
| Union[str, Iterable[image_to_video_create_params.GrokImagine1_5LitePromptImagePromptImage]],
prompt_text: str | Omit = omit,
ratio: Literal["1280:720", "720:1280", "1104:832", "960:960", "832:1104", "1584:672"]
| Literal["1280:720", "720:1280", "1104:832", "832:1104", "960:960", "1584:672"]
| Literal["1280:720", "720:1280", "1080:1920", "1920:1080"]
+ | Literal["3840:2160", "2160:3840", "2880:2880"]
| Literal["adaptive", "21:9", "16:9", "4:3", "1:1", "3:4", "9:16"]
+ | Literal["1920:1080", "1080:1920", "1440:1440"]
+ | Literal["1280:720", "720:1280", "960:960"]
| Literal[
"992:432",
"864:496",
@@ -2360,26 +3140,6 @@ async def create(
"720:1280",
]
| Literal["1280:720", "720:1280"]
- | Literal[
- "992:432",
- "854:480",
- "752:560",
- "640:640",
- "560:752",
- "480:854",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- "2206:946",
- "1920:1080",
- "1664:1248",
- "1440:1440",
- "1248:1664",
- "1080:1920",
- ]
| Literal[
"832:480",
"720:544",
@@ -2401,6 +3161,26 @@ async def create(
"auto_1080p",
]
| Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
+ | Literal[
+ "992:432",
+ "854:480",
+ "752:560",
+ "640:640",
+ "560:752",
+ "480:854",
+ "1470:630",
+ "1280:720",
+ "1112:834",
+ "960:960",
+ "834:1112",
+ "720:1280",
+ "2206:946",
+ "1920:1080",
+ "1664:1248",
+ "1440:1440",
+ "1248:1664",
+ "1080:1920",
+ ]
| Literal["auto_480p", "auto_720p", "auto_1080p"]
| Omit = omit,
content_moderation: image_to_video_create_params.Gen4_5ContentModeration
@@ -2420,28 +3200,42 @@ async def create(
"hdr_exr_acescg_sequence_1_3",
"hdr_exr_acescg_sequence_2_0",
]
+ | Literal["mp4", "mov"]
| 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,
negative_prompt: str | Omit = omit,
+ provider_settings: image_to_video_create_params.KlingO3_4kProviderSettings
+ | image_to_video_create_params.Kling3_0_4kProviderSettings
+ | image_to_video_create_params.Kling3_0ProProviderSettings
+ | image_to_video_create_params.Kling3_0StandardProviderSettings
+ | image_to_video_create_params.KlingO3ProProviderSettings
+ | image_to_video_create_params.KlingO3StandardProviderSettings
+ | Omit = omit,
+ references: Union[str, Iterable[image_to_video_create_params.KlingO3_4kReferencesReferenceImage]]
+ | Union[str, Iterable[image_to_video_create_params.KlingO3ProReferencesReferenceImage]]
+ | Union[str, Iterable[image_to_video_create_params.KlingO3StandardReferencesReferenceImage]]
+ | Omit = omit,
reference_audio: Iterable[image_to_video_create_params.Hailuo3ReferenceAudio]
| Iterable[image_to_video_create_params.Seedance2ReferenceAudio]
| Iterable[image_to_video_create_params.Seedance2FastReferenceAudio]
| Iterable[image_to_video_create_params.Seedance2MiniReferenceAudio]
- | Iterable[image_to_video_create_params.Seedance2_5ReferenceAudio]
| Iterable[image_to_video_create_params.Wan3ReferenceAudio]
| Iterable[image_to_video_create_params.Wan3PrimeReferenceAudio]
+ | Iterable[image_to_video_create_params.Seedance2_5ReferenceAudio]
| Omit = omit,
resolution: Literal["768p", "2k", "768P", "2K"]
| Literal["720p", "1080p", "720P", "1080P"]
| Literal["480p", "720p", "1080p"]
| Literal["480p", "768p"]
| Omit = omit,
+ cfg_scale: float | Omit = omit,
reference_videos: Iterable[image_to_video_create_params.Wan3ReferenceVideo]
| Iterable[image_to_video_create_params.Wan3PrimeReferenceVideo]
| Omit = omit,
prompt_expansion_mode: Literal["disabled", "balanced", "quality"] | Omit = omit,
+ draft: bool | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -2464,10 +3258,14 @@ async def create(
"seed": seed,
"audio": audio,
"negative_prompt": negative_prompt,
+ "provider_settings": provider_settings,
+ "references": references,
"reference_audio": reference_audio,
"resolution": resolution,
+ "cfg_scale": cfg_scale,
"reference_videos": reference_videos,
"prompt_expansion_mode": prompt_expansion_mode,
+ "draft": draft,
},
image_to_video_create_params.ImageToVideoCreateParams,
),
diff --git a/src/runwayml/resources/organization/webapp/audit_logs.py b/src/runwayml/resources/organization/webapp/audit_logs.py
index 0bce466..8ef1279 100644
--- a/src/runwayml/resources/organization/webapp/audit_logs.py
+++ b/src/runwayml/resources/organization/webapp/audit_logs.py
@@ -120,12 +120,13 @@ def list(
actions: Restrict results to these audit log actions, as a comma-separated list of up to
50 actions. Allowed values: `UserLogin`, `PasswordChanged`,
`EmailChangeRequested`, `EmailChanged`, `UserRegistered`, `UserAccountDeleted`,
- `WorkspaceCreated`, `WorkspaceDeleted`, `MemberInvited`, `MemberRemoved`,
- `MemberRoleChanged`, `InviteAccepted`, `MemberJoinedViaDomain`,
- `TeamSettingsUpdated`, `InviteLinkToggled`, `UserGroupCreated`,
- `UserGroupUpdated`, `UserGroupDeleted`, `UserGroupArchived`,
- `UserGroupRestored`, `UserGroupMemberAdded`, `UserGroupMemberRemoved`,
- `UserGroupCreditCapUpdated`, `SSOLogin`, `SSOUserProvisioned`,
+ `WorkspaceCreated`, `WorkspaceDeleted`, `MemberInvited`,
+ `MemberInviteReminderSent`, `MemberRemoved`, `MemberRoleChanged`,
+ `InviteAccepted`, `MemberJoinedViaDomain`, `TeamSettingsUpdated`,
+ `InviteLinkToggled`, `UserGroupCreated`, `UserGroupUpdated`, `UserGroupDeleted`,
+ `UserGroupArchived`, `UserGroupRestored`, `UserGroupMemberAdded`,
+ `UserGroupMemberRemoved`, `UserGroupCreditCapUpdated`,
+ `UserGroupVisibilityUpdated`, `SSOLogin`, `SSOUserProvisioned`,
`SSOConfigCreated`, `SSOUserAutoAddedToTeam`, `SSODomainRegistrationCloned`,
`AssetCreated`, `AssetUpdated`, `AssetDeleted`, `AssetDownloaded`,
`AssetShared`, `AssetUnshared`, `CommentCreated`, `CommentEdited`,
@@ -142,9 +143,14 @@ def list(
`AgentConnectorConnected`, `AgentConnectorDisconnected`,
`AgentConnectorAssetExported`, `AgentConnectorSessionEnabled`,
`AgentConnectorSessionDisabled`, `GenerationCreated`, `StudioSessionOpened`,
- `AccountLinkCreated`, `AccountLinkDeleted`, `AdConnectionAuthorizationStarted`,
- `AdConnectionConnected`, `AdAccountSelectionUpdated`, `AdAccountSyncRequested`,
- `AdConnectionDisconnected`, `OrganizationSettingsUpdated`,
+ `AppStudioAiRunOpened`, `AccountLinkCreated`, `AccountLinkDeleted`,
+ `AdConnectionAuthorizationStarted`, `AdConnectionConnected`,
+ `AdAccountSelectionUpdated`, `AdAccountSyncRequested`,
+ `AdConnectionDisconnected`, `AdWorkspaceOnboardingUpdated`,
+ `AdCreativeReviewSubmitted`, `AdCreativeReviewCancelled`,
+ `AdCreativeReviewDecided`, `AdCreativeApprovalRevoked`, `AdCreativeArchived`,
+ `AdCreativeUnarchived`, `AdPublishBatchQueued`, `AdPublishBatchCancelled`,
+ `AdPublishBatchRetried`, `OrganizationSettingsUpdated`,
`OrganizationDisabledModelsUpdated`, `OrganizationAgentSandboxUpdated`,
`OrganizationApiAccountReleased`, `OrganizationApiAccountMemberInvited`,
`OrganizationApiAccountMemberRoleChanged`,
@@ -152,7 +158,7 @@ def list(
`WorkspaceTagCreated`, `WorkspaceTagUpdated`, `WorkspaceTagDeleted`,
`WorkspaceTagAssigned`, `WorkspaceTagUnassigned`, `MeteredBillingConfigUpdated`,
`MeteredBillingRefillTriggered`, `MeteredBillingRetryTriggered`,
- `EnterpriseSpendCapEnforcementUpdated`,
+ `EnterpriseSpendCapEnforcementUpdated`, `OnboardingBonusGranted`,
`AwsMarketplaceEnterpriseSubscriptionLinked`.
actor_emails: Restrict results to entries performed by the users with these emails, as a
@@ -298,12 +304,13 @@ def list(
actions: Restrict results to these audit log actions, as a comma-separated list of up to
50 actions. Allowed values: `UserLogin`, `PasswordChanged`,
`EmailChangeRequested`, `EmailChanged`, `UserRegistered`, `UserAccountDeleted`,
- `WorkspaceCreated`, `WorkspaceDeleted`, `MemberInvited`, `MemberRemoved`,
- `MemberRoleChanged`, `InviteAccepted`, `MemberJoinedViaDomain`,
- `TeamSettingsUpdated`, `InviteLinkToggled`, `UserGroupCreated`,
- `UserGroupUpdated`, `UserGroupDeleted`, `UserGroupArchived`,
- `UserGroupRestored`, `UserGroupMemberAdded`, `UserGroupMemberRemoved`,
- `UserGroupCreditCapUpdated`, `SSOLogin`, `SSOUserProvisioned`,
+ `WorkspaceCreated`, `WorkspaceDeleted`, `MemberInvited`,
+ `MemberInviteReminderSent`, `MemberRemoved`, `MemberRoleChanged`,
+ `InviteAccepted`, `MemberJoinedViaDomain`, `TeamSettingsUpdated`,
+ `InviteLinkToggled`, `UserGroupCreated`, `UserGroupUpdated`, `UserGroupDeleted`,
+ `UserGroupArchived`, `UserGroupRestored`, `UserGroupMemberAdded`,
+ `UserGroupMemberRemoved`, `UserGroupCreditCapUpdated`,
+ `UserGroupVisibilityUpdated`, `SSOLogin`, `SSOUserProvisioned`,
`SSOConfigCreated`, `SSOUserAutoAddedToTeam`, `SSODomainRegistrationCloned`,
`AssetCreated`, `AssetUpdated`, `AssetDeleted`, `AssetDownloaded`,
`AssetShared`, `AssetUnshared`, `CommentCreated`, `CommentEdited`,
@@ -320,9 +327,14 @@ def list(
`AgentConnectorConnected`, `AgentConnectorDisconnected`,
`AgentConnectorAssetExported`, `AgentConnectorSessionEnabled`,
`AgentConnectorSessionDisabled`, `GenerationCreated`, `StudioSessionOpened`,
- `AccountLinkCreated`, `AccountLinkDeleted`, `AdConnectionAuthorizationStarted`,
- `AdConnectionConnected`, `AdAccountSelectionUpdated`, `AdAccountSyncRequested`,
- `AdConnectionDisconnected`, `OrganizationSettingsUpdated`,
+ `AppStudioAiRunOpened`, `AccountLinkCreated`, `AccountLinkDeleted`,
+ `AdConnectionAuthorizationStarted`, `AdConnectionConnected`,
+ `AdAccountSelectionUpdated`, `AdAccountSyncRequested`,
+ `AdConnectionDisconnected`, `AdWorkspaceOnboardingUpdated`,
+ `AdCreativeReviewSubmitted`, `AdCreativeReviewCancelled`,
+ `AdCreativeReviewDecided`, `AdCreativeApprovalRevoked`, `AdCreativeArchived`,
+ `AdCreativeUnarchived`, `AdPublishBatchQueued`, `AdPublishBatchCancelled`,
+ `AdPublishBatchRetried`, `OrganizationSettingsUpdated`,
`OrganizationDisabledModelsUpdated`, `OrganizationAgentSandboxUpdated`,
`OrganizationApiAccountReleased`, `OrganizationApiAccountMemberInvited`,
`OrganizationApiAccountMemberRoleChanged`,
@@ -330,7 +342,7 @@ def list(
`WorkspaceTagCreated`, `WorkspaceTagUpdated`, `WorkspaceTagDeleted`,
`WorkspaceTagAssigned`, `WorkspaceTagUnassigned`, `MeteredBillingConfigUpdated`,
`MeteredBillingRefillTriggered`, `MeteredBillingRetryTriggered`,
- `EnterpriseSpendCapEnforcementUpdated`,
+ `EnterpriseSpendCapEnforcementUpdated`, `OnboardingBonusGranted`,
`AwsMarketplaceEnterpriseSubscriptionLinked`.
actor_emails: Restrict results to entries performed by the users with these emails, as a
diff --git a/src/runwayml/resources/organization/webapp/webapp.py b/src/runwayml/resources/organization/webapp/webapp.py
index 6eda9e0..9d175a7 100644
--- a/src/runwayml/resources/organization/webapp/webapp.py
+++ b/src/runwayml/resources/organization/webapp/webapp.py
@@ -3,7 +3,7 @@
from __future__ import annotations
from typing import Union
-from datetime import datetime
+from datetime import date, datetime
import httpx
@@ -60,9 +60,9 @@ def with_streaming_response(self) -> WebappResourceWithStreamingResponse:
def list_usage(
self,
*,
- from_: Union[str, datetime],
+ from_: Union[Union[str, datetime], Union[str, date]],
limit: int,
- to: Union[str, datetime],
+ to: Union[Union[str, datetime], Union[str, date]],
cursor: str | Omit = omit,
organization_id: str | Omit = omit,
workspace_ids: str | Omit = omit,
@@ -80,11 +80,13 @@ def list_usage(
Authorized via that account link.
Args:
- from_: Start of the time window (inclusive), ISO-8601 datetime.
+ from_: Start of the time window (inclusive), ISO-8601 datetime or date. A date means
+ midnight UTC.
limit: The maximum number of items to return per page.
- to: End of the time window (exclusive), ISO-8601 datetime. A `cursor` can only
+ to: End of the time window (exclusive), ISO-8601 datetime or date. A date means
+ midnight UTC, so `to=2026-08-01` covers all of July 31. A `cursor` can only
narrow this window, never extend it past `to`.
cursor: Cursor from a previous response for fetching the next page of results.
@@ -154,9 +156,9 @@ def with_streaming_response(self) -> AsyncWebappResourceWithStreamingResponse:
def list_usage(
self,
*,
- from_: Union[str, datetime],
+ from_: Union[Union[str, datetime], Union[str, date]],
limit: int,
- to: Union[str, datetime],
+ to: Union[Union[str, datetime], Union[str, date]],
cursor: str | Omit = omit,
organization_id: str | Omit = omit,
workspace_ids: str | Omit = omit,
@@ -174,11 +176,13 @@ def list_usage(
Authorized via that account link.
Args:
- from_: Start of the time window (inclusive), ISO-8601 datetime.
+ from_: Start of the time window (inclusive), ISO-8601 datetime or date. A date means
+ midnight UTC.
limit: The maximum number of items to return per page.
- to: End of the time window (exclusive), ISO-8601 datetime. A `cursor` can only
+ to: End of the time window (exclusive), ISO-8601 datetime or date. A date means
+ midnight UTC, so `to=2026-08-01` covers all of July 31. A `cursor` can only
narrow this window, never extend it past `to`.
cursor: Cursor from a previous response for fetching the next page of results.
diff --git a/src/runwayml/resources/routers.py b/src/runwayml/resources/routers.py
index e1e310e..a37c9f4 100644
--- a/src/runwayml/resources/routers.py
+++ b/src/runwayml/resources/routers.py
@@ -162,7 +162,9 @@ def update(
settings: Nested merge: omitted settings fields keep their current values. When models is
present, omitted models.mode or models.ids are preserved (sending only
- optimizeFor does not clear the model allowlist or credit ceiling).
+ optimizeFor does not clear the model allowlist or credit ceiling). Set
+ maxCreditsPerGeneration, or one of its modalities, to null to remove those
+ credit caps.
extra_headers: Send extra headers
@@ -460,7 +462,9 @@ async def update(
settings: Nested merge: omitted settings fields keep their current values. When models is
present, omitted models.mode or models.ids are preserved (sending only
- optimizeFor does not clear the model allowlist or credit ceiling).
+ optimizeFor does not clear the model allowlist or credit ceiling). Set
+ maxCreditsPerGeneration, or one of its modalities, to null to remove those
+ credit caps.
extra_headers: Send extra headers
diff --git a/src/runwayml/resources/sound_effect.py b/src/runwayml/resources/sound_effect.py
index 57d0f6c..11afcd0 100644
--- a/src/runwayml/resources/sound_effect.py
+++ b/src/runwayml/resources/sound_effect.py
@@ -102,6 +102,51 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ duration: float,
+ model: Literal["mirelo_sfx_2_0"],
+ prompt_text: str,
+ format: Literal["mp3", "wav", "flac"] | Omit = omit,
+ negative_prompt: str | Omit = omit,
+ num_variants: int | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate sound effects from a text
+ description.
+
+ Args:
+ duration: The duration of the generated audio in seconds.
+
+ prompt_text: A description of the sound effects to generate.
+
+ format: The format of the generated audio.
+
+ negative_prompt: Sounds to avoid in the generated audio.
+
+ num_variants: The number of audio variations to generate.
+
+ seed: A seed for reproducible generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -140,11 +185,11 @@ def create(
"""
...
- @required_args(["model", "prompt_text"])
+ @required_args(["model", "prompt_text"], ["duration", "model", "prompt_text"])
def create(
self,
*,
- model: Literal["seed_audio"] | Literal["eleven_text_to_sound_v2"],
+ model: Literal["seed_audio"] | Literal["mirelo_sfx_2_0"] | Literal["eleven_text_to_sound_v2"],
prompt_text: str,
loudness_rate: int | Omit = omit,
output_format: Literal["wav", "mp3", "ogg_opus"] | Omit = omit,
@@ -153,6 +198,10 @@ def create(
sample_rate: Literal[8000, 16000, 24000, 32000, 44100, 48000] | Omit = omit,
speech_rate: int | Omit = omit,
duration: float | Omit = omit,
+ format: Literal["mp3", "wav", "flac"] | Omit = omit,
+ negative_prompt: str | Omit = omit,
+ num_variants: int | Omit = omit,
+ seed: int | Omit = omit,
loop: bool | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -174,6 +223,10 @@ def create(
"sample_rate": sample_rate,
"speech_rate": speech_rate,
"duration": duration,
+ "format": format,
+ "negative_prompt": negative_prompt,
+ "num_variants": num_variants,
+ "seed": seed,
"loop": loop,
},
sound_effect_create_params.SoundEffectCreateParams,
@@ -258,6 +311,51 @@ async def create(
"""
...
+ @overload
+ async def create(
+ self,
+ *,
+ duration: float,
+ model: Literal["mirelo_sfx_2_0"],
+ prompt_text: str,
+ format: Literal["mp3", "wav", "flac"] | Omit = omit,
+ negative_prompt: str | Omit = omit,
+ num_variants: int | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate sound effects from a text
+ description.
+
+ Args:
+ duration: The duration of the generated audio in seconds.
+
+ prompt_text: A description of the sound effects to generate.
+
+ format: The format of the generated audio.
+
+ negative_prompt: Sounds to avoid in the generated audio.
+
+ num_variants: The number of audio variations to generate.
+
+ seed: A seed for reproducible generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
async def create(
self,
@@ -296,11 +394,11 @@ async def create(
"""
...
- @required_args(["model", "prompt_text"])
+ @required_args(["model", "prompt_text"], ["duration", "model", "prompt_text"])
async def create(
self,
*,
- model: Literal["seed_audio"] | Literal["eleven_text_to_sound_v2"],
+ model: Literal["seed_audio"] | Literal["mirelo_sfx_2_0"] | Literal["eleven_text_to_sound_v2"],
prompt_text: str,
loudness_rate: int | Omit = omit,
output_format: Literal["wav", "mp3", "ogg_opus"] | Omit = omit,
@@ -309,6 +407,10 @@ async def create(
sample_rate: Literal[8000, 16000, 24000, 32000, 44100, 48000] | Omit = omit,
speech_rate: int | Omit = omit,
duration: float | Omit = omit,
+ format: Literal["mp3", "wav", "flac"] | Omit = omit,
+ negative_prompt: str | Omit = omit,
+ num_variants: int | Omit = omit,
+ seed: int | Omit = omit,
loop: bool | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -330,6 +432,10 @@ async def create(
"sample_rate": sample_rate,
"speech_rate": speech_rate,
"duration": duration,
+ "format": format,
+ "negative_prompt": negative_prompt,
+ "num_variants": num_variants,
+ "seed": seed,
"loop": loop,
},
sound_effect_create_params.SoundEffectCreateParams,
diff --git a/src/runwayml/resources/tasks.py b/src/runwayml/resources/tasks.py
index 22ca86a..4f5a303 100644
--- a/src/runwayml/resources/tasks.py
+++ b/src/runwayml/resources/tasks.py
@@ -102,6 +102,13 @@ def delete(
Tasks that are running, pending, or throttled can be canceled by invoking this
method. Invoking this method for other tasks will delete them.
+ Refund eligibility is based on the task status observed by the server during
+ cancellation. If that check observes RUNNING, cancellation does not refund
+ credits. Task execution can advance concurrently with cancellation, so neither a
+ refund nor successful cancellation guarantees that generation stops. A prior GET
+ response reporting PENDING or THROTTLED does not guarantee a refund. Deleting a
+ completed task does not refund its charge.
+
The output data associated with a deleted task will be deleted from persistent
storage in accordance with our data retention policy. Aborted and deleted tasks
will not be able to be fetched again in the future.
@@ -202,6 +209,13 @@ async def delete(
Tasks that are running, pending, or throttled can be canceled by invoking this
method. Invoking this method for other tasks will delete them.
+ Refund eligibility is based on the task status observed by the server during
+ cancellation. If that check observes RUNNING, cancellation does not refund
+ credits. Task execution can advance concurrently with cancellation, so neither a
+ refund nor successful cancellation guarantees that generation stops. A prior GET
+ response reporting PENDING or THROTTLED does not guarantee a refund. Deleting a
+ completed task does not refund its charge.
+
The output data associated with a deleted task will be deleted from persistent
storage in accordance with our data retention policy. Aborted and deleted tasks
will not be able to be fetched again in the future.
diff --git a/src/runwayml/resources/text_to_image.py b/src/runwayml/resources/text_to_image.py
index 7fa9d1e..8c4816e 100644
--- a/src/runwayml/resources/text_to_image.py
+++ b/src/runwayml/resources/text_to_image.py
@@ -8,7 +8,7 @@
import httpx
from ..types import text_to_image_create_params
-from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
+from .._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given
from .._utils import required_args, maybe_transform, async_maybe_transform
from .._compat import cached_property
from .._resource import SyncAPIResource, AsyncAPIResource
@@ -627,6 +627,59 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["gemini_image3.1_flash_lite"],
+ prompt_text: str,
+ ratio: Literal[
+ "1024:1024",
+ "848:1264",
+ "1264:848",
+ "896:1200",
+ "1200:896",
+ "928:1152",
+ "1152:928",
+ "768:1376",
+ "1376:768",
+ "1584:672",
+ ],
+ output_count: Literal[1, 4] | Omit = omit,
+ reference_images: Iterable[text_to_image_create_params.GeminiImage3_1FlashLiteReferenceImage] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: This should describe in detail what should appear in the output.
+
+ ratio: The resolution of the output image.
+
+ output_count: The number of images to generate. Increasing this number will affect the number
+ of credits consumed by the generation. Up to four images can be generated at
+ once.
+
+ reference_images: An array of up to 14 images to be used as references for the generated image
+ output. Up to five can pass `subject: "human"` and up to nine can pass
+ `subject: "object"`.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -863,6 +916,127 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["bria_fibo_1_5"],
+ prompt_text: str,
+ ratio: Literal[
+ "1024:1024",
+ "768:1152",
+ "1152:768",
+ "768:1024",
+ "1024:768",
+ "768:960",
+ "960:768",
+ "576:1024",
+ "1024:576",
+ "2048:2048",
+ "1536:2304",
+ "2304:1536",
+ "1536:2048",
+ "2048:1536",
+ "1536:1920",
+ "1920:1536",
+ "1152:2048",
+ "2048:1152",
+ ],
+ output_format: Literal["png", "jpeg"] | Omit = omit,
+ reference_images: Iterable[text_to_image_create_params.BriaFibo1_5ReferenceImage] | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: A non-empty text prompt describing what should appear in the output image.
+
+ ratio: The resolution of the output image, expressed as `:`. 1MP sizes
+ cost 5 credits per image and 4MP sizes 10.
+
+ output_format: The file format of the output image. Defaults to png.
+
+ reference_images: Up to 1 image to guide the generation. The prompt describes how the output
+ should build on it.
+
+ seed: If unspecified, a random number is chosen. Using the same seed with an identical
+ request reproduces the same image.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["bria_fibo_edit_1_5"],
+ prompt_text: str,
+ output_format: Literal["png", "jpeg"] | Omit = omit,
+ ratio: Literal[
+ "1024:1024",
+ "768:1152",
+ "1152:768",
+ "768:1024",
+ "1024:768",
+ "768:960",
+ "960:768",
+ "576:1024",
+ "1024:576",
+ "auto",
+ ]
+ | Omit = omit,
+ reference_images: Iterable[text_to_image_create_params.BriaFiboEdit1_5ReferenceImage] | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: An instruction describing how to edit the reference images.
+
+ output_format: The file format of the output image. Defaults to png.
+
+ ratio: The resolution of the output image, expressed as `:`. Omit it or
+ use `auto` to keep the framing of the first reference image. Choosing a size
+ requires at least 2 reference images; a single image always keeps its own
+ framing.
+
+ reference_images: 1 to 4 images to edit. With several, the instruction describes how to combine
+ them.
+
+ seed: If unspecified, a random number is chosen. Using the same seed with an identical
+ request reproduces the same image.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -1006,6 +1180,257 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["seedream5_flash"],
+ prompt_text: str,
+ ratio: Literal[
+ "1024:1024",
+ "1184:896",
+ "896:1184",
+ "1376:768",
+ "768:1376",
+ "1248:832",
+ "832:1248",
+ "1568:672",
+ "2048:2048",
+ "2304:1728",
+ "1728:2304",
+ "2848:1600",
+ "1600:2848",
+ "2496:1664",
+ "1664:2496",
+ "3136:1344",
+ "auto_1k",
+ "auto_2k",
+ ],
+ output_count: int | Omit = omit,
+ output_format: Literal["png", "jpeg"] | Omit = omit,
+ reference_images: Iterable[text_to_image_create_params.Seedream5FlashReferenceImage] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: A description of the image you want to generate.
+
+ ratio: The resolution of the output image, expressed as `:`. Use
+ `auto_1k` or `auto_2k` to let the model pick the aspect ratio at a fixed
+ resolution tier.
+
+ output_count: The number of images to generate. Increasing this number will affect the number
+ of credits consumed by the generation.
+
+ output_format: The file format of the output image. Defaults to png.
+
+ reference_images: Images to edit or combine. Refer to them in the prompt by upload order (Figure
+ 1, Figure 2, and so on).
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["nano_banana_2.1"],
+ prompt_text: str,
+ ratio: Literal[
+ "1024:1024",
+ "848:1264",
+ "1264:848",
+ "896:1200",
+ "1200:896",
+ "928:1152",
+ "1152:928",
+ "768:1376",
+ "1376:768",
+ "1584:672",
+ "512:2064",
+ "2064:512",
+ "352:2928",
+ "2928:352",
+ "2048:2048",
+ "1696:2528",
+ "2528:1696",
+ "1792:2400",
+ "2400:1792",
+ "1856:2304",
+ "2304:1856",
+ "1536:2752",
+ "2752:1536",
+ "3168:1344",
+ "1024:4128",
+ "4128:1024",
+ "704:5856",
+ "5856:704",
+ "4096:4096",
+ "3392:5056",
+ "5056:3392",
+ "3584:4800",
+ "4800:3584",
+ "3712:4608",
+ "4608:3712",
+ "3072:5504",
+ "5504:3072",
+ "6336:2688",
+ "2048:8256",
+ "8256:2048",
+ "1408:11712",
+ "11712:1408",
+ ],
+ output_count: int | Omit = omit,
+ reference_images: Iterable[text_to_image_create_params.NanoBanana2_1ReferenceImage] | Omit = omit,
+ thinking_level: Literal["minimal", "medium", "high"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: A description of the image you want to generate.
+
+ ratio: The resolution of the output image.
+
+ output_count: The number of images to generate. Increasing this number will affect the number
+ of credits consumed by the generation.
+
+ reference_images: Up to 14 images to edit, combine, or use as references for the output.
+
+ thinking_level: How much the model reasons about the prompt before generating. Defaults to
+ medium.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["recraft_v4_1_flash"],
+ prompt_text: str,
+ ratio: Literal[
+ "1024:1024",
+ "1536:768",
+ "768:1536",
+ "1280:832",
+ "832:1280",
+ "1216:896",
+ "896:1216",
+ "1152:896",
+ "896:1152",
+ "832:1344",
+ "1280:896",
+ "896:1280",
+ "1344:768",
+ "768:1344",
+ ],
+ background_color: str | Omit = omit,
+ colors: SequenceNotStr[str] | Omit = omit,
+ output_count: int | Omit = omit,
+ output_format: Literal["webp", "png"] | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: A description of the image you want to generate.
+
+ ratio: The output dimensions, expressed as `:`.
+
+ background_color: A preferred background color as a six-digit hex string.
+
+ colors: Preferred colors as six-digit hex strings.
+
+ output_count: The number of images to generate. Each image is billed separately.
+
+ output_format: The output file format. Defaults to webp.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["recraft_v4_1_vector"],
+ prompt_text: str,
+ background_color: str | Omit = omit,
+ colors: SequenceNotStr[str] | Omit = omit,
+ ratio: Literal["1024:1024", "1216:896", "896:1216", "1344:768", "768:1344"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: Describe the vector illustration you want to generate.
+
+ background_color: The preferred background color as a six-digit hex value. This is a generation
+ hint, not an exact color constraint; the generated background may use a
+ different shade.
+
+ colors: Preferred colors as six-digit hex values, such as #FF8800.
+
+ ratio: The width and height declared by the output SVG. Vector artwork can be scaled
+ after generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -1069,11 +1494,18 @@ def create(
| Literal["seedream5_pro"]
| Literal["seedream5_lite"]
| Literal["grok_imagine_image_2"]
+ | Literal["gemini_image3.1_flash_lite"]
| Literal["gemini_image3_pro"]
| Literal["gpt_image_2_5_flare"]
| Literal["gpt_image_2_5_sunburst"]
+ | Literal["bria_fibo_1_5"]
+ | Literal["bria_fibo_edit_1_5"]
| Literal["ideogram_4_0"]
| Literal["ideogram_4_5"]
+ | Literal["seedream5_flash"]
+ | Literal["nano_banana_2.1"]
+ | Literal["recraft_v4_1_flash"]
+ | Literal["recraft_v4_1_vector"]
| Literal["gemini_2.5_flash"],
prompt_text: str,
ratio: Literal[
@@ -1265,6 +1697,18 @@ def create(
"auto_1k",
"auto_2k",
]
+ | Literal[
+ "1024:1024",
+ "848:1264",
+ "1264:848",
+ "896:1200",
+ "1200:896",
+ "928:1152",
+ "1152:928",
+ "768:1376",
+ "1376:768",
+ "1584:672",
+ ]
| Literal[
"1344:768",
"768:1344",
@@ -1297,6 +1741,38 @@ def create(
"5504:3072",
"6336:2688",
]
+ | Literal[
+ "1024:1024",
+ "768:1152",
+ "1152:768",
+ "768:1024",
+ "1024:768",
+ "768:960",
+ "960:768",
+ "576:1024",
+ "1024:576",
+ "2048:2048",
+ "1536:2304",
+ "2304:1536",
+ "1536:2048",
+ "2048:1536",
+ "1536:1920",
+ "1920:1536",
+ "1152:2048",
+ "2048:1152",
+ ]
+ | Literal[
+ "1024:1024",
+ "768:1152",
+ "1152:768",
+ "768:1024",
+ "1024:768",
+ "768:960",
+ "960:768",
+ "576:1024",
+ "1024:576",
+ "auto",
+ ]
| Literal[
"2048:2048",
"2560:1440",
@@ -1337,6 +1813,87 @@ def create(
"704:1408",
"auto",
]
+ | Literal[
+ "1024:1024",
+ "1184:896",
+ "896:1184",
+ "1376:768",
+ "768:1376",
+ "1248:832",
+ "832:1248",
+ "1568:672",
+ "2048:2048",
+ "2304:1728",
+ "1728:2304",
+ "2848:1600",
+ "1600:2848",
+ "2496:1664",
+ "1664:2496",
+ "3136:1344",
+ "auto_1k",
+ "auto_2k",
+ ]
+ | Literal[
+ "1024:1024",
+ "848:1264",
+ "1264:848",
+ "896:1200",
+ "1200:896",
+ "928:1152",
+ "1152:928",
+ "768:1376",
+ "1376:768",
+ "1584:672",
+ "512:2064",
+ "2064:512",
+ "352:2928",
+ "2928:352",
+ "2048:2048",
+ "1696:2528",
+ "2528:1696",
+ "1792:2400",
+ "2400:1792",
+ "1856:2304",
+ "2304:1856",
+ "1536:2752",
+ "2752:1536",
+ "3168:1344",
+ "1024:4128",
+ "4128:1024",
+ "704:5856",
+ "5856:704",
+ "4096:4096",
+ "3392:5056",
+ "5056:3392",
+ "3584:4800",
+ "4800:3584",
+ "3712:4608",
+ "4608:3712",
+ "3072:5504",
+ "5504:3072",
+ "6336:2688",
+ "2048:8256",
+ "8256:2048",
+ "1408:11712",
+ "11712:1408",
+ ]
+ | Literal[
+ "1024:1024",
+ "1536:768",
+ "768:1536",
+ "1280:832",
+ "832:1280",
+ "1216:896",
+ "896:1216",
+ "1152:896",
+ "896:1152",
+ "832:1344",
+ "1280:896",
+ "896:1280",
+ "1344:768",
+ "768:1344",
+ ]
+ | Literal["1024:1024", "1216:896", "896:1216", "1344:768", "768:1344"]
| Literal[
"1344:768",
"768:1344",
@@ -1358,11 +1915,16 @@ def create(
| Iterable[text_to_image_create_params.Seedream5ProReferenceImage]
| Iterable[text_to_image_create_params.Seedream5LiteReferenceImage]
| Iterable[text_to_image_create_params.GrokImagineImage2ReferenceImage]
+ | Iterable[text_to_image_create_params.GeminiImage3_1FlashLiteReferenceImage]
| Iterable[text_to_image_create_params.GeminiImage3ProReferenceImage]
| Iterable[text_to_image_create_params.GptImage2_5FlareReferenceImage]
| Iterable[text_to_image_create_params.GptImage2_5SunburstReferenceImage]
+ | Iterable[text_to_image_create_params.BriaFibo1_5ReferenceImage]
+ | Iterable[text_to_image_create_params.BriaFiboEdit1_5ReferenceImage]
| Iterable[text_to_image_create_params.Ideogram4_0ReferenceImage]
| Iterable[text_to_image_create_params.Ideogram4_5ReferenceImage]
+ | Iterable[text_to_image_create_params.Seedream5FlashReferenceImage]
+ | Iterable[text_to_image_create_params.NanoBanana2_1ReferenceImage]
| Iterable[text_to_image_create_params.Gemini2_5FlashReferenceImage]
| Omit = omit,
content_moderation: text_to_image_create_params.Gen4ImageTurboContentModeration
@@ -1377,11 +1939,14 @@ def create(
| Literal["low", "medium", "high"]
| Literal["very_low", "low", "medium", "high"]
| Omit = omit,
- output_format: Literal["webp", "png", "jpeg"] | Literal["png", "jpeg"] | Omit = omit,
+ output_format: Literal["webp", "png", "jpeg"] | Literal["png", "jpeg"] | Literal["webp", "png"] | Omit = omit,
grounding: bool | Omit = omit,
edit: bool | Omit = omit,
mask_uri: str | Omit = omit,
precise_edit: bool | Omit = omit,
+ thinking_level: Literal["minimal", "medium", "high"] | Omit = omit,
+ background_color: str | Omit = omit,
+ colors: SequenceNotStr[str] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -1407,6 +1972,9 @@ def create(
"edit": edit,
"mask_uri": mask_uri,
"precise_edit": precise_edit,
+ "thinking_level": thinking_level,
+ "background_color": background_color,
+ "colors": colors,
},
text_to_image_create_params.TextToImageCreateParams,
),
@@ -2014,6 +2582,59 @@ async def create(
"""
...
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["gemini_image3.1_flash_lite"],
+ prompt_text: str,
+ ratio: Literal[
+ "1024:1024",
+ "848:1264",
+ "1264:848",
+ "896:1200",
+ "1200:896",
+ "928:1152",
+ "1152:928",
+ "768:1376",
+ "1376:768",
+ "1584:672",
+ ],
+ output_count: Literal[1, 4] | Omit = omit,
+ reference_images: Iterable[text_to_image_create_params.GeminiImage3_1FlashLiteReferenceImage] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: This should describe in detail what should appear in the output.
+
+ ratio: The resolution of the output image.
+
+ output_count: The number of images to generate. Increasing this number will affect the number
+ of credits consumed by the generation. Up to four images can be generated at
+ once.
+
+ reference_images: An array of up to 14 images to be used as references for the generated image
+ output. Up to five can pass `subject: "human"` and up to nine can pass
+ `subject: "object"`.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
async def create(
self,
@@ -2234,11 +2855,132 @@ async def create(
output_count: The number of images to generate (1-10). Increasing this number will affect the
number of credits consumed by the generation.
- quality: Rendering quality. Higher qualities consume more credits. Defaults to `high`.
+ quality: Rendering quality. Higher qualities consume more credits. Defaults to `high`.
+
+ reference_images: An array of up to 16 images to be used as references for the generated image
+ output. No two images may share the same tag. Each reference image adds 1 credit
+ per generated image.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["bria_fibo_1_5"],
+ prompt_text: str,
+ ratio: Literal[
+ "1024:1024",
+ "768:1152",
+ "1152:768",
+ "768:1024",
+ "1024:768",
+ "768:960",
+ "960:768",
+ "576:1024",
+ "1024:576",
+ "2048:2048",
+ "1536:2304",
+ "2304:1536",
+ "1536:2048",
+ "2048:1536",
+ "1536:1920",
+ "1920:1536",
+ "1152:2048",
+ "2048:1152",
+ ],
+ output_format: Literal["png", "jpeg"] | Omit = omit,
+ reference_images: Iterable[text_to_image_create_params.BriaFibo1_5ReferenceImage] | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: A non-empty text prompt describing what should appear in the output image.
+
+ ratio: The resolution of the output image, expressed as `:`. 1MP sizes
+ cost 5 credits per image and 4MP sizes 10.
+
+ output_format: The file format of the output image. Defaults to png.
+
+ reference_images: Up to 1 image to guide the generation. The prompt describes how the output
+ should build on it.
+
+ seed: If unspecified, a random number is chosen. Using the same seed with an identical
+ request reproduces the same image.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["bria_fibo_edit_1_5"],
+ prompt_text: str,
+ output_format: Literal["png", "jpeg"] | Omit = omit,
+ ratio: Literal[
+ "1024:1024",
+ "768:1152",
+ "1152:768",
+ "768:1024",
+ "1024:768",
+ "768:960",
+ "960:768",
+ "576:1024",
+ "1024:576",
+ "auto",
+ ]
+ | Omit = omit,
+ reference_images: Iterable[text_to_image_create_params.BriaFiboEdit1_5ReferenceImage] | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: An instruction describing how to edit the reference images.
+
+ output_format: The file format of the output image. Defaults to png.
+
+ ratio: The resolution of the output image, expressed as `:`. Omit it or
+ use `auto` to keep the framing of the first reference image. Choosing a size
+ requires at least 2 reference images; a single image always keeps its own
+ framing.
+
+ reference_images: 1 to 4 images to edit. With several, the instruction describes how to combine
+ them.
- reference_images: An array of up to 16 images to be used as references for the generated image
- output. No two images may share the same tag. Each reference image adds 1 credit
- per generated image.
+ seed: If unspecified, a random number is chosen. Using the same seed with an identical
+ request reproduces the same image.
extra_headers: Send extra headers
@@ -2393,6 +3135,257 @@ async def create(
"""
...
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["seedream5_flash"],
+ prompt_text: str,
+ ratio: Literal[
+ "1024:1024",
+ "1184:896",
+ "896:1184",
+ "1376:768",
+ "768:1376",
+ "1248:832",
+ "832:1248",
+ "1568:672",
+ "2048:2048",
+ "2304:1728",
+ "1728:2304",
+ "2848:1600",
+ "1600:2848",
+ "2496:1664",
+ "1664:2496",
+ "3136:1344",
+ "auto_1k",
+ "auto_2k",
+ ],
+ output_count: int | Omit = omit,
+ output_format: Literal["png", "jpeg"] | Omit = omit,
+ reference_images: Iterable[text_to_image_create_params.Seedream5FlashReferenceImage] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: A description of the image you want to generate.
+
+ ratio: The resolution of the output image, expressed as `:`. Use
+ `auto_1k` or `auto_2k` to let the model pick the aspect ratio at a fixed
+ resolution tier.
+
+ output_count: The number of images to generate. Increasing this number will affect the number
+ of credits consumed by the generation.
+
+ output_format: The file format of the output image. Defaults to png.
+
+ reference_images: Images to edit or combine. Refer to them in the prompt by upload order (Figure
+ 1, Figure 2, and so on).
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["nano_banana_2.1"],
+ prompt_text: str,
+ ratio: Literal[
+ "1024:1024",
+ "848:1264",
+ "1264:848",
+ "896:1200",
+ "1200:896",
+ "928:1152",
+ "1152:928",
+ "768:1376",
+ "1376:768",
+ "1584:672",
+ "512:2064",
+ "2064:512",
+ "352:2928",
+ "2928:352",
+ "2048:2048",
+ "1696:2528",
+ "2528:1696",
+ "1792:2400",
+ "2400:1792",
+ "1856:2304",
+ "2304:1856",
+ "1536:2752",
+ "2752:1536",
+ "3168:1344",
+ "1024:4128",
+ "4128:1024",
+ "704:5856",
+ "5856:704",
+ "4096:4096",
+ "3392:5056",
+ "5056:3392",
+ "3584:4800",
+ "4800:3584",
+ "3712:4608",
+ "4608:3712",
+ "3072:5504",
+ "5504:3072",
+ "6336:2688",
+ "2048:8256",
+ "8256:2048",
+ "1408:11712",
+ "11712:1408",
+ ],
+ output_count: int | Omit = omit,
+ reference_images: Iterable[text_to_image_create_params.NanoBanana2_1ReferenceImage] | Omit = omit,
+ thinking_level: Literal["minimal", "medium", "high"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: A description of the image you want to generate.
+
+ ratio: The resolution of the output image.
+
+ output_count: The number of images to generate. Increasing this number will affect the number
+ of credits consumed by the generation.
+
+ reference_images: Up to 14 images to edit, combine, or use as references for the output.
+
+ thinking_level: How much the model reasons about the prompt before generating. Defaults to
+ medium.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["recraft_v4_1_flash"],
+ prompt_text: str,
+ ratio: Literal[
+ "1024:1024",
+ "1536:768",
+ "768:1536",
+ "1280:832",
+ "832:1280",
+ "1216:896",
+ "896:1216",
+ "1152:896",
+ "896:1152",
+ "832:1344",
+ "1280:896",
+ "896:1280",
+ "1344:768",
+ "768:1344",
+ ],
+ background_color: str | Omit = omit,
+ colors: SequenceNotStr[str] | Omit = omit,
+ output_count: int | Omit = omit,
+ output_format: Literal["webp", "png"] | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: A description of the image you want to generate.
+
+ ratio: The output dimensions, expressed as `:`.
+
+ background_color: A preferred background color as a six-digit hex string.
+
+ colors: Preferred colors as six-digit hex strings.
+
+ output_count: The number of images to generate. Each image is billed separately.
+
+ output_format: The output file format. Defaults to webp.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["recraft_v4_1_vector"],
+ prompt_text: str,
+ background_color: str | Omit = omit,
+ colors: SequenceNotStr[str] | Omit = omit,
+ ratio: Literal["1024:1024", "1216:896", "896:1216", "1344:768", "768:1344"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate images from text and/or image(s)
+
+ Args:
+ prompt_text: Describe the vector illustration you want to generate.
+
+ background_color: The preferred background color as a six-digit hex value. This is a generation
+ hint, not an exact color constraint; the generated background may use a
+ different shade.
+
+ colors: Preferred colors as six-digit hex values, such as #FF8800.
+
+ ratio: The width and height declared by the output SVG. Vector artwork can be scaled
+ after generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
async def create(
self,
@@ -2456,11 +3449,18 @@ async def create(
| Literal["seedream5_pro"]
| Literal["seedream5_lite"]
| Literal["grok_imagine_image_2"]
+ | Literal["gemini_image3.1_flash_lite"]
| Literal["gemini_image3_pro"]
| Literal["gpt_image_2_5_flare"]
| Literal["gpt_image_2_5_sunburst"]
+ | Literal["bria_fibo_1_5"]
+ | Literal["bria_fibo_edit_1_5"]
| Literal["ideogram_4_0"]
| Literal["ideogram_4_5"]
+ | Literal["seedream5_flash"]
+ | Literal["nano_banana_2.1"]
+ | Literal["recraft_v4_1_flash"]
+ | Literal["recraft_v4_1_vector"]
| Literal["gemini_2.5_flash"],
prompt_text: str,
ratio: Literal[
@@ -2652,6 +3652,18 @@ async def create(
"auto_1k",
"auto_2k",
]
+ | Literal[
+ "1024:1024",
+ "848:1264",
+ "1264:848",
+ "896:1200",
+ "1200:896",
+ "928:1152",
+ "1152:928",
+ "768:1376",
+ "1376:768",
+ "1584:672",
+ ]
| Literal[
"1344:768",
"768:1344",
@@ -2684,6 +3696,38 @@ async def create(
"5504:3072",
"6336:2688",
]
+ | Literal[
+ "1024:1024",
+ "768:1152",
+ "1152:768",
+ "768:1024",
+ "1024:768",
+ "768:960",
+ "960:768",
+ "576:1024",
+ "1024:576",
+ "2048:2048",
+ "1536:2304",
+ "2304:1536",
+ "1536:2048",
+ "2048:1536",
+ "1536:1920",
+ "1920:1536",
+ "1152:2048",
+ "2048:1152",
+ ]
+ | Literal[
+ "1024:1024",
+ "768:1152",
+ "1152:768",
+ "768:1024",
+ "1024:768",
+ "768:960",
+ "960:768",
+ "576:1024",
+ "1024:576",
+ "auto",
+ ]
| Literal[
"2048:2048",
"2560:1440",
@@ -2724,6 +3768,87 @@ async def create(
"704:1408",
"auto",
]
+ | Literal[
+ "1024:1024",
+ "1184:896",
+ "896:1184",
+ "1376:768",
+ "768:1376",
+ "1248:832",
+ "832:1248",
+ "1568:672",
+ "2048:2048",
+ "2304:1728",
+ "1728:2304",
+ "2848:1600",
+ "1600:2848",
+ "2496:1664",
+ "1664:2496",
+ "3136:1344",
+ "auto_1k",
+ "auto_2k",
+ ]
+ | Literal[
+ "1024:1024",
+ "848:1264",
+ "1264:848",
+ "896:1200",
+ "1200:896",
+ "928:1152",
+ "1152:928",
+ "768:1376",
+ "1376:768",
+ "1584:672",
+ "512:2064",
+ "2064:512",
+ "352:2928",
+ "2928:352",
+ "2048:2048",
+ "1696:2528",
+ "2528:1696",
+ "1792:2400",
+ "2400:1792",
+ "1856:2304",
+ "2304:1856",
+ "1536:2752",
+ "2752:1536",
+ "3168:1344",
+ "1024:4128",
+ "4128:1024",
+ "704:5856",
+ "5856:704",
+ "4096:4096",
+ "3392:5056",
+ "5056:3392",
+ "3584:4800",
+ "4800:3584",
+ "3712:4608",
+ "4608:3712",
+ "3072:5504",
+ "5504:3072",
+ "6336:2688",
+ "2048:8256",
+ "8256:2048",
+ "1408:11712",
+ "11712:1408",
+ ]
+ | Literal[
+ "1024:1024",
+ "1536:768",
+ "768:1536",
+ "1280:832",
+ "832:1280",
+ "1216:896",
+ "896:1216",
+ "1152:896",
+ "896:1152",
+ "832:1344",
+ "1280:896",
+ "896:1280",
+ "1344:768",
+ "768:1344",
+ ]
+ | Literal["1024:1024", "1216:896", "896:1216", "1344:768", "768:1344"]
| Literal[
"1344:768",
"768:1344",
@@ -2745,11 +3870,16 @@ async def create(
| Iterable[text_to_image_create_params.Seedream5ProReferenceImage]
| Iterable[text_to_image_create_params.Seedream5LiteReferenceImage]
| Iterable[text_to_image_create_params.GrokImagineImage2ReferenceImage]
+ | Iterable[text_to_image_create_params.GeminiImage3_1FlashLiteReferenceImage]
| Iterable[text_to_image_create_params.GeminiImage3ProReferenceImage]
| Iterable[text_to_image_create_params.GptImage2_5FlareReferenceImage]
| Iterable[text_to_image_create_params.GptImage2_5SunburstReferenceImage]
+ | Iterable[text_to_image_create_params.BriaFibo1_5ReferenceImage]
+ | Iterable[text_to_image_create_params.BriaFiboEdit1_5ReferenceImage]
| Iterable[text_to_image_create_params.Ideogram4_0ReferenceImage]
| Iterable[text_to_image_create_params.Ideogram4_5ReferenceImage]
+ | Iterable[text_to_image_create_params.Seedream5FlashReferenceImage]
+ | Iterable[text_to_image_create_params.NanoBanana2_1ReferenceImage]
| Iterable[text_to_image_create_params.Gemini2_5FlashReferenceImage]
| Omit = omit,
content_moderation: text_to_image_create_params.Gen4ImageTurboContentModeration
@@ -2764,11 +3894,14 @@ async def create(
| Literal["low", "medium", "high"]
| Literal["very_low", "low", "medium", "high"]
| Omit = omit,
- output_format: Literal["webp", "png", "jpeg"] | Literal["png", "jpeg"] | Omit = omit,
+ output_format: Literal["webp", "png", "jpeg"] | Literal["png", "jpeg"] | Literal["webp", "png"] | Omit = omit,
grounding: bool | Omit = omit,
edit: bool | Omit = omit,
mask_uri: str | Omit = omit,
precise_edit: bool | Omit = omit,
+ thinking_level: Literal["minimal", "medium", "high"] | Omit = omit,
+ background_color: str | Omit = omit,
+ colors: SequenceNotStr[str] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -2794,6 +3927,9 @@ async def create(
"edit": edit,
"mask_uri": mask_uri,
"precise_edit": precise_edit,
+ "thinking_level": thinking_level,
+ "background_color": background_color,
+ "colors": colors,
},
text_to_image_create_params.TextToImageCreateParams,
),
diff --git a/src/runwayml/resources/text_to_video.py b/src/runwayml/resources/text_to_video.py
index ecbb4f3..a373e9d 100644
--- a/src/runwayml/resources/text_to_video.py
+++ b/src/runwayml/resources/text_to_video.py
@@ -238,6 +238,47 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["klingO3_4k"],
+ ratio: Literal["3840:2160", "2160:3840", "2880:2880"],
+ audio: bool | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: text_to_video_create_params.KlingO3_4kProviderSettings | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ ratio: The resolution of the output video.
+
+ audio: Whether to generate audio for the video.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -293,6 +334,51 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["kling3.0_4k"],
+ ratio: Literal["3840:2160", "2160:3840", "2880:2880"],
+ audio: bool | Omit = omit,
+ cfg_scale: float | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: text_to_video_create_params.Kling3_0_4kProviderSettings | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ ratio: The resolution of the output video.
+
+ audio: Whether to generate audio for the video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -341,6 +427,215 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["kling2.5_turbo_pro"],
+ prompt_text: str,
+ cfg_scale: float | Omit = omit,
+ duration: Literal[5, 10] | Omit = omit,
+ ratio: Literal["1920:1080", "1440:1440", "1080:1920", "1280:720", "720:720", "720:1280"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
+
+ duration: The duration of the output video in seconds. Defaults to 5.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["kling3.0_pro"],
+ ratio: Literal["1920:1080", "1080:1920", "1440:1440"],
+ audio: bool | Omit = omit,
+ cfg_scale: float | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: text_to_video_create_params.Kling3_0ProProviderSettings | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ ratio: The resolution of the output video.
+
+ audio: Whether to generate audio for the video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["kling3.0_standard"],
+ ratio: Literal["1280:720", "720:1280", "960:960"],
+ audio: bool | Omit = omit,
+ cfg_scale: float | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: text_to_video_create_params.Kling3_0StandardProviderSettings | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ ratio: The resolution of the output video.
+
+ audio: Whether to generate audio for the video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["klingO3_pro"],
+ ratio: Literal["1920:1080", "1080:1920", "1440:1440"],
+ audio: bool | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: text_to_video_create_params.KlingO3ProProviderSettings | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ ratio: The resolution of the output video.
+
+ audio: Whether to generate audio for the video.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["klingO3_standard"],
+ ratio: Literal["1280:720", "720:1280", "960:960"],
+ audio: bool | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: text_to_video_create_params.KlingO3StandardProviderSettings | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ ratio: The resolution of the output video.
+
+ audio: Whether to generate audio for the video.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -610,85 +905,6 @@ def create(
"""
...
- @overload
- def create(
- self,
- *,
- model: Literal["seedance2_5"],
- audio: bool | Omit = omit,
- duration: Union[int, Literal["auto"]] | Omit = omit,
- prompt_text: str | Omit = omit,
- ratio: Literal[
- "992:432",
- "854:480",
- "752:560",
- "640:640",
- "560:752",
- "480:854",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- "2206:946",
- "1920:1080",
- "1664:1248",
- "1440:1440",
- "1248:1664",
- "1080:1920",
- ]
- | Omit = omit,
- reference_audio: Iterable[text_to_video_create_params.Seedance2_5ReferenceAudio] | Omit = omit,
- references: Iterable[text_to_video_create_params.Seedance2_5Reference] | Omit = omit,
- reference_videos: Iterable[text_to_video_create_params.Seedance2_5ReferenceVideo] | 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.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> NewTaskCreatedResponse:
- """
- This endpoint will start a new task to generate a video from a text prompt.
-
- Args:
- audio: Whether to generate audio for the video.
-
- duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
- billed at the variant maximum up front; unused credits are refunded after the
- generation finishes.
-
- prompt_text: An optional text prompt up to 15000 characters describing what should appear in
- the output.
-
- ratio: The resolution of the output video. Seedance 2.5 supports 480p, 720p, and 1080p.
-
- reference_audio: An optional array of audio references. The total combined duration must be less
- than 30 seconds.
-
- references: An optional array of image references (up to 30). See
- [our docs](/assets/inputs#images) on image inputs for more information.
-
- reference_videos: An optional array of video references. The combined duration across all video
- references must not exceed 30 seconds. See [our docs](/assets/inputs#videos) on
- video inputs for more information.
-
- 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
- integer for an identical request will produce similar results.
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- ...
-
@overload
def create(
self,
@@ -966,6 +1182,101 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["seedance2_5"],
+ audio: bool | Omit = omit,
+ draft: bool | Omit = omit,
+ draft_task_id: str | Omit = omit,
+ duration: Union[int, Literal["auto"]] | Omit = omit,
+ output_format: Literal["mp4", "mov"] | Omit = omit,
+ prompt_text: str | Omit = omit,
+ ratio: Literal[
+ "992:432",
+ "854:480",
+ "752:560",
+ "640:640",
+ "560:752",
+ "480:854",
+ "1470:630",
+ "1280:720",
+ "1112:834",
+ "960:960",
+ "834:1112",
+ "720:1280",
+ "2206:946",
+ "1920:1080",
+ "1664:1248",
+ "1440:1440",
+ "1248:1664",
+ "1080:1920",
+ ]
+ | Omit = omit,
+ reference_audio: Iterable[text_to_video_create_params.Seedance2_5ReferenceAudio] | Omit = omit,
+ references: Iterable[text_to_video_create_params.Seedance2_5Reference] | Omit = omit,
+ reference_videos: Iterable[text_to_video_create_params.Seedance2_5ReferenceVideo] | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ audio: Whether to generate audio for the video. Defaults to `true`.
+
+ draft: Generate a cheap 480p preview instead of a full-quality video. The returned task
+ ID can later be enhanced to a 1080p video with the same content by passing it as
+ `draftTaskId` to `text_to_video`. Drafts can be enhanced within 7 days of
+ creation. Defaults to false.
+
+ draft_task_id: The ID of a succeeded draft task to enhance to 1080p. The draft is regenerated
+ with its original prompt, references, and settings, so no other generation
+ fields may be provided.
+
+ duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
+ billed at the variant maximum up front; unused credits are refunded after the
+ generation finishes. Defaults to 5.
+
+ output_format: Container for the output video. `mov` keeps high colour precision for grading
+ and compositing. Defaults to `mp4`. Draft mode only supports `mp4`.
+
+ prompt_text: An optional text prompt up to 15000 characters describing what should appear in
+ the output.
+
+ ratio: The resolution of the output video. Seedance 2.5 supports 480p, 720p, and 1080p.
+ Defaults to `1280:720`.
+
+ reference_audio: An optional array of audio references. The total combined duration must be less
+ than 30 seconds.
+
+ references: An optional array of image references (up to 30). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ reference_videos: An optional array of video references. The combined duration across all video
+ references must not exceed 30 seconds. See [our docs](/assets/inputs#videos) on
+ video inputs for more information.
+
+ 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
+ integer for an identical request will produce similar results.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -1028,32 +1339,46 @@ def create(
@required_args(
["duration", "model", "prompt_text", "ratio"],
["model", "prompt_text", "ratio"],
+ ["model", "ratio"],
["model", "prompt_text"],
["model"],
)
def create(
self,
*,
- duration: int | Literal[4, 6, 8] | Union[int, Literal["auto"]] | Union[Literal["auto"], int] | Omit = omit,
+ duration: int
+ | Literal[4, 6, 8]
+ | Literal[5, 10]
+ | Union[int, Literal["auto"]]
+ | Union[Literal["auto"], int]
+ | Omit = omit,
model: Literal["gen4.5"]
| Literal["veo3.1"]
| Literal["veo3.1_fast"]
+ | Literal["klingO3_4k"]
| Literal["hailuo3"]
+ | Literal["kling3.0_4k"]
| Literal["happyhorse_1_0"]
+ | Literal["kling2.5_turbo_pro"]
+ | Literal["kling3.0_pro"]
+ | Literal["kling3.0_standard"]
+ | Literal["klingO3_pro"]
+ | Literal["klingO3_standard"]
| Literal["seedance2"]
| Literal["seedance2_fast"]
| Literal["seedance2_mini"]
| Literal["gemini_omni_flash"]
- | Literal["seedance2_5"]
| Literal["grok_imagine_1_5"]
| Literal["wan3"]
| Literal["gemini_omni_flash_1.1"]
| Literal["wan3_prime"]
| Literal["h3_max"]
+ | Literal["seedance2_5"]
| Literal["grok_imagine_1_5_lite"],
prompt_text: str | Omit = omit,
ratio: Literal["1280:720", "720:1280"]
| Literal["1280:720", "720:1280", "1080:1920", "1920:1080"]
+ | Literal["3840:2160", "2160:3840", "2880:2880"]
| Literal["adaptive", "21:9", "16:9", "4:3", "1:1", "3:4", "9:16"]
| Literal[
"1280:720",
@@ -1067,6 +1392,9 @@ def create(
"1662:1248",
"1248:1662",
]
+ | Literal["1920:1080", "1440:1440", "1080:1920", "1280:720", "720:720", "720:1280"]
+ | Literal["1920:1080", "1080:1920", "1440:1440"]
+ | Literal["1280:720", "720:1280", "960:960"]
| Literal[
"992:432",
"864:496",
@@ -1107,26 +1435,6 @@ def create(
"834:1112",
"720:1280",
]
- | Literal[
- "992:432",
- "854:480",
- "752:560",
- "640:640",
- "560:752",
- "480:854",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- "2206:946",
- "1920:1080",
- "1664:1248",
- "1440:1440",
- "1248:1664",
- "1080:1920",
- ]
| Literal["1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"]
| Literal[
"832:480",
@@ -1149,6 +1457,26 @@ def create(
"auto_1080p",
]
| Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
+ | Literal[
+ "992:432",
+ "854:480",
+ "752:560",
+ "640:640",
+ "560:752",
+ "480:854",
+ "1470:630",
+ "1280:720",
+ "1112:834",
+ "960:960",
+ "834:1112",
+ "720:1280",
+ "2206:946",
+ "1920:1080",
+ "1664:1248",
+ "1440:1440",
+ "1248:1664",
+ "1080:1920",
+ ]
| Literal[
"848:480",
"480:848",
@@ -1188,44 +1516,55 @@ def create(
"hdr_exr_acescg_sequence_1_3",
"hdr_exr_acescg_sequence_2_0",
]
+ | Literal["mp4", "mov"]
| 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,
negative_prompt: str | Omit = omit,
+ provider_settings: text_to_video_create_params.KlingO3_4kProviderSettings
+ | text_to_video_create_params.Kling3_0_4kProviderSettings
+ | text_to_video_create_params.Kling3_0ProProviderSettings
+ | text_to_video_create_params.Kling3_0StandardProviderSettings
+ | text_to_video_create_params.KlingO3ProProviderSettings
+ | text_to_video_create_params.KlingO3StandardProviderSettings
+ | Omit = omit,
reference_audio: Iterable[text_to_video_create_params.Hailuo3ReferenceAudio]
| Iterable[text_to_video_create_params.Seedance2ReferenceAudio]
| Iterable[text_to_video_create_params.Seedance2FastReferenceAudio]
| Iterable[text_to_video_create_params.Seedance2MiniReferenceAudio]
- | Iterable[text_to_video_create_params.Seedance2_5ReferenceAudio]
| Iterable[text_to_video_create_params.GrokImagine1_5ReferenceAudio]
| Iterable[text_to_video_create_params.Wan3ReferenceAudio]
| Iterable[text_to_video_create_params.Wan3PrimeReferenceAudio]
+ | Iterable[text_to_video_create_params.Seedance2_5ReferenceAudio]
| Omit = omit,
references: Iterable[text_to_video_create_params.Hailuo3Reference]
| Iterable[text_to_video_create_params.Seedance2Reference]
| Iterable[text_to_video_create_params.Seedance2FastReference]
| Iterable[text_to_video_create_params.Seedance2MiniReference]
- | Iterable[text_to_video_create_params.Seedance2_5Reference]
| Iterable[text_to_video_create_params.GrokImagine1_5Reference]
| Iterable[text_to_video_create_params.Wan3Reference]
| Iterable[text_to_video_create_params.GeminiOmniFlash1_1Reference]
| Iterable[text_to_video_create_params.Wan3PrimeReference]
+ | Iterable[text_to_video_create_params.Seedance2_5Reference]
| Omit = omit,
reference_videos: Iterable[text_to_video_create_params.Hailuo3ReferenceVideo]
| Iterable[text_to_video_create_params.Seedance2ReferenceVideo]
| Iterable[text_to_video_create_params.Seedance2FastReferenceVideo]
| Iterable[text_to_video_create_params.Seedance2MiniReferenceVideo]
- | Iterable[text_to_video_create_params.Seedance2_5ReferenceVideo]
| Iterable[text_to_video_create_params.Wan3ReferenceVideo]
| Iterable[text_to_video_create_params.GeminiOmniFlash1_1ReferenceVideo]
| Iterable[text_to_video_create_params.Wan3PrimeReferenceVideo]
+ | Iterable[text_to_video_create_params.Seedance2_5ReferenceVideo]
| Omit = omit,
resolution: Literal["768p", "2k", "768P", "2K"]
| Literal["480p", "720p", "1080p"]
| Literal["480p", "768p"]
| Omit = omit,
+ cfg_scale: float | Omit = omit,
prompt_expansion_mode: Literal["disabled", "balanced", "quality"] | Omit = omit,
+ draft: bool | Omit = omit,
+ draft_task_id: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -1247,11 +1586,15 @@ def create(
"seed": seed,
"audio": audio,
"negative_prompt": negative_prompt,
+ "provider_settings": provider_settings,
"reference_audio": reference_audio,
"references": references,
"reference_videos": reference_videos,
"resolution": resolution,
+ "cfg_scale": cfg_scale,
"prompt_expansion_mode": prompt_expansion_mode,
+ "draft": draft,
+ "draft_task_id": draft_task_id,
},
text_to_video_create_params.TextToVideoCreateParams,
),
@@ -1470,6 +1813,47 @@ async def create(
"""
...
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["klingO3_4k"],
+ ratio: Literal["3840:2160", "2160:3840", "2880:2880"],
+ audio: bool | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: text_to_video_create_params.KlingO3_4kProviderSettings | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ ratio: The resolution of the output video.
+
+ audio: Whether to generate audio for the video.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
async def create(
self,
@@ -1493,27 +1877,288 @@ async def create(
This endpoint will start a new task to generate a video from a text prompt.
Args:
- prompt_text: A non-empty text prompt describing what should appear in the output.
-
- duration: The number of seconds of duration for the output video.
-
- ratio: The aspect ratio of the output video. Use adaptive only when image or video
- references are provided; text-only requests require a concrete ratio.
-
- reference_audio: An optional array of audio references. Audio references require a text prompt,
- and the total combined duration must not exceed 15 seconds.
+ prompt_text: A non-empty text prompt describing what should appear in the output.
+
+ duration: The number of seconds of duration for the output video.
+
+ ratio: The aspect ratio of the output video. Use adaptive only when image or video
+ references are provided; text-only requests require a concrete ratio.
+
+ reference_audio: An optional array of audio references. Audio references require a text prompt,
+ and the total combined duration must not exceed 15 seconds.
+
+ references: An optional array of image references (up to 9). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ reference_videos: An optional array of video references. The combined duration across all video
+ 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.
+
+ - `768P` - Deprecated: Use "768p" instead.
+ - `2K` - Deprecated: Use "2k" instead.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["kling3.0_4k"],
+ ratio: Literal["3840:2160", "2160:3840", "2880:2880"],
+ audio: bool | Omit = omit,
+ cfg_scale: float | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: text_to_video_create_params.Kling3_0_4kProviderSettings | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ ratio: The resolution of the output video.
+
+ audio: Whether to generate audio for the video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["happyhorse_1_0"],
+ prompt_text: str,
+ duration: int | Omit = omit,
+ ratio: Literal[
+ "1280:720",
+ "720:1280",
+ "960:960",
+ "1108:832",
+ "832:1108",
+ "1920:1080",
+ "1080:1920",
+ "1440:1440",
+ "1662:1248",
+ "1248:1662",
+ ]
+ | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ prompt_text: A non-empty string up to 2500 characters (measured in UTF-16 code units). This
+ should describe in detail what should appear in the output.
+
+ duration: The number of seconds of duration for the output video.
+
+ ratio: The resolution of the output video.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["kling2.5_turbo_pro"],
+ prompt_text: str,
+ cfg_scale: float | Omit = omit,
+ duration: Literal[5, 10] | Omit = omit,
+ ratio: Literal["1920:1080", "1440:1440", "1080:1920", "1280:720", "720:720", "720:1280"] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
+
+ duration: The duration of the output video in seconds. Defaults to 5.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["kling3.0_pro"],
+ ratio: Literal["1920:1080", "1080:1920", "1440:1440"],
+ audio: bool | Omit = omit,
+ cfg_scale: float | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: text_to_video_create_params.Kling3_0ProProviderSettings | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ ratio: The resolution of the output video.
+
+ audio: Whether to generate audio for the video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["kling3.0_standard"],
+ ratio: Literal["1280:720", "720:1280", "960:960"],
+ audio: bool | Omit = omit,
+ cfg_scale: float | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: text_to_video_create_params.Kling3_0StandardProviderSettings | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ ratio: The resolution of the output video.
+
+ audio: Whether to generate audio for the video.
+
+ cfg_scale: Creativity/freedom scale for generation. 0 gives the model maximum creative
+ freedom, 1 makes it follow the prompt most strictly. Defaults to 0.5.
+
+ duration: The number of seconds of duration for the output video.
+
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["klingO3_pro"],
+ ratio: Literal["1920:1080", "1080:1920", "1440:1440"],
+ audio: bool | Omit = omit,
+ duration: int | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: text_to_video_create_params.KlingO3ProProviderSettings | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ ratio: The resolution of the output video.
- references: An optional array of image references (up to 9). See
- [our docs](/assets/inputs#images) on image inputs for more information.
+ audio: Whether to generate audio for the video.
- reference_videos: An optional array of video references. The combined duration across all video
- references must not exceed 15 seconds. See [our docs](/assets/inputs#videos) on
- video inputs for more information.
+ duration: The number of seconds of duration for the output video.
- resolution: The output resolution. Hailuo 3.0 supports 768p and 2k.
+ prompt_text: A text prompt describing what should appear in the output video.
- - `768P` - Deprecated: Use "768p" instead.
- - `2K` - Deprecated: Use "2k" instead.
+ provider_settings: Provider-specific settings for multishot video generation.
extra_headers: Send extra headers
@@ -1529,22 +2174,12 @@ async def create(
async def create(
self,
*,
- model: Literal["happyhorse_1_0"],
- prompt_text: str,
+ model: Literal["klingO3_standard"],
+ ratio: Literal["1280:720", "720:1280", "960:960"],
+ audio: bool | Omit = omit,
duration: int | Omit = omit,
- ratio: Literal[
- "1280:720",
- "720:1280",
- "960:960",
- "1108:832",
- "832:1108",
- "1920:1080",
- "1080:1920",
- "1440:1440",
- "1662:1248",
- "1248:1662",
- ]
- | Omit = omit,
+ prompt_text: str | Omit = omit,
+ provider_settings: text_to_video_create_params.KlingO3StandardProviderSettings | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -1556,12 +2191,15 @@ async def create(
This endpoint will start a new task to generate a video from a text prompt.
Args:
- prompt_text: A non-empty string up to 2500 characters (measured in UTF-16 code units). This
- should describe in detail what should appear in the output.
+ ratio: The resolution of the output video.
+
+ audio: Whether to generate audio for the video.
duration: The number of seconds of duration for the output video.
- ratio: The resolution of the output video.
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ provider_settings: Provider-specific settings for multishot video generation.
extra_headers: Send extra headers
@@ -1842,85 +2480,6 @@ async def create(
"""
...
- @overload
- async def create(
- self,
- *,
- model: Literal["seedance2_5"],
- audio: bool | Omit = omit,
- duration: Union[int, Literal["auto"]] | Omit = omit,
- prompt_text: str | Omit = omit,
- ratio: Literal[
- "992:432",
- "854:480",
- "752:560",
- "640:640",
- "560:752",
- "480:854",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- "2206:946",
- "1920:1080",
- "1664:1248",
- "1440:1440",
- "1248:1664",
- "1080:1920",
- ]
- | Omit = omit,
- reference_audio: Iterable[text_to_video_create_params.Seedance2_5ReferenceAudio] | Omit = omit,
- references: Iterable[text_to_video_create_params.Seedance2_5Reference] | Omit = omit,
- reference_videos: Iterable[text_to_video_create_params.Seedance2_5ReferenceVideo] | 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.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> AsyncNewTaskCreatedResponse:
- """
- This endpoint will start a new task to generate a video from a text prompt.
-
- Args:
- audio: Whether to generate audio for the video.
-
- duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
- billed at the variant maximum up front; unused credits are refunded after the
- generation finishes.
-
- prompt_text: An optional text prompt up to 15000 characters describing what should appear in
- the output.
-
- ratio: The resolution of the output video. Seedance 2.5 supports 480p, 720p, and 1080p.
-
- reference_audio: An optional array of audio references. The total combined duration must be less
- than 30 seconds.
-
- references: An optional array of image references (up to 30). See
- [our docs](/assets/inputs#images) on image inputs for more information.
-
- reference_videos: An optional array of video references. The combined duration across all video
- references must not exceed 30 seconds. See [our docs](/assets/inputs#videos) on
- video inputs for more information.
-
- 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
- integer for an identical request will produce similar results.
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- ...
-
@overload
async def create(
self,
@@ -2198,6 +2757,101 @@ async def create(
"""
...
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["seedance2_5"],
+ audio: bool | Omit = omit,
+ draft: bool | Omit = omit,
+ draft_task_id: str | Omit = omit,
+ duration: Union[int, Literal["auto"]] | Omit = omit,
+ output_format: Literal["mp4", "mov"] | Omit = omit,
+ prompt_text: str | Omit = omit,
+ ratio: Literal[
+ "992:432",
+ "854:480",
+ "752:560",
+ "640:640",
+ "560:752",
+ "480:854",
+ "1470:630",
+ "1280:720",
+ "1112:834",
+ "960:960",
+ "834:1112",
+ "720:1280",
+ "2206:946",
+ "1920:1080",
+ "1664:1248",
+ "1440:1440",
+ "1248:1664",
+ "1080:1920",
+ ]
+ | Omit = omit,
+ reference_audio: Iterable[text_to_video_create_params.Seedance2_5ReferenceAudio] | Omit = omit,
+ references: Iterable[text_to_video_create_params.Seedance2_5Reference] | Omit = omit,
+ reference_videos: Iterable[text_to_video_create_params.Seedance2_5ReferenceVideo] | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a text prompt.
+
+ Args:
+ audio: Whether to generate audio for the video. Defaults to `true`.
+
+ draft: Generate a cheap 480p preview instead of a full-quality video. The returned task
+ ID can later be enhanced to a 1080p video with the same content by passing it as
+ `draftTaskId` to `text_to_video`. Drafts can be enhanced within 7 days of
+ creation. Defaults to false.
+
+ draft_task_id: The ID of a succeeded draft task to enhance to 1080p. The draft is regenerated
+ with its original prompt, references, and settings, so no other generation
+ fields may be provided.
+
+ duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
+ billed at the variant maximum up front; unused credits are refunded after the
+ generation finishes. Defaults to 5.
+
+ output_format: Container for the output video. `mov` keeps high colour precision for grading
+ and compositing. Defaults to `mp4`. Draft mode only supports `mp4`.
+
+ prompt_text: An optional text prompt up to 15000 characters describing what should appear in
+ the output.
+
+ ratio: The resolution of the output video. Seedance 2.5 supports 480p, 720p, and 1080p.
+ Defaults to `1280:720`.
+
+ reference_audio: An optional array of audio references. The total combined duration must be less
+ than 30 seconds.
+
+ references: An optional array of image references (up to 30). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ reference_videos: An optional array of video references. The combined duration across all video
+ references must not exceed 30 seconds. See [our docs](/assets/inputs#videos) on
+ video inputs for more information.
+
+ 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
+ integer for an identical request will produce similar results.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
async def create(
self,
@@ -2260,32 +2914,46 @@ async def create(
@required_args(
["duration", "model", "prompt_text", "ratio"],
["model", "prompt_text", "ratio"],
+ ["model", "ratio"],
["model", "prompt_text"],
["model"],
)
async def create(
self,
*,
- duration: int | Literal[4, 6, 8] | Union[int, Literal["auto"]] | Union[Literal["auto"], int] | Omit = omit,
+ duration: int
+ | Literal[4, 6, 8]
+ | Literal[5, 10]
+ | Union[int, Literal["auto"]]
+ | Union[Literal["auto"], int]
+ | Omit = omit,
model: Literal["gen4.5"]
| Literal["veo3.1"]
| Literal["veo3.1_fast"]
+ | Literal["klingO3_4k"]
| Literal["hailuo3"]
+ | Literal["kling3.0_4k"]
| Literal["happyhorse_1_0"]
+ | Literal["kling2.5_turbo_pro"]
+ | Literal["kling3.0_pro"]
+ | Literal["kling3.0_standard"]
+ | Literal["klingO3_pro"]
+ | Literal["klingO3_standard"]
| Literal["seedance2"]
| Literal["seedance2_fast"]
| Literal["seedance2_mini"]
| Literal["gemini_omni_flash"]
- | Literal["seedance2_5"]
| Literal["grok_imagine_1_5"]
| Literal["wan3"]
| Literal["gemini_omni_flash_1.1"]
| Literal["wan3_prime"]
| Literal["h3_max"]
+ | Literal["seedance2_5"]
| Literal["grok_imagine_1_5_lite"],
prompt_text: str | Omit = omit,
ratio: Literal["1280:720", "720:1280"]
| Literal["1280:720", "720:1280", "1080:1920", "1920:1080"]
+ | Literal["3840:2160", "2160:3840", "2880:2880"]
| Literal["adaptive", "21:9", "16:9", "4:3", "1:1", "3:4", "9:16"]
| Literal[
"1280:720",
@@ -2299,6 +2967,9 @@ async def create(
"1662:1248",
"1248:1662",
]
+ | Literal["1920:1080", "1440:1440", "1080:1920", "1280:720", "720:720", "720:1280"]
+ | Literal["1920:1080", "1080:1920", "1440:1440"]
+ | Literal["1280:720", "720:1280", "960:960"]
| Literal[
"992:432",
"864:496",
@@ -2339,26 +3010,6 @@ async def create(
"834:1112",
"720:1280",
]
- | Literal[
- "992:432",
- "854:480",
- "752:560",
- "640:640",
- "560:752",
- "480:854",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- "2206:946",
- "1920:1080",
- "1664:1248",
- "1440:1440",
- "1248:1664",
- "1080:1920",
- ]
| Literal["1:1", "16:9", "9:16", "4:3", "3:4", "3:2", "2:3"]
| Literal[
"832:480",
@@ -2381,6 +3032,26 @@ async def create(
"auto_1080p",
]
| Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
+ | Literal[
+ "992:432",
+ "854:480",
+ "752:560",
+ "640:640",
+ "560:752",
+ "480:854",
+ "1470:630",
+ "1280:720",
+ "1112:834",
+ "960:960",
+ "834:1112",
+ "720:1280",
+ "2206:946",
+ "1920:1080",
+ "1664:1248",
+ "1440:1440",
+ "1248:1664",
+ "1080:1920",
+ ]
| Literal[
"848:480",
"480:848",
@@ -2420,44 +3091,55 @@ async def create(
"hdr_exr_acescg_sequence_1_3",
"hdr_exr_acescg_sequence_2_0",
]
+ | Literal["mp4", "mov"]
| 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,
negative_prompt: str | Omit = omit,
+ provider_settings: text_to_video_create_params.KlingO3_4kProviderSettings
+ | text_to_video_create_params.Kling3_0_4kProviderSettings
+ | text_to_video_create_params.Kling3_0ProProviderSettings
+ | text_to_video_create_params.Kling3_0StandardProviderSettings
+ | text_to_video_create_params.KlingO3ProProviderSettings
+ | text_to_video_create_params.KlingO3StandardProviderSettings
+ | Omit = omit,
reference_audio: Iterable[text_to_video_create_params.Hailuo3ReferenceAudio]
| Iterable[text_to_video_create_params.Seedance2ReferenceAudio]
| Iterable[text_to_video_create_params.Seedance2FastReferenceAudio]
| Iterable[text_to_video_create_params.Seedance2MiniReferenceAudio]
- | Iterable[text_to_video_create_params.Seedance2_5ReferenceAudio]
| Iterable[text_to_video_create_params.GrokImagine1_5ReferenceAudio]
| Iterable[text_to_video_create_params.Wan3ReferenceAudio]
| Iterable[text_to_video_create_params.Wan3PrimeReferenceAudio]
+ | Iterable[text_to_video_create_params.Seedance2_5ReferenceAudio]
| Omit = omit,
references: Iterable[text_to_video_create_params.Hailuo3Reference]
| Iterable[text_to_video_create_params.Seedance2Reference]
| Iterable[text_to_video_create_params.Seedance2FastReference]
| Iterable[text_to_video_create_params.Seedance2MiniReference]
- | Iterable[text_to_video_create_params.Seedance2_5Reference]
| Iterable[text_to_video_create_params.GrokImagine1_5Reference]
| Iterable[text_to_video_create_params.Wan3Reference]
| Iterable[text_to_video_create_params.GeminiOmniFlash1_1Reference]
| Iterable[text_to_video_create_params.Wan3PrimeReference]
+ | Iterable[text_to_video_create_params.Seedance2_5Reference]
| Omit = omit,
reference_videos: Iterable[text_to_video_create_params.Hailuo3ReferenceVideo]
| Iterable[text_to_video_create_params.Seedance2ReferenceVideo]
| Iterable[text_to_video_create_params.Seedance2FastReferenceVideo]
| Iterable[text_to_video_create_params.Seedance2MiniReferenceVideo]
- | Iterable[text_to_video_create_params.Seedance2_5ReferenceVideo]
| Iterable[text_to_video_create_params.Wan3ReferenceVideo]
| Iterable[text_to_video_create_params.GeminiOmniFlash1_1ReferenceVideo]
| Iterable[text_to_video_create_params.Wan3PrimeReferenceVideo]
+ | Iterable[text_to_video_create_params.Seedance2_5ReferenceVideo]
| Omit = omit,
resolution: Literal["768p", "2k", "768P", "2K"]
| Literal["480p", "720p", "1080p"]
| Literal["480p", "768p"]
| Omit = omit,
+ cfg_scale: float | Omit = omit,
prompt_expansion_mode: Literal["disabled", "balanced", "quality"] | Omit = omit,
+ draft: bool | Omit = omit,
+ draft_task_id: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -2479,11 +3161,15 @@ async def create(
"seed": seed,
"audio": audio,
"negative_prompt": negative_prompt,
+ "provider_settings": provider_settings,
"reference_audio": reference_audio,
"references": references,
"reference_videos": reference_videos,
"resolution": resolution,
+ "cfg_scale": cfg_scale,
"prompt_expansion_mode": prompt_expansion_mode,
+ "draft": draft,
+ "draft_task_id": draft_task_id,
},
text_to_video_create_params.TextToVideoCreateParams,
),
diff --git a/src/runwayml/resources/video_to_audio.py b/src/runwayml/resources/video_to_audio.py
new file mode 100644
index 0000000..676e94b
--- /dev/null
+++ b/src/runwayml/resources/video_to_audio.py
@@ -0,0 +1,272 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Type, cast
+from typing_extensions import Literal
+
+import httpx
+
+from runwayml.lib.polling import (
+ AwaitableTaskResponseMixin,
+ AsyncAwaitableTaskResponseMixin,
+ create_waitable_resource,
+ create_async_waitable_resource,
+)
+
+from ..types import video_to_audio_create_params
+from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
+from .._utils import maybe_transform, async_maybe_transform
+from .._compat import cached_property
+from .._resource import SyncAPIResource, AsyncAPIResource
+from .._response import (
+ to_raw_response_wrapper,
+ to_streamed_response_wrapper,
+ async_to_raw_response_wrapper,
+ async_to_streamed_response_wrapper,
+)
+from .._base_client import make_request_options
+from ..types.video_to_audio_create_response import VideoToAudioCreateResponse
+
+__all__ = [
+ "VideoToAudioResource",
+ "AsyncVideoToAudioResource",
+ "WaitableVideoToAudioCreateResponse",
+ "AsyncWaitableVideoToAudioCreateResponse",
+]
+
+
+class WaitableVideoToAudioCreateResponse(VideoToAudioCreateResponse, AwaitableTaskResponseMixin): ...
+
+
+class AsyncWaitableVideoToAudioCreateResponse(VideoToAudioCreateResponse, AsyncAwaitableTaskResponseMixin): ...
+
+
+class VideoToAudioResource(SyncAPIResource):
+ """These endpoints all kick off tasks to create generations."""
+
+ @cached_property
+ def with_raw_response(self) -> VideoToAudioResourceWithRawResponse:
+ """
+ This property can be used as a prefix for any HTTP method call to return
+ the raw response object instead of the parsed content.
+
+ For more information, see https://www.github.com/runwayml/sdk-python#accessing-raw-response-data-eg-headers
+ """
+ return VideoToAudioResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> VideoToAudioResourceWithStreamingResponse:
+ """
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
+
+ For more information, see https://www.github.com/runwayml/sdk-python#with_streaming_response
+ """
+ return VideoToAudioResourceWithStreamingResponse(self)
+
+ def create(
+ self,
+ *,
+ duration: float,
+ model: Literal["mirelo_sfx_2_0"],
+ video_uri: str,
+ format: Literal["mp3", "wav", "flac"] | Omit = omit,
+ negative_prompt: str | Omit = omit,
+ num_variants: int | Omit = omit,
+ preserve_speech: bool | Omit = omit,
+ prompt_text: str | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> WaitableVideoToAudioCreateResponse:
+ """
+ Generate synchronized sound effects for a video, optionally guided by a text
+ description. Returns audio, not a video with a replacement soundtrack.
+
+ Args:
+ video_uri: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+
+ format: The format of the generated audio.
+
+ negative_prompt: Sounds to avoid in the generated audio.
+
+ num_variants: The number of audio variations to generate.
+
+ preserve_speech: Whether to preserve dialogue from the input video. Disabling this does not
+ guarantee speech-free output.
+
+ prompt_text: A description of the sound effects to generate.
+
+ seed: A seed for reproducible generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ return self._post(
+ "/v1/video_to_audio",
+ body=maybe_transform(
+ {
+ "duration": duration,
+ "model": model,
+ "video_uri": video_uri,
+ "format": format,
+ "negative_prompt": negative_prompt,
+ "num_variants": num_variants,
+ "preserve_speech": preserve_speech,
+ "prompt_text": prompt_text,
+ "seed": seed,
+ },
+ video_to_audio_create_params.VideoToAudioCreateParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=cast(
+ Type[WaitableVideoToAudioCreateResponse],
+ create_waitable_resource(WaitableVideoToAudioCreateResponse, self._client),
+ ),
+ )
+
+
+class AsyncVideoToAudioResource(AsyncAPIResource):
+ """These endpoints all kick off tasks to create generations."""
+
+ @cached_property
+ def with_raw_response(self) -> AsyncVideoToAudioResourceWithRawResponse:
+ """
+ This property can be used as a prefix for any HTTP method call to return
+ the raw response object instead of the parsed content.
+
+ For more information, see https://www.github.com/runwayml/sdk-python#accessing-raw-response-data-eg-headers
+ """
+ return AsyncVideoToAudioResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncVideoToAudioResourceWithStreamingResponse:
+ """
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
+
+ For more information, see https://www.github.com/runwayml/sdk-python#with_streaming_response
+ """
+ return AsyncVideoToAudioResourceWithStreamingResponse(self)
+
+ async def create(
+ self,
+ *,
+ duration: float,
+ model: Literal["mirelo_sfx_2_0"],
+ video_uri: str,
+ format: Literal["mp3", "wav", "flac"] | Omit = omit,
+ negative_prompt: str | Omit = omit,
+ num_variants: int | Omit = omit,
+ preserve_speech: bool | Omit = omit,
+ prompt_text: str | 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.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncWaitableVideoToAudioCreateResponse:
+ """
+ Generate synchronized sound effects for a video, optionally guided by a text
+ description. Returns audio, not a video with a replacement soundtrack.
+
+ Args:
+ video_uri: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+
+ format: The format of the generated audio.
+
+ negative_prompt: Sounds to avoid in the generated audio.
+
+ num_variants: The number of audio variations to generate.
+
+ preserve_speech: Whether to preserve dialogue from the input video. Disabling this does not
+ guarantee speech-free output.
+
+ prompt_text: A description of the sound effects to generate.
+
+ seed: A seed for reproducible generation.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ return await self._post(
+ "/v1/video_to_audio",
+ body=await async_maybe_transform(
+ {
+ "duration": duration,
+ "model": model,
+ "video_uri": video_uri,
+ "format": format,
+ "negative_prompt": negative_prompt,
+ "num_variants": num_variants,
+ "preserve_speech": preserve_speech,
+ "prompt_text": prompt_text,
+ "seed": seed,
+ },
+ video_to_audio_create_params.VideoToAudioCreateParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=cast(
+ Type[AsyncWaitableVideoToAudioCreateResponse],
+ create_async_waitable_resource(AsyncWaitableVideoToAudioCreateResponse, self._client),
+ ),
+ )
+
+
+class VideoToAudioResourceWithRawResponse:
+ def __init__(self, video_to_audio: VideoToAudioResource) -> None:
+ self._video_to_audio = video_to_audio
+
+ self.create = to_raw_response_wrapper(
+ video_to_audio.create,
+ )
+
+
+class AsyncVideoToAudioResourceWithRawResponse:
+ def __init__(self, video_to_audio: AsyncVideoToAudioResource) -> None:
+ self._video_to_audio = video_to_audio
+
+ self.create = async_to_raw_response_wrapper(
+ video_to_audio.create,
+ )
+
+
+class VideoToAudioResourceWithStreamingResponse:
+ def __init__(self, video_to_audio: VideoToAudioResource) -> None:
+ self._video_to_audio = video_to_audio
+
+ self.create = to_streamed_response_wrapper(
+ video_to_audio.create,
+ )
+
+
+class AsyncVideoToAudioResourceWithStreamingResponse:
+ def __init__(self, video_to_audio: AsyncVideoToAudioResource) -> None:
+ self._video_to_audio = video_to_audio
+
+ self.create = async_to_streamed_response_wrapper(
+ video_to_audio.create,
+ )
diff --git a/src/runwayml/resources/video_to_video.py b/src/runwayml/resources/video_to_video.py
index 9e7044f..085b038 100644
--- a/src/runwayml/resources/video_to_video.py
+++ b/src/runwayml/resources/video_to_video.py
@@ -118,6 +118,47 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["klingO3_4k"],
+ prompt_text: str,
+ prompt_video: str,
+ provider_settings: video_to_video_create_params.KlingO3_4kProviderSettings | Omit = omit,
+ references: Union[str, Iterable[video_to_video_create_params.KlingO3_4kReferencesPromptImage]] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a video.
+
+ Args:
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ prompt_video: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+
+ provider_settings: Provider-specific settings for multishot video generation and video editing.
+
+ references: An optional array of reference images (up to 4). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -178,6 +219,89 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["klingO3_pro"],
+ prompt_text: str,
+ prompt_video: str,
+ provider_settings: video_to_video_create_params.KlingO3ProProviderSettings | Omit = omit,
+ references: Union[str, Iterable[video_to_video_create_params.KlingO3ProReferencesPromptImage]] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a video.
+
+ Args:
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ prompt_video: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+
+ provider_settings: Provider-specific settings for multishot video generation and video editing.
+
+ references: An optional array of reference images (up to 4). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["klingO3_standard"],
+ prompt_text: str,
+ prompt_video: str,
+ provider_settings: video_to_video_create_params.KlingO3StandardProviderSettings | Omit = omit,
+ references: Union[str, Iterable[video_to_video_create_params.KlingO3StandardReferencesPromptImage]]
+ | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a video.
+
+ Args:
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ prompt_video: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+
+ provider_settings: Provider-specific settings for multishot video generation and video editing.
+
+ references: An optional array of reference images (up to 4). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -463,6 +587,56 @@ def create(
"""
...
+ @overload
+ def create(
+ self,
+ *,
+ model: Literal["gemini_omni_flash_1.1"],
+ prompt_text: str,
+ video_uri: str,
+ duration: Union[Literal["auto"], int] | Omit = omit,
+ mode: Literal["reference", "extend", "edit"] | Omit = omit,
+ ratio: Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
+ | Omit = omit,
+ references: Iterable[video_to_video_create_params.GeminiOmniFlash1_1Reference] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> NewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a video.
+
+ Args:
+ prompt_text: A non-empty prompt describing the output or extension.
+
+ video_uri: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+
+ duration: The duration in seconds. In reference mode, this is the output video length. In
+ extend mode, this is the amount of footage added to the input video. Use "auto"
+ to let the model choose a duration.
+
+ mode: How the input video is used. `reference` generates a new video guided by the
+ input, `extend` continues it, and `edit` transforms it according to the prompt.
+
+ ratio: The resolution and aspect ratio of the output video.
+
+ references: An optional array of image references to guide the output.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
def create(
self,
@@ -470,8 +644,10 @@ def create(
model: Literal["seedance2_5"],
prompt_video: str,
audio: bool | Omit = omit,
+ draft: bool | Omit = omit,
duration: Union[int, Literal["auto"]] | Omit = omit,
mode: Literal["reference", "extend", "edit"] | Omit = omit,
+ output_format: Literal["mp4", "mov"] | Omit = omit,
prompt_text: str | Omit = omit,
ratio: Literal[
"992:432",
@@ -515,6 +691,11 @@ def create(
audio: Whether to generate audio for the video.
+ draft: Generate a cheap 480p preview instead of a full-quality video. The returned task
+ ID can later be enhanced to a 1080p video with the same content by passing it as
+ `draftTaskId` to `text_to_video`. Drafts can be enhanced within 7 days of
+ creation. Defaults to false.
+
duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
billed at the variant maximum up front; unused credits are refunded after the
generation finishes. Defaults to 5.
@@ -525,6 +706,9 @@ def create(
ratio, so `ratio` may not be provided. `edit` modifies the input video in place,
requires `promptText`, requires `duration: "auto"`, and does not accept `ratio`.
+ output_format: Container for the output video. `mov` keeps high colour precision for grading
+ and compositing. Defaults to `mp4`. Draft mode only supports `mp4`.
+
prompt_text: An optional text prompt up to 15000 characters describing what should appear in
the output.
@@ -554,56 +738,6 @@ def create(
"""
...
- @overload
- def create(
- self,
- *,
- model: Literal["gemini_omni_flash_1.1"],
- prompt_text: str,
- video_uri: str,
- duration: Union[Literal["auto"], int] | Omit = omit,
- mode: Literal["reference", "extend", "edit"] | Omit = omit,
- ratio: Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
- | Omit = omit,
- references: Iterable[video_to_video_create_params.GeminiOmniFlash1_1Reference] | Omit = omit,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> NewTaskCreatedResponse:
- """
- This endpoint will start a new task to generate a video from a video.
-
- Args:
- prompt_text: A non-empty prompt describing the output or extension.
-
- video_uri: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
- `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
- [our docs](/assets/inputs#videos) on video inputs for more information.
-
- duration: The duration in seconds. In reference mode, this is the output video length. In
- extend mode, this is the amount of footage added to the input video. Use "auto"
- to let the model choose a duration.
-
- mode: How the input video is used. `reference` generates a new video guided by the
- input, `extend` continues it, and `edit` transforms it according to the prompt.
-
- ratio: The resolution and aspect ratio of the output video.
-
- references: An optional array of image references to guide the output.
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- ...
-
@required_args(
["model", "video_uri"],
["model", "prompt_text", "prompt_video"],
@@ -614,17 +748,22 @@ def create(
self,
*,
model: Literal["aleph2"]
+ | Literal["klingO3_4k"]
| Literal["hailuo3"]
+ | Literal["klingO3_pro"]
+ | Literal["klingO3_standard"]
| Literal["seedance2"]
| Literal["seedance2_fast"]
| Literal["seedance2_mini"]
| Literal["gemini_omni_flash"]
- | Literal["seedance2_5"]
- | Literal["gemini_omni_flash_1.1"],
+ | Literal["gemini_omni_flash_1.1"]
+ | Literal["seedance2_5"],
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", "sdr_rec709_10bit"] | Omit = omit,
+ output_format: Literal["mp4", "prores", "png_sequence", "sdr_rec709_10bit"]
+ | Literal["mp4", "mov"]
+ | Omit = omit,
prompt_text: str | Omit = omit,
prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit,
ratio: str
@@ -669,6 +808,7 @@ def create(
"834:1112",
"720:1280",
]
+ | Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
| Literal[
"992:432",
"854:480",
@@ -689,25 +829,31 @@ def create(
"1248:1664",
"1080:1920",
]
- | Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
| Omit = omit,
seed: int | Omit = omit,
target_aspect_ratio: Literal["16:9", "4:3", "3:2", "1:1", "2:3", "3:4", "9:16", "21:9"] | Omit = omit,
prompt_video: str | Omit = omit,
- duration: int | Union[int, Literal["auto"]] | Union[Literal["auto"], int] | Omit = omit,
- reference_audio: Iterable[video_to_video_create_params.Hailuo3ReferenceAudio]
- | Iterable[video_to_video_create_params.Seedance2ReferenceAudio]
- | Iterable[video_to_video_create_params.Seedance2FastReferenceAudio]
- | Iterable[video_to_video_create_params.Seedance2MiniReferenceAudio]
- | Iterable[video_to_video_create_params.Seedance2_5ReferenceAudio]
+ provider_settings: video_to_video_create_params.KlingO3_4kProviderSettings
+ | video_to_video_create_params.KlingO3ProProviderSettings
+ | video_to_video_create_params.KlingO3StandardProviderSettings
| Omit = omit,
- references: Iterable[video_to_video_create_params.Hailuo3Reference]
+ references: Union[str, Iterable[video_to_video_create_params.KlingO3_4kReferencesPromptImage]]
+ | Iterable[video_to_video_create_params.Hailuo3Reference]
+ | Union[str, Iterable[video_to_video_create_params.KlingO3ProReferencesPromptImage]]
+ | Union[str, Iterable[video_to_video_create_params.KlingO3StandardReferencesPromptImage]]
| Iterable[video_to_video_create_params.Seedance2Reference]
| Iterable[video_to_video_create_params.Seedance2FastReference]
| Iterable[video_to_video_create_params.Seedance2MiniReference]
| Iterable[video_to_video_create_params.GeminiOmniFlashReference]
- | Iterable[video_to_video_create_params.Seedance2_5Reference]
| Iterable[video_to_video_create_params.GeminiOmniFlash1_1Reference]
+ | Iterable[video_to_video_create_params.Seedance2_5Reference]
+ | Omit = omit,
+ duration: int | Union[int, Literal["auto"]] | Union[Literal["auto"], int] | Omit = omit,
+ reference_audio: Iterable[video_to_video_create_params.Hailuo3ReferenceAudio]
+ | Iterable[video_to_video_create_params.Seedance2ReferenceAudio]
+ | Iterable[video_to_video_create_params.Seedance2FastReferenceAudio]
+ | Iterable[video_to_video_create_params.Seedance2MiniReferenceAudio]
+ | Iterable[video_to_video_create_params.Seedance2_5ReferenceAudio]
| Omit = omit,
reference_videos: Iterable[video_to_video_create_params.Hailuo3ReferenceVideo]
| Iterable[video_to_video_create_params.Seedance2ReferenceVideo]
@@ -718,6 +864,7 @@ def create(
resolution: Literal["768p", "2k", "768P", "2K"] | Omit = omit,
audio: bool | Omit = omit,
mode: Literal["reference", "extend", "edit"] | Omit = omit,
+ draft: bool | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -740,13 +887,15 @@ def create(
"seed": seed,
"target_aspect_ratio": target_aspect_ratio,
"prompt_video": prompt_video,
+ "provider_settings": provider_settings,
+ "references": references,
"duration": duration,
"reference_audio": reference_audio,
- "references": references,
"reference_videos": reference_videos,
"resolution": resolution,
"audio": audio,
"mode": mode,
+ "draft": draft,
},
video_to_video_create_params.VideoToVideoCreateParams,
),
@@ -845,6 +994,47 @@ async def create(
"""
...
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["klingO3_4k"],
+ prompt_text: str,
+ prompt_video: str,
+ provider_settings: video_to_video_create_params.KlingO3_4kProviderSettings | Omit = omit,
+ references: Union[str, Iterable[video_to_video_create_params.KlingO3_4kReferencesPromptImage]] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a video.
+
+ Args:
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ prompt_video: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+
+ provider_settings: Provider-specific settings for multishot video generation and video editing.
+
+ references: An optional array of reference images (up to 4). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
async def create(
self,
@@ -905,6 +1095,89 @@ async def create(
"""
...
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["klingO3_pro"],
+ prompt_text: str,
+ prompt_video: str,
+ provider_settings: video_to_video_create_params.KlingO3ProProviderSettings | Omit = omit,
+ references: Union[str, Iterable[video_to_video_create_params.KlingO3ProReferencesPromptImage]] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a video.
+
+ Args:
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ prompt_video: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+
+ provider_settings: Provider-specific settings for multishot video generation and video editing.
+
+ references: An optional array of reference images (up to 4). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["klingO3_standard"],
+ prompt_text: str,
+ prompt_video: str,
+ provider_settings: video_to_video_create_params.KlingO3StandardProviderSettings | Omit = omit,
+ references: Union[str, Iterable[video_to_video_create_params.KlingO3StandardReferencesPromptImage]]
+ | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a video.
+
+ Args:
+ prompt_text: A text prompt describing what should appear in the output video.
+
+ prompt_video: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+
+ provider_settings: Provider-specific settings for multishot video generation and video editing.
+
+ references: An optional array of reference images (up to 4). See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
async def create(
self,
@@ -1190,6 +1463,56 @@ async def create(
"""
...
+ @overload
+ async def create(
+ self,
+ *,
+ model: Literal["gemini_omni_flash_1.1"],
+ prompt_text: str,
+ video_uri: str,
+ duration: Union[Literal["auto"], int] | Omit = omit,
+ mode: Literal["reference", "extend", "edit"] | Omit = omit,
+ ratio: Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
+ | Omit = omit,
+ references: Iterable[video_to_video_create_params.GeminiOmniFlash1_1Reference] | Omit = omit,
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+ # The extra values given here take precedence over values defined on the client or passed to this method.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> AsyncNewTaskCreatedResponse:
+ """
+ This endpoint will start a new task to generate a video from a video.
+
+ Args:
+ prompt_text: A non-empty prompt describing the output or extension.
+
+ video_uri: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+
+ duration: The duration in seconds. In reference mode, this is the output video length. In
+ extend mode, this is the amount of footage added to the input video. Use "auto"
+ to let the model choose a duration.
+
+ mode: How the input video is used. `reference` generates a new video guided by the
+ input, `extend` continues it, and `edit` transforms it according to the prompt.
+
+ ratio: The resolution and aspect ratio of the output video.
+
+ references: An optional array of image references to guide the output.
+
+ extra_headers: Send extra headers
+
+ extra_query: Add additional query parameters to the request
+
+ extra_body: Add additional JSON properties to the request
+
+ timeout: Override the client-level default timeout for this request, in seconds
+ """
+ ...
+
@overload
async def create(
self,
@@ -1197,8 +1520,10 @@ async def create(
model: Literal["seedance2_5"],
prompt_video: str,
audio: bool | Omit = omit,
+ draft: bool | Omit = omit,
duration: Union[int, Literal["auto"]] | Omit = omit,
mode: Literal["reference", "extend", "edit"] | Omit = omit,
+ output_format: Literal["mp4", "mov"] | Omit = omit,
prompt_text: str | Omit = omit,
ratio: Literal[
"992:432",
@@ -1242,6 +1567,11 @@ async def create(
audio: Whether to generate audio for the video.
+ draft: Generate a cheap 480p preview instead of a full-quality video. The returned task
+ ID can later be enhanced to a 1080p video with the same content by passing it as
+ `draftTaskId` to `text_to_video`. Drafts can be enhanced within 7 days of
+ creation. Defaults to false.
+
duration: Seconds of video to generate, or `auto` to let the model choose. `auto` is
billed at the variant maximum up front; unused credits are refunded after the
generation finishes. Defaults to 5.
@@ -1252,6 +1582,9 @@ async def create(
ratio, so `ratio` may not be provided. `edit` modifies the input video in place,
requires `promptText`, requires `duration: "auto"`, and does not accept `ratio`.
+ output_format: Container for the output video. `mov` keeps high colour precision for grading
+ and compositing. Defaults to `mp4`. Draft mode only supports `mp4`.
+
prompt_text: An optional text prompt up to 15000 characters describing what should appear in
the output.
@@ -1281,56 +1614,6 @@ async def create(
"""
...
- @overload
- async def create(
- self,
- *,
- model: Literal["gemini_omni_flash_1.1"],
- prompt_text: str,
- video_uri: str,
- duration: Union[Literal["auto"], int] | Omit = omit,
- mode: Literal["reference", "extend", "edit"] | Omit = omit,
- ratio: Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
- | Omit = omit,
- references: Iterable[video_to_video_create_params.GeminiOmniFlash1_1Reference] | Omit = omit,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> AsyncNewTaskCreatedResponse:
- """
- This endpoint will start a new task to generate a video from a video.
-
- Args:
- prompt_text: A non-empty prompt describing the output or extension.
-
- video_uri: A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
- `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
- [our docs](/assets/inputs#videos) on video inputs for more information.
-
- duration: The duration in seconds. In reference mode, this is the output video length. In
- extend mode, this is the amount of footage added to the input video. Use "auto"
- to let the model choose a duration.
-
- mode: How the input video is used. `reference` generates a new video guided by the
- input, `extend` continues it, and `edit` transforms it according to the prompt.
-
- ratio: The resolution and aspect ratio of the output video.
-
- references: An optional array of image references to guide the output.
-
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- ...
-
@required_args(
["model", "video_uri"],
["model", "prompt_text", "prompt_video"],
@@ -1341,17 +1624,22 @@ async def create(
self,
*,
model: Literal["aleph2"]
+ | Literal["klingO3_4k"]
| Literal["hailuo3"]
+ | Literal["klingO3_pro"]
+ | Literal["klingO3_standard"]
| Literal["seedance2"]
| Literal["seedance2_fast"]
| Literal["seedance2_mini"]
| Literal["gemini_omni_flash"]
- | Literal["seedance2_5"]
- | Literal["gemini_omni_flash_1.1"],
+ | Literal["gemini_omni_flash_1.1"]
+ | Literal["seedance2_5"],
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", "sdr_rec709_10bit"] | Omit = omit,
+ output_format: Literal["mp4", "prores", "png_sequence", "sdr_rec709_10bit"]
+ | Literal["mp4", "mov"]
+ | Omit = omit,
prompt_text: str | Omit = omit,
prores_profile: Literal["422", "4444", "422 Proxy", "422 LT", "422 HQ", "4444 XQ"] | Omit = omit,
ratio: str
@@ -1396,6 +1684,7 @@ async def create(
"834:1112",
"720:1280",
]
+ | Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
| Literal[
"992:432",
"854:480",
@@ -1416,25 +1705,31 @@ async def create(
"1248:1664",
"1080:1920",
]
- | Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
| Omit = omit,
seed: int | Omit = omit,
target_aspect_ratio: Literal["16:9", "4:3", "3:2", "1:1", "2:3", "3:4", "9:16", "21:9"] | Omit = omit,
prompt_video: str | Omit = omit,
- duration: int | Union[int, Literal["auto"]] | Union[Literal["auto"], int] | Omit = omit,
- reference_audio: Iterable[video_to_video_create_params.Hailuo3ReferenceAudio]
- | Iterable[video_to_video_create_params.Seedance2ReferenceAudio]
- | Iterable[video_to_video_create_params.Seedance2FastReferenceAudio]
- | Iterable[video_to_video_create_params.Seedance2MiniReferenceAudio]
- | Iterable[video_to_video_create_params.Seedance2_5ReferenceAudio]
+ provider_settings: video_to_video_create_params.KlingO3_4kProviderSettings
+ | video_to_video_create_params.KlingO3ProProviderSettings
+ | video_to_video_create_params.KlingO3StandardProviderSettings
| Omit = omit,
- references: Iterable[video_to_video_create_params.Hailuo3Reference]
+ references: Union[str, Iterable[video_to_video_create_params.KlingO3_4kReferencesPromptImage]]
+ | Iterable[video_to_video_create_params.Hailuo3Reference]
+ | Union[str, Iterable[video_to_video_create_params.KlingO3ProReferencesPromptImage]]
+ | Union[str, Iterable[video_to_video_create_params.KlingO3StandardReferencesPromptImage]]
| Iterable[video_to_video_create_params.Seedance2Reference]
| Iterable[video_to_video_create_params.Seedance2FastReference]
| Iterable[video_to_video_create_params.Seedance2MiniReference]
| Iterable[video_to_video_create_params.GeminiOmniFlashReference]
- | Iterable[video_to_video_create_params.Seedance2_5Reference]
| Iterable[video_to_video_create_params.GeminiOmniFlash1_1Reference]
+ | Iterable[video_to_video_create_params.Seedance2_5Reference]
+ | Omit = omit,
+ duration: int | Union[int, Literal["auto"]] | Union[Literal["auto"], int] | Omit = omit,
+ reference_audio: Iterable[video_to_video_create_params.Hailuo3ReferenceAudio]
+ | Iterable[video_to_video_create_params.Seedance2ReferenceAudio]
+ | Iterable[video_to_video_create_params.Seedance2FastReferenceAudio]
+ | Iterable[video_to_video_create_params.Seedance2MiniReferenceAudio]
+ | Iterable[video_to_video_create_params.Seedance2_5ReferenceAudio]
| Omit = omit,
reference_videos: Iterable[video_to_video_create_params.Hailuo3ReferenceVideo]
| Iterable[video_to_video_create_params.Seedance2ReferenceVideo]
@@ -1445,6 +1740,7 @@ async def create(
resolution: Literal["768p", "2k", "768P", "2K"] | Omit = omit,
audio: bool | Omit = omit,
mode: Literal["reference", "extend", "edit"] | Omit = omit,
+ draft: bool | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -1467,13 +1763,15 @@ async def create(
"seed": seed,
"target_aspect_ratio": target_aspect_ratio,
"prompt_video": prompt_video,
+ "provider_settings": provider_settings,
+ "references": references,
"duration": duration,
"reference_audio": reference_audio,
- "references": references,
"reference_videos": reference_videos,
"resolution": resolution,
"audio": audio,
"mode": mode,
+ "draft": draft,
},
video_to_video_create_params.VideoToVideoCreateParams,
),
diff --git a/src/runwayml/types/__init__.py b/src/runwayml/types/__init__.py
index 012d56f..d954707 100644
--- a/src/runwayml/types/__init__.py
+++ b/src/runwayml/types/__init__.py
@@ -58,6 +58,7 @@
from .recipe_product_swap_response import RecipeProductSwapResponse as RecipeProductSwapResponse
from .sound_effect_create_response import SoundEffectCreateResponse as SoundEffectCreateResponse
from .text_to_speech_create_params import TextToSpeechCreateParams as TextToSpeechCreateParams
+from .video_to_audio_create_params import VideoToAudioCreateParams as VideoToAudioCreateParams
from .video_to_hdr_create_response import VideoToHdrCreateResponse as VideoToHdrCreateResponse
from .video_to_video_create_params import VideoToVideoCreateParams as VideoToVideoCreateParams
from .image_upscale_create_response import ImageUpscaleCreateResponse as ImageUpscaleCreateResponse
@@ -74,6 +75,7 @@
from .recipe_multi_shot_video_params import RecipeMultiShotVideoParams as RecipeMultiShotVideoParams
from .speech_to_speech_create_params import SpeechToSpeechCreateParams as SpeechToSpeechCreateParams
from .text_to_speech_create_response import TextToSpeechCreateResponse as TextToSpeechCreateResponse
+from .video_to_audio_create_response import VideoToAudioCreateResponse as VideoToAudioCreateResponse
from .video_to_video_create_response import VideoToVideoCreateResponse as VideoToVideoCreateResponse
from .avatar_conversation_list_params import AvatarConversationListParams as AvatarConversationListParams
from .recipe_ad_localization_response import RecipeAdLocalizationResponse as RecipeAdLocalizationResponse
diff --git a/src/runwayml/types/generate/image_create_response.py b/src/runwayml/types/generate/image_create_response.py
index 034c1b3..7c1a8e1 100644
--- a/src/runwayml/types/generate/image_create_response.py
+++ b/src/runwayml/types/generate/image_create_response.py
@@ -31,16 +31,23 @@ class RoutingResolvedInput(BaseModel):
"""
aspect_ratio: str = FieldInfo(alias="aspectRatio")
- """Aspect ratio used for routing display."""
+ """Aspect ratio resolved for routing display from the request or router default.
- ratio: str
+ When `ratio` is `auto`, the source image determines output framing.
"""
- Concrete output ratio derived from aspectRatio and resolution for the selected
- model.
+
+ ratio: str
+ """Output ratio for the selected model, as `:`.
+
+ `auto` means the output keeps the source image's framing, so no pixel size was
+ chosen.
"""
resolution: str
- """Megapixel tier used for routing display."""
+ """Megapixel tier resolved for routing display from the request or model default.
+
+ When `ratio` is `auto`, this does not specify output pixel dimensions.
+ """
class RoutingResolvedSettings(BaseModel):
diff --git a/src/runwayml/types/image_to_video_create_params.py b/src/runwayml/types/image_to_video_create_params.py
index cb1a38e..801bbb8 100644
--- a/src/runwayml/types/image_to_video_create_params.py
+++ b/src/runwayml/types/image_to_video_create_params.py
@@ -19,10 +19,39 @@
"Veo3_1PromptImagePromptImage",
"Veo3_1Fast",
"Veo3_1FastPromptImagePromptImage",
+ "KlingO3_4k",
+ "KlingO3_4kPromptImagePromptImage",
+ "KlingO3_4kProviderSettings",
+ "KlingO3_4kProviderSettingsMultiPrompt",
+ "KlingO3_4kReferencesReferenceImage",
"Hailuo3",
"Hailuo3ReferenceAudio",
+ "Kling3_0_4k",
+ "Kling3_0_4kPromptImagePromptImage",
+ "Kling3_0_4kProviderSettings",
+ "Kling3_0_4kProviderSettingsMultiPrompt",
"Happyhorse1_0",
"Happyhorse1_0PromptImagePromptImage",
+ "Kling2_5TurboPro",
+ "Kling2_5TurboProPromptImagePromptImage",
+ "Kling3_0Pro",
+ "Kling3_0ProPromptImagePromptImage",
+ "Kling3_0ProProviderSettings",
+ "Kling3_0ProProviderSettingsMultiPrompt",
+ "Kling3_0Standard",
+ "Kling3_0StandardPromptImagePromptImage",
+ "Kling3_0StandardProviderSettings",
+ "Kling3_0StandardProviderSettingsMultiPrompt",
+ "KlingO3Pro",
+ "KlingO3ProPromptImagePromptImage",
+ "KlingO3ProProviderSettings",
+ "KlingO3ProProviderSettingsMultiPrompt",
+ "KlingO3ProReferencesReferenceImage",
+ "KlingO3Standard",
+ "KlingO3StandardPromptImagePromptImage",
+ "KlingO3StandardProviderSettings",
+ "KlingO3StandardProviderSettingsMultiPrompt",
+ "KlingO3StandardReferencesReferenceImage",
"Seedance2",
"Seedance2PromptImagePromptImage",
"Seedance2ReferenceAudio",
@@ -34,9 +63,6 @@
"Seedance2MiniReferenceAudio",
"GeminiOmniFlash",
"GeminiOmniFlashPromptImagePromptImage",
- "Seedance2_5",
- "Seedance2_5PromptImagePromptImage",
- "Seedance2_5ReferenceAudio",
"GrokImagine1_5",
"GrokImagine1_5PromptImagePromptImage",
"Wan3",
@@ -49,6 +75,9 @@
"Wan3PrimeReferenceVideo",
"H3Max",
"H3MaxPromptImagePromptImage",
+ "Seedance2_5",
+ "Seedance2_5PromptImagePromptImage",
+ "Seedance2_5ReferenceAudio",
"GrokImagine1_5Lite",
"GrokImagine1_5LitePromptImagePromptImage",
]
@@ -345,6 +374,99 @@ class Veo3_1FastPromptImagePromptImage(TypedDict, total=False):
"""
+class KlingO3_4k(TypedDict, total=False):
+ model: Required[Literal["klingO3_4k"]]
+
+ prompt_image: Required[
+ Annotated[Union[str, Iterable[KlingO3_4kPromptImagePromptImage]], PropertyInfo(alias="promptImage")]
+ ]
+ """
+ You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+ """
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A text prompt describing what should appear in the output video."""
+
+ provider_settings: Annotated[KlingO3_4kProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation."""
+
+ ratio: Literal["3840:2160", "2160:3840", "2880:2880"]
+ """The resolution of the output video."""
+
+ references: Union[str, Iterable[KlingO3_4kReferencesReferenceImage]]
+ """An optional array of reference images (up to 7).
+
+ See [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class KlingO3_4kPromptImagePromptImage(TypedDict, total=False):
+ position: Required[Literal["first", "last"]]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame of the video, "last" will use the
+ image as the last frame of the video.
+ """
+
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class KlingO3_4kProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class KlingO3_4kProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation."""
+
+ multi_prompt: Annotated[Iterable[KlingO3_4kProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
+class KlingO3_4kReferencesReferenceImage(TypedDict, total=False):
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+ position: Literal["first", "last"]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame, "last" as the last frame. Omit
+ for a reference image.
+ """
+
+
class Hailuo3(TypedDict, total=False):
model: Required[Literal["hailuo3"]]
@@ -390,50 +512,506 @@ class Hailuo3ReferenceAudio(TypedDict, total=False):
type: Required[Literal["audio"]]
- uri: Required[str]
- """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:audio/mp3;base64,...`, up to 5MB) containing an encoded audio. See
+ [our docs](/assets/inputs#audio) on audio inputs for more information.
+ """
+
+
+class Kling3_0_4k(TypedDict, total=False):
+ model: Required[Literal["kling3.0_4k"]]
+
+ prompt_image: Required[
+ Annotated[Union[str, Iterable[Kling3_0_4kPromptImagePromptImage]], PropertyInfo(alias="promptImage")]
+ ]
+ """
+ You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+ """
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ cfg_scale: Annotated[float, PropertyInfo(alias="cfgScale")]
+ """Creativity/freedom scale for generation.
+
+ 0 gives the model maximum creative freedom, 1 makes it follow the prompt most
+ strictly. Defaults to 0.5.
+ """
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A text prompt describing what should appear in the output video."""
+
+ provider_settings: Annotated[Kling3_0_4kProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation."""
+
+ ratio: Literal["3840:2160", "2160:3840", "2880:2880"]
+ """The resolution of the output video."""
+
+
+class Kling3_0_4kPromptImagePromptImage(TypedDict, total=False):
+ position: Required[Literal["first", "last"]]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame of the video, "last" will use the
+ image as the last frame of the video.
+ """
+
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class Kling3_0_4kProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class Kling3_0_4kProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation."""
+
+ multi_prompt: Annotated[Iterable[Kling3_0_4kProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
+class Happyhorse1_0(TypedDict, total=False):
+ model: Required[Literal["happyhorse_1_0"]]
+
+ prompt_image: Required[
+ Annotated[Union[str, Iterable[Happyhorse1_0PromptImagePromptImage]], PropertyInfo(alias="promptImage")]
+ ]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """
+ A string up to 2500 characters (measured in UTF-16 code units) describing motion
+ or changes in the output video.
+ """
+
+ resolution: Literal["720p", "1080p", "720P", "1080P"]
+ """Output quality tier. Output aspect ratio follows the input image.
+
+ - `720P` - Deprecated: Use "720p" instead.
+ - `1080P` - Deprecated: Use "1080p" instead.
+ """
+
+
+class Happyhorse1_0PromptImagePromptImage(TypedDict, total=False):
+ position: Required[Literal["first"]]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame of the video.
+ """
+
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class Kling2_5TurboPro(TypedDict, total=False):
+ model: Required[Literal["kling2.5_turbo_pro"]]
+
+ prompt_image: Required[
+ Annotated[Union[str, Iterable[Kling2_5TurboProPromptImagePromptImage]], PropertyInfo(alias="promptImage")]
+ ]
+ """
+ Image for the first frame of the output video, or an array with first and
+ optionally last frames. Output aspect ratio follows the input image; `ratio` is
+ not supported on image-to-video. See [image inputs](/assets/inputs#images) for
+ file size limits.
+ """
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """A text prompt describing what should appear in the output video."""
+
+ cfg_scale: Annotated[float, PropertyInfo(alias="cfgScale")]
+ """Creativity/freedom scale for generation.
+
+ 0 gives the model maximum creative freedom, 1 makes it follow the prompt most
+ strictly. Defaults to 0.5.
+ """
+
+ duration: Literal[5, 10]
+ """The duration of the output video in seconds. Defaults to 5."""
+
+
+class Kling2_5TurboProPromptImagePromptImage(TypedDict, total=False):
+ position: Required[Literal["first", "last"]]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame of the video, "last" will use the
+ image as the last frame of the video.
+ """
+
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class Kling3_0Pro(TypedDict, total=False):
+ model: Required[Literal["kling3.0_pro"]]
+
+ prompt_image: Required[
+ Annotated[Union[str, Iterable[Kling3_0ProPromptImagePromptImage]], PropertyInfo(alias="promptImage")]
+ ]
+ """
+ You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+ """
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ cfg_scale: Annotated[float, PropertyInfo(alias="cfgScale")]
+ """Creativity/freedom scale for generation.
+
+ 0 gives the model maximum creative freedom, 1 makes it follow the prompt most
+ strictly. Defaults to 0.5.
+ """
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A text prompt describing what should appear in the output video."""
+
+ provider_settings: Annotated[Kling3_0ProProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation."""
+
+ ratio: Literal["1920:1080", "1080:1920", "1440:1440"]
+ """The resolution of the output video."""
+
+
+class Kling3_0ProPromptImagePromptImage(TypedDict, total=False):
+ position: Required[Literal["first", "last"]]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame of the video, "last" will use the
+ image as the last frame of the video.
+ """
+
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class Kling3_0ProProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class Kling3_0ProProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation."""
+
+ multi_prompt: Annotated[Iterable[Kling3_0ProProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
+class Kling3_0Standard(TypedDict, total=False):
+ model: Required[Literal["kling3.0_standard"]]
+
+ prompt_image: Required[
+ Annotated[Union[str, Iterable[Kling3_0StandardPromptImagePromptImage]], PropertyInfo(alias="promptImage")]
+ ]
+ """
+ You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+ """
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ cfg_scale: Annotated[float, PropertyInfo(alias="cfgScale")]
+ """Creativity/freedom scale for generation.
+
+ 0 gives the model maximum creative freedom, 1 makes it follow the prompt most
+ strictly. Defaults to 0.5.
+ """
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A text prompt describing what should appear in the output video."""
+
+ provider_settings: Annotated[Kling3_0StandardProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation."""
+
+ ratio: Literal["1280:720", "720:1280", "960:960"]
+ """The resolution of the output video."""
+
+
+class Kling3_0StandardPromptImagePromptImage(TypedDict, total=False):
+ position: Required[Literal["first", "last"]]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame of the video, "last" will use the
+ image as the last frame of the video.
+ """
+
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class Kling3_0StandardProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class Kling3_0StandardProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation."""
+
+ multi_prompt: Annotated[Iterable[Kling3_0StandardProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
+class KlingO3Pro(TypedDict, total=False):
+ model: Required[Literal["klingO3_pro"]]
+
+ prompt_image: Required[
+ Annotated[Union[str, Iterable[KlingO3ProPromptImagePromptImage]], PropertyInfo(alias="promptImage")]
+ ]
+ """
+ You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+ """
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A text prompt describing what should appear in the output video."""
+
+ provider_settings: Annotated[KlingO3ProProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation."""
+
+ ratio: Literal["1920:1080", "1080:1920", "1440:1440"]
+ """The resolution of the output video."""
+
+ references: Union[str, Iterable[KlingO3ProReferencesReferenceImage]]
+ """An optional array of reference images (up to 7).
+
+ See [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class KlingO3ProPromptImagePromptImage(TypedDict, total=False):
+ position: Required[Literal["first", "last"]]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame of the video, "last" will use the
+ image as the last frame of the video.
+ """
+
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class KlingO3ProProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class KlingO3ProProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation."""
+
+ multi_prompt: Annotated[Iterable[KlingO3ProProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
+class KlingO3ProReferencesReferenceImage(TypedDict, total=False):
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+ position: Literal["first", "last"]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame, "last" as the last frame. Omit
+ for a reference image.
+ """
+
+
+class KlingO3Standard(TypedDict, total=False):
+ model: Required[Literal["klingO3_standard"]]
+
+ prompt_image: Required[
+ Annotated[Union[str, Iterable[KlingO3StandardPromptImagePromptImage]], PropertyInfo(alias="promptImage")]
+ ]
+ """
+ You may specify an image to use as the first frame of the output video, or an
+ array with a first frame and optionally a last frame. When both keyframes are
+ provided, output aspect ratio follows the first frame. See
+ [image inputs](/assets/inputs#images) for file size limits.
+ """
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A text prompt describing what should appear in the output video."""
+
+ provider_settings: Annotated[KlingO3StandardProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation."""
+
+ ratio: Literal["1280:720", "720:1280", "960:960"]
+ """The resolution of the output video."""
+
+ references: Union[str, Iterable[KlingO3StandardReferencesReferenceImage]]
+ """An optional array of reference images (up to 7).
- `data:audio/mp3;base64,...`, up to 5MB) containing an encoded audio. See
- [our docs](/assets/inputs#audio) on audio inputs for more information.
+ See [our docs](/assets/inputs#images) on image inputs for more information.
"""
-class Happyhorse1_0(TypedDict, total=False):
- model: Required[Literal["happyhorse_1_0"]]
+class KlingO3StandardPromptImagePromptImage(TypedDict, total=False):
+ position: Required[Literal["first", "last"]]
+ """The position of the image in the output video.
- prompt_image: Required[
- Annotated[Union[str, Iterable[Happyhorse1_0PromptImagePromptImage]], PropertyInfo(alias="promptImage")]
- ]
+ "first" will use the image as the first frame of the video, "last" will use the
+ image as the last frame of the video.
+ """
+
+ uri: Required[str]
"""A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
`data:image/png;base64,...`, up to 5MB) containing an encoded image. See
[our docs](/assets/inputs#images) on image inputs for more information.
"""
- duration: int
- """The number of seconds of duration for the output video."""
- prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
- """
- A string up to 2500 characters (measured in UTF-16 code units) describing motion
- or changes in the output video.
- """
+class KlingO3StandardProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
- resolution: Literal["720p", "1080p", "720P", "1080P"]
- """Output quality tier. Output aspect ratio follows the input image.
+ prompt: Required[str]
+ """The text prompt for this segment."""
- - `720P` - Deprecated: Use "720p" instead.
- - `1080P` - Deprecated: Use "1080p" instead.
- """
+class KlingO3StandardProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation."""
-class Happyhorse1_0PromptImagePromptImage(TypedDict, total=False):
- position: Required[Literal["first"]]
- """The position of the image in the output video.
+ multi_prompt: Annotated[Iterable[KlingO3StandardProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
- "first" will use the image as the first frame of the video.
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
"""
+
+class KlingO3StandardReferencesReferenceImage(TypedDict, total=False):
uri: Required[str]
"""A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
@@ -441,6 +1019,13 @@ class Happyhorse1_0PromptImagePromptImage(TypedDict, total=False):
[our docs](/assets/inputs#images) on image inputs for more information.
"""
+ position: Literal["first", "last"]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame, "last" as the last frame. Omit
+ for a reference image.
+ """
+
class Seedance2(TypedDict, total=False):
model: Required[Literal["seedance2"]]
@@ -772,115 +1357,16 @@ class GeminiOmniFlashPromptImagePromptImage(TypedDict, total=False):
"""
-class Seedance2_5(TypedDict, total=False):
- model: Required[Literal["seedance2_5"]]
-
- prompt_image: Required[
- Annotated[Union[str, Iterable[Seedance2_5PromptImagePromptImage]], PropertyInfo(alias="promptImage")]
- ]
- """An image or array of images.
-
- Use position `first`/`last` for keyframe mode, or omit position for reference
- images. The two modes cannot be mixed.
- """
-
- audio: bool
- """Whether to generate audio for the video."""
-
- duration: Union[int, Literal["auto"]]
- """Seconds of video to generate, or `auto` to let the model choose.
-
- `auto` is billed at the variant maximum up front; unused credits are refunded
- after the generation finishes.
- """
-
- prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
- """
- An optional text prompt up to 15000 characters describing what should appear in
- the output.
- """
-
- ratio: Literal[
- "992:432",
- "854:480",
- "752:560",
- "640:640",
- "560:752",
- "480:854",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- "2206:946",
- "1920:1080",
- "1664:1248",
- "1440:1440",
- "1248:1664",
- "1080:1920",
- ]
- """The resolution of the output video.
-
- Seedance 2.5 supports 480p, 720p, and 1080p.
- """
-
- reference_audio: Annotated[Iterable[Seedance2_5ReferenceAudio], PropertyInfo(alias="referenceAudio")]
- """An optional array of audio references.
-
- The total combined duration must not exceed 30 seconds.
- """
-
- seed: int
- """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 integer for an identical request will
- produce similar results.
- """
-
-
-class Seedance2_5PromptImagePromptImage(TypedDict, total=False):
- uri: Required[str]
- """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
-
- `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
- [our docs](/assets/inputs#images) on image inputs for more information.
- """
-
- position: Literal["first", "last"]
- """The position of the image in the output video.
-
- "first" will use the image as the first frame, "last" as the last frame. Omit
- for a reference image.
- """
-
-
-class Seedance2_5ReferenceAudio(TypedDict, total=False):
- """
- An audio reference allows the model to use the audio as additional context for the output.
- """
-
- type: Required[Literal["audio"]]
-
- uri: Required[str]
- """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
-
- `data:audio/mp3;base64,...`, up to 5MB) containing an encoded audio. See
- [our docs](/assets/inputs#audio) on audio inputs for more information.
- """
-
-
class GrokImagine1_5(TypedDict, total=False):
model: Required[Literal["grok_imagine_1_5"]]
prompt_image: Required[
Annotated[Union[str, Iterable[GrokImagine1_5PromptImagePromptImage]], PropertyInfo(alias="promptImage")]
]
- """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+ """The start frame of the output video.
- `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
- [our docs](/assets/inputs#images) on image inputs for more information.
+ The output keeps its aspect ratio, which (width / height) must be between 0.4
+ and 2.5. See [our docs](/assets/inputs#images) for image input requirements.
"""
duration: int
@@ -1184,18 +1670,132 @@ class H3MaxPromptImagePromptImage(TypedDict, total=False):
"""
-class GrokImagine1_5Lite(TypedDict, total=False):
- model: Required[Literal["grok_imagine_1_5_lite"]]
+class Seedance2_5(TypedDict, total=False):
+ model: Required[Literal["seedance2_5"]]
prompt_image: Required[
- Annotated[Union[str, Iterable[GrokImagine1_5LitePromptImagePromptImage]], PropertyInfo(alias="promptImage")]
+ Annotated[Union[str, Iterable[Seedance2_5PromptImagePromptImage]], PropertyInfo(alias="promptImage")]
+ ]
+ """An image or array of images.
+
+ Use position `first`/`last` for keyframe mode, or omit position for reference
+ images. The two modes cannot be mixed.
+ """
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ draft: bool
+ """Generate a cheap 480p preview instead of a full-quality video.
+
+ The returned task ID can later be enhanced to a 1080p video with the same
+ content by passing it as `draftTaskId` to `text_to_video`. Drafts can be
+ enhanced within 7 days of creation. Defaults to false.
+ """
+
+ duration: Union[int, Literal["auto"]]
+ """Seconds of video to generate, or `auto` to let the model choose.
+
+ `auto` is billed at the variant maximum up front; unused credits are refunded
+ after the generation finishes.
+ """
+
+ output_format: Annotated[Literal["mp4", "mov"], PropertyInfo(alias="outputFormat")]
+ """Container for the output video.
+
+ `mov` keeps high colour precision for grading and compositing. Defaults to
+ `mp4`. Draft mode only supports `mp4`.
+ """
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """
+ An optional text prompt up to 15000 characters describing what should appear in
+ the output.
+ """
+
+ ratio: Literal[
+ "992:432",
+ "854:480",
+ "752:560",
+ "640:640",
+ "560:752",
+ "480:854",
+ "1470:630",
+ "1280:720",
+ "1112:834",
+ "960:960",
+ "834:1112",
+ "720:1280",
+ "2206:946",
+ "1920:1080",
+ "1664:1248",
+ "1440:1440",
+ "1248:1664",
+ "1080:1920",
]
+ """The resolution of the output video.
+
+ Seedance 2.5 supports 480p, 720p, and 1080p.
+ """
+
+ reference_audio: Annotated[Iterable[Seedance2_5ReferenceAudio], PropertyInfo(alias="referenceAudio")]
+ """An optional array of audio references.
+
+ The total combined duration must not exceed 30 seconds.
+ """
+
+ seed: int
+ """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 integer for an identical request will
+ produce similar results.
+ """
+
+
+class Seedance2_5PromptImagePromptImage(TypedDict, total=False):
+ uri: Required[str]
"""A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
`data:image/png;base64,...`, up to 5MB) containing an encoded image. See
[our docs](/assets/inputs#images) on image inputs for more information.
"""
+ position: Literal["first", "last"]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame, "last" as the last frame. Omit
+ for a reference image.
+ """
+
+
+class Seedance2_5ReferenceAudio(TypedDict, total=False):
+ """
+ An audio reference allows the model to use the audio as additional context for the output.
+ """
+
+ type: Required[Literal["audio"]]
+
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:audio/mp3;base64,...`, up to 5MB) containing an encoded audio. See
+ [our docs](/assets/inputs#audio) on audio inputs for more information.
+ """
+
+
+class GrokImagine1_5Lite(TypedDict, total=False):
+ model: Required[Literal["grok_imagine_1_5_lite"]]
+
+ prompt_image: Required[
+ Annotated[Union[str, Iterable[GrokImagine1_5LitePromptImagePromptImage]], PropertyInfo(alias="promptImage")]
+ ]
+ """The start frame of the output video.
+
+ The output keeps its aspect ratio, which (width / height) must be between 0.4
+ and 2.5. See [our docs](/assets/inputs#images) for image input requirements.
+ """
+
duration: int
"""The number of seconds of duration for the output video."""
@@ -1230,17 +1830,24 @@ class GrokImagine1_5LitePromptImagePromptImage(TypedDict, total=False):
Gen4Turbo,
Veo3_1,
Veo3_1Fast,
+ KlingO3_4k,
Hailuo3,
+ Kling3_0_4k,
Happyhorse1_0,
+ Kling2_5TurboPro,
+ Kling3_0Pro,
+ Kling3_0Standard,
+ KlingO3Pro,
+ KlingO3Standard,
Seedance2,
Seedance2Fast,
Seedance2Mini,
GeminiOmniFlash,
- Seedance2_5,
GrokImagine1_5,
Wan3,
GeminiOmniFlash1_1,
Wan3Prime,
H3Max,
+ Seedance2_5,
GrokImagine1_5Lite,
]
diff --git a/src/runwayml/types/organization/webapp/audit_log_list_params.py b/src/runwayml/types/organization/webapp/audit_log_list_params.py
index 0dc92e6..ad3bb22 100644
--- a/src/runwayml/types/organization/webapp/audit_log_list_params.py
+++ b/src/runwayml/types/organization/webapp/audit_log_list_params.py
@@ -20,12 +20,13 @@ class AuditLogListParams(TypedDict, total=False):
Restrict results to these audit log actions, as a comma-separated list of up to
50 actions. Allowed values: `UserLogin`, `PasswordChanged`,
`EmailChangeRequested`, `EmailChanged`, `UserRegistered`, `UserAccountDeleted`,
- `WorkspaceCreated`, `WorkspaceDeleted`, `MemberInvited`, `MemberRemoved`,
- `MemberRoleChanged`, `InviteAccepted`, `MemberJoinedViaDomain`,
- `TeamSettingsUpdated`, `InviteLinkToggled`, `UserGroupCreated`,
- `UserGroupUpdated`, `UserGroupDeleted`, `UserGroupArchived`,
- `UserGroupRestored`, `UserGroupMemberAdded`, `UserGroupMemberRemoved`,
- `UserGroupCreditCapUpdated`, `SSOLogin`, `SSOUserProvisioned`,
+ `WorkspaceCreated`, `WorkspaceDeleted`, `MemberInvited`,
+ `MemberInviteReminderSent`, `MemberRemoved`, `MemberRoleChanged`,
+ `InviteAccepted`, `MemberJoinedViaDomain`, `TeamSettingsUpdated`,
+ `InviteLinkToggled`, `UserGroupCreated`, `UserGroupUpdated`, `UserGroupDeleted`,
+ `UserGroupArchived`, `UserGroupRestored`, `UserGroupMemberAdded`,
+ `UserGroupMemberRemoved`, `UserGroupCreditCapUpdated`,
+ `UserGroupVisibilityUpdated`, `SSOLogin`, `SSOUserProvisioned`,
`SSOConfigCreated`, `SSOUserAutoAddedToTeam`, `SSODomainRegistrationCloned`,
`AssetCreated`, `AssetUpdated`, `AssetDeleted`, `AssetDownloaded`,
`AssetShared`, `AssetUnshared`, `CommentCreated`, `CommentEdited`,
@@ -42,9 +43,14 @@ class AuditLogListParams(TypedDict, total=False):
`AgentConnectorConnected`, `AgentConnectorDisconnected`,
`AgentConnectorAssetExported`, `AgentConnectorSessionEnabled`,
`AgentConnectorSessionDisabled`, `GenerationCreated`, `StudioSessionOpened`,
- `AccountLinkCreated`, `AccountLinkDeleted`, `AdConnectionAuthorizationStarted`,
- `AdConnectionConnected`, `AdAccountSelectionUpdated`, `AdAccountSyncRequested`,
- `AdConnectionDisconnected`, `OrganizationSettingsUpdated`,
+ `AppStudioAiRunOpened`, `AccountLinkCreated`, `AccountLinkDeleted`,
+ `AdConnectionAuthorizationStarted`, `AdConnectionConnected`,
+ `AdAccountSelectionUpdated`, `AdAccountSyncRequested`,
+ `AdConnectionDisconnected`, `AdWorkspaceOnboardingUpdated`,
+ `AdCreativeReviewSubmitted`, `AdCreativeReviewCancelled`,
+ `AdCreativeReviewDecided`, `AdCreativeApprovalRevoked`, `AdCreativeArchived`,
+ `AdCreativeUnarchived`, `AdPublishBatchQueued`, `AdPublishBatchCancelled`,
+ `AdPublishBatchRetried`, `OrganizationSettingsUpdated`,
`OrganizationDisabledModelsUpdated`, `OrganizationAgentSandboxUpdated`,
`OrganizationApiAccountReleased`, `OrganizationApiAccountMemberInvited`,
`OrganizationApiAccountMemberRoleChanged`,
@@ -52,7 +58,7 @@ class AuditLogListParams(TypedDict, total=False):
`WorkspaceTagCreated`, `WorkspaceTagUpdated`, `WorkspaceTagDeleted`,
`WorkspaceTagAssigned`, `WorkspaceTagUnassigned`, `MeteredBillingConfigUpdated`,
`MeteredBillingRefillTriggered`, `MeteredBillingRetryTriggered`,
- `EnterpriseSpendCapEnforcementUpdated`,
+ `EnterpriseSpendCapEnforcementUpdated`, `OnboardingBonusGranted`,
`AwsMarketplaceEnterpriseSubscriptionLinked`.
"""
diff --git a/src/runwayml/types/organization/webapp/audit_log_list_response.py b/src/runwayml/types/organization/webapp/audit_log_list_response.py
index 1f3cd4b..ab1bdbe 100644
--- a/src/runwayml/types/organization/webapp/audit_log_list_response.py
+++ b/src/runwayml/types/organization/webapp/audit_log_list_response.py
@@ -22,6 +22,7 @@ class AuditLogListResponse(BaseModel):
"WorkspaceCreated",
"WorkspaceDeleted",
"MemberInvited",
+ "MemberInviteReminderSent",
"MemberRemoved",
"MemberRoleChanged",
"InviteAccepted",
@@ -36,6 +37,7 @@ class AuditLogListResponse(BaseModel):
"UserGroupMemberAdded",
"UserGroupMemberRemoved",
"UserGroupCreditCapUpdated",
+ "UserGroupVisibilityUpdated",
"SSOLogin",
"SSOUserProvisioned",
"SSOConfigCreated",
@@ -83,6 +85,7 @@ class AuditLogListResponse(BaseModel):
"AgentConnectorSessionDisabled",
"GenerationCreated",
"StudioSessionOpened",
+ "AppStudioAiRunOpened",
"AccountLinkCreated",
"AccountLinkDeleted",
"AdConnectionAuthorizationStarted",
@@ -90,6 +93,16 @@ class AuditLogListResponse(BaseModel):
"AdAccountSelectionUpdated",
"AdAccountSyncRequested",
"AdConnectionDisconnected",
+ "AdWorkspaceOnboardingUpdated",
+ "AdCreativeReviewSubmitted",
+ "AdCreativeReviewCancelled",
+ "AdCreativeReviewDecided",
+ "AdCreativeApprovalRevoked",
+ "AdCreativeArchived",
+ "AdCreativeUnarchived",
+ "AdPublishBatchQueued",
+ "AdPublishBatchCancelled",
+ "AdPublishBatchRetried",
"OrganizationSettingsUpdated",
"OrganizationDisabledModelsUpdated",
"OrganizationAgentSandboxUpdated",
@@ -107,6 +120,7 @@ class AuditLogListResponse(BaseModel):
"MeteredBillingRefillTriggered",
"MeteredBillingRetryTriggered",
"EnterpriseSpendCapEnforcementUpdated",
+ "OnboardingBonusGranted",
"AwsMarketplaceEnterpriseSubscriptionLinked",
]
"""The action performed."""
diff --git a/src/runwayml/types/organization/webapp/audit_log_retrieve_response.py b/src/runwayml/types/organization/webapp/audit_log_retrieve_response.py
index ff4b8c3..aa1aca7 100644
--- a/src/runwayml/types/organization/webapp/audit_log_retrieve_response.py
+++ b/src/runwayml/types/organization/webapp/audit_log_retrieve_response.py
@@ -1,6 +1,6 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Optional
+from typing import Dict, List, Union, Optional
from datetime import datetime
from typing_extensions import Literal
@@ -14,141 +14,171 @@
class Metadata(BaseModel):
"""Action-specific details."""
- ad_account_id: Optional[object] = FieldInfo(alias="Ad account ID", default=None)
+ ad_account_id: Optional[str] = FieldInfo(alias="Ad account ID", default=None)
- ad_sync_end_date: Optional[object] = FieldInfo(alias="Ad sync end date", default=None)
+ ad_creative_id: Optional[str] = FieldInfo(alias="Ad creative ID", default=None)
- ad_sync_run_id: Optional[object] = FieldInfo(alias="Ad sync run ID", default=None)
+ ad_publish_batch_id: Optional[str] = FieldInfo(alias="Ad publish batch ID", default=None)
- ad_sync_start_date: Optional[object] = FieldInfo(alias="Ad sync start date", default=None)
+ ad_review_batch_id: Optional[str] = FieldInfo(alias="Ad review batch ID", default=None)
- agent_session_id: Optional[object] = FieldInfo(alias="Agent session ID", default=None)
+ ad_review_request_id: Optional[str] = FieldInfo(alias="Ad review request ID", default=None)
- agent_tagged: Optional[object] = FieldInfo(alias="Agent tagged", default=None)
+ ad_sync_end_date: Optional[str] = FieldInfo(alias="Ad sync end date", default=None)
- amount: Optional[object] = FieldInfo(alias="Amount", default=None)
+ ad_sync_run_id: Optional[str] = FieldInfo(alias="Ad sync run ID", default=None)
- amount_received: Optional[object] = FieldInfo(alias="Amount received", default=None)
+ ad_sync_start_date: Optional[str] = FieldInfo(alias="Ad sync start date", default=None)
- api_account: Optional[object] = FieldInfo(alias="API account", default=None)
+ ads_onboarding_answers: Optional[List[str]] = FieldInfo(alias="Ads onboarding answers", default=None)
- api_project_id: Optional[object] = FieldInfo(alias="API project ID", default=None)
+ ads_onboarding_completed: Optional[bool] = FieldInfo(alias="Ads onboarding completed", default=None)
- app_studio_app: Optional[object] = FieldInfo(alias="App Studio app", default=None)
+ agent_session_id: Optional[str] = FieldInfo(alias="Agent session ID", default=None)
- app_studio_session: Optional[object] = FieldInfo(alias="App Studio session", default=None)
+ agent_tagged: Optional[bool] = FieldInfo(alias="Agent tagged", default=None)
- application: Optional[object] = FieldInfo(alias="Application", default=None)
+ amount: Optional[float] = FieldInfo(alias="Amount", default=None)
- asset_name: Optional[object] = FieldInfo(alias="Asset name", default=None)
+ amount_received: Optional[float] = FieldInfo(alias="Amount received", default=None)
- aws_license: Optional[object] = FieldInfo(alias="AWS license", default=None)
+ api_account: Optional[str] = FieldInfo(alias="API account", default=None)
- brand_kit_id: Optional[object] = FieldInfo(alias="Brand kit ID", default=None)
+ api_project_id: Optional[str] = FieldInfo(alias="API project ID", default=None)
- comment_id: Optional[object] = FieldInfo(alias="Comment ID", default=None)
+ app_studio_app: Optional[str] = FieldInfo(alias="App Studio app", default=None)
- comment_target_id: Optional[object] = FieldInfo(alias="Comment target ID", default=None)
+ app_studio_session: Optional[str] = FieldInfo(alias="App Studio session", default=None)
- comment_target_type: Optional[object] = FieldInfo(alias="Comment target type", default=None)
+ application: Optional[str] = FieldInfo(alias="Application", default=None)
- comment_text: Optional[object] = FieldInfo(alias="Comment text", default=None)
+ asset_name: Optional[str] = FieldInfo(alias="Asset name", default=None)
- default_task_name_template: Optional[object] = FieldInfo(alias="Default task name template", default=None)
+ aws_license: Optional[str] = FieldInfo(alias="AWS license", default=None)
- destination_category_id: Optional[object] = FieldInfo(alias="Destination category ID", default=None)
+ brand_kit_id: Optional[str] = FieldInfo(alias="Brand kit ID", default=None)
- direction: Optional[object] = FieldInfo(alias="Direction", default=None)
+ comment_id: Optional[str] = FieldInfo(alias="Comment ID", default=None)
- email_domain: Optional[object] = FieldInfo(alias="Email domain", default=None)
+ comment_target_id: Optional[str] = FieldInfo(alias="Comment target ID", default=None)
- error_code: Optional[object] = FieldInfo(alias="Error code", default=None)
+ comment_target_type: Optional[str] = FieldInfo(alias="Comment target type", default=None)
- group_name: Optional[object] = FieldInfo(alias="Group name", default=None)
+ comment_text: Optional[str] = FieldInfo(alias="Comment text", default=None)
- hard_spend_cap: Optional[object] = FieldInfo(alias="Hard spend cap", default=None)
+ creatives_cancelled: Optional[float] = FieldInfo(alias="Creatives cancelled", default=None)
- invited_member: Optional[object] = FieldInfo(alias="Invited member", default=None)
+ creatives_queued: Optional[float] = FieldInfo(alias="Creatives queued", default=None)
- login_method: Optional[object] = FieldInfo(alias="Login method", default=None)
+ creatives_retried: Optional[float] = FieldInfo(alias="Creatives retried", default=None)
- media_included: Optional[object] = FieldInfo(alias="Media included", default=None)
+ default_project_discoverability: Optional[str] = FieldInfo(alias="Default project discoverability", default=None)
- member_email: Optional[object] = FieldInfo(alias="Member email", default=None)
+ default_task_name_template: Optional[str] = FieldInfo(alias="Default task name template", default=None)
- mentions: Optional[object] = FieldInfo(alias="Mentions", default=None)
+ destination_category_id: Optional[str] = FieldInfo(alias="Destination category ID", default=None)
- model: Optional[object] = FieldInfo(alias="Model", default=None)
+ direction: Optional[str] = FieldInfo(alias="Direction", default=None)
- new_role: Optional[object] = FieldInfo(alias="New role", default=None)
+ email_domain: Optional[str] = FieldInfo(alias="Email domain", default=None)
- new_text: Optional[object] = FieldInfo(alias="New text", default=None)
+ error_code: Optional[str] = FieldInfo(alias="Error code", default=None)
- new_user: Optional[object] = FieldInfo(alias="New User", default=None)
+ group_name: Optional[str] = FieldInfo(alias="Group name", default=None)
- new_value: Optional[object] = FieldInfo(alias="New value", default=None)
+ hard_spend_cap: Optional[bool] = FieldInfo(alias="Hard spend cap", default=None)
- operation: Optional[object] = FieldInfo(alias="Operation", default=None)
+ into_a_new_test_ad_set: Optional[bool] = FieldInfo(alias="Into a new test ad set", default=None)
- organization: Optional[object] = FieldInfo(alias="Organization", default=None)
+ invited_member: Optional[str] = FieldInfo(alias="Invited member", default=None)
- outcome: Optional[object] = FieldInfo(alias="Outcome", default=None)
+ language_model_or_provider: Optional[str] = FieldInfo(alias="Language model or provider", default=None)
- plan: Optional[object] = FieldInfo(alias="Plan", default=None)
+ login_method: Optional[str] = FieldInfo(alias="Login method", default=None)
- platform: Optional[object] = FieldInfo(alias="Platform", default=None)
+ media_included: Optional[bool] = FieldInfo(alias="Media included", default=None)
- previous_project_credit_cap: Optional[object] = FieldInfo(alias="Previous project credit cap", default=None)
+ member_email: Optional[str] = FieldInfo(alias="Member email", default=None)
- previous_role: Optional[object] = FieldInfo(alias="Previous role", default=None)
+ mentions: Optional[float] = FieldInfo(alias="Mentions", default=None)
- previous_text: Optional[object] = FieldInfo(alias="Previous text", default=None)
+ model: Optional[str] = FieldInfo(alias="Model", default=None)
- previous_value: Optional[object] = FieldInfo(alias="Previous value", default=None)
+ new_role: Optional[str] = FieldInfo(alias="New role", default=None)
- project_credit_cap: Optional[object] = FieldInfo(alias="Project credit cap", default=None)
+ new_text: Optional[str] = FieldInfo(alias="New text", default=None)
- provider: Optional[object] = FieldInfo(alias="Provider", default=None)
+ new_user: Optional[bool] = FieldInfo(alias="New User", default=None)
- reason: Optional[object] = FieldInfo(alias="Reason", default=None)
+ new_value: Union[str, float, bool, Dict[str, bool], None] = FieldInfo(alias="New value", default=None)
- removed_member: Optional[object] = FieldInfo(alias="Removed member", default=None)
+ operation: Optional[str] = FieldInfo(alias="Operation", default=None)
- role: Optional[object] = FieldInfo(alias="Role", default=None)
+ organization: Optional[str] = FieldInfo(alias="Organization", default=None)
- root_asset_id: Optional[object] = FieldInfo(alias="Root asset ID", default=None)
+ outcome: Optional[str] = FieldInfo(alias="Outcome", default=None)
- selected: Optional[object] = FieldInfo(alias="Selected", default=None)
+ plan: Optional[str] = FieldInfo(alias="Plan", default=None)
- setting: Optional[object] = FieldInfo(alias="Setting", default=None)
+ platform: Optional[str] = FieldInfo(alias="Platform", default=None)
- shared_with_projects: Optional[object] = FieldInfo(alias="Shared with projects", default=None)
+ platform_ad_account_id: Optional[str] = FieldInfo(alias="Platform ad account ID", default=None)
- shared_with_workspace: Optional[object] = FieldInfo(alias="Shared with workspace", default=None)
+ previous_project_credit_cap: Optional[float] = FieldInfo(alias="Previous project credit cap", default=None)
- source_category_id: Optional[object] = FieldInfo(alias="Source category ID", default=None)
+ previous_role: Optional[str] = FieldInfo(alias="Previous role", default=None)
- spend_cap: Optional[object] = FieldInfo(alias="Spend cap", default=None)
+ previous_text: Optional[str] = FieldInfo(alias="Previous text", default=None)
- spend_cap_change: Optional[object] = FieldInfo(alias="Spend cap change", default=None)
+ previous_value: Union[str, float, bool, Dict[str, bool], None] = FieldInfo(alias="Previous value", default=None)
- tag_color: Optional[object] = FieldInfo(alias="Tag color", default=None)
+ project_credit_cap: Optional[float] = FieldInfo(alias="Project credit cap", default=None)
- tag_name: Optional[object] = FieldInfo(alias="Tag name", default=None)
+ provider: Optional[str] = FieldInfo(alias="Provider", default=None)
- target_member: Optional[object] = FieldInfo(alias="Target member", default=None)
+ reason: Optional[str] = FieldInfo(alias="Reason", default=None)
- via_public_api: Optional[object] = FieldInfo(alias="Via public API", default=None)
+ removed_member: Optional[str] = FieldInfo(alias="Removed member", default=None)
- workspace: Optional[object] = FieldInfo(alias="Workspace", default=None)
+ review_decision: Optional[str] = FieldInfo(alias="Review decision", default=None)
- workspace_description: Optional[object] = FieldInfo(alias="Workspace description", default=None)
+ role: Optional[str] = FieldInfo(alias="Role", default=None)
- workspace_id: Optional[object] = FieldInfo(alias="Workspace ID", default=None)
+ root_asset_id: Optional[str] = FieldInfo(alias="Root asset ID", default=None)
- workspace_name: Optional[object] = FieldInfo(alias="Workspace name", default=None)
+ selected: Optional[bool] = FieldInfo(alias="Selected", default=None)
- workspace_picture: Optional[object] = FieldInfo(alias="Workspace picture", default=None)
+ setting: Optional[str] = FieldInfo(alias="Setting", default=None)
+
+ shared_with_projects: Optional[List[str]] = FieldInfo(alias="Shared with projects", default=None)
+
+ shared_with_workspace: Optional[bool] = FieldInfo(alias="Shared with workspace", default=None)
+
+ source_category_id: Optional[str] = FieldInfo(alias="Source category ID", default=None)
+
+ spend_cap: Optional[float] = FieldInfo(alias="Spend cap", default=None)
+
+ spend_cap_change: Optional[float] = FieldInfo(alias="Spend cap change", default=None)
+
+ submitted_via: Optional[str] = FieldInfo(alias="Submitted via", default=None)
+
+ tag_color: Optional[str] = FieldInfo(alias="Tag color", default=None)
+
+ tag_name: Optional[str] = FieldInfo(alias="Tag name", default=None)
+
+ target_member: Optional[str] = FieldInfo(alias="Target member", default=None)
+
+ via_public_api: Optional[bool] = FieldInfo(alias="Via public API", default=None)
+
+ workspace: Optional[str] = FieldInfo(alias="Workspace", default=None)
+
+ workspace_description: Optional[str] = FieldInfo(alias="Workspace description", default=None)
+
+ workspace_id: Optional[float] = FieldInfo(alias="Workspace ID", default=None)
+
+ workspace_name: Optional[str] = FieldInfo(alias="Workspace name", default=None)
+
+ workspace_picture: Optional[str] = FieldInfo(alias="Workspace picture", default=None)
class AuditLogRetrieveResponse(BaseModel):
@@ -162,6 +192,7 @@ class AuditLogRetrieveResponse(BaseModel):
"WorkspaceCreated",
"WorkspaceDeleted",
"MemberInvited",
+ "MemberInviteReminderSent",
"MemberRemoved",
"MemberRoleChanged",
"InviteAccepted",
@@ -176,6 +207,7 @@ class AuditLogRetrieveResponse(BaseModel):
"UserGroupMemberAdded",
"UserGroupMemberRemoved",
"UserGroupCreditCapUpdated",
+ "UserGroupVisibilityUpdated",
"SSOLogin",
"SSOUserProvisioned",
"SSOConfigCreated",
@@ -223,6 +255,7 @@ class AuditLogRetrieveResponse(BaseModel):
"AgentConnectorSessionDisabled",
"GenerationCreated",
"StudioSessionOpened",
+ "AppStudioAiRunOpened",
"AccountLinkCreated",
"AccountLinkDeleted",
"AdConnectionAuthorizationStarted",
@@ -230,6 +263,16 @@ class AuditLogRetrieveResponse(BaseModel):
"AdAccountSelectionUpdated",
"AdAccountSyncRequested",
"AdConnectionDisconnected",
+ "AdWorkspaceOnboardingUpdated",
+ "AdCreativeReviewSubmitted",
+ "AdCreativeReviewCancelled",
+ "AdCreativeReviewDecided",
+ "AdCreativeApprovalRevoked",
+ "AdCreativeArchived",
+ "AdCreativeUnarchived",
+ "AdPublishBatchQueued",
+ "AdPublishBatchCancelled",
+ "AdPublishBatchRetried",
"OrganizationSettingsUpdated",
"OrganizationDisabledModelsUpdated",
"OrganizationAgentSandboxUpdated",
@@ -247,6 +290,7 @@ class AuditLogRetrieveResponse(BaseModel):
"MeteredBillingRefillTriggered",
"MeteredBillingRetryTriggered",
"EnterpriseSpendCapEnforcementUpdated",
+ "OnboardingBonusGranted",
"AwsMarketplaceEnterpriseSubscriptionLinked",
]
"""The action performed."""
diff --git a/src/runwayml/types/organization/webapp_list_usage_params.py b/src/runwayml/types/organization/webapp_list_usage_params.py
index b4bc973..b4cc83d 100644
--- a/src/runwayml/types/organization/webapp_list_usage_params.py
+++ b/src/runwayml/types/organization/webapp_list_usage_params.py
@@ -3,7 +3,7 @@
from __future__ import annotations
from typing import Union
-from datetime import datetime
+from datetime import date, datetime
from typing_extensions import Required, Annotated, TypedDict
from ..._utils import PropertyInfo
@@ -12,16 +12,22 @@
class WebappListUsageParams(TypedDict, total=False):
- from_: Required[Annotated[Union[str, datetime], PropertyInfo(alias="from", format="iso8601")]]
- """Start of the time window (inclusive), ISO-8601 datetime."""
+ from_: Required[
+ Annotated[Union[Union[str, datetime], Union[str, date]], PropertyInfo(alias="from", format="iso8601")]
+ ]
+ """Start of the time window (inclusive), ISO-8601 datetime or date.
+
+ A date means midnight UTC.
+ """
limit: Required[int]
"""The maximum number of items to return per page."""
- to: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]]
- """End of the time window (exclusive), ISO-8601 datetime.
+ to: Required[Annotated[Union[Union[str, datetime], Union[str, date]], PropertyInfo(format="iso8601")]]
+ """End of the time window (exclusive), ISO-8601 datetime or date.
- A `cursor` can only narrow this window, never extend it past `to`.
+ A date means midnight UTC, so `to=2026-08-01` covers all of July 31. A `cursor`
+ can only narrow this window, never extend it past `to`.
"""
cursor: str
diff --git a/src/runwayml/types/organization_retrieve_usage_response.py b/src/runwayml/types/organization_retrieve_usage_response.py
index 6cf0e84..6e42b3a 100644
--- a/src/runwayml/types/organization_retrieve_usage_response.py
+++ b/src/runwayml/types/organization_retrieve_usage_response.py
@@ -28,6 +28,7 @@ class ResultUsedCredit(BaseModel):
"gen4.5",
"gen3a_turbo",
"gen4_turbo",
+ "recraft_v4_1_vector",
"gen4_image",
"gen4_image_turbo",
"gpt_image_2",
@@ -41,7 +42,11 @@ class ResultUsedCredit(BaseModel):
"gemini_2.5_flash",
"gemini_image3_pro",
"gemini_image3.1_flash",
+ "gemini_image3.1_flash_lite",
+ "nano_banana_2.1",
+ "recraft_v4_1_flash",
"seedream5_pro",
+ "seedream5_flash",
"seedream5_lite",
"gemini_omni_flash",
"gemini_omni_flash_1.1",
@@ -50,6 +55,7 @@ class ResultUsedCredit(BaseModel):
"eleven_v3",
"eleven_v4",
"eleven_text_to_sound_v2",
+ "mirelo_sfx_2_0",
"eleven_voice_isolation",
"eleven_voice_dubbing",
"eleven_multilingual_sts_v2",
@@ -70,7 +76,10 @@ class ResultUsedCredit(BaseModel):
"grok_imagine_1_5_lite",
"grok_imagine_image_2",
"muse_image",
+ "bria_fibo_1_5",
+ "bria_fibo_edit_1_5",
"ideogram_4_0",
+ "ideogram_4_5",
"magnific_precision_upscaler_v2",
"magnific_video_upscaler_creative",
"ruby",
@@ -124,6 +133,7 @@ class OrganizationRetrieveUsageResponse(BaseModel):
"gen4.5",
"gen3a_turbo",
"gen4_turbo",
+ "recraft_v4_1_vector",
"gen4_image",
"gen4_image_turbo",
"gpt_image_2",
@@ -137,7 +147,11 @@ class OrganizationRetrieveUsageResponse(BaseModel):
"gemini_2.5_flash",
"gemini_image3_pro",
"gemini_image3.1_flash",
+ "gemini_image3.1_flash_lite",
+ "nano_banana_2.1",
+ "recraft_v4_1_flash",
"seedream5_pro",
+ "seedream5_flash",
"seedream5_lite",
"gemini_omni_flash",
"gemini_omni_flash_1.1",
@@ -146,6 +160,7 @@ class OrganizationRetrieveUsageResponse(BaseModel):
"eleven_v3",
"eleven_v4",
"eleven_text_to_sound_v2",
+ "mirelo_sfx_2_0",
"eleven_voice_isolation",
"eleven_voice_dubbing",
"eleven_multilingual_sts_v2",
@@ -166,7 +181,10 @@ class OrganizationRetrieveUsageResponse(BaseModel):
"grok_imagine_1_5_lite",
"grok_imagine_image_2",
"muse_image",
+ "bria_fibo_1_5",
+ "bria_fibo_edit_1_5",
"ideogram_4_0",
+ "ideogram_4_5",
"magnific_precision_upscaler_v2",
"magnific_video_upscaler_creative",
"ruby",
diff --git a/src/runwayml/types/router_update_params.py b/src/runwayml/types/router_update_params.py
index 90ad68b..03abecc 100644
--- a/src/runwayml/types/router_update_params.py
+++ b/src/runwayml/types/router_update_params.py
@@ -21,7 +21,9 @@ class RouterUpdateParams(TypedDict, total=False):
"""Nested merge: omitted settings fields keep their current values.
When models is present, omitted models.mode or models.ids are preserved (sending
- only optimizeFor does not clear the model allowlist or credit ceiling).
+ only optimizeFor does not clear the model allowlist or credit ceiling). Set
+ maxCreditsPerGeneration, or one of its modalities, to null to remove those
+ credit caps.
"""
@@ -40,16 +42,16 @@ class SettingsFallback(TypedDict, total=False):
class SettingsMaxCreditsPerGeneration(TypedDict, total=False):
- """Optional per-modality credit caps, applied per generated output.
+ """Per-modality credit caps to change, applied per generated output.
- Models whose estimated per-output cost exceeds the cap are excluded.
+ Omitted modalities keep their current cap; null removes that cap.
"""
- audio: int
+ audio: Optional[int]
- image: int
+ image: Optional[int]
- video: int
+ video: Optional[int]
class SettingsModels(TypedDict, total=False):
@@ -65,7 +67,7 @@ class SettingsModels(TypedDict, total=False):
class Settings(TypedDict, total=False):
"""Nested merge: omitted settings fields keep their current values.
- When models is present, omitted models.mode or models.ids are preserved (sending only optimizeFor does not clear the model allowlist or credit ceiling).
+ When models is present, omitted models.mode or models.ids are preserved (sending only optimizeFor does not clear the model allowlist or credit ceiling). Set maxCreditsPerGeneration, or one of its modalities, to null to remove those credit caps.
"""
fallback: SettingsFallback
@@ -75,11 +77,11 @@ class Settings(TypedDict, total=False):
"""
max_credits_per_generation: Annotated[
- SettingsMaxCreditsPerGeneration, PropertyInfo(alias="maxCreditsPerGeneration")
+ Optional[SettingsMaxCreditsPerGeneration], PropertyInfo(alias="maxCreditsPerGeneration")
]
- """Optional per-modality credit caps, applied per generated output.
+ """Per-modality credit caps to change, applied per generated output.
- Models whose estimated per-output cost exceeds the cap are excluded.
+ Omitted modalities keep their current cap; null removes that cap.
"""
models: SettingsModels
diff --git a/src/runwayml/types/sound_effect_create_params.py b/src/runwayml/types/sound_effect_create_params.py
index 81ba046..6417a77 100644
--- a/src/runwayml/types/sound_effect_create_params.py
+++ b/src/runwayml/types/sound_effect_create_params.py
@@ -8,7 +8,7 @@
from .._types import SequenceNotStr
from .._utils import PropertyInfo
-__all__ = ["SoundEffectCreateParams", "SeedAudio", "ElevenTextToSoundV2"]
+__all__ = ["SoundEffectCreateParams", "SeedAudio", "MireloSfx2_0", "ElevenTextToSoundV2"]
class SeedAudio(TypedDict, total=False):
@@ -44,6 +44,28 @@ class SeedAudio(TypedDict, total=False):
"""Relative speech speed. Negative is slower, positive is faster; 0 is normal."""
+class MireloSfx2_0(TypedDict, total=False):
+ duration: Required[float]
+ """The duration of the generated audio in seconds."""
+
+ model: Required[Literal["mirelo_sfx_2_0"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """A description of the sound effects to generate."""
+
+ format: Literal["mp3", "wav", "flac"]
+ """The format of the generated audio."""
+
+ negative_prompt: Annotated[str, PropertyInfo(alias="negativePrompt")]
+ """Sounds to avoid in the generated audio."""
+
+ num_variants: Annotated[int, PropertyInfo(alias="numVariants")]
+ """The number of audio variations to generate."""
+
+ seed: int
+ """A seed for reproducible generation."""
+
+
class ElevenTextToSoundV2(TypedDict, total=False):
model: Required[Literal["eleven_text_to_sound_v2"]]
@@ -61,4 +83,4 @@ class ElevenTextToSoundV2(TypedDict, total=False):
"""Whether the output sound effect should be designed to loop seamlessly."""
-SoundEffectCreateParams: TypeAlias = Union[SeedAudio, ElevenTextToSoundV2]
+SoundEffectCreateParams: TypeAlias = Union[SeedAudio, MireloSfx2_0, ElevenTextToSoundV2]
diff --git a/src/runwayml/types/text_to_image_create_params.py b/src/runwayml/types/text_to_image_create_params.py
index aa4edfa..8bdf74d 100644
--- a/src/runwayml/types/text_to_image_create_params.py
+++ b/src/runwayml/types/text_to_image_create_params.py
@@ -5,6 +5,7 @@
from typing import Union, Iterable
from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict
+from .._types import SequenceNotStr
from .._utils import PropertyInfo
__all__ = [
@@ -27,16 +28,28 @@
"Seedream5LiteReferenceImage",
"GrokImagineImage2",
"GrokImagineImage2ReferenceImage",
+ "GeminiImage3_1FlashLite",
+ "GeminiImage3_1FlashLiteReferenceImage",
"GeminiImage3Pro",
"GeminiImage3ProReferenceImage",
"GptImage2_5Flare",
"GptImage2_5FlareReferenceImage",
"GptImage2_5Sunburst",
"GptImage2_5SunburstReferenceImage",
+ "BriaFibo1_5",
+ "BriaFibo1_5ReferenceImage",
+ "BriaFiboEdit1_5",
+ "BriaFiboEdit1_5ReferenceImage",
"Ideogram4_0",
"Ideogram4_0ReferenceImage",
"Ideogram4_5",
"Ideogram4_5ReferenceImage",
+ "Seedream5Flash",
+ "Seedream5FlashReferenceImage",
+ "NanoBanana2_1",
+ "NanoBanana2_1ReferenceImage",
+ "RecraftV4_1Flash",
+ "RecraftV4_1Vector",
"Gemini2_5Flash",
"Gemini2_5FlashReferenceImage",
]
@@ -649,6 +662,56 @@ class GrokImagineImage2ReferenceImage(TypedDict, total=False):
"""
+class GeminiImage3_1FlashLite(TypedDict, total=False):
+ model: Required[Literal["gemini_image3.1_flash_lite"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """This should describe in detail what should appear in the output."""
+
+ ratio: Required[
+ Literal[
+ "1024:1024",
+ "848:1264",
+ "1264:848",
+ "896:1200",
+ "1200:896",
+ "928:1152",
+ "1152:928",
+ "768:1376",
+ "1376:768",
+ "1584:672",
+ ]
+ ]
+ """The resolution of the output image."""
+
+ output_count: Annotated[Literal[1, 4], PropertyInfo(alias="outputCount")]
+ """The number of images to generate.
+
+ Increasing this number will affect the number of credits consumed by the
+ generation. Up to four images can be generated at once.
+ """
+
+ reference_images: Annotated[Iterable[GeminiImage3_1FlashLiteReferenceImage], PropertyInfo(alias="referenceImages")]
+ """
+ An array of up to 14 images to be used as references for the generated image
+ output. Up to five can pass `subject: "human"` and up to nine can pass
+ `subject: "object"`.
+ """
+
+
+class GeminiImage3_1FlashLiteReferenceImage(TypedDict, total=False):
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+ subject: Literal["object", "human"]
+
+ tag: str
+
+
class GeminiImage3Pro(TypedDict, total=False):
model: Required[Literal["gemini_image3_pro"]]
@@ -903,6 +966,114 @@ class GptImage2_5SunburstReferenceImage(TypedDict, total=False):
"""
+class BriaFibo1_5(TypedDict, total=False):
+ model: Required[Literal["bria_fibo_1_5"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """A non-empty text prompt describing what should appear in the output image."""
+
+ ratio: Required[
+ Literal[
+ "1024:1024",
+ "768:1152",
+ "1152:768",
+ "768:1024",
+ "1024:768",
+ "768:960",
+ "960:768",
+ "576:1024",
+ "1024:576",
+ "2048:2048",
+ "1536:2304",
+ "2304:1536",
+ "1536:2048",
+ "2048:1536",
+ "1536:1920",
+ "1920:1536",
+ "1152:2048",
+ "2048:1152",
+ ]
+ ]
+ """The resolution of the output image, expressed as `:`.
+
+ 1MP sizes cost 5 credits per image and 4MP sizes 10.
+ """
+
+ output_format: Annotated[Literal["png", "jpeg"], PropertyInfo(alias="outputFormat")]
+ """The file format of the output image. Defaults to png."""
+
+ reference_images: Annotated[Iterable[BriaFibo1_5ReferenceImage], PropertyInfo(alias="referenceImages")]
+ """Up to 1 image to guide the generation.
+
+ The prompt describes how the output should build on it.
+ """
+
+ seed: int
+ """If unspecified, a random number is chosen.
+
+ Using the same seed with an identical request reproduces the same image.
+ """
+
+
+class BriaFibo1_5ReferenceImage(TypedDict, total=False):
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class BriaFiboEdit1_5(TypedDict, total=False):
+ model: Required[Literal["bria_fibo_edit_1_5"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """An instruction describing how to edit the reference images."""
+
+ output_format: Annotated[Literal["png", "jpeg"], PropertyInfo(alias="outputFormat")]
+ """The file format of the output image. Defaults to png."""
+
+ ratio: Literal[
+ "1024:1024",
+ "768:1152",
+ "1152:768",
+ "768:1024",
+ "1024:768",
+ "768:960",
+ "960:768",
+ "576:1024",
+ "1024:576",
+ "auto",
+ ]
+ """The resolution of the output image, expressed as `:`.
+
+ Omit it or use `auto` to keep the framing of the first reference image. Choosing
+ a size requires at least 2 reference images; a single image always keeps its own
+ framing.
+ """
+
+ reference_images: Annotated[Iterable[BriaFiboEdit1_5ReferenceImage], PropertyInfo(alias="referenceImages")]
+ """1 to 4 images to edit.
+
+ With several, the instruction describes how to combine them.
+ """
+
+ seed: int
+ """If unspecified, a random number is chosen.
+
+ Using the same seed with an identical request reproduces the same image.
+ """
+
+
+class BriaFiboEdit1_5ReferenceImage(TypedDict, total=False):
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
class Ideogram4_0(TypedDict, total=False):
model: Required[Literal["ideogram_4_0"]]
@@ -1037,6 +1208,217 @@ class Ideogram4_5ReferenceImage(TypedDict, total=False):
"""
+class Seedream5Flash(TypedDict, total=False):
+ model: Required[Literal["seedream5_flash"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """A description of the image you want to generate."""
+
+ ratio: Required[
+ Literal[
+ "1024:1024",
+ "1184:896",
+ "896:1184",
+ "1376:768",
+ "768:1376",
+ "1248:832",
+ "832:1248",
+ "1568:672",
+ "2048:2048",
+ "2304:1728",
+ "1728:2304",
+ "2848:1600",
+ "1600:2848",
+ "2496:1664",
+ "1664:2496",
+ "3136:1344",
+ "auto_1k",
+ "auto_2k",
+ ]
+ ]
+ """The resolution of the output image, expressed as `:`.
+
+ Use `auto_1k` or `auto_2k` to let the model pick the aspect ratio at a fixed
+ resolution tier.
+ """
+
+ output_count: Annotated[int, PropertyInfo(alias="outputCount")]
+ """The number of images to generate.
+
+ Increasing this number will affect the number of credits consumed by the
+ generation.
+ """
+
+ output_format: Annotated[Literal["png", "jpeg"], PropertyInfo(alias="outputFormat")]
+ """The file format of the output image. Defaults to png."""
+
+ reference_images: Annotated[Iterable[Seedream5FlashReferenceImage], PropertyInfo(alias="referenceImages")]
+ """Images to edit or combine.
+
+ Refer to them in the prompt by upload order (Figure 1, Figure 2, and so on).
+ """
+
+
+class Seedream5FlashReferenceImage(TypedDict, total=False):
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class NanoBanana2_1(TypedDict, total=False):
+ model: Required[Literal["nano_banana_2.1"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """A description of the image you want to generate."""
+
+ ratio: Required[
+ Literal[
+ "1024:1024",
+ "848:1264",
+ "1264:848",
+ "896:1200",
+ "1200:896",
+ "928:1152",
+ "1152:928",
+ "768:1376",
+ "1376:768",
+ "1584:672",
+ "512:2064",
+ "2064:512",
+ "352:2928",
+ "2928:352",
+ "2048:2048",
+ "1696:2528",
+ "2528:1696",
+ "1792:2400",
+ "2400:1792",
+ "1856:2304",
+ "2304:1856",
+ "1536:2752",
+ "2752:1536",
+ "3168:1344",
+ "1024:4128",
+ "4128:1024",
+ "704:5856",
+ "5856:704",
+ "4096:4096",
+ "3392:5056",
+ "5056:3392",
+ "3584:4800",
+ "4800:3584",
+ "3712:4608",
+ "4608:3712",
+ "3072:5504",
+ "5504:3072",
+ "6336:2688",
+ "2048:8256",
+ "8256:2048",
+ "1408:11712",
+ "11712:1408",
+ ]
+ ]
+ """The resolution of the output image."""
+
+ output_count: Annotated[int, PropertyInfo(alias="outputCount")]
+ """The number of images to generate.
+
+ Increasing this number will affect the number of credits consumed by the
+ generation.
+ """
+
+ reference_images: Annotated[Iterable[NanoBanana2_1ReferenceImage], PropertyInfo(alias="referenceImages")]
+ """Up to 14 images to edit, combine, or use as references for the output."""
+
+ thinking_level: Annotated[Literal["minimal", "medium", "high"], PropertyInfo(alias="thinkingLevel")]
+ """How much the model reasons about the prompt before generating.
+
+ Defaults to medium.
+ """
+
+
+class NanoBanana2_1ReferenceImage(TypedDict, total=False):
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+ tag: str
+ """A tag to identify the reference image.
+
+ This is used to reference the image in prompt text. Must be 3-16 characters,
+ start with a letter, and use only letters, digits, and underscores.
+ """
+
+
+class RecraftV4_1Flash(TypedDict, total=False):
+ model: Required[Literal["recraft_v4_1_flash"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """A description of the image you want to generate."""
+
+ ratio: Required[
+ Literal[
+ "1024:1024",
+ "1536:768",
+ "768:1536",
+ "1280:832",
+ "832:1280",
+ "1216:896",
+ "896:1216",
+ "1152:896",
+ "896:1152",
+ "832:1344",
+ "1280:896",
+ "896:1280",
+ "1344:768",
+ "768:1344",
+ ]
+ ]
+ """The output dimensions, expressed as `:`."""
+
+ background_color: Annotated[str, PropertyInfo(alias="backgroundColor")]
+ """A preferred background color as a six-digit hex string."""
+
+ colors: SequenceNotStr[str]
+ """Preferred colors as six-digit hex strings."""
+
+ output_count: Annotated[int, PropertyInfo(alias="outputCount")]
+ """The number of images to generate. Each image is billed separately."""
+
+ output_format: Annotated[Literal["webp", "png"], PropertyInfo(alias="outputFormat")]
+ """The output file format. Defaults to webp."""
+
+ seed: int
+
+
+class RecraftV4_1Vector(TypedDict, total=False):
+ model: Required[Literal["recraft_v4_1_vector"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """Describe the vector illustration you want to generate."""
+
+ background_color: Annotated[str, PropertyInfo(alias="backgroundColor")]
+ """The preferred background color as a six-digit hex value.
+
+ This is a generation hint, not an exact color constraint; the generated
+ background may use a different shade.
+ """
+
+ colors: SequenceNotStr[str]
+ """Preferred colors as six-digit hex values, such as #FF8800."""
+
+ ratio: Literal["1024:1024", "1216:896", "896:1216", "1344:768", "768:1344"]
+ """The width and height declared by the output SVG.
+
+ Vector artwork can be scaled after generation.
+ """
+
+
class Gemini2_5Flash(TypedDict, total=False):
model: Required[Literal["gemini_2.5_flash"]]
@@ -1092,10 +1474,17 @@ class Gemini2_5FlashReferenceImage(TypedDict, total=False):
Seedream5Pro,
Seedream5Lite,
GrokImagineImage2,
+ GeminiImage3_1FlashLite,
GeminiImage3Pro,
GptImage2_5Flare,
GptImage2_5Sunburst,
+ BriaFibo1_5,
+ BriaFiboEdit1_5,
Ideogram4_0,
Ideogram4_5,
+ Seedream5Flash,
+ NanoBanana2_1,
+ RecraftV4_1Flash,
+ RecraftV4_1Vector,
Gemini2_5Flash,
]
diff --git a/src/runwayml/types/text_to_video_create_params.py b/src/runwayml/types/text_to_video_create_params.py
index 4848cc5..a73060f 100644
--- a/src/runwayml/types/text_to_video_create_params.py
+++ b/src/runwayml/types/text_to_video_create_params.py
@@ -13,11 +13,30 @@
"Gen4_5ContentModeration",
"Veo3_1",
"Veo3_1Fast",
+ "KlingO3_4k",
+ "KlingO3_4kProviderSettings",
+ "KlingO3_4kProviderSettingsMultiPrompt",
"Hailuo3",
"Hailuo3ReferenceAudio",
"Hailuo3Reference",
"Hailuo3ReferenceVideo",
+ "Kling3_0_4k",
+ "Kling3_0_4kProviderSettings",
+ "Kling3_0_4kProviderSettingsMultiPrompt",
"Happyhorse1_0",
+ "Kling2_5TurboPro",
+ "Kling3_0Pro",
+ "Kling3_0ProProviderSettings",
+ "Kling3_0ProProviderSettingsMultiPrompt",
+ "Kling3_0Standard",
+ "Kling3_0StandardProviderSettings",
+ "Kling3_0StandardProviderSettingsMultiPrompt",
+ "KlingO3Pro",
+ "KlingO3ProProviderSettings",
+ "KlingO3ProProviderSettingsMultiPrompt",
+ "KlingO3Standard",
+ "KlingO3StandardProviderSettings",
+ "KlingO3StandardProviderSettingsMultiPrompt",
"Seedance2",
"Seedance2ReferenceAudio",
"Seedance2Reference",
@@ -31,10 +50,6 @@
"Seedance2MiniReference",
"Seedance2MiniReferenceVideo",
"GeminiOmniFlash",
- "Seedance2_5",
- "Seedance2_5ReferenceAudio",
- "Seedance2_5Reference",
- "Seedance2_5ReferenceVideo",
"GrokImagine1_5",
"GrokImagine1_5ReferenceAudio",
"GrokImagine1_5Reference",
@@ -50,6 +65,10 @@
"Wan3PrimeReference",
"Wan3PrimeReferenceVideo",
"H3Max",
+ "Seedance2_5",
+ "Seedance2_5ReferenceAudio",
+ "Seedance2_5Reference",
+ "Seedance2_5ReferenceVideo",
"GrokImagine1_5Lite",
]
@@ -210,6 +229,51 @@ class Veo3_1Fast(TypedDict, total=False):
"""
+class KlingO3_4k(TypedDict, total=False):
+ model: Required[Literal["klingO3_4k"]]
+
+ ratio: Required[Literal["3840:2160", "2160:3840", "2880:2880"]]
+ """The resolution of the output video."""
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A text prompt describing what should appear in the output video."""
+
+ provider_settings: Annotated[KlingO3_4kProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation."""
+
+
+class KlingO3_4kProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class KlingO3_4kProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation."""
+
+ multi_prompt: Annotated[Iterable[KlingO3_4kProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
class Hailuo3(TypedDict, total=False):
model: Required[Literal["hailuo3"]]
@@ -293,6 +357,58 @@ class Hailuo3ReferenceVideo(TypedDict, total=False):
"""
+class Kling3_0_4k(TypedDict, total=False):
+ model: Required[Literal["kling3.0_4k"]]
+
+ ratio: Required[Literal["3840:2160", "2160:3840", "2880:2880"]]
+ """The resolution of the output video."""
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ cfg_scale: Annotated[float, PropertyInfo(alias="cfgScale")]
+ """Creativity/freedom scale for generation.
+
+ 0 gives the model maximum creative freedom, 1 makes it follow the prompt most
+ strictly. Defaults to 0.5.
+ """
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A text prompt describing what should appear in the output video."""
+
+ provider_settings: Annotated[Kling3_0_4kProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation."""
+
+
+class Kling3_0_4kProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class Kling3_0_4kProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation."""
+
+ multi_prompt: Annotated[Iterable[Kling3_0_4kProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
class Happyhorse1_0(TypedDict, total=False):
model: Required[Literal["happyhorse_1_0"]]
@@ -320,6 +436,219 @@ class Happyhorse1_0(TypedDict, total=False):
"""The resolution of the output video."""
+class Kling2_5TurboPro(TypedDict, total=False):
+ model: Required[Literal["kling2.5_turbo_pro"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """A text prompt describing what should appear in the output video."""
+
+ cfg_scale: Annotated[float, PropertyInfo(alias="cfgScale")]
+ """Creativity/freedom scale for generation.
+
+ 0 gives the model maximum creative freedom, 1 makes it follow the prompt most
+ strictly. Defaults to 0.5.
+ """
+
+ duration: Literal[5, 10]
+ """The duration of the output video in seconds. Defaults to 5."""
+
+ ratio: Literal["1920:1080", "1440:1440", "1080:1920", "1280:720", "720:720", "720:1280"]
+
+
+class Kling3_0Pro(TypedDict, total=False):
+ model: Required[Literal["kling3.0_pro"]]
+
+ ratio: Required[Literal["1920:1080", "1080:1920", "1440:1440"]]
+ """The resolution of the output video."""
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ cfg_scale: Annotated[float, PropertyInfo(alias="cfgScale")]
+ """Creativity/freedom scale for generation.
+
+ 0 gives the model maximum creative freedom, 1 makes it follow the prompt most
+ strictly. Defaults to 0.5.
+ """
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A text prompt describing what should appear in the output video."""
+
+ provider_settings: Annotated[Kling3_0ProProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation."""
+
+
+class Kling3_0ProProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class Kling3_0ProProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation."""
+
+ multi_prompt: Annotated[Iterable[Kling3_0ProProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
+class Kling3_0Standard(TypedDict, total=False):
+ model: Required[Literal["kling3.0_standard"]]
+
+ ratio: Required[Literal["1280:720", "720:1280", "960:960"]]
+ """The resolution of the output video."""
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ cfg_scale: Annotated[float, PropertyInfo(alias="cfgScale")]
+ """Creativity/freedom scale for generation.
+
+ 0 gives the model maximum creative freedom, 1 makes it follow the prompt most
+ strictly. Defaults to 0.5.
+ """
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A text prompt describing what should appear in the output video."""
+
+ provider_settings: Annotated[Kling3_0StandardProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation."""
+
+
+class Kling3_0StandardProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class Kling3_0StandardProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation."""
+
+ multi_prompt: Annotated[Iterable[Kling3_0StandardProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
+class KlingO3Pro(TypedDict, total=False):
+ model: Required[Literal["klingO3_pro"]]
+
+ ratio: Required[Literal["1920:1080", "1080:1920", "1440:1440"]]
+ """The resolution of the output video."""
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A text prompt describing what should appear in the output video."""
+
+ provider_settings: Annotated[KlingO3ProProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation."""
+
+
+class KlingO3ProProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class KlingO3ProProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation."""
+
+ multi_prompt: Annotated[Iterable[KlingO3ProProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
+class KlingO3Standard(TypedDict, total=False):
+ model: Required[Literal["klingO3_standard"]]
+
+ ratio: Required[Literal["1280:720", "720:1280", "960:960"]]
+ """The resolution of the output video."""
+
+ audio: bool
+ """Whether to generate audio for the video."""
+
+ duration: int
+ """The number of seconds of duration for the output video."""
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A text prompt describing what should appear in the output video."""
+
+ provider_settings: Annotated[KlingO3StandardProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation."""
+
+
+class KlingO3StandardProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class KlingO3StandardProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation."""
+
+ multi_prompt: Annotated[Iterable[KlingO3StandardProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
class Seedance2(TypedDict, total=False):
model: Required[Literal["seedance2"]]
@@ -660,117 +989,6 @@ class GeminiOmniFlash(TypedDict, total=False):
"""
-class Seedance2_5(TypedDict, total=False):
- model: Required[Literal["seedance2_5"]]
-
- audio: bool
- """Whether to generate audio for the video."""
-
- duration: Union[int, Literal["auto"]]
- """Seconds of video to generate, or `auto` to let the model choose.
-
- `auto` is billed at the variant maximum up front; unused credits are refunded
- after the generation finishes.
- """
-
- prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
- """
- An optional text prompt up to 15000 characters describing what should appear in
- the output.
- """
-
- ratio: Literal[
- "992:432",
- "854:480",
- "752:560",
- "640:640",
- "560:752",
- "480:854",
- "1470:630",
- "1280:720",
- "1112:834",
- "960:960",
- "834:1112",
- "720:1280",
- "2206:946",
- "1920:1080",
- "1664:1248",
- "1440:1440",
- "1248:1664",
- "1080:1920",
- ]
- """The resolution of the output video.
-
- Seedance 2.5 supports 480p, 720p, and 1080p.
- """
-
- reference_audio: Annotated[Iterable[Seedance2_5ReferenceAudio], PropertyInfo(alias="referenceAudio")]
- """An optional array of audio references.
-
- The total combined duration must be less than 30 seconds.
- """
-
- references: Iterable[Seedance2_5Reference]
- """An optional array of image references (up to 30).
-
- See [our docs](/assets/inputs#images) on image inputs for more information.
- """
-
- reference_videos: Annotated[Iterable[Seedance2_5ReferenceVideo], PropertyInfo(alias="referenceVideos")]
- """An optional array of video references.
-
- The combined duration across all video references must not exceed 30 seconds.
- See [our docs](/assets/inputs#videos) on video inputs for more information.
- """
-
- seed: int
- """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 integer for an identical request will
- produce similar results.
- """
-
-
-class Seedance2_5ReferenceAudio(TypedDict, total=False):
- """
- An audio reference allows the model to use the audio as additional context for the output.
- """
-
- type: Required[Literal["audio"]]
-
- uri: Required[str]
- """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
-
- `data:audio/mp3;base64,...`, up to 5MB) containing an encoded audio. See
- [our docs](/assets/inputs#audio) on audio inputs for more information.
- """
-
-
-class Seedance2_5Reference(TypedDict, total=False):
- uri: Required[str]
- """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
-
- `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
- [our docs](/assets/inputs#images) on image inputs for more information.
- """
-
-
-class Seedance2_5ReferenceVideo(TypedDict, total=False):
- """
- A video reference allows the model to use the video as additional context for the output.
- """
-
- type: Required[Literal["video"]]
-
- uri: Required[str]
- """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
-
- `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
- [our docs](/assets/inputs#videos) on video inputs for more information.
- """
-
-
class GrokImagine1_5(TypedDict, total=False):
model: Required[Literal["grok_imagine_1_5"]]
@@ -1087,6 +1305,139 @@ class H3Max(TypedDict, total=False):
"""
+class Seedance2_5(TypedDict, total=False):
+ model: Required[Literal["seedance2_5"]]
+
+ audio: bool
+ """Whether to generate audio for the video. Defaults to `true`."""
+
+ draft: bool
+ """Generate a cheap 480p preview instead of a full-quality video.
+
+ The returned task ID can later be enhanced to a 1080p video with the same
+ content by passing it as `draftTaskId` to `text_to_video`. Drafts can be
+ enhanced within 7 days of creation. Defaults to false.
+ """
+
+ draft_task_id: Annotated[str, PropertyInfo(alias="draftTaskId")]
+ """The ID of a succeeded draft task to enhance to 1080p.
+
+ The draft is regenerated with its original prompt, references, and settings, so
+ no other generation fields may be provided.
+ """
+
+ duration: Union[int, Literal["auto"]]
+ """Seconds of video to generate, or `auto` to let the model choose.
+
+ `auto` is billed at the variant maximum up front; unused credits are refunded
+ after the generation finishes. Defaults to 5.
+ """
+
+ output_format: Annotated[Literal["mp4", "mov"], PropertyInfo(alias="outputFormat")]
+ """Container for the output video.
+
+ `mov` keeps high colour precision for grading and compositing. Defaults to
+ `mp4`. Draft mode only supports `mp4`.
+ """
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """
+ An optional text prompt up to 15000 characters describing what should appear in
+ the output.
+ """
+
+ ratio: Literal[
+ "992:432",
+ "854:480",
+ "752:560",
+ "640:640",
+ "560:752",
+ "480:854",
+ "1470:630",
+ "1280:720",
+ "1112:834",
+ "960:960",
+ "834:1112",
+ "720:1280",
+ "2206:946",
+ "1920:1080",
+ "1664:1248",
+ "1440:1440",
+ "1248:1664",
+ "1080:1920",
+ ]
+ """The resolution of the output video.
+
+ Seedance 2.5 supports 480p, 720p, and 1080p. Defaults to `1280:720`.
+ """
+
+ reference_audio: Annotated[Iterable[Seedance2_5ReferenceAudio], PropertyInfo(alias="referenceAudio")]
+ """An optional array of audio references.
+
+ The total combined duration must be less than 30 seconds.
+ """
+
+ references: Iterable[Seedance2_5Reference]
+ """An optional array of image references (up to 30).
+
+ See [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+ reference_videos: Annotated[Iterable[Seedance2_5ReferenceVideo], PropertyInfo(alias="referenceVideos")]
+ """An optional array of video references.
+
+ The combined duration across all video references must not exceed 30 seconds.
+ See [our docs](/assets/inputs#videos) on video inputs for more information.
+ """
+
+ seed: int
+ """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 integer for an identical request will
+ produce similar results.
+ """
+
+
+class Seedance2_5ReferenceAudio(TypedDict, total=False):
+ """
+ An audio reference allows the model to use the audio as additional context for the output.
+ """
+
+ type: Required[Literal["audio"]]
+
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:audio/mp3;base64,...`, up to 5MB) containing an encoded audio. See
+ [our docs](/assets/inputs#audio) on audio inputs for more information.
+ """
+
+
+class Seedance2_5Reference(TypedDict, total=False):
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class Seedance2_5ReferenceVideo(TypedDict, total=False):
+ """
+ A video reference allows the model to use the video as additional context for the output.
+ """
+
+ type: Required[Literal["video"]]
+
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+ """
+
+
class GrokImagine1_5Lite(TypedDict, total=False):
model: Required[Literal["grok_imagine_1_5_lite"]]
@@ -1129,17 +1480,24 @@ class GrokImagine1_5Lite(TypedDict, total=False):
Gen4_5,
Veo3_1,
Veo3_1Fast,
+ KlingO3_4k,
Hailuo3,
+ Kling3_0_4k,
Happyhorse1_0,
+ Kling2_5TurboPro,
+ Kling3_0Pro,
+ Kling3_0Standard,
+ KlingO3Pro,
+ KlingO3Standard,
Seedance2,
Seedance2Fast,
Seedance2Mini,
GeminiOmniFlash,
- Seedance2_5,
GrokImagine1_5,
Wan3,
GeminiOmniFlash1_1,
Wan3Prime,
H3Max,
+ Seedance2_5,
GrokImagine1_5Lite,
]
diff --git a/src/runwayml/types/video_to_audio_create_params.py b/src/runwayml/types/video_to_audio_create_params.py
new file mode 100644
index 0000000..75818c6
--- /dev/null
+++ b/src/runwayml/types/video_to_audio_create_params.py
@@ -0,0 +1,43 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing_extensions import Literal, Required, Annotated, TypedDict
+
+from .._utils import PropertyInfo
+
+__all__ = ["VideoToAudioCreateParams"]
+
+
+class VideoToAudioCreateParams(TypedDict, total=False):
+ duration: Required[float]
+
+ model: Required[Literal["mirelo_sfx_2_0"]]
+
+ video_uri: Required[Annotated[str, PropertyInfo(alias="videoUri")]]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+ """
+
+ format: Literal["mp3", "wav", "flac"]
+ """The format of the generated audio."""
+
+ negative_prompt: Annotated[str, PropertyInfo(alias="negativePrompt")]
+ """Sounds to avoid in the generated audio."""
+
+ num_variants: Annotated[int, PropertyInfo(alias="numVariants")]
+ """The number of audio variations to generate."""
+
+ preserve_speech: Annotated[bool, PropertyInfo(alias="preserveSpeech")]
+ """Whether to preserve dialogue from the input video.
+
+ Disabling this does not guarantee speech-free output.
+ """
+
+ prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
+ """A description of the sound effects to generate."""
+
+ seed: int
+ """A seed for reproducible generation."""
diff --git a/src/runwayml/types/video_to_audio_create_response.py b/src/runwayml/types/video_to_audio_create_response.py
new file mode 100644
index 0000000..36c725e
--- /dev/null
+++ b/src/runwayml/types/video_to_audio_create_response.py
@@ -0,0 +1,28 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from pydantic import Field as FieldInfo
+
+from .._models import BaseModel
+
+__all__ = ["VideoToAudioCreateResponse", "EstimatedCost"]
+
+
+class EstimatedCost(BaseModel):
+ """The maximum credits this task may charge.
+
+ The final amount may be lower after the task completes.
+ """
+
+ credits: float
+ """Estimated cost of the generation in credits."""
+
+
+class VideoToAudioCreateResponse(BaseModel):
+ id: str
+ """The ID of the task that was created. Use this to retrieve the task later."""
+
+ estimated_cost: EstimatedCost = FieldInfo(alias="estimatedCost")
+ """The maximum credits this task may charge.
+
+ The final amount may be lower after the task completes.
+ """
diff --git a/src/runwayml/types/video_to_video_create_params.py b/src/runwayml/types/video_to_video_create_params.py
index f799160..229da5d 100644
--- a/src/runwayml/types/video_to_video_create_params.py
+++ b/src/runwayml/types/video_to_video_create_params.py
@@ -16,10 +16,22 @@
"Variant0KeyframeUnionMember0Range",
"Variant0KeyframeUnionMember1",
"Variant0KeyframeUnionMember1Range",
+ "KlingO3_4k",
+ "KlingO3_4kProviderSettings",
+ "KlingO3_4kProviderSettingsMultiPrompt",
+ "KlingO3_4kReferencesPromptImage",
"Hailuo3",
"Hailuo3ReferenceAudio",
"Hailuo3Reference",
"Hailuo3ReferenceVideo",
+ "KlingO3Pro",
+ "KlingO3ProProviderSettings",
+ "KlingO3ProProviderSettingsMultiPrompt",
+ "KlingO3ProReferencesPromptImage",
+ "KlingO3Standard",
+ "KlingO3StandardProviderSettings",
+ "KlingO3StandardProviderSettingsMultiPrompt",
+ "KlingO3StandardReferencesPromptImage",
"Seedance2",
"Seedance2ReferenceAudio",
"Seedance2Reference",
@@ -34,12 +46,12 @@
"Seedance2MiniReferenceVideo",
"GeminiOmniFlash",
"GeminiOmniFlashReference",
+ "GeminiOmniFlash1_1",
+ "GeminiOmniFlash1_1Reference",
"Seedance2_5",
"Seedance2_5ReferenceAudio",
"Seedance2_5Reference",
"Seedance2_5ReferenceVideo",
- "GeminiOmniFlash1_1",
- "GeminiOmniFlash1_1Reference",
]
@@ -197,6 +209,77 @@ class Variant0KeyframeUnionMember1(TypedDict, total=False):
Variant0Keyframe: TypeAlias = Union[Variant0KeyframeUnionMember0, Variant0KeyframeUnionMember1]
+class KlingO3_4k(TypedDict, total=False):
+ model: Required[Literal["klingO3_4k"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """A text prompt describing what should appear in the output video."""
+
+ prompt_video: Required[Annotated[str, PropertyInfo(alias="promptVideo")]]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+ """
+
+ provider_settings: Annotated[KlingO3_4kProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation and video editing."""
+
+ references: Union[str, Iterable[KlingO3_4kReferencesPromptImage]]
+ """An optional array of reference images (up to 4).
+
+ See [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class KlingO3_4kProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class KlingO3_4kProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation and video editing."""
+
+ keep_original_sound: Annotated[bool, PropertyInfo(alias="keepOriginalSound")]
+ """Whether to preserve the original audio when editing a video.
+
+ Only applicable for video-to-video. Defaults to true.
+ """
+
+ multi_prompt: Annotated[Iterable[KlingO3_4kProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
+class KlingO3_4kReferencesPromptImage(TypedDict, total=False):
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+ position: Literal["first", "last"]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame, "last" as the last frame. Omit
+ for a reference image.
+ """
+
+
class Hailuo3(TypedDict, total=False):
model: Required[Literal["hailuo3"]]
@@ -287,6 +370,148 @@ class Hailuo3ReferenceVideo(TypedDict, total=False):
"""
+class KlingO3Pro(TypedDict, total=False):
+ model: Required[Literal["klingO3_pro"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """A text prompt describing what should appear in the output video."""
+
+ prompt_video: Required[Annotated[str, PropertyInfo(alias="promptVideo")]]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+ """
+
+ provider_settings: Annotated[KlingO3ProProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation and video editing."""
+
+ references: Union[str, Iterable[KlingO3ProReferencesPromptImage]]
+ """An optional array of reference images (up to 4).
+
+ See [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class KlingO3ProProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class KlingO3ProProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation and video editing."""
+
+ keep_original_sound: Annotated[bool, PropertyInfo(alias="keepOriginalSound")]
+ """Whether to preserve the original audio when editing a video.
+
+ Only applicable for video-to-video. Defaults to true.
+ """
+
+ multi_prompt: Annotated[Iterable[KlingO3ProProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
+class KlingO3ProReferencesPromptImage(TypedDict, total=False):
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+ position: Literal["first", "last"]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame, "last" as the last frame. Omit
+ for a reference image.
+ """
+
+
+class KlingO3Standard(TypedDict, total=False):
+ model: Required[Literal["klingO3_standard"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """A text prompt describing what should appear in the output video."""
+
+ prompt_video: Required[Annotated[str, PropertyInfo(alias="promptVideo")]]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+ """
+
+ provider_settings: Annotated[KlingO3StandardProviderSettings, PropertyInfo(alias="providerSettings")]
+ """Provider-specific settings for multishot video generation and video editing."""
+
+ references: Union[str, Iterable[KlingO3StandardReferencesPromptImage]]
+ """An optional array of reference images (up to 4).
+
+ See [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
+class KlingO3StandardProviderSettingsMultiPrompt(TypedDict, total=False):
+ duration: Required[int]
+ """Duration in seconds for this segment."""
+
+ prompt: Required[str]
+ """The text prompt for this segment."""
+
+
+class KlingO3StandardProviderSettings(TypedDict, total=False):
+ """Provider-specific settings for multishot video generation and video editing."""
+
+ keep_original_sound: Annotated[bool, PropertyInfo(alias="keepOriginalSound")]
+ """Whether to preserve the original audio when editing a video.
+
+ Only applicable for video-to-video. Defaults to true.
+ """
+
+ multi_prompt: Annotated[Iterable[KlingO3StandardProviderSettingsMultiPrompt], PropertyInfo(alias="multiPrompt")]
+ """An array of prompt segments for multishot video generation.
+
+ Each segment has its own prompt and duration. Total duration across all segments
+ must be between 3 and 15 seconds. `promptText` is still required when `shotType`
+ is `"intelligence"`.
+ """
+
+ shot_type: Annotated[Literal["intelligence", "customize"], PropertyInfo(alias="shotType")]
+ """Shot transition type for multishot videos.
+
+ Defaults to "customize" when multiPrompt is provided.
+ """
+
+
+class KlingO3StandardReferencesPromptImage(TypedDict, total=False):
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+ position: Literal["first", "last"]
+ """The position of the image in the output video.
+
+ "first" will use the image as the first frame, "last" as the last frame. Omit
+ for a reference image.
+ """
+
+
class Seedance2(TypedDict, total=False):
model: Required[Literal["seedance2"]]
@@ -658,6 +883,50 @@ class GeminiOmniFlashReference(TypedDict, total=False):
"""
+class GeminiOmniFlash1_1(TypedDict, total=False):
+ model: Required[Literal["gemini_omni_flash_1.1"]]
+
+ prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
+ """A non-empty prompt describing the output or extension."""
+
+ video_uri: Required[Annotated[str, PropertyInfo(alias="videoUri")]]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
+ [our docs](/assets/inputs#videos) on video inputs for more information.
+ """
+
+ duration: Union[Literal["auto"], int]
+ """The duration in seconds.
+
+ In reference mode, this is the output video length. In extend mode, this is the
+ amount of footage added to the input video. Use "auto" to let the model choose a
+ duration.
+ """
+
+ mode: Literal["reference", "extend", "edit"]
+ """How the input video is used.
+
+ `reference` generates a new video guided by the input, `extend` continues it,
+ and `edit` transforms it according to the prompt.
+ """
+
+ ratio: Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
+ """The resolution and aspect ratio of the output video."""
+
+ references: Iterable[GeminiOmniFlash1_1Reference]
+ """An optional array of image references to guide the output."""
+
+
+class GeminiOmniFlash1_1Reference(TypedDict, total=False):
+ uri: Required[str]
+ """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
+
+ `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
+ [our docs](/assets/inputs#images) on image inputs for more information.
+ """
+
+
class Seedance2_5(TypedDict, total=False):
model: Required[Literal["seedance2_5"]]
@@ -671,6 +940,14 @@ class Seedance2_5(TypedDict, total=False):
audio: bool
"""Whether to generate audio for the video."""
+ draft: bool
+ """Generate a cheap 480p preview instead of a full-quality video.
+
+ The returned task ID can later be enhanced to a 1080p video with the same
+ content by passing it as `draftTaskId` to `text_to_video`. Drafts can be
+ enhanced within 7 days of creation. Defaults to false.
+ """
+
duration: Union[int, Literal["auto"]]
"""Seconds of video to generate, or `auto` to let the model choose.
@@ -688,6 +965,13 @@ class Seedance2_5(TypedDict, total=False):
requires `duration: "auto"`, and does not accept `ratio`.
"""
+ output_format: Annotated[Literal["mp4", "mov"], PropertyInfo(alias="outputFormat")]
+ """Container for the output video.
+
+ `mov` keeps high colour precision for grading and compositing. Defaults to
+ `mp4`. Draft mode only supports `mp4`.
+ """
+
prompt_text: Annotated[str, PropertyInfo(alias="promptText")]
"""
An optional text prompt up to 15000 characters describing what should appear in
@@ -786,50 +1070,16 @@ class Seedance2_5ReferenceVideo(TypedDict, total=False):
"""
-class GeminiOmniFlash1_1(TypedDict, total=False):
- model: Required[Literal["gemini_omni_flash_1.1"]]
-
- prompt_text: Required[Annotated[str, PropertyInfo(alias="promptText")]]
- """A non-empty prompt describing the output or extension."""
-
- video_uri: Required[Annotated[str, PropertyInfo(alias="videoUri")]]
- """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
-
- `data:video/mp4;base64,...`, up to 5MB) containing an encoded video. See
- [our docs](/assets/inputs#videos) on video inputs for more information.
- """
-
- duration: Union[Literal["auto"], int]
- """The duration in seconds.
-
- In reference mode, this is the output video length. In extend mode, this is the
- amount of footage added to the input video. Use "auto" to let the model choose a
- duration.
- """
-
- mode: Literal["reference", "extend", "edit"]
- """How the input video is used.
-
- `reference` generates a new video guided by the input, `extend` continues it,
- and `edit` transforms it according to the prompt.
- """
-
- ratio: Literal["640:360", "360:640", "1280:720", "720:1280", "1920:1080", "1080:1920", "3840:2160", "2160:3840"]
- """The resolution and aspect ratio of the output video."""
-
- references: Iterable[GeminiOmniFlash1_1Reference]
- """An optional array of image references to guide the output."""
-
-
-class GeminiOmniFlash1_1Reference(TypedDict, total=False):
- uri: Required[str]
- """A HTTPS URL, Runway upload URI, or base64 data URI (e.g.
-
- `data:image/png;base64,...`, up to 5MB) containing an encoded image. See
- [our docs](/assets/inputs#images) on image inputs for more information.
- """
-
-
VideoToVideoCreateParams: TypeAlias = Union[
- Variant0, Hailuo3, Seedance2, Seedance2Fast, Seedance2Mini, GeminiOmniFlash, Seedance2_5, GeminiOmniFlash1_1
+ Variant0,
+ KlingO3_4k,
+ Hailuo3,
+ KlingO3Pro,
+ KlingO3Standard,
+ Seedance2,
+ Seedance2Fast,
+ Seedance2Mini,
+ GeminiOmniFlash,
+ GeminiOmniFlash1_1,
+ Seedance2_5,
]
diff --git a/tests/api_resources/test_image_to_video.py b/tests/api_resources/test_image_to_video.py
index b674437..3efed1d 100644
--- a/tests/api_resources/test_image_to_video.py
+++ b/tests/api_resources/test_image_to_video.py
@@ -230,36 +230,38 @@ def test_streaming_response_create_overload_4(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_5(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="hailuo3",
+ model="klingO3_4k",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_5(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="hailuo3",
+ model="klingO3_4k",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
- duration=5,
- ratio="adaptive",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- resolution="2k",
+ audio=True,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ ratio="3840:2160",
+ references="https://example.com/image.jpg",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_5(self, client: RunwayML) -> None:
response = client.image_to_video.with_raw_response.create(
- model="hailuo3",
+ model="klingO3_4k",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
)
assert response.is_closed is True
@@ -270,9 +272,8 @@ def test_raw_response_create_overload_5(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_5(self, client: RunwayML) -> None:
with client.image_to_video.with_streaming_response.create(
- model="hailuo3",
+ model="klingO3_4k",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -285,27 +286,36 @@ def test_streaming_response_create_overload_5(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_6(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="happyhorse_1_0",
+ model="hailuo3",
prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_6(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="happyhorse_1_0",
+ model="hailuo3",
prompt_image="https://example.com/image.jpg",
- duration=3,
- prompt_text="xx",
- resolution="720p",
+ prompt_text="x",
+ duration=5,
+ ratio="adaptive",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ resolution="2k",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_6(self, client: RunwayML) -> None:
response = client.image_to_video.with_raw_response.create(
- model="happyhorse_1_0",
+ model="hailuo3",
prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
)
assert response.is_closed is True
@@ -316,8 +326,9 @@ def test_raw_response_create_overload_6(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_6(self, client: RunwayML) -> None:
with client.image_to_video.with_streaming_response.create(
- model="happyhorse_1_0",
+ model="hailuo3",
prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -330,7 +341,7 @@ def test_streaming_response_create_overload_6(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_7(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="seedance2",
+ model="kling3.0_4k",
prompt_image="https://example.com/image.jpg",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@@ -338,26 +349,29 @@ def test_method_create_overload_7(self, client: RunwayML) -> None:
@parametrize
def test_method_create_with_all_params_overload_7(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="seedance2",
+ model="kling3.0_4k",
prompt_image="https://example.com/image.jpg",
audio=True,
- duration="auto",
- prompt_text="x",
- ratio="992:432",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- seed=0,
+ cfg_scale=0,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ ratio="3840:2160",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_7(self, client: RunwayML) -> None:
response = client.image_to_video.with_raw_response.create(
- model="seedance2",
+ model="kling3.0_4k",
prompt_image="https://example.com/image.jpg",
)
@@ -369,7 +383,7 @@ def test_raw_response_create_overload_7(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_7(self, client: RunwayML) -> None:
with client.image_to_video.with_streaming_response.create(
- model="seedance2",
+ model="kling3.0_4k",
prompt_image="https://example.com/image.jpg",
) as response:
assert not response.is_closed
@@ -383,7 +397,7 @@ def test_streaming_response_create_overload_7(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_8(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="seedance2_fast",
+ model="happyhorse_1_0",
prompt_image="https://example.com/image.jpg",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@@ -391,26 +405,18 @@ def test_method_create_overload_8(self, client: RunwayML) -> None:
@parametrize
def test_method_create_with_all_params_overload_8(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="seedance2_fast",
+ model="happyhorse_1_0",
prompt_image="https://example.com/image.jpg",
- audio=True,
- duration="auto",
- prompt_text="x",
- ratio="992:432",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- seed=0,
+ duration=3,
+ prompt_text="xx",
+ resolution="720p",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_8(self, client: RunwayML) -> None:
response = client.image_to_video.with_raw_response.create(
- model="seedance2_fast",
+ model="happyhorse_1_0",
prompt_image="https://example.com/image.jpg",
)
@@ -422,7 +428,7 @@ def test_raw_response_create_overload_8(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_8(self, client: RunwayML) -> None:
with client.image_to_video.with_streaming_response.create(
- model="seedance2_fast",
+ model="happyhorse_1_0",
prompt_image="https://example.com/image.jpg",
) as response:
assert not response.is_closed
@@ -436,35 +442,29 @@ def test_streaming_response_create_overload_8(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_9(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="seedance2_mini",
+ model="kling2.5_turbo_pro",
prompt_image="https://example.com/image.jpg",
+ prompt_text="xx",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_9(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="seedance2_mini",
+ model="kling2.5_turbo_pro",
prompt_image="https://example.com/image.jpg",
- audio=True,
- duration="auto",
- prompt_text="x",
- ratio="992:432",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- seed=0,
+ prompt_text="xx",
+ cfg_scale=0,
+ duration=5,
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_9(self, client: RunwayML) -> None:
response = client.image_to_video.with_raw_response.create(
- model="seedance2_mini",
+ model="kling2.5_turbo_pro",
prompt_image="https://example.com/image.jpg",
+ prompt_text="xx",
)
assert response.is_closed is True
@@ -475,8 +475,9 @@ def test_raw_response_create_overload_9(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_9(self, client: RunwayML) -> None:
with client.image_to_video.with_streaming_response.create(
- model="seedance2_mini",
+ model="kling2.5_turbo_pro",
prompt_image="https://example.com/image.jpg",
+ prompt_text="xx",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -489,7 +490,7 @@ def test_streaming_response_create_overload_9(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_10(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="gemini_omni_flash",
+ model="kling3.0_pro",
prompt_image="https://example.com/image.jpg",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@@ -497,18 +498,29 @@ def test_method_create_overload_10(self, client: RunwayML) -> None:
@parametrize
def test_method_create_with_all_params_overload_10(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="gemini_omni_flash",
+ model="kling3.0_pro",
prompt_image="https://example.com/image.jpg",
+ audio=True,
+ cfg_scale=0,
duration=3,
- prompt_text="x",
- ratio="1280:720",
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ ratio="1920:1080",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_10(self, client: RunwayML) -> None:
response = client.image_to_video.with_raw_response.create(
- model="gemini_omni_flash",
+ model="kling3.0_pro",
prompt_image="https://example.com/image.jpg",
)
@@ -520,7 +532,7 @@ def test_raw_response_create_overload_10(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_10(self, client: RunwayML) -> None:
with client.image_to_video.with_streaming_response.create(
- model="gemini_omni_flash",
+ model="kling3.0_pro",
prompt_image="https://example.com/image.jpg",
) as response:
assert not response.is_closed
@@ -534,7 +546,7 @@ def test_streaming_response_create_overload_10(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_11(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="seedance2_5",
+ model="kling3.0_standard",
prompt_image="https://example.com/image.jpg",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@@ -542,26 +554,29 @@ def test_method_create_overload_11(self, client: RunwayML) -> None:
@parametrize
def test_method_create_with_all_params_overload_11(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="seedance2_5",
+ model="kling3.0_standard",
prompt_image="https://example.com/image.jpg",
audio=True,
- duration="auto",
- prompt_text="x",
- ratio="992:432",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- seed=0,
+ cfg_scale=0,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ ratio="1280:720",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_11(self, client: RunwayML) -> None:
response = client.image_to_video.with_raw_response.create(
- model="seedance2_5",
+ model="kling3.0_standard",
prompt_image="https://example.com/image.jpg",
)
@@ -573,7 +588,7 @@ def test_raw_response_create_overload_11(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_11(self, client: RunwayML) -> None:
with client.image_to_video.with_streaming_response.create(
- model="seedance2_5",
+ model="kling3.0_standard",
prompt_image="https://example.com/image.jpg",
) as response:
assert not response.is_closed
@@ -587,7 +602,7 @@ def test_streaming_response_create_overload_11(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_12(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="grok_imagine_1_5",
+ model="klingO3_pro",
prompt_image="https://example.com/image.jpg",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@@ -595,18 +610,29 @@ def test_method_create_overload_12(self, client: RunwayML) -> None:
@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",
+ model="klingO3_pro",
prompt_image="https://example.com/image.jpg",
- duration=1,
- prompt_text="x",
- resolution="480p",
+ audio=True,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ ratio="1920:1080",
+ references="https://example.com/image.jpg",
)
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",
+ model="klingO3_pro",
prompt_image="https://example.com/image.jpg",
)
@@ -618,7 +644,7 @@ def test_raw_response_create_overload_12(self, client: RunwayML) -> None:
@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",
+ model="klingO3_pro",
prompt_image="https://example.com/image.jpg",
) as response:
assert not response.is_closed
@@ -632,42 +658,38 @@ def test_streaming_response_create_overload_12(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_13(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="wan3",
+ model="klingO3_standard",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_13(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="wan3",
+ model="klingO3_standard",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
audio=True,
- duration=2,
- ratio="832:480",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- reference_videos=[
- {
- "type": "video",
- "uri": "https://example.com/video.mp4",
- }
- ],
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ ratio="1280:720",
+ references="https://example.com/image.jpg",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_13(self, client: RunwayML) -> None:
response = client.image_to_video.with_raw_response.create(
- model="wan3",
+ model="klingO3_standard",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
)
assert response.is_closed is True
@@ -678,9 +700,8 @@ def test_raw_response_create_overload_13(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_13(self, client: RunwayML) -> None:
with client.image_to_video.with_streaming_response.create(
- model="wan3",
+ model="klingO3_standard",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -693,29 +714,35 @@ def test_streaming_response_create_overload_13(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_14(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="gemini_omni_flash_1.1",
+ model="seedance2",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_14(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="gemini_omni_flash_1.1",
+ model="seedance2",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
+ audio=True,
duration="auto",
- ratio="640:360",
+ prompt_text="x",
+ ratio="992:432",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ seed=0,
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_14(self, client: RunwayML) -> None:
response = client.image_to_video.with_raw_response.create(
- model="gemini_omni_flash_1.1",
+ model="seedance2",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
)
assert response.is_closed is True
@@ -726,9 +753,8 @@ def test_raw_response_create_overload_14(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_14(self, client: RunwayML) -> None:
with client.image_to_video.with_streaming_response.create(
- model="gemini_omni_flash_1.1",
+ model="seedance2",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -741,42 +767,35 @@ def test_streaming_response_create_overload_14(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_15(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="wan3_prime",
+ model="seedance2_fast",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_15(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="wan3_prime",
+ model="seedance2_fast",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
audio=True,
- duration=2,
- ratio="832:480",
+ duration="auto",
+ prompt_text="x",
+ ratio="992:432",
reference_audio=[
{
"type": "audio",
"uri": "https://example.com/audio.mp3",
}
],
- reference_videos=[
- {
- "type": "video",
- "uri": "https://example.com/video.mp4",
- }
- ],
+ seed=0,
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_15(self, client: RunwayML) -> None:
response = client.image_to_video.with_raw_response.create(
- model="wan3_prime",
+ model="seedance2_fast",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
)
assert response.is_closed is True
@@ -787,9 +806,8 @@ def test_raw_response_create_overload_15(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_15(self, client: RunwayML) -> None:
with client.image_to_video.with_streaming_response.create(
- model="wan3_prime",
+ model="seedance2_fast",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -802,21 +820,26 @@ def test_streaming_response_create_overload_15(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_16(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="h3_max",
+ model="seedance2_mini",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_16(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="h3_max",
+ model="seedance2_mini",
prompt_image="https://example.com/image.jpg",
+ audio=True,
+ duration="auto",
prompt_text="x",
- duration=5,
- prompt_expansion_mode="disabled",
- resolution="768p",
+ ratio="992:432",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
seed=0,
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@@ -824,9 +847,8 @@ def test_method_create_with_all_params_overload_16(self, client: RunwayML) -> No
@parametrize
def test_raw_response_create_overload_16(self, client: RunwayML) -> None:
response = client.image_to_video.with_raw_response.create(
- model="h3_max",
+ model="seedance2_mini",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
)
assert response.is_closed is True
@@ -837,9 +859,8 @@ def test_raw_response_create_overload_16(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_16(self, client: RunwayML) -> None:
with client.image_to_video.with_streaming_response.create(
- model="h3_max",
+ model="seedance2_mini",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -852,7 +873,7 @@ def test_streaming_response_create_overload_16(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_17(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="grok_imagine_1_5_lite",
+ model="gemini_omni_flash",
prompt_image="https://example.com/image.jpg",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@@ -860,18 +881,18 @@ def test_method_create_overload_17(self, client: RunwayML) -> None:
@parametrize
def test_method_create_with_all_params_overload_17(self, client: RunwayML) -> None:
image_to_video = client.image_to_video.create(
- model="grok_imagine_1_5_lite",
+ model="gemini_omni_flash",
prompt_image="https://example.com/image.jpg",
- duration=1,
+ duration=3,
prompt_text="x",
- ratio="auto_480p",
+ ratio="1280:720",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_17(self, client: RunwayML) -> None:
response = client.image_to_video.with_raw_response.create(
- model="grok_imagine_1_5_lite",
+ model="gemini_omni_flash",
prompt_image="https://example.com/image.jpg",
)
@@ -883,7 +904,7 @@ def test_raw_response_create_overload_17(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_17(self, client: RunwayML) -> None:
with client.image_to_video.with_streaming_response.create(
- model="grok_imagine_1_5_lite",
+ model="gemini_omni_flash",
prompt_image="https://example.com/image.jpg",
) as response:
assert not response.is_closed
@@ -894,45 +915,564 @@ def test_streaming_response_create_overload_17(self, client: RunwayML) -> None:
assert cast(Any, response.is_closed) is True
-
-class TestAsyncImageToVideo:
- parametrize = pytest.mark.parametrize(
- "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
- )
-
@parametrize
- async def test_method_create_overload_1(self, async_client: AsyncRunwayML) -> None:
- image_to_video = await async_client.image_to_video.create(
- duration=2,
- model="gen4.5",
+ def test_method_create_overload_18(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_18(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_18(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_18(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
+
+ @parametrize
+ def test_method_create_overload_19(self, client: RunwayML) -> None:
+ image_to_video = client.image_to_video.create(
+ model="wan3",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_19(self, client: RunwayML) -> None:
+ image_to_video = client.image_to_video.create(
+ model="wan3",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ audio=True,
+ duration=2,
+ ratio="832:480",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ reference_videos=[
+ {
+ "type": "video",
+ "uri": "https://example.com/video.mp4",
+ }
+ ],
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_19(self, client: RunwayML) -> None:
+ response = client.image_to_video.with_raw_response.create(
+ model="wan3",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ )
+
+ 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_19(self, client: RunwayML) -> None:
+ with client.image_to_video.with_streaming_response.create(
+ model="wan3",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ ) 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
+
+ @parametrize
+ def test_method_create_overload_20(self, client: RunwayML) -> None:
+ image_to_video = client.image_to_video.create(
+ model="gemini_omni_flash_1.1",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_20(self, client: RunwayML) -> None:
+ image_to_video = client.image_to_video.create(
+ model="gemini_omni_flash_1.1",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ duration="auto",
+ ratio="640:360",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_20(self, client: RunwayML) -> None:
+ response = client.image_to_video.with_raw_response.create(
+ model="gemini_omni_flash_1.1",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ )
+
+ 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_20(self, client: RunwayML) -> None:
+ with client.image_to_video.with_streaming_response.create(
+ model="gemini_omni_flash_1.1",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ ) 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
+
+ @parametrize
+ def test_method_create_overload_21(self, client: RunwayML) -> None:
+ image_to_video = client.image_to_video.create(
+ model="wan3_prime",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_21(self, client: RunwayML) -> None:
+ image_to_video = client.image_to_video.create(
+ model="wan3_prime",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ audio=True,
+ duration=2,
+ ratio="832:480",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ reference_videos=[
+ {
+ "type": "video",
+ "uri": "https://example.com/video.mp4",
+ }
+ ],
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_21(self, client: RunwayML) -> None:
+ response = client.image_to_video.with_raw_response.create(
+ model="wan3_prime",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ )
+
+ 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_21(self, client: RunwayML) -> None:
+ with client.image_to_video.with_streaming_response.create(
+ model="wan3_prime",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ ) 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
+
+ @parametrize
+ def test_method_create_overload_22(self, client: RunwayML) -> None:
+ image_to_video = client.image_to_video.create(
+ model="h3_max",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_22(self, client: RunwayML) -> None:
+ image_to_video = client.image_to_video.create(
+ model="h3_max",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ duration=5,
+ prompt_expansion_mode="disabled",
+ resolution="768p",
+ seed=0,
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_22(self, client: RunwayML) -> None:
+ response = client.image_to_video.with_raw_response.create(
+ model="h3_max",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ )
+
+ 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_22(self, client: RunwayML) -> None:
+ with client.image_to_video.with_streaming_response.create(
+ model="h3_max",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ ) 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
+
+ @parametrize
+ def test_method_create_overload_23(self, client: RunwayML) -> None:
+ image_to_video = client.image_to_video.create(
+ model="seedance2_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_23(self, client: RunwayML) -> None:
+ image_to_video = client.image_to_video.create(
+ model="seedance2_5",
+ prompt_image="https://example.com/image.jpg",
+ audio=True,
+ draft=True,
+ duration="auto",
+ output_format="mp4",
prompt_text="x",
+ ratio="992:432",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ seed=0,
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_23(self, client: RunwayML) -> None:
+ response = client.image_to_video.with_raw_response.create(
+ model="seedance2_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_23(self, client: RunwayML) -> None:
+ with client.image_to_video.with_streaming_response.create(
+ model="seedance2_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
+
+ @parametrize
+ def test_method_create_overload_24(self, client: RunwayML) -> None:
+ image_to_video = client.image_to_video.create(
+ model="grok_imagine_1_5_lite",
+ 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_24(self, client: RunwayML) -> None:
+ image_to_video = client.image_to_video.create(
+ model="grok_imagine_1_5_lite",
+ prompt_image="https://example.com/image.jpg",
+ duration=1,
+ prompt_text="x",
+ ratio="auto_480p",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_24(self, client: RunwayML) -> None:
+ response = client.image_to_video.with_raw_response.create(
+ model="grok_imagine_1_5_lite",
+ 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_24(self, client: RunwayML) -> None:
+ with client.image_to_video.with_streaming_response.create(
+ model="grok_imagine_1_5_lite",
+ 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(
+ "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
+ )
+
+ @parametrize
+ async def test_method_create_overload_1(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ duration=2,
+ model="gen4.5",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ ratio="1280:720",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_1(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ duration=2,
+ model="gen4.5",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ ratio="1280:720",
+ content_moderation={"public_figure_threshold": "auto"},
+ output_format="mp4",
+ prores_profile="422",
+ seed=0,
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_1(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.image_to_video.with_raw_response.create(
+ duration=2,
+ model="gen4.5",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ ratio="1280:720",
+ )
+
+ 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_1(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.image_to_video.with_streaming_response.create(
+ duration=2,
+ model="gen4.5",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ ratio="1280:720",
+ ) 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
+
+ @parametrize
+ async def test_method_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="gen4_turbo",
+ prompt_image="https://example.com/image.jpg",
+ ratio="1280:720",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_2(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="gen4_turbo",
+ prompt_image="https://example.com/image.jpg",
+ ratio="1280:720",
+ content_moderation={"public_figure_threshold": "auto"},
+ duration=2,
+ prompt_text="x",
+ seed=0,
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.image_to_video.with_raw_response.create(
+ model="gen4_turbo",
+ prompt_image="https://example.com/image.jpg",
+ ratio="1280:720",
+ )
+
+ 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_2(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.image_to_video.with_streaming_response.create(
+ model="gen4_turbo",
+ prompt_image="https://example.com/image.jpg",
+ ratio="1280:720",
+ ) 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
+
+ @parametrize
+ async def test_method_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="veo3.1",
+ prompt_image="https://example.com/image.jpg",
+ ratio="1280:720",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_3(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="veo3.1",
+ prompt_image="https://example.com/image.jpg",
+ ratio="1280:720",
+ audio=True,
+ duration=4,
+ negative_prompt="x",
+ prompt_text="x",
+ seed=0,
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.image_to_video.with_raw_response.create(
+ model="veo3.1",
+ prompt_image="https://example.com/image.jpg",
ratio="1280:720",
)
+
+ 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_method_create_with_all_params_overload_1(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.image_to_video.with_streaming_response.create(
+ model="veo3.1",
+ prompt_image="https://example.com/image.jpg",
+ ratio="1280:720",
+ ) 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
+
+ @parametrize
+ async def test_method_create_overload_4(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
- duration=2,
- model="gen4.5",
+ model="veo3.1_fast",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
ratio="1280:720",
- content_moderation={"public_figure_threshold": "auto"},
- output_format="mp4",
- prores_profile="422",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_4(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="veo3.1_fast",
+ prompt_image="https://example.com/image.jpg",
+ ratio="1280:720",
+ audio=True,
+ duration=4,
+ negative_prompt="x",
+ prompt_text="x",
seed=0,
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_1(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
- duration=2,
- model="gen4.5",
+ model="veo3.1_fast",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
ratio="1280:720",
)
@@ -942,12 +1482,10 @@ async def test_raw_response_create_overload_1(self, async_client: AsyncRunwayML)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_1(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
- duration=2,
- model="gen4.5",
+ model="veo3.1_fast",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
ratio="1280:720",
) as response:
assert not response.is_closed
@@ -959,33 +1497,243 @@ async def test_streaming_response_create_overload_1(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_5(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
- model="gen4_turbo",
+ model="klingO3_4k",
prompt_image="https://example.com/image.jpg",
- ratio="1280:720",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_5(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
- model="gen4_turbo",
+ model="klingO3_4k",
+ prompt_image="https://example.com/image.jpg",
+ audio=True,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ ratio="3840:2160",
+ references="https://example.com/image.jpg",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.image_to_video.with_raw_response.create(
+ model="klingO3_4k",
+ 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_5(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.image_to_video.with_streaming_response.create(
+ model="klingO3_4k",
+ 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
+
+ @parametrize
+ async def test_method_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="hailuo3",
prompt_image="https://example.com/image.jpg",
- ratio="1280:720",
- content_moderation={"public_figure_threshold": "auto"},
- duration=2,
prompt_text="x",
- seed=0,
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_6(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="hailuo3",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ duration=5,
+ ratio="adaptive",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ resolution="2k",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.image_to_video.with_raw_response.create(
+ model="hailuo3",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ )
+
+ 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_6(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.image_to_video.with_streaming_response.create(
+ model="hailuo3",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="x",
+ ) 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
+
+ @parametrize
+ async def test_method_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="kling3.0_4k",
+ 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_7(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="kling3.0_4k",
+ prompt_image="https://example.com/image.jpg",
+ audio=True,
+ cfg_scale=0,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ ratio="3840:2160",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.image_to_video.with_raw_response.create(
+ model="kling3.0_4k",
+ 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_7(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.image_to_video.with_streaming_response.create(
+ model="kling3.0_4k",
+ 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
+
+ @parametrize
+ async def test_method_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="happyhorse_1_0",
+ 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_8(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="happyhorse_1_0",
+ prompt_image="https://example.com/image.jpg",
+ duration=3,
+ prompt_text="xx",
+ resolution="720p",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.image_to_video.with_raw_response.create(
+ model="happyhorse_1_0",
+ 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_8(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.image_to_video.with_streaming_response.create(
+ model="happyhorse_1_0",
+ 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
+
+ @parametrize
+ async def test_method_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="kling2.5_turbo_pro",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="xx",
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_9(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="kling2.5_turbo_pro",
+ prompt_image="https://example.com/image.jpg",
+ prompt_text="xx",
+ cfg_scale=0,
+ duration=5,
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
- model="gen4_turbo",
+ model="kling2.5_turbo_pro",
prompt_image="https://example.com/image.jpg",
- ratio="1280:720",
+ prompt_text="xx",
)
assert response.is_closed is True
@@ -994,11 +1742,11 @@ async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
- model="gen4_turbo",
+ model="kling2.5_turbo_pro",
prompt_image="https://example.com/image.jpg",
- ratio="1280:720",
+ prompt_text="xx",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1009,34 +1757,40 @@ async def test_streaming_response_create_overload_2(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_10(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
- model="veo3.1",
+ model="kling3.0_pro",
prompt_image="https://example.com/image.jpg",
- ratio="1280:720",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_10(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
- model="veo3.1",
+ model="kling3.0_pro",
prompt_image="https://example.com/image.jpg",
- ratio="1280:720",
audio=True,
- duration=4,
- negative_prompt="x",
- prompt_text="x",
- seed=0,
+ cfg_scale=0,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ ratio="1920:1080",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
- model="veo3.1",
+ model="kling3.0_pro",
prompt_image="https://example.com/image.jpg",
- ratio="1280:720",
)
assert response.is_closed is True
@@ -1045,11 +1799,10 @@ async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
- model="veo3.1",
+ model="kling3.0_pro",
prompt_image="https://example.com/image.jpg",
- ratio="1280:720",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1060,34 +1813,40 @@ async def test_streaming_response_create_overload_3(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_11(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
- model="veo3.1_fast",
+ model="kling3.0_standard",
prompt_image="https://example.com/image.jpg",
- ratio="1280:720",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_11(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
- model="veo3.1_fast",
+ model="kling3.0_standard",
prompt_image="https://example.com/image.jpg",
- ratio="1280:720",
audio=True,
- duration=4,
- negative_prompt="x",
- prompt_text="x",
- seed=0,
+ cfg_scale=0,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ ratio="1280:720",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_11(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
- model="veo3.1_fast",
+ model="kling3.0_standard",
prompt_image="https://example.com/image.jpg",
- ratio="1280:720",
)
assert response.is_closed is True
@@ -1096,11 +1855,10 @@ async def test_raw_response_create_overload_4(self, async_client: AsyncRunwayML)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_11(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
- model="veo3.1_fast",
+ model="kling3.0_standard",
prompt_image="https://example.com/image.jpg",
- ratio="1280:720",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1111,38 +1869,40 @@ async def test_streaming_response_create_overload_4(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_12(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
- model="hailuo3",
+ model="klingO3_pro",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_5(self, async_client: AsyncRunwayML) -> None:
+ 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="hailuo3",
+ model="klingO3_pro",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
- duration=5,
- ratio="adaptive",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- resolution="2k",
+ audio=True,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ ratio="1920:1080",
+ references="https://example.com/image.jpg",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ 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="hailuo3",
+ model="klingO3_pro",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
)
assert response.is_closed is True
@@ -1151,11 +1911,10 @@ async def test_raw_response_create_overload_5(self, async_client: AsyncRunwayML)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ 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="hailuo3",
+ model="klingO3_pro",
prompt_image="https://example.com/image.jpg",
- prompt_text="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1166,28 +1925,39 @@ async def test_streaming_response_create_overload_5(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_13(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
- model="happyhorse_1_0",
+ model="klingO3_standard",
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_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_13(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
- model="happyhorse_1_0",
+ model="klingO3_standard",
prompt_image="https://example.com/image.jpg",
+ audio=True,
duration=3,
prompt_text="xx",
- resolution="720p",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ ratio="1280:720",
+ references="https://example.com/image.jpg",
)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_13(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
- model="happyhorse_1_0",
+ model="klingO3_standard",
prompt_image="https://example.com/image.jpg",
)
@@ -1197,9 +1967,9 @@ async def test_raw_response_create_overload_6(self, async_client: AsyncRunwayML)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_13(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
- model="happyhorse_1_0",
+ model="klingO3_standard",
prompt_image="https://example.com/image.jpg",
) as response:
assert not response.is_closed
@@ -1211,7 +1981,7 @@ async def test_streaming_response_create_overload_6(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_14(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="seedance2",
prompt_image="https://example.com/image.jpg",
@@ -1219,7 +1989,7 @@ async def test_method_create_overload_7(self, async_client: AsyncRunwayML) -> No
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_14(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="seedance2",
prompt_image="https://example.com/image.jpg",
@@ -1238,7 +2008,7 @@ async def test_method_create_with_all_params_overload_7(self, async_client: Asyn
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_14(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
model="seedance2",
prompt_image="https://example.com/image.jpg",
@@ -1250,7 +2020,7 @@ async def test_raw_response_create_overload_7(self, async_client: AsyncRunwayML)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_14(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
model="seedance2",
prompt_image="https://example.com/image.jpg",
@@ -1264,7 +2034,7 @@ async def test_streaming_response_create_overload_7(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_15(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="seedance2_fast",
prompt_image="https://example.com/image.jpg",
@@ -1272,7 +2042,7 @@ async def test_method_create_overload_8(self, async_client: AsyncRunwayML) -> No
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_15(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="seedance2_fast",
prompt_image="https://example.com/image.jpg",
@@ -1291,7 +2061,7 @@ async def test_method_create_with_all_params_overload_8(self, async_client: Asyn
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_15(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
model="seedance2_fast",
prompt_image="https://example.com/image.jpg",
@@ -1303,7 +2073,7 @@ async def test_raw_response_create_overload_8(self, async_client: AsyncRunwayML)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_15(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
model="seedance2_fast",
prompt_image="https://example.com/image.jpg",
@@ -1317,7 +2087,7 @@ async def test_streaming_response_create_overload_8(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_16(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="seedance2_mini",
prompt_image="https://example.com/image.jpg",
@@ -1325,7 +2095,7 @@ async def test_method_create_overload_9(self, async_client: AsyncRunwayML) -> No
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_16(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="seedance2_mini",
prompt_image="https://example.com/image.jpg",
@@ -1344,7 +2114,7 @@ async def test_method_create_with_all_params_overload_9(self, async_client: Asyn
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_16(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
model="seedance2_mini",
prompt_image="https://example.com/image.jpg",
@@ -1356,7 +2126,7 @@ async def test_raw_response_create_overload_9(self, async_client: AsyncRunwayML)
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_16(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
model="seedance2_mini",
prompt_image="https://example.com/image.jpg",
@@ -1370,7 +2140,7 @@ async def test_streaming_response_create_overload_9(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_10(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_17(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="gemini_omni_flash",
prompt_image="https://example.com/image.jpg",
@@ -1378,7 +2148,7 @@ async def test_method_create_overload_10(self, async_client: AsyncRunwayML) -> N
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_10(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_17(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="gemini_omni_flash",
prompt_image="https://example.com/image.jpg",
@@ -1389,7 +2159,7 @@ async def test_method_create_with_all_params_overload_10(self, async_client: Asy
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_17(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
model="gemini_omni_flash",
prompt_image="https://example.com/image.jpg",
@@ -1401,7 +2171,7 @@ async def test_raw_response_create_overload_10(self, async_client: AsyncRunwayML
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_17(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
model="gemini_omni_flash",
prompt_image="https://example.com/image.jpg",
@@ -1415,60 +2185,7 @@ async def test_streaming_response_create_overload_10(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_11(self, async_client: AsyncRunwayML) -> None:
- image_to_video = await async_client.image_to_video.create(
- model="seedance2_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_11(self, async_client: AsyncRunwayML) -> None:
- image_to_video = await async_client.image_to_video.create(
- model="seedance2_5",
- prompt_image="https://example.com/image.jpg",
- audio=True,
- duration="auto",
- prompt_text="x",
- ratio="992:432",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- seed=0,
- )
- assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
-
- @parametrize
- async def test_raw_response_create_overload_11(self, async_client: AsyncRunwayML) -> None:
- response = await async_client.image_to_video.with_raw_response.create(
- model="seedance2_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_11(self, async_client: AsyncRunwayML) -> None:
- async with async_client.image_to_video.with_streaming_response.create(
- model="seedance2_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
-
- @parametrize
- async def test_method_create_overload_12(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_18(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",
@@ -1476,7 +2193,7 @@ async def test_method_create_overload_12(self, async_client: AsyncRunwayML) -> N
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:
+ async def test_method_create_with_all_params_overload_18(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",
@@ -1487,7 +2204,7 @@ async def test_method_create_with_all_params_overload_12(self, async_client: Asy
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_12(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_18(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",
@@ -1499,7 +2216,7 @@ async def test_raw_response_create_overload_12(self, async_client: AsyncRunwayML
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_12(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_18(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",
@@ -1513,7 +2230,7 @@ async def test_streaming_response_create_overload_12(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_13(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_19(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="wan3",
prompt_image="https://example.com/image.jpg",
@@ -1522,7 +2239,7 @@ async def test_method_create_overload_13(self, async_client: AsyncRunwayML) -> N
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_13(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_19(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="wan3",
prompt_image="https://example.com/image.jpg",
@@ -1546,7 +2263,7 @@ async def test_method_create_with_all_params_overload_13(self, async_client: Asy
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_13(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_19(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
model="wan3",
prompt_image="https://example.com/image.jpg",
@@ -1559,7 +2276,7 @@ async def test_raw_response_create_overload_13(self, async_client: AsyncRunwayML
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_13(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_19(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
model="wan3",
prompt_image="https://example.com/image.jpg",
@@ -1574,7 +2291,7 @@ async def test_streaming_response_create_overload_13(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_14(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_20(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="gemini_omni_flash_1.1",
prompt_image="https://example.com/image.jpg",
@@ -1583,7 +2300,7 @@ async def test_method_create_overload_14(self, async_client: AsyncRunwayML) -> N
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_14(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_20(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="gemini_omni_flash_1.1",
prompt_image="https://example.com/image.jpg",
@@ -1594,7 +2311,7 @@ async def test_method_create_with_all_params_overload_14(self, async_client: Asy
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_14(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_20(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
model="gemini_omni_flash_1.1",
prompt_image="https://example.com/image.jpg",
@@ -1607,7 +2324,7 @@ async def test_raw_response_create_overload_14(self, async_client: AsyncRunwayML
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_14(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_20(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
model="gemini_omni_flash_1.1",
prompt_image="https://example.com/image.jpg",
@@ -1622,7 +2339,7 @@ async def test_streaming_response_create_overload_14(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_15(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_21(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="wan3_prime",
prompt_image="https://example.com/image.jpg",
@@ -1631,7 +2348,7 @@ async def test_method_create_overload_15(self, async_client: AsyncRunwayML) -> N
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_15(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_21(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="wan3_prime",
prompt_image="https://example.com/image.jpg",
@@ -1655,7 +2372,7 @@ async def test_method_create_with_all_params_overload_15(self, async_client: Asy
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_15(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_21(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
model="wan3_prime",
prompt_image="https://example.com/image.jpg",
@@ -1668,7 +2385,7 @@ async def test_raw_response_create_overload_15(self, async_client: AsyncRunwayML
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_15(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_21(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
model="wan3_prime",
prompt_image="https://example.com/image.jpg",
@@ -1683,7 +2400,7 @@ async def test_streaming_response_create_overload_15(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_16(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_22(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="h3_max",
prompt_image="https://example.com/image.jpg",
@@ -1692,7 +2409,7 @@ async def test_method_create_overload_16(self, async_client: AsyncRunwayML) -> N
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_16(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_22(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="h3_max",
prompt_image="https://example.com/image.jpg",
@@ -1705,7 +2422,7 @@ async def test_method_create_with_all_params_overload_16(self, async_client: Asy
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_16(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_22(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
model="h3_max",
prompt_image="https://example.com/image.jpg",
@@ -1718,7 +2435,7 @@ async def test_raw_response_create_overload_16(self, async_client: AsyncRunwayML
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_16(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_22(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
model="h3_max",
prompt_image="https://example.com/image.jpg",
@@ -1733,7 +2450,62 @@ async def test_streaming_response_create_overload_16(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_17(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_23(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="seedance2_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_23(self, async_client: AsyncRunwayML) -> None:
+ image_to_video = await async_client.image_to_video.create(
+ model="seedance2_5",
+ prompt_image="https://example.com/image.jpg",
+ audio=True,
+ draft=True,
+ duration="auto",
+ output_format="mp4",
+ prompt_text="x",
+ ratio="992:432",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ seed=0,
+ )
+ assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_23(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.image_to_video.with_raw_response.create(
+ model="seedance2_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_23(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.image_to_video.with_streaming_response.create(
+ model="seedance2_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
+
+ @parametrize
+ async def test_method_create_overload_24(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="grok_imagine_1_5_lite",
prompt_image="https://example.com/image.jpg",
@@ -1741,7 +2513,7 @@ async def test_method_create_overload_17(self, async_client: AsyncRunwayML) -> N
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_17(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_24(self, async_client: AsyncRunwayML) -> None:
image_to_video = await async_client.image_to_video.create(
model="grok_imagine_1_5_lite",
prompt_image="https://example.com/image.jpg",
@@ -1752,7 +2524,7 @@ async def test_method_create_with_all_params_overload_17(self, async_client: Asy
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_17(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_24(self, async_client: AsyncRunwayML) -> None:
response = await async_client.image_to_video.with_raw_response.create(
model="grok_imagine_1_5_lite",
prompt_image="https://example.com/image.jpg",
@@ -1764,7 +2536,7 @@ async def test_raw_response_create_overload_17(self, async_client: AsyncRunwayML
assert_matches_type(ImageToVideoCreateResponse, image_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_17(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_24(self, async_client: AsyncRunwayML) -> None:
async with async_client.image_to_video.with_streaming_response.create(
model="grok_imagine_1_5_lite",
prompt_image="https://example.com/image.jpg",
diff --git a/tests/api_resources/test_sound_effect.py b/tests/api_resources/test_sound_effect.py
index f8f4d0c..e6de92d 100644
--- a/tests/api_resources/test_sound_effect.py
+++ b/tests/api_resources/test_sound_effect.py
@@ -68,13 +68,63 @@ def test_streaming_response_create_overload_1(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_2(self, client: RunwayML) -> None:
sound_effect = client.sound_effect.create(
- model="eleven_text_to_sound_v2",
+ duration=0.1,
+ model="mirelo_sfx_2_0",
prompt_text="x",
)
assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_2(self, client: RunwayML) -> None:
+ sound_effect = client.sound_effect.create(
+ duration=0.1,
+ model="mirelo_sfx_2_0",
+ prompt_text="x",
+ format="mp3",
+ negative_prompt="x",
+ num_variants=1,
+ seed=0,
+ )
+ assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_2(self, client: RunwayML) -> None:
+ response = client.sound_effect.with_raw_response.create(
+ duration=0.1,
+ model="mirelo_sfx_2_0",
+ prompt_text="x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ sound_effect = response.parse()
+ assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
+
+ @parametrize
+ def test_streaming_response_create_overload_2(self, client: RunwayML) -> None:
+ with client.sound_effect.with_streaming_response.create(
+ duration=0.1,
+ model="mirelo_sfx_2_0",
+ prompt_text="x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ sound_effect = response.parse()
+ assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ def test_method_create_overload_3(self, client: RunwayML) -> None:
+ sound_effect = client.sound_effect.create(
+ model="eleven_text_to_sound_v2",
+ prompt_text="x",
+ )
+ assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_3(self, client: RunwayML) -> None:
sound_effect = client.sound_effect.create(
model="eleven_text_to_sound_v2",
prompt_text="x",
@@ -84,7 +134,7 @@ def test_method_create_with_all_params_overload_2(self, client: RunwayML) -> Non
assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
@parametrize
- def test_raw_response_create_overload_2(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_3(self, client: RunwayML) -> None:
response = client.sound_effect.with_raw_response.create(
model="eleven_text_to_sound_v2",
prompt_text="x",
@@ -96,7 +146,7 @@ def test_raw_response_create_overload_2(self, client: RunwayML) -> None:
assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
@parametrize
- def test_streaming_response_create_overload_2(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_3(self, client: RunwayML) -> None:
with client.sound_effect.with_streaming_response.create(
model="eleven_text_to_sound_v2",
prompt_text="x",
@@ -166,13 +216,63 @@ async def test_streaming_response_create_overload_1(self, async_client: AsyncRun
@parametrize
async def test_method_create_overload_2(self, async_client: AsyncRunwayML) -> None:
sound_effect = await async_client.sound_effect.create(
- model="eleven_text_to_sound_v2",
+ duration=0.1,
+ model="mirelo_sfx_2_0",
prompt_text="x",
)
assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
@parametrize
async def test_method_create_with_all_params_overload_2(self, async_client: AsyncRunwayML) -> None:
+ sound_effect = await async_client.sound_effect.create(
+ duration=0.1,
+ model="mirelo_sfx_2_0",
+ prompt_text="x",
+ format="mp3",
+ negative_prompt="x",
+ num_variants=1,
+ seed=0,
+ )
+ assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.sound_effect.with_raw_response.create(
+ duration=0.1,
+ model="mirelo_sfx_2_0",
+ prompt_text="x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ sound_effect = await response.parse()
+ assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.sound_effect.with_streaming_response.create(
+ duration=0.1,
+ model="mirelo_sfx_2_0",
+ prompt_text="x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ sound_effect = await response.parse()
+ assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ sound_effect = await async_client.sound_effect.create(
+ model="eleven_text_to_sound_v2",
+ prompt_text="x",
+ )
+ assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_3(self, async_client: AsyncRunwayML) -> None:
sound_effect = await async_client.sound_effect.create(
model="eleven_text_to_sound_v2",
prompt_text="x",
@@ -182,7 +282,7 @@ async def test_method_create_with_all_params_overload_2(self, async_client: Asyn
assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
@parametrize
- async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
response = await async_client.sound_effect.with_raw_response.create(
model="eleven_text_to_sound_v2",
prompt_text="x",
@@ -194,7 +294,7 @@ async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML)
assert_matches_type(SoundEffectCreateResponse, sound_effect, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
async with async_client.sound_effect.with_streaming_response.create(
model="eleven_text_to_sound_v2",
prompt_text="x",
diff --git a/tests/api_resources/test_text_to_image.py b/tests/api_resources/test_text_to_image.py
index a5466df..d374939 100644
--- a/tests/api_resources/test_text_to_image.py
+++ b/tests/api_resources/test_text_to_image.py
@@ -438,6 +438,60 @@ def test_streaming_response_create_overload_8(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_9(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="gemini_image3.1_flash_lite",
+ prompt_text="x",
+ ratio="1024:1024",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_9(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="gemini_image3.1_flash_lite",
+ prompt_text="x",
+ ratio="1024:1024",
+ output_count=1,
+ reference_images=[
+ {
+ "uri": "https://example.com/image.jpg",
+ "subject": "object",
+ "tag": "tag",
+ }
+ ],
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_9(self, client: RunwayML) -> None:
+ response = client.text_to_image.with_raw_response.create(
+ model="gemini_image3.1_flash_lite",
+ prompt_text="x",
+ ratio="1024:1024",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_streaming_response_create_overload_9(self, client: RunwayML) -> None:
+ with client.text_to_image.with_streaming_response.create(
+ model="gemini_image3.1_flash_lite",
+ prompt_text="x",
+ ratio="1024:1024",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ def test_method_create_overload_10(self, client: RunwayML) -> None:
text_to_image = client.text_to_image.create(
model="gemini_image3_pro",
prompt_text="xxx",
@@ -446,7 +500,7 @@ def test_method_create_overload_9(self, client: RunwayML) -> None:
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_9(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_10(self, client: RunwayML) -> None:
text_to_image = client.text_to_image.create(
model="gemini_image3_pro",
prompt_text="xxx",
@@ -463,7 +517,7 @@ def test_method_create_with_all_params_overload_9(self, client: RunwayML) -> Non
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_raw_response_create_overload_9(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_10(self, client: RunwayML) -> None:
response = client.text_to_image.with_raw_response.create(
model="gemini_image3_pro",
prompt_text="xxx",
@@ -476,7 +530,7 @@ def test_raw_response_create_overload_9(self, client: RunwayML) -> None:
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_streaming_response_create_overload_9(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_10(self, client: RunwayML) -> None:
with client.text_to_image.with_streaming_response.create(
model="gemini_image3_pro",
prompt_text="xxx",
@@ -491,7 +545,7 @@ def test_streaming_response_create_overload_9(self, client: RunwayML) -> None:
assert cast(Any, response.is_closed) is True
@parametrize
- def test_method_create_overload_10(self, client: RunwayML) -> None:
+ def test_method_create_overload_11(self, client: RunwayML) -> None:
text_to_image = client.text_to_image.create(
model="gpt_image_2_5_flare",
prompt_text="x",
@@ -500,7 +554,7 @@ def test_method_create_overload_10(self, client: RunwayML) -> None:
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_10(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_11(self, client: RunwayML) -> None:
text_to_image = client.text_to_image.create(
model="gpt_image_2_5_flare",
prompt_text="x",
@@ -518,7 +572,7 @@ def test_method_create_with_all_params_overload_10(self, client: RunwayML) -> No
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_raw_response_create_overload_10(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_11(self, client: RunwayML) -> None:
response = client.text_to_image.with_raw_response.create(
model="gpt_image_2_5_flare",
prompt_text="x",
@@ -531,7 +585,7 @@ def test_raw_response_create_overload_10(self, client: RunwayML) -> None:
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_streaming_response_create_overload_10(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_11(self, client: RunwayML) -> None:
with client.text_to_image.with_streaming_response.create(
model="gpt_image_2_5_flare",
prompt_text="x",
@@ -546,7 +600,7 @@ 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:
+ def test_method_create_overload_12(self, client: RunwayML) -> None:
text_to_image = client.text_to_image.create(
model="gpt_image_2_5_sunburst",
prompt_text="x",
@@ -555,7 +609,7 @@ def test_method_create_overload_11(self, client: RunwayML) -> None:
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_11(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_12(self, client: RunwayML) -> None:
text_to_image = client.text_to_image.create(
model="gpt_image_2_5_sunburst",
prompt_text="x",
@@ -573,7 +627,7 @@ def test_method_create_with_all_params_overload_11(self, client: RunwayML) -> No
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_raw_response_create_overload_11(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_12(self, client: RunwayML) -> None:
response = client.text_to_image.with_raw_response.create(
model="gpt_image_2_5_sunburst",
prompt_text="x",
@@ -586,7 +640,7 @@ def test_raw_response_create_overload_11(self, client: RunwayML) -> None:
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_streaming_response_create_overload_11(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_12(self, client: RunwayML) -> None:
with client.text_to_image.with_streaming_response.create(
model="gpt_image_2_5_sunburst",
prompt_text="x",
@@ -601,7 +655,102 @@ 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:
+ def test_method_create_overload_13(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="bria_fibo_1_5",
+ prompt_text="x",
+ ratio="1024:1024",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_13(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="bria_fibo_1_5",
+ prompt_text="x",
+ ratio="1024:1024",
+ output_format="png",
+ reference_images=[{"uri": "https://example.com/image.jpg"}],
+ seed=0,
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_13(self, client: RunwayML) -> None:
+ response = client.text_to_image.with_raw_response.create(
+ model="bria_fibo_1_5",
+ prompt_text="x",
+ ratio="1024:1024",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_streaming_response_create_overload_13(self, client: RunwayML) -> None:
+ with client.text_to_image.with_streaming_response.create(
+ model="bria_fibo_1_5",
+ prompt_text="x",
+ ratio="1024:1024",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ def test_method_create_overload_14(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="bria_fibo_edit_1_5",
+ prompt_text="x",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_14(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="bria_fibo_edit_1_5",
+ prompt_text="x",
+ output_format="png",
+ ratio="1024:1024",
+ reference_images=[{"uri": "https://example.com/image.jpg"}],
+ seed=0,
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_14(self, client: RunwayML) -> None:
+ response = client.text_to_image.with_raw_response.create(
+ model="bria_fibo_edit_1_5",
+ prompt_text="x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_streaming_response_create_overload_14(self, client: RunwayML) -> None:
+ with client.text_to_image.with_streaming_response.create(
+ model="bria_fibo_edit_1_5",
+ prompt_text="x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ def test_method_create_overload_15(self, client: RunwayML) -> None:
text_to_image = client.text_to_image.create(
model="ideogram_4_0",
prompt_text="x",
@@ -609,7 +758,7 @@ def test_method_create_overload_12(self, client: RunwayML) -> None:
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_12(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_15(self, client: RunwayML) -> None:
text_to_image = client.text_to_image.create(
model="ideogram_4_0",
prompt_text="x",
@@ -621,7 +770,7 @@ def test_method_create_with_all_params_overload_12(self, client: RunwayML) -> No
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_raw_response_create_overload_12(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_15(self, client: RunwayML) -> None:
response = client.text_to_image.with_raw_response.create(
model="ideogram_4_0",
prompt_text="x",
@@ -633,7 +782,7 @@ def test_raw_response_create_overload_12(self, client: RunwayML) -> None:
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_streaming_response_create_overload_12(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_15(self, client: RunwayML) -> None:
with client.text_to_image.with_streaming_response.create(
model="ideogram_4_0",
prompt_text="x",
@@ -647,7 +796,7 @@ def test_streaming_response_create_overload_12(self, client: RunwayML) -> None:
assert cast(Any, response.is_closed) is True
@parametrize
- def test_method_create_overload_13(self, client: RunwayML) -> None:
+ def test_method_create_overload_16(self, client: RunwayML) -> None:
text_to_image = client.text_to_image.create(
model="ideogram_4_5",
prompt_text="x",
@@ -655,7 +804,7 @@ def test_method_create_overload_13(self, client: RunwayML) -> None:
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_13(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_16(self, client: RunwayML) -> None:
text_to_image = client.text_to_image.create(
model="ideogram_4_5",
prompt_text="x",
@@ -669,7 +818,7 @@ def test_method_create_with_all_params_overload_13(self, client: RunwayML) -> No
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_raw_response_create_overload_13(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_16(self, client: RunwayML) -> None:
response = client.text_to_image.with_raw_response.create(
model="ideogram_4_5",
prompt_text="x",
@@ -681,7 +830,7 @@ def test_raw_response_create_overload_13(self, client: RunwayML) -> None:
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_streaming_response_create_overload_13(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_16(self, client: RunwayML) -> None:
with client.text_to_image.with_streaming_response.create(
model="ideogram_4_5",
prompt_text="x",
@@ -695,35 +844,32 @@ def test_streaming_response_create_overload_13(self, client: RunwayML) -> None:
assert cast(Any, response.is_closed) is True
@parametrize
- def test_method_create_overload_14(self, client: RunwayML) -> None:
+ def test_method_create_overload_17(self, client: RunwayML) -> None:
text_to_image = client.text_to_image.create(
- model="gemini_2.5_flash",
+ model="seedream5_flash",
prompt_text="x",
- ratio="1344:768",
+ ratio="1024:1024",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_14(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_17(self, client: RunwayML) -> None:
text_to_image = client.text_to_image.create(
- model="gemini_2.5_flash",
+ model="seedream5_flash",
prompt_text="x",
- ratio="1344:768",
- reference_images=[
- {
- "uri": "https://example.com/image.jpg",
- "tag": "tag",
- }
- ],
+ ratio="1024:1024",
+ output_count=1,
+ output_format="png",
+ reference_images=[{"uri": "https://example.com/image.jpg"}],
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_raw_response_create_overload_14(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_17(self, client: RunwayML) -> None:
response = client.text_to_image.with_raw_response.create(
- model="gemini_2.5_flash",
+ model="seedream5_flash",
prompt_text="x",
- ratio="1344:768",
+ ratio="1024:1024",
)
assert response.is_closed is True
@@ -732,11 +878,11 @@ def test_raw_response_create_overload_14(self, client: RunwayML) -> None:
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- def test_streaming_response_create_overload_14(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_17(self, client: RunwayML) -> None:
with client.text_to_image.with_streaming_response.create(
- model="gemini_2.5_flash",
+ model="seedream5_flash",
prompt_text="x",
- ratio="1344:768",
+ ratio="1024:1024",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -746,144 +892,707 @@ def test_streaming_response_create_overload_14(self, client: RunwayML) -> None:
assert cast(Any, response.is_closed) is True
-
-class TestAsyncTextToImage:
- parametrize = pytest.mark.parametrize(
- "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
- )
-
@parametrize
- async def test_method_create_overload_1(self, async_client: AsyncRunwayML) -> None:
- text_to_image = await async_client.text_to_image.create(
- model="gen4_image_turbo",
+ def test_method_create_overload_18(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="nano_banana_2.1",
prompt_text="x",
ratio="1024:1024",
- reference_images=[{"uri": "https://example.com/image.jpg"}],
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_1(self, async_client: AsyncRunwayML) -> None:
- text_to_image = await async_client.text_to_image.create(
- model="gen4_image_turbo",
+ def test_method_create_with_all_params_overload_18(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="nano_banana_2.1",
prompt_text="x",
ratio="1024:1024",
+ output_count=1,
reference_images=[
{
"uri": "https://example.com/image.jpg",
"tag": "tag",
}
],
- content_moderation={"public_figure_threshold": "auto"},
- seed=0,
+ thinking_level="minimal",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_1(self, async_client: AsyncRunwayML) -> None:
- response = await async_client.text_to_image.with_raw_response.create(
- model="gen4_image_turbo",
+ def test_raw_response_create_overload_18(self, client: RunwayML) -> None:
+ response = client.text_to_image.with_raw_response.create(
+ model="nano_banana_2.1",
prompt_text="x",
ratio="1024:1024",
- reference_images=[{"uri": "https://example.com/image.jpg"}],
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- text_to_image = await response.parse()
+ text_to_image = response.parse()
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_1(self, async_client: AsyncRunwayML) -> None:
- async with async_client.text_to_image.with_streaming_response.create(
- model="gen4_image_turbo",
+ def test_streaming_response_create_overload_18(self, client: RunwayML) -> None:
+ with client.text_to_image.with_streaming_response.create(
+ model="nano_banana_2.1",
prompt_text="x",
ratio="1024:1024",
- reference_images=[{"uri": "https://example.com/image.jpg"}],
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- text_to_image = await response.parse()
+ text_to_image = response.parse()
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_2(self, async_client: AsyncRunwayML) -> None:
- text_to_image = await async_client.text_to_image.create(
- model="gen4_image",
+ def test_method_create_overload_19(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="recraft_v4_1_flash",
prompt_text="x",
ratio="1024:1024",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_2(self, async_client: AsyncRunwayML) -> None:
- text_to_image = await async_client.text_to_image.create(
- model="gen4_image",
+ def test_method_create_with_all_params_overload_19(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="recraft_v4_1_flash",
prompt_text="x",
ratio="1024:1024",
- content_moderation={"public_figure_threshold": "auto"},
- reference_images=[
- {
- "uri": "https://example.com/image.jpg",
- "tag": "tag",
- }
- ],
+ background_color="#E1CB97",
+ colors=["#E1CB97"],
+ output_count=1,
+ output_format="webp",
seed=0,
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
- response = await async_client.text_to_image.with_raw_response.create(
- model="gen4_image",
+ def test_raw_response_create_overload_19(self, client: RunwayML) -> None:
+ response = client.text_to_image.with_raw_response.create(
+ model="recraft_v4_1_flash",
prompt_text="x",
ratio="1024:1024",
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- text_to_image = await response.parse()
+ text_to_image = response.parse()
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
- async with async_client.text_to_image.with_streaming_response.create(
- model="gen4_image",
+ def test_streaming_response_create_overload_19(self, client: RunwayML) -> None:
+ with client.text_to_image.with_streaming_response.create(
+ model="recraft_v4_1_flash",
prompt_text="x",
ratio="1024:1024",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- text_to_image = await response.parse()
+ text_to_image = response.parse()
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_3(self, async_client: AsyncRunwayML) -> None:
- text_to_image = await async_client.text_to_image.create(
- model="gpt_image_2",
+ def test_method_create_overload_20(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="recraft_v4_1_vector",
+ prompt_text="x",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_20(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="recraft_v4_1_vector",
+ prompt_text="x",
+ background_color="#E1CB97",
+ colors=["#E1CB97"],
+ ratio="1024:1024",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_20(self, client: RunwayML) -> None:
+ response = client.text_to_image.with_raw_response.create(
+ model="recraft_v4_1_vector",
+ prompt_text="x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_streaming_response_create_overload_20(self, client: RunwayML) -> None:
+ with client.text_to_image.with_streaming_response.create(
+ model="recraft_v4_1_vector",
+ prompt_text="x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ def test_method_create_overload_21(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="gemini_2.5_flash",
+ prompt_text="x",
+ ratio="1344:768",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_21(self, client: RunwayML) -> None:
+ text_to_image = client.text_to_image.create(
+ model="gemini_2.5_flash",
+ prompt_text="x",
+ ratio="1344:768",
+ reference_images=[
+ {
+ "uri": "https://example.com/image.jpg",
+ "tag": "tag",
+ }
+ ],
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_21(self, client: RunwayML) -> None:
+ response = client.text_to_image.with_raw_response.create(
+ model="gemini_2.5_flash",
+ prompt_text="x",
+ ratio="1344:768",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ def test_streaming_response_create_overload_21(self, client: RunwayML) -> None:
+ with client.text_to_image.with_streaming_response.create(
+ model="gemini_2.5_flash",
+ prompt_text="x",
+ ratio="1344:768",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+
+class TestAsyncTextToImage:
+ parametrize = pytest.mark.parametrize(
+ "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
+ )
+
+ @parametrize
+ async def test_method_create_overload_1(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="gen4_image_turbo",
+ prompt_text="x",
+ ratio="1024:1024",
+ reference_images=[{"uri": "https://example.com/image.jpg"}],
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_1(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="gen4_image_turbo",
+ prompt_text="x",
+ ratio="1024:1024",
+ reference_images=[
+ {
+ "uri": "https://example.com/image.jpg",
+ "tag": "tag",
+ }
+ ],
+ content_moderation={"public_figure_threshold": "auto"},
+ seed=0,
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_1(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_image.with_raw_response.create(
+ model="gen4_image_turbo",
+ prompt_text="x",
+ ratio="1024:1024",
+ reference_images=[{"uri": "https://example.com/image.jpg"}],
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_1(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_image.with_streaming_response.create(
+ model="gen4_image_turbo",
+ prompt_text="x",
+ ratio="1024:1024",
+ reference_images=[{"uri": "https://example.com/image.jpg"}],
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="gen4_image",
+ prompt_text="x",
+ ratio="1024:1024",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_2(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="gen4_image",
+ prompt_text="x",
+ ratio="1024:1024",
+ content_moderation={"public_figure_threshold": "auto"},
+ reference_images=[
+ {
+ "uri": "https://example.com/image.jpg",
+ "tag": "tag",
+ }
+ ],
+ seed=0,
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_image.with_raw_response.create(
+ model="gen4_image",
+ prompt_text="x",
+ ratio="1024:1024",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_image.with_streaming_response.create(
+ model="gen4_image",
+ prompt_text="x",
+ ratio="1024:1024",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="gpt_image_2",
+ prompt_text="x",
+ ratio="2048:880",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_3(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="gpt_image_2",
+ prompt_text="x",
+ ratio="2048:880",
+ background="transparent",
+ output_count=1,
+ quality="low",
+ reference_images=[
+ {
+ "uri": "https://example.com/image.jpg",
+ "tag": "tag",
+ }
+ ],
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_image.with_raw_response.create(
+ model="gpt_image_2",
+ prompt_text="x",
+ ratio="2048:880",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_image.with_streaming_response.create(
+ model="gpt_image_2",
prompt_text="x",
ratio="2048:880",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="gemini_image3.1_flash",
+ prompt_text="x",
+ ratio="512:512",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_4(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="gemini_image3.1_flash",
+ prompt_text="x",
+ ratio="512:512",
+ output_count=1,
+ reference_images=[
+ {
+ "uri": "https://example.com/image.jpg",
+ "subject": "object",
+ "tag": "tag",
+ }
+ ],
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_image.with_raw_response.create(
+ model="gemini_image3.1_flash",
+ prompt_text="x",
+ ratio="512:512",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_image.with_streaming_response.create(
+ model="gemini_image3.1_flash",
+ prompt_text="x",
+ ratio="512:512",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="muse_image",
+ prompt_text="x",
+ ratio="2352:1008",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_5(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="muse_image",
+ prompt_text="x",
+ ratio="2352:1008",
+ output_count=1,
+ output_format="webp",
+ reference_images=[{"uri": "https://example.com/image.jpg"}],
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_image.with_raw_response.create(
+ model="muse_image",
+ prompt_text="x",
+ ratio="2352:1008",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_image.with_streaming_response.create(
+ model="muse_image",
+ prompt_text="x",
+ ratio="2352:1008",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="seedream5_pro",
+ prompt_text="x",
+ ratio="1024:1024",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_6(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="seedream5_pro",
+ prompt_text="x",
+ ratio="1024:1024",
+ grounding=True,
+ output_count=1,
+ output_format="png",
+ reference_images=[{"uri": "https://example.com/image.jpg"}],
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_image.with_raw_response.create(
+ model="seedream5_pro",
+ prompt_text="x",
+ ratio="1024:1024",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_image.with_streaming_response.create(
+ model="seedream5_pro",
+ prompt_text="x",
+ ratio="1024:1024",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="seedream5_lite",
+ prompt_text="x",
+ ratio="2048:2048",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_7(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="seedream5_lite",
+ prompt_text="x",
+ ratio="2048:2048",
+ grounding=True,
+ output_count=1,
+ output_format="png",
+ reference_images=[{"uri": "https://example.com/image.jpg"}],
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_image.with_raw_response.create(
+ model="seedream5_lite",
+ prompt_text="x",
+ ratio="2048:2048",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_image.with_streaming_response.create(
+ model="seedream5_lite",
+ prompt_text="x",
+ ratio="2048:2048",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="grok_imagine_image_2",
+ prompt_text="x",
+ ratio="1024:1024",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_8(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="grok_imagine_image_2",
+ prompt_text="x",
+ ratio="1024:1024",
+ edit=True,
+ output_count=1,
+ quality="low",
+ reference_images=[{"uri": "https://example.com/image.jpg"}],
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_image.with_raw_response.create(
+ model="grok_imagine_image_2",
+ prompt_text="x",
+ ratio="1024:1024",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_image.with_streaming_response.create(
+ model="grok_imagine_image_2",
+ prompt_text="x",
+ ratio="1024:1024",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="gemini_image3.1_flash_lite",
+ prompt_text="x",
+ ratio="1024:1024",
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_9(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="gemini_image3.1_flash_lite",
+ prompt_text="x",
+ ratio="1024:1024",
+ output_count=1,
+ reference_images=[
+ {
+ "uri": "https://example.com/image.jpg",
+ "subject": "object",
+ "tag": "tag",
+ }
+ ],
+ )
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_image.with_raw_response.create(
+ model="gemini_image3.1_flash_lite",
+ prompt_text="x",
+ ratio="1024:1024",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_image.with_streaming_response.create(
+ model="gemini_image3.1_flash_lite",
+ prompt_text="x",
+ ratio="1024:1024",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ text_to_image = await response.parse()
+ assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_10(self, async_client: AsyncRunwayML) -> None:
+ text_to_image = await async_client.text_to_image.create(
+ model="gemini_image3_pro",
+ prompt_text="xxx",
+ ratio="1344:768",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_10(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="gpt_image_2",
- prompt_text="x",
- ratio="2048:880",
- background="transparent",
+ model="gemini_image3_pro",
+ prompt_text="xxx",
+ ratio="1344:768",
output_count=1,
- quality="low",
reference_images=[
{
"uri": "https://example.com/image.jpg",
+ "subject": "object",
"tag": "tag",
}
],
@@ -891,11 +1600,11 @@ async def test_method_create_with_all_params_overload_3(self, async_client: Asyn
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_image.with_raw_response.create(
- model="gpt_image_2",
- prompt_text="x",
- ratio="2048:880",
+ model="gemini_image3_pro",
+ prompt_text="xxx",
+ ratio="1344:768",
)
assert response.is_closed is True
@@ -904,11 +1613,11 @@ async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_image.with_streaming_response.create(
- model="gpt_image_2",
- prompt_text="x",
- ratio="2048:880",
+ model="gemini_image3_pro",
+ prompt_text="xxx",
+ ratio="1344:768",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -919,25 +1628,26 @@ async def test_streaming_response_create_overload_3(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_11(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="gemini_image3.1_flash",
+ model="gpt_image_2_5_flare",
prompt_text="x",
- ratio="512:512",
+ ratio="2048:880",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_11(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="gemini_image3.1_flash",
+ model="gpt_image_2_5_flare",
prompt_text="x",
- ratio="512:512",
+ ratio="2048:880",
+ background="opaque",
output_count=1,
+ quality="low",
reference_images=[
{
"uri": "https://example.com/image.jpg",
- "subject": "object",
"tag": "tag",
}
],
@@ -945,11 +1655,11 @@ async def test_method_create_with_all_params_overload_4(self, async_client: Asyn
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_11(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_image.with_raw_response.create(
- model="gemini_image3.1_flash",
+ model="gpt_image_2_5_flare",
prompt_text="x",
- ratio="512:512",
+ ratio="2048:880",
)
assert response.is_closed is True
@@ -958,11 +1668,11 @@ async def test_raw_response_create_overload_4(self, async_client: AsyncRunwayML)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_11(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_image.with_streaming_response.create(
- model="gemini_image3.1_flash",
+ model="gpt_image_2_5_flare",
prompt_text="x",
- ratio="512:512",
+ ratio="2048:880",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -973,32 +1683,38 @@ async def test_streaming_response_create_overload_4(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_12(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="muse_image",
+ model="gpt_image_2_5_sunburst",
prompt_text="x",
- ratio="2352:1008",
+ ratio="2048:880",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_12(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="muse_image",
+ model="gpt_image_2_5_sunburst",
prompt_text="x",
- ratio="2352:1008",
+ ratio="2048:880",
+ background="transparent",
output_count=1,
- output_format="webp",
- reference_images=[{"uri": "https://example.com/image.jpg"}],
+ quality="low",
+ reference_images=[
+ {
+ "uri": "https://example.com/image.jpg",
+ "tag": "tag",
+ }
+ ],
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_12(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_image.with_raw_response.create(
- model="muse_image",
+ model="gpt_image_2_5_sunburst",
prompt_text="x",
- ratio="2352:1008",
+ ratio="2048:880",
)
assert response.is_closed is True
@@ -1007,11 +1723,11 @@ async def test_raw_response_create_overload_5(self, async_client: AsyncRunwayML)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_12(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_image.with_streaming_response.create(
- model="muse_image",
+ model="gpt_image_2_5_sunburst",
prompt_text="x",
- ratio="2352:1008",
+ ratio="2048:880",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1022,31 +1738,30 @@ async def test_streaming_response_create_overload_5(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_13(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="seedream5_pro",
+ model="bria_fibo_1_5",
prompt_text="x",
ratio="1024:1024",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_13(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="seedream5_pro",
+ model="bria_fibo_1_5",
prompt_text="x",
ratio="1024:1024",
- grounding=True,
- output_count=1,
output_format="png",
reference_images=[{"uri": "https://example.com/image.jpg"}],
+ seed=0,
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_13(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_image.with_raw_response.create(
- model="seedream5_pro",
+ model="bria_fibo_1_5",
prompt_text="x",
ratio="1024:1024",
)
@@ -1057,9 +1772,9 @@ async def test_raw_response_create_overload_6(self, async_client: AsyncRunwayML)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_13(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_image.with_streaming_response.create(
- model="seedream5_pro",
+ model="bria_fibo_1_5",
prompt_text="x",
ratio="1024:1024",
) as response:
@@ -1072,33 +1787,30 @@ async def test_streaming_response_create_overload_6(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_14(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="seedream5_lite",
+ model="bria_fibo_edit_1_5",
prompt_text="x",
- ratio="2048:2048",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_14(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="seedream5_lite",
+ model="bria_fibo_edit_1_5",
prompt_text="x",
- ratio="2048:2048",
- grounding=True,
- output_count=1,
output_format="png",
+ ratio="1024:1024",
reference_images=[{"uri": "https://example.com/image.jpg"}],
+ seed=0,
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_14(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_image.with_raw_response.create(
- model="seedream5_lite",
+ model="bria_fibo_edit_1_5",
prompt_text="x",
- ratio="2048:2048",
)
assert response.is_closed is True
@@ -1107,11 +1819,10 @@ async def test_raw_response_create_overload_7(self, async_client: AsyncRunwayML)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_14(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_image.with_streaming_response.create(
- model="seedream5_lite",
+ model="bria_fibo_edit_1_5",
prompt_text="x",
- ratio="2048:2048",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1122,33 +1833,30 @@ async def test_streaming_response_create_overload_7(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_15(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="grok_imagine_image_2",
+ model="ideogram_4_0",
prompt_text="x",
- ratio="1024:1024",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_15(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="grok_imagine_image_2",
+ model="ideogram_4_0",
prompt_text="x",
- ratio="1024:1024",
- edit=True,
output_count=1,
quality="low",
+ ratio="2048:2048",
reference_images=[{"uri": "https://example.com/image.jpg"}],
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_15(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_image.with_raw_response.create(
- model="grok_imagine_image_2",
+ model="ideogram_4_0",
prompt_text="x",
- ratio="1024:1024",
)
assert response.is_closed is True
@@ -1157,11 +1865,10 @@ async def test_raw_response_create_overload_8(self, async_client: AsyncRunwayML)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_15(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_image.with_streaming_response.create(
- model="grok_imagine_image_2",
+ model="ideogram_4_0",
prompt_text="x",
- ratio="1024:1024",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1172,37 +1879,32 @@ async def test_streaming_response_create_overload_8(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_16(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="gemini_image3_pro",
- prompt_text="xxx",
- ratio="1344:768",
+ model="ideogram_4_5",
+ prompt_text="x",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_16(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="gemini_image3_pro",
- prompt_text="xxx",
- ratio="1344:768",
+ model="ideogram_4_5",
+ prompt_text="x",
+ mask_uri="https://example.com/image.jpg",
output_count=1,
- reference_images=[
- {
- "uri": "https://example.com/image.jpg",
- "subject": "object",
- "tag": "tag",
- }
- ],
+ precise_edit=True,
+ quality="very_low",
+ ratio="1024:1024",
+ reference_images=[{"uri": "https://example.com/image.jpg"}],
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_16(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_image.with_raw_response.create(
- model="gemini_image3_pro",
- prompt_text="xxx",
- ratio="1344:768",
+ model="ideogram_4_5",
+ prompt_text="x",
)
assert response.is_closed is True
@@ -1211,11 +1913,10 @@ async def test_raw_response_create_overload_9(self, async_client: AsyncRunwayML)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_16(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_image.with_streaming_response.create(
- model="gemini_image3_pro",
- prompt_text="xxx",
- ratio="1344:768",
+ model="ideogram_4_5",
+ prompt_text="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1226,38 +1927,32 @@ async def test_streaming_response_create_overload_9(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_10(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_17(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="gpt_image_2_5_flare",
+ model="seedream5_flash",
prompt_text="x",
- ratio="2048:880",
+ ratio="1024:1024",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_10(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_17(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="gpt_image_2_5_flare",
+ model="seedream5_flash",
prompt_text="x",
- ratio="2048:880",
- background="opaque",
+ ratio="1024:1024",
output_count=1,
- quality="low",
- reference_images=[
- {
- "uri": "https://example.com/image.jpg",
- "tag": "tag",
- }
- ],
+ output_format="png",
+ reference_images=[{"uri": "https://example.com/image.jpg"}],
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_17(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_image.with_raw_response.create(
- model="gpt_image_2_5_flare",
+ model="seedream5_flash",
prompt_text="x",
- ratio="2048:880",
+ ratio="1024:1024",
)
assert response.is_closed is True
@@ -1266,11 +1961,11 @@ async def test_raw_response_create_overload_10(self, async_client: AsyncRunwayML
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_17(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_image.with_streaming_response.create(
- model="gpt_image_2_5_flare",
+ model="seedream5_flash",
prompt_text="x",
- ratio="2048:880",
+ ratio="1024:1024",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1281,38 +1976,37 @@ async def test_streaming_response_create_overload_10(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_11(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_18(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="gpt_image_2_5_sunburst",
+ model="nano_banana_2.1",
prompt_text="x",
- ratio="2048:880",
+ ratio="1024:1024",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_11(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_18(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="gpt_image_2_5_sunburst",
+ model="nano_banana_2.1",
prompt_text="x",
- ratio="2048:880",
- background="transparent",
+ ratio="1024:1024",
output_count=1,
- quality="low",
reference_images=[
{
"uri": "https://example.com/image.jpg",
"tag": "tag",
}
],
+ thinking_level="minimal",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_11(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_18(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_image.with_raw_response.create(
- model="gpt_image_2_5_sunburst",
+ model="nano_banana_2.1",
prompt_text="x",
- ratio="2048:880",
+ ratio="1024:1024",
)
assert response.is_closed is True
@@ -1321,11 +2015,11 @@ async def test_raw_response_create_overload_11(self, async_client: AsyncRunwayML
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_11(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_18(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_image.with_streaming_response.create(
- model="gpt_image_2_5_sunburst",
+ model="nano_banana_2.1",
prompt_text="x",
- ratio="2048:880",
+ ratio="1024:1024",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1336,30 +2030,34 @@ async def test_streaming_response_create_overload_11(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_12(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_19(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="ideogram_4_0",
+ model="recraft_v4_1_flash",
prompt_text="x",
+ ratio="1024:1024",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_12(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_19(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="ideogram_4_0",
+ model="recraft_v4_1_flash",
prompt_text="x",
+ ratio="1024:1024",
+ background_color="#E1CB97",
+ colors=["#E1CB97"],
output_count=1,
- quality="low",
- ratio="2048:2048",
- reference_images=[{"uri": "https://example.com/image.jpg"}],
+ output_format="webp",
+ seed=0,
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_12(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_19(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_image.with_raw_response.create(
- model="ideogram_4_0",
+ model="recraft_v4_1_flash",
prompt_text="x",
+ ratio="1024:1024",
)
assert response.is_closed is True
@@ -1368,10 +2066,11 @@ async def test_raw_response_create_overload_12(self, async_client: AsyncRunwayML
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_12(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_19(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_image.with_streaming_response.create(
- model="ideogram_4_0",
+ model="recraft_v4_1_flash",
prompt_text="x",
+ ratio="1024:1024",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1382,31 +2081,28 @@ async def test_streaming_response_create_overload_12(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_13(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_20(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="ideogram_4_5",
+ model="recraft_v4_1_vector",
prompt_text="x",
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_13(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_20(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
- model="ideogram_4_5",
+ model="recraft_v4_1_vector",
prompt_text="x",
- mask_uri="https://example.com/image.jpg",
- output_count=1,
- precise_edit=True,
- quality="very_low",
+ background_color="#E1CB97",
+ colors=["#E1CB97"],
ratio="1024:1024",
- reference_images=[{"uri": "https://example.com/image.jpg"}],
)
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_13(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_20(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_image.with_raw_response.create(
- model="ideogram_4_5",
+ model="recraft_v4_1_vector",
prompt_text="x",
)
@@ -1416,9 +2112,9 @@ async def test_raw_response_create_overload_13(self, async_client: AsyncRunwayML
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_13(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_20(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_image.with_streaming_response.create(
- model="ideogram_4_5",
+ model="recraft_v4_1_vector",
prompt_text="x",
) as response:
assert not response.is_closed
@@ -1430,7 +2126,7 @@ async def test_streaming_response_create_overload_13(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_14(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_21(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
model="gemini_2.5_flash",
prompt_text="x",
@@ -1439,7 +2135,7 @@ async def test_method_create_overload_14(self, async_client: AsyncRunwayML) -> N
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_14(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_21(self, async_client: AsyncRunwayML) -> None:
text_to_image = await async_client.text_to_image.create(
model="gemini_2.5_flash",
prompt_text="x",
@@ -1454,7 +2150,7 @@ async def test_method_create_with_all_params_overload_14(self, async_client: Asy
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_raw_response_create_overload_14(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_21(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_image.with_raw_response.create(
model="gemini_2.5_flash",
prompt_text="x",
@@ -1467,7 +2163,7 @@ async def test_raw_response_create_overload_14(self, async_client: AsyncRunwayML
assert_matches_type(TextToImageCreateResponse, text_to_image, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_14(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_21(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_image.with_streaming_response.create(
model="gemini_2.5_flash",
prompt_text="x",
diff --git a/tests/api_resources/test_text_to_video.py b/tests/api_resources/test_text_to_video.py
index 99f410f..a4becd2 100644
--- a/tests/api_resources/test_text_to_video.py
+++ b/tests/api_resources/test_text_to_video.py
@@ -174,40 +174,36 @@ def test_streaming_response_create_overload_3(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_4(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="hailuo3",
- prompt_text="x",
+ model="klingO3_4k",
+ ratio="3840:2160",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_4(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="hailuo3",
- prompt_text="x",
- duration=5,
- ratio="adaptive",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- references=[{"uri": "https://example.com/image.jpg"}],
- reference_videos=[
- {
- "type": "video",
- "uri": "https://example.com/video.mp4",
- }
- ],
- resolution="2k",
+ model="klingO3_4k",
+ ratio="3840:2160",
+ audio=True,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_4(self, client: RunwayML) -> None:
response = client.text_to_video.with_raw_response.create(
- model="hailuo3",
- prompt_text="x",
+ model="klingO3_4k",
+ ratio="3840:2160",
)
assert response.is_closed is True
@@ -218,8 +214,8 @@ def test_raw_response_create_overload_4(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_4(self, client: RunwayML) -> None:
with client.text_to_video.with_streaming_response.create(
- model="hailuo3",
- prompt_text="x",
+ model="klingO3_4k",
+ ratio="3840:2160",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -232,26 +228,40 @@ def test_streaming_response_create_overload_4(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_5(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="happyhorse_1_0",
- prompt_text="xx",
+ model="hailuo3",
+ prompt_text="x",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_5(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="happyhorse_1_0",
- prompt_text="xx",
- duration=3,
- ratio="1280:720",
+ model="hailuo3",
+ prompt_text="x",
+ duration=5,
+ ratio="adaptive",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ references=[{"uri": "https://example.com/image.jpg"}],
+ reference_videos=[
+ {
+ "type": "video",
+ "uri": "https://example.com/video.mp4",
+ }
+ ],
+ resolution="2k",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_5(self, client: RunwayML) -> None:
response = client.text_to_video.with_raw_response.create(
- model="happyhorse_1_0",
- prompt_text="xx",
+ model="hailuo3",
+ prompt_text="x",
)
assert response.is_closed is True
@@ -262,8 +272,8 @@ def test_raw_response_create_overload_5(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_5(self, client: RunwayML) -> None:
with client.text_to_video.with_streaming_response.create(
- model="happyhorse_1_0",
- prompt_text="xx",
+ model="hailuo3",
+ prompt_text="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -276,41 +286,37 @@ def test_streaming_response_create_overload_5(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_6(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="seedance2",
- prompt_text="x",
+ model="kling3.0_4k",
+ ratio="3840:2160",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_6(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="seedance2",
- prompt_text="x",
+ model="kling3.0_4k",
+ ratio="3840:2160",
audio=True,
- duration="auto",
- ratio="992:432",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- references=[{"uri": "https://example.com/image.jpg"}],
- reference_videos=[
- {
- "type": "video",
- "uri": "https://example.com/video.mp4",
- }
- ],
- seed=0,
+ cfg_scale=0,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_6(self, client: RunwayML) -> None:
response = client.text_to_video.with_raw_response.create(
- model="seedance2",
- prompt_text="x",
+ model="kling3.0_4k",
+ ratio="3840:2160",
)
assert response.is_closed is True
@@ -321,8 +327,8 @@ def test_raw_response_create_overload_6(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_6(self, client: RunwayML) -> None:
with client.text_to_video.with_streaming_response.create(
- model="seedance2",
- prompt_text="x",
+ model="kling3.0_4k",
+ ratio="3840:2160",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -335,41 +341,26 @@ def test_streaming_response_create_overload_6(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_7(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="seedance2_fast",
- prompt_text="x",
+ model="happyhorse_1_0",
+ prompt_text="xx",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_7(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="seedance2_fast",
- prompt_text="x",
- audio=True,
- duration="auto",
- ratio="992:432",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- references=[{"uri": "https://example.com/image.jpg"}],
- reference_videos=[
- {
- "type": "video",
- "uri": "https://example.com/video.mp4",
- }
- ],
- seed=0,
+ model="happyhorse_1_0",
+ prompt_text="xx",
+ duration=3,
+ ratio="1280:720",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_7(self, client: RunwayML) -> None:
response = client.text_to_video.with_raw_response.create(
- model="seedance2_fast",
- prompt_text="x",
+ model="happyhorse_1_0",
+ prompt_text="xx",
)
assert response.is_closed is True
@@ -380,8 +371,8 @@ def test_raw_response_create_overload_7(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_7(self, client: RunwayML) -> None:
with client.text_to_video.with_streaming_response.create(
- model="seedance2_fast",
- prompt_text="x",
+ model="happyhorse_1_0",
+ prompt_text="xx",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -394,41 +385,27 @@ def test_streaming_response_create_overload_7(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_8(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="seedance2_mini",
- prompt_text="x",
+ model="kling2.5_turbo_pro",
+ prompt_text="xx",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_8(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="seedance2_mini",
- prompt_text="x",
- audio=True,
- duration="auto",
- ratio="992:432",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- references=[{"uri": "https://example.com/image.jpg"}],
- reference_videos=[
- {
- "type": "video",
- "uri": "https://example.com/video.mp4",
- }
- ],
- seed=0,
+ model="kling2.5_turbo_pro",
+ prompt_text="xx",
+ cfg_scale=0,
+ duration=5,
+ ratio="1920:1080",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_8(self, client: RunwayML) -> None:
response = client.text_to_video.with_raw_response.create(
- model="seedance2_mini",
- prompt_text="x",
+ model="kling2.5_turbo_pro",
+ prompt_text="xx",
)
assert response.is_closed is True
@@ -439,8 +416,8 @@ def test_raw_response_create_overload_8(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_8(self, client: RunwayML) -> None:
with client.text_to_video.with_streaming_response.create(
- model="seedance2_mini",
- prompt_text="x",
+ model="kling2.5_turbo_pro",
+ prompt_text="xx",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -453,26 +430,37 @@ def test_streaming_response_create_overload_8(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_9(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="gemini_omni_flash",
- prompt_text="x",
+ model="kling3.0_pro",
+ ratio="1920:1080",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_9(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="gemini_omni_flash",
- prompt_text="x",
+ model="kling3.0_pro",
+ ratio="1920:1080",
+ audio=True,
+ cfg_scale=0,
duration=3,
- ratio="1280:720",
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_9(self, client: RunwayML) -> None:
response = client.text_to_video.with_raw_response.create(
- model="gemini_omni_flash",
- prompt_text="x",
+ model="kling3.0_pro",
+ ratio="1920:1080",
)
assert response.is_closed is True
@@ -483,8 +471,8 @@ def test_raw_response_create_overload_9(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_9(self, client: RunwayML) -> None:
with client.text_to_video.with_streaming_response.create(
- model="gemini_omni_flash",
- prompt_text="x",
+ model="kling3.0_pro",
+ ratio="1920:1080",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -497,39 +485,37 @@ def test_streaming_response_create_overload_9(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_10(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="seedance2_5",
+ model="kling3.0_standard",
+ ratio="1280:720",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_10(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="seedance2_5",
+ model="kling3.0_standard",
+ ratio="1280:720",
audio=True,
- duration="auto",
- prompt_text="x",
- ratio="992:432",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- references=[{"uri": "https://example.com/image.jpg"}],
- reference_videos=[
- {
- "type": "video",
- "uri": "https://example.com/video.mp4",
- }
- ],
- seed=0,
+ cfg_scale=0,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_10(self, client: RunwayML) -> None:
response = client.text_to_video.with_raw_response.create(
- model="seedance2_5",
+ model="kling3.0_standard",
+ ratio="1280:720",
)
assert response.is_closed is True
@@ -540,7 +526,8 @@ def test_raw_response_create_overload_10(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_10(self, client: RunwayML) -> None:
with client.text_to_video.with_streaming_response.create(
- model="seedance2_5",
+ model="kling3.0_standard",
+ ratio="1280:720",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -553,34 +540,36 @@ def test_streaming_response_create_overload_10(self, client: RunwayML) -> None:
@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",
+ model="klingO3_pro",
+ ratio="1920:1080",
)
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",
+ model="klingO3_pro",
+ ratio="1920:1080",
+ audio=True,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
)
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",
+ model="klingO3_pro",
+ ratio="1920:1080",
)
assert response.is_closed is True
@@ -591,8 +580,8 @@ def test_raw_response_create_overload_11(self, client: RunwayML) -> None:
@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",
+ model="klingO3_pro",
+ ratio="1920:1080",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -605,40 +594,36 @@ def test_streaming_response_create_overload_11(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_12(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="wan3",
- prompt_text="x",
+ model="klingO3_standard",
+ ratio="1280:720",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_method_create_with_all_params_overload_12(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="wan3",
- prompt_text="x",
+ model="klingO3_standard",
+ ratio="1280:720",
audio=True,
- duration=2,
- ratio="832:480",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- references=[{"uri": "https://example.com/image.jpg"}],
- reference_videos=[
- {
- "type": "video",
- "uri": "https://example.com/video.mp4",
- }
- ],
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_12(self, client: RunwayML) -> None:
response = client.text_to_video.with_raw_response.create(
- model="wan3",
- prompt_text="x",
+ model="klingO3_standard",
+ ratio="1280:720",
)
assert response.is_closed is True
@@ -649,8 +634,8 @@ def test_raw_response_create_overload_12(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_12(self, client: RunwayML) -> None:
with client.text_to_video.with_streaming_response.create(
- model="wan3",
- prompt_text="x",
+ model="klingO3_standard",
+ ratio="1280:720",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -663,7 +648,7 @@ def test_streaming_response_create_overload_12(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_13(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="gemini_omni_flash_1.1",
+ model="seedance2",
prompt_text="x",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@@ -671,19 +656,32 @@ def test_method_create_overload_13(self, client: RunwayML) -> None:
@parametrize
def test_method_create_with_all_params_overload_13(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="gemini_omni_flash_1.1",
+ model="seedance2",
prompt_text="x",
+ audio=True,
duration="auto",
- ratio="640:360",
+ ratio="992:432",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
references=[{"uri": "https://example.com/image.jpg"}],
- reference_videos=[{"uri": "https://example.com/video.mp4"}],
- )
- assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+ reference_videos=[
+ {
+ "type": "video",
+ "uri": "https://example.com/video.mp4",
+ }
+ ],
+ seed=0,
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_13(self, client: RunwayML) -> None:
response = client.text_to_video.with_raw_response.create(
- model="gemini_omni_flash_1.1",
+ model="seedance2",
prompt_text="x",
)
@@ -695,7 +693,7 @@ def test_raw_response_create_overload_13(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_13(self, client: RunwayML) -> None:
with client.text_to_video.with_streaming_response.create(
- model="gemini_omni_flash_1.1",
+ model="seedance2",
prompt_text="x",
) as response:
assert not response.is_closed
@@ -709,7 +707,7 @@ def test_streaming_response_create_overload_13(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_14(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="wan3_prime",
+ model="seedance2_fast",
prompt_text="x",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@@ -717,11 +715,11 @@ def test_method_create_overload_14(self, client: RunwayML) -> None:
@parametrize
def test_method_create_with_all_params_overload_14(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="wan3_prime",
+ model="seedance2_fast",
prompt_text="x",
audio=True,
- duration=2,
- ratio="832:480",
+ duration="auto",
+ ratio="992:432",
reference_audio=[
{
"type": "audio",
@@ -735,13 +733,14 @@ def test_method_create_with_all_params_overload_14(self, client: RunwayML) -> No
"uri": "https://example.com/video.mp4",
}
],
+ seed=0,
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_14(self, client: RunwayML) -> None:
response = client.text_to_video.with_raw_response.create(
- model="wan3_prime",
+ model="seedance2_fast",
prompt_text="x",
)
@@ -753,7 +752,7 @@ def test_raw_response_create_overload_14(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_14(self, client: RunwayML) -> None:
with client.text_to_video.with_streaming_response.create(
- model="wan3_prime",
+ model="seedance2_fast",
prompt_text="x",
) as response:
assert not response.is_closed
@@ -767,7 +766,7 @@ def test_streaming_response_create_overload_14(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_15(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="h3_max",
+ model="seedance2_mini",
prompt_text="x",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@@ -775,11 +774,24 @@ def test_method_create_overload_15(self, client: RunwayML) -> None:
@parametrize
def test_method_create_with_all_params_overload_15(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="h3_max",
+ model="seedance2_mini",
prompt_text="x",
- duration=5,
- prompt_expansion_mode="disabled",
- resolution="768p",
+ audio=True,
+ duration="auto",
+ ratio="992:432",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ references=[{"uri": "https://example.com/image.jpg"}],
+ reference_videos=[
+ {
+ "type": "video",
+ "uri": "https://example.com/video.mp4",
+ }
+ ],
seed=0,
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@@ -787,7 +799,7 @@ def test_method_create_with_all_params_overload_15(self, client: RunwayML) -> No
@parametrize
def test_raw_response_create_overload_15(self, client: RunwayML) -> None:
response = client.text_to_video.with_raw_response.create(
- model="h3_max",
+ model="seedance2_mini",
prompt_text="x",
)
@@ -799,7 +811,7 @@ def test_raw_response_create_overload_15(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_15(self, client: RunwayML) -> None:
with client.text_to_video.with_streaming_response.create(
- model="h3_max",
+ model="seedance2_mini",
prompt_text="x",
) as response:
assert not response.is_closed
@@ -813,7 +825,7 @@ def test_streaming_response_create_overload_15(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_16(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="grok_imagine_1_5_lite",
+ model="gemini_omni_flash",
prompt_text="x",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@@ -821,17 +833,17 @@ def test_method_create_overload_16(self, client: RunwayML) -> None:
@parametrize
def test_method_create_with_all_params_overload_16(self, client: RunwayML) -> None:
text_to_video = client.text_to_video.create(
- model="grok_imagine_1_5_lite",
+ model="gemini_omni_flash",
prompt_text="x",
- duration=1,
- ratio="848:480",
+ duration=3,
+ ratio="1280:720",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
def test_raw_response_create_overload_16(self, client: RunwayML) -> None:
response = client.text_to_video.with_raw_response.create(
- model="grok_imagine_1_5_lite",
+ model="gemini_omni_flash",
prompt_text="x",
)
@@ -843,7 +855,7 @@ def test_raw_response_create_overload_16(self, client: RunwayML) -> None:
@parametrize
def test_streaming_response_create_overload_16(self, client: RunwayML) -> None:
with client.text_to_video.with_streaming_response.create(
- model="grok_imagine_1_5_lite",
+ model="gemini_omni_flash",
prompt_text="x",
) as response:
assert not response.is_closed
@@ -854,94 +866,819 @@ def test_streaming_response_create_overload_16(self, client: RunwayML) -> None:
assert cast(Any, response.is_closed) is True
+ @parametrize
+ def test_method_create_overload_17(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"])
-class TestAsyncTextToVideo:
- parametrize = pytest.mark.parametrize(
- "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
- )
+ @parametrize
+ def test_method_create_with_all_params_overload_17(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
- async def test_method_create_overload_1(self, async_client: AsyncRunwayML) -> None:
- text_to_video = await async_client.text_to_video.create(
- duration=2,
- model="gen4.5",
+ def test_raw_response_create_overload_17(self, client: RunwayML) -> None:
+ response = client.text_to_video.with_raw_response.create(
+ model="grok_imagine_1_5",
prompt_text="x",
- ratio="1280:720",
)
+
+ 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
- async def test_method_create_with_all_params_overload_1(self, async_client: AsyncRunwayML) -> None:
- text_to_video = await async_client.text_to_video.create(
- duration=2,
- model="gen4.5",
+ def test_streaming_response_create_overload_17(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
+
+ @parametrize
+ def test_method_create_overload_18(self, client: RunwayML) -> None:
+ text_to_video = client.text_to_video.create(
+ model="wan3",
prompt_text="x",
- ratio="1280:720",
- content_moderation={"public_figure_threshold": "auto"},
- output_format="mp4",
- prores_profile="422",
- seed=0,
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_1(self, async_client: AsyncRunwayML) -> None:
- response = await async_client.text_to_video.with_raw_response.create(
+ def test_method_create_with_all_params_overload_18(self, client: RunwayML) -> None:
+ text_to_video = client.text_to_video.create(
+ model="wan3",
+ prompt_text="x",
+ audio=True,
duration=2,
- model="gen4.5",
+ ratio="832:480",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ references=[{"uri": "https://example.com/image.jpg"}],
+ reference_videos=[
+ {
+ "type": "video",
+ "uri": "https://example.com/video.mp4",
+ }
+ ],
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_18(self, client: RunwayML) -> None:
+ response = client.text_to_video.with_raw_response.create(
+ model="wan3",
prompt_text="x",
- ratio="1280:720",
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- text_to_video = await response.parse()
+ text_to_video = response.parse()
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_1(self, async_client: AsyncRunwayML) -> None:
- async with async_client.text_to_video.with_streaming_response.create(
- duration=2,
- model="gen4.5",
+ def test_streaming_response_create_overload_18(self, client: RunwayML) -> None:
+ with client.text_to_video.with_streaming_response.create(
+ model="wan3",
prompt_text="x",
- ratio="1280:720",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- text_to_video = await response.parse()
+ text_to_video = response.parse()
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_2(self, async_client: AsyncRunwayML) -> None:
- text_to_video = await async_client.text_to_video.create(
- model="veo3.1",
+ def test_method_create_overload_19(self, client: RunwayML) -> None:
+ text_to_video = client.text_to_video.create(
+ model="gemini_omni_flash_1.1",
prompt_text="x",
- ratio="1280:720",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_2(self, async_client: AsyncRunwayML) -> None:
- text_to_video = await async_client.text_to_video.create(
- model="veo3.1",
+ def test_method_create_with_all_params_overload_19(self, client: RunwayML) -> None:
+ text_to_video = client.text_to_video.create(
+ model="gemini_omni_flash_1.1",
+ prompt_text="x",
+ duration="auto",
+ ratio="640:360",
+ references=[{"uri": "https://example.com/image.jpg"}],
+ reference_videos=[{"uri": "https://example.com/video.mp4"}],
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_19(self, client: RunwayML) -> None:
+ response = client.text_to_video.with_raw_response.create(
+ model="gemini_omni_flash_1.1",
+ 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_19(self, client: RunwayML) -> None:
+ with client.text_to_video.with_streaming_response.create(
+ model="gemini_omni_flash_1.1",
+ 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
+
+ @parametrize
+ def test_method_create_overload_20(self, client: RunwayML) -> None:
+ text_to_video = client.text_to_video.create(
+ model="wan3_prime",
+ prompt_text="x",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_20(self, client: RunwayML) -> None:
+ text_to_video = client.text_to_video.create(
+ model="wan3_prime",
prompt_text="x",
- ratio="1280:720",
audio=True,
- duration=4,
- negative_prompt="x",
- seed=0,
+ duration=2,
+ ratio="832:480",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ references=[{"uri": "https://example.com/image.jpg"}],
+ reference_videos=[
+ {
+ "type": "video",
+ "uri": "https://example.com/video.mp4",
+ }
+ ],
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_20(self, client: RunwayML) -> None:
+ response = client.text_to_video.with_raw_response.create(
+ model="wan3_prime",
+ 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_20(self, client: RunwayML) -> None:
+ with client.text_to_video.with_streaming_response.create(
+ model="wan3_prime",
+ 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
+
+ @parametrize
+ def test_method_create_overload_21(self, client: RunwayML) -> None:
+ text_to_video = client.text_to_video.create(
+ model="h3_max",
+ prompt_text="x",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_21(self, client: RunwayML) -> None:
+ text_to_video = client.text_to_video.create(
+ model="h3_max",
+ prompt_text="x",
+ duration=5,
+ prompt_expansion_mode="disabled",
+ resolution="768p",
+ seed=0,
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_21(self, client: RunwayML) -> None:
+ response = client.text_to_video.with_raw_response.create(
+ model="h3_max",
+ 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_21(self, client: RunwayML) -> None:
+ with client.text_to_video.with_streaming_response.create(
+ model="h3_max",
+ 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
+
+ @parametrize
+ def test_method_create_overload_22(self, client: RunwayML) -> None:
+ text_to_video = client.text_to_video.create(
+ model="seedance2_5",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_22(self, client: RunwayML) -> None:
+ text_to_video = client.text_to_video.create(
+ model="seedance2_5",
+ audio=True,
+ draft=True,
+ draft_task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ duration="auto",
+ output_format="mp4",
+ prompt_text="x",
+ ratio="992:432",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ references=[{"uri": "https://example.com/image.jpg"}],
+ reference_videos=[
+ {
+ "type": "video",
+ "uri": "https://example.com/video.mp4",
+ }
+ ],
+ seed=0,
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_22(self, client: RunwayML) -> None:
+ response = client.text_to_video.with_raw_response.create(
+ model="seedance2_5",
+ )
+
+ 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_22(self, client: RunwayML) -> None:
+ with client.text_to_video.with_streaming_response.create(
+ model="seedance2_5",
+ ) 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
+
+ @parametrize
+ def test_method_create_overload_23(self, client: RunwayML) -> None:
+ text_to_video = client.text_to_video.create(
+ model="grok_imagine_1_5_lite",
+ prompt_text="x",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_23(self, client: RunwayML) -> None:
+ text_to_video = client.text_to_video.create(
+ model="grok_imagine_1_5_lite",
+ prompt_text="x",
+ duration=1,
+ ratio="848:480",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_23(self, client: RunwayML) -> None:
+ response = client.text_to_video.with_raw_response.create(
+ model="grok_imagine_1_5_lite",
+ 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_23(self, client: RunwayML) -> None:
+ with client.text_to_video.with_streaming_response.create(
+ model="grok_imagine_1_5_lite",
+ 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(
+ "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
+ )
+
+ @parametrize
+ async def test_method_create_overload_1(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ duration=2,
+ model="gen4.5",
+ prompt_text="x",
+ ratio="1280:720",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_1(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ duration=2,
+ model="gen4.5",
+ prompt_text="x",
+ ratio="1280:720",
+ content_moderation={"public_figure_threshold": "auto"},
+ output_format="mp4",
+ prores_profile="422",
+ seed=0,
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_1(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_video.with_raw_response.create(
+ duration=2,
+ model="gen4.5",
+ prompt_text="x",
+ ratio="1280:720",
+ )
+
+ 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_1(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_video.with_streaming_response.create(
+ duration=2,
+ model="gen4.5",
+ prompt_text="x",
+ ratio="1280:720",
+ ) 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
+
+ @parametrize
+ async def test_method_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="veo3.1",
+ prompt_text="x",
+ ratio="1280:720",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_2(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="veo3.1",
+ prompt_text="x",
+ ratio="1280:720",
+ audio=True,
+ duration=4,
+ negative_prompt="x",
+ seed=0,
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_video.with_raw_response.create(
+ model="veo3.1",
+ prompt_text="x",
+ ratio="1280:720",
+ )
+
+ 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_2(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_video.with_streaming_response.create(
+ model="veo3.1",
+ prompt_text="x",
+ ratio="1280:720",
+ ) 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
+
+ @parametrize
+ async def test_method_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="veo3.1_fast",
+ prompt_text="x",
+ ratio="1280:720",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_3(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="veo3.1_fast",
+ prompt_text="x",
+ ratio="1280:720",
+ audio=True,
+ duration=4,
+ negative_prompt="x",
+ seed=0,
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_video.with_raw_response.create(
+ model="veo3.1_fast",
+ prompt_text="x",
+ ratio="1280:720",
+ )
+
+ 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_3(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_video.with_streaming_response.create(
+ model="veo3.1_fast",
+ prompt_text="x",
+ ratio="1280:720",
+ ) 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
+
+ @parametrize
+ async def test_method_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="klingO3_4k",
+ ratio="3840:2160",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_4(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="klingO3_4k",
+ ratio="3840:2160",
+ audio=True,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_video.with_raw_response.create(
+ model="klingO3_4k",
+ ratio="3840:2160",
+ )
+
+ 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_4(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_video.with_streaming_response.create(
+ model="klingO3_4k",
+ ratio="3840:2160",
+ ) 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
+
+ @parametrize
+ async def test_method_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="hailuo3",
+ prompt_text="x",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_5(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="hailuo3",
+ prompt_text="x",
+ duration=5,
+ ratio="adaptive",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ references=[{"uri": "https://example.com/image.jpg"}],
+ reference_videos=[
+ {
+ "type": "video",
+ "uri": "https://example.com/video.mp4",
+ }
+ ],
+ resolution="2k",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_video.with_raw_response.create(
+ model="hailuo3",
+ 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_5(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_video.with_streaming_response.create(
+ model="hailuo3",
+ 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
+
+ @parametrize
+ async def test_method_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="kling3.0_4k",
+ ratio="3840:2160",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_6(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="kling3.0_4k",
+ ratio="3840:2160",
+ audio=True,
+ cfg_scale=0,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_video.with_raw_response.create(
+ model="kling3.0_4k",
+ ratio="3840:2160",
+ )
+
+ 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_6(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_video.with_streaming_response.create(
+ model="kling3.0_4k",
+ ratio="3840:2160",
+ ) 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
+
+ @parametrize
+ async def test_method_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="happyhorse_1_0",
+ prompt_text="xx",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_7(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="happyhorse_1_0",
+ prompt_text="xx",
+ duration=3,
+ ratio="1280:720",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_video.with_raw_response.create(
+ model="happyhorse_1_0",
+ prompt_text="xx",
+ )
+
+ 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_7(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_video.with_streaming_response.create(
+ model="happyhorse_1_0",
+ prompt_text="xx",
+ ) 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
+
+ @parametrize
+ async def test_method_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="kling2.5_turbo_pro",
+ prompt_text="xx",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_8(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="kling2.5_turbo_pro",
+ prompt_text="xx",
+ cfg_scale=0,
+ duration=5,
+ ratio="1920:1080",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_video.with_raw_response.create(
+ model="kling2.5_turbo_pro",
+ prompt_text="xx",
+ )
+
+ 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_8(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_video.with_streaming_response.create(
+ model="kling2.5_turbo_pro",
+ prompt_text="xx",
+ ) 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
+
+ @parametrize
+ async def test_method_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="kling3.0_pro",
+ ratio="1920:1080",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_9(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="kling3.0_pro",
+ ratio="1920:1080",
+ audio=True,
+ cfg_scale=0,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
- model="veo3.1",
- prompt_text="x",
- ratio="1280:720",
+ model="kling3.0_pro",
+ ratio="1920:1080",
)
assert response.is_closed is True
@@ -950,11 +1687,10 @@ async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
- model="veo3.1",
- prompt_text="x",
- ratio="1280:720",
+ model="kling3.0_pro",
+ ratio="1920:1080",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -965,32 +1701,38 @@ async def test_streaming_response_create_overload_2(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_10(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
- model="veo3.1_fast",
- prompt_text="x",
+ model="kling3.0_standard",
ratio="1280:720",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_10(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
- model="veo3.1_fast",
- prompt_text="x",
+ model="kling3.0_standard",
ratio="1280:720",
audio=True,
- duration=4,
- negative_prompt="x",
- seed=0,
+ cfg_scale=0,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
- model="veo3.1_fast",
- prompt_text="x",
+ model="kling3.0_standard",
ratio="1280:720",
)
@@ -1000,10 +1742,9 @@ async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
- model="veo3.1_fast",
- prompt_text="x",
+ model="kling3.0_standard",
ratio="1280:720",
) as response:
assert not response.is_closed
@@ -1015,42 +1756,38 @@ async def test_streaming_response_create_overload_3(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_11(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
- model="hailuo3",
- prompt_text="x",
+ model="klingO3_pro",
+ ratio="1920:1080",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_4(self, async_client: AsyncRunwayML) -> None:
+ 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="hailuo3",
- prompt_text="x",
- duration=5,
- ratio="adaptive",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- references=[{"uri": "https://example.com/image.jpg"}],
- reference_videos=[
- {
- "type": "video",
- "uri": "https://example.com/video.mp4",
- }
- ],
- resolution="2k",
+ model="klingO3_pro",
+ ratio="1920:1080",
+ audio=True,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ 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="hailuo3",
- prompt_text="x",
+ model="klingO3_pro",
+ ratio="1920:1080",
)
assert response.is_closed is True
@@ -1059,10 +1796,10 @@ async def test_raw_response_create_overload_4(self, async_client: AsyncRunwayML)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ 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="hailuo3",
- prompt_text="x",
+ model="klingO3_pro",
+ ratio="1920:1080",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1073,28 +1810,38 @@ async def test_streaming_response_create_overload_4(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_12(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
- model="happyhorse_1_0",
- prompt_text="xx",
+ model="klingO3_standard",
+ ratio="1280:720",
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_12(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
- model="happyhorse_1_0",
- prompt_text="xx",
- duration=3,
+ model="klingO3_standard",
ratio="1280:720",
+ audio=True,
+ duration=3,
+ prompt_text="xx",
+ provider_settings={
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_12(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
- model="happyhorse_1_0",
- prompt_text="xx",
+ model="klingO3_standard",
+ ratio="1280:720",
)
assert response.is_closed is True
@@ -1103,10 +1850,10 @@ async def test_raw_response_create_overload_5(self, async_client: AsyncRunwayML)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_12(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
- model="happyhorse_1_0",
- prompt_text="xx",
+ model="klingO3_standard",
+ ratio="1280:720",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -1117,7 +1864,7 @@ async def test_streaming_response_create_overload_5(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_13(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="seedance2",
prompt_text="x",
@@ -1125,7 +1872,7 @@ async def test_method_create_overload_6(self, async_client: AsyncRunwayML) -> No
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_13(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="seedance2",
prompt_text="x",
@@ -1150,7 +1897,7 @@ async def test_method_create_with_all_params_overload_6(self, async_client: Asyn
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_13(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
model="seedance2",
prompt_text="x",
@@ -1162,7 +1909,7 @@ async def test_raw_response_create_overload_6(self, async_client: AsyncRunwayML)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_13(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
model="seedance2",
prompt_text="x",
@@ -1176,7 +1923,7 @@ async def test_streaming_response_create_overload_6(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_14(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="seedance2_fast",
prompt_text="x",
@@ -1184,7 +1931,7 @@ async def test_method_create_overload_7(self, async_client: AsyncRunwayML) -> No
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_14(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="seedance2_fast",
prompt_text="x",
@@ -1209,7 +1956,7 @@ async def test_method_create_with_all_params_overload_7(self, async_client: Asyn
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_14(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
model="seedance2_fast",
prompt_text="x",
@@ -1221,7 +1968,7 @@ async def test_raw_response_create_overload_7(self, async_client: AsyncRunwayML)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_14(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
model="seedance2_fast",
prompt_text="x",
@@ -1235,7 +1982,7 @@ async def test_streaming_response_create_overload_7(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_15(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="seedance2_mini",
prompt_text="x",
@@ -1243,7 +1990,7 @@ async def test_method_create_overload_8(self, async_client: AsyncRunwayML) -> No
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_15(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="seedance2_mini",
prompt_text="x",
@@ -1268,7 +2015,7 @@ async def test_method_create_with_all_params_overload_8(self, async_client: Asyn
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_15(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
model="seedance2_mini",
prompt_text="x",
@@ -1280,7 +2027,7 @@ async def test_raw_response_create_overload_8(self, async_client: AsyncRunwayML)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_15(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
model="seedance2_mini",
prompt_text="x",
@@ -1294,7 +2041,7 @@ async def test_streaming_response_create_overload_8(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_16(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="gemini_omni_flash",
prompt_text="x",
@@ -1302,7 +2049,7 @@ async def test_method_create_overload_9(self, async_client: AsyncRunwayML) -> No
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_16(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="gemini_omni_flash",
prompt_text="x",
@@ -1312,7 +2059,7 @@ async def test_method_create_with_all_params_overload_9(self, async_client: Asyn
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_16(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
model="gemini_omni_flash",
prompt_text="x",
@@ -1324,7 +2071,7 @@ async def test_raw_response_create_overload_9(self, async_client: AsyncRunwayML)
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_16(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
model="gemini_omni_flash",
prompt_text="x",
@@ -1338,63 +2085,7 @@ async def test_streaming_response_create_overload_9(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_10(self, async_client: AsyncRunwayML) -> None:
- text_to_video = await async_client.text_to_video.create(
- model="seedance2_5",
- )
- assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
-
- @parametrize
- async def test_method_create_with_all_params_overload_10(self, async_client: AsyncRunwayML) -> None:
- text_to_video = await async_client.text_to_video.create(
- model="seedance2_5",
- audio=True,
- duration="auto",
- prompt_text="x",
- ratio="992:432",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
- references=[{"uri": "https://example.com/image.jpg"}],
- reference_videos=[
- {
- "type": "video",
- "uri": "https://example.com/video.mp4",
- }
- ],
- seed=0,
- )
- assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
-
- @parametrize
- async def test_raw_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
- response = await async_client.text_to_video.with_raw_response.create(
- model="seedance2_5",
- )
-
- 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_10(self, async_client: AsyncRunwayML) -> None:
- async with async_client.text_to_video.with_streaming_response.create(
- model="seedance2_5",
- ) 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
-
- @parametrize
- async def test_method_create_overload_11(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_17(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="grok_imagine_1_5",
prompt_text="x",
@@ -1402,7 +2093,7 @@ async def test_method_create_overload_11(self, async_client: AsyncRunwayML) -> N
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:
+ async def test_method_create_with_all_params_overload_17(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="grok_imagine_1_5",
prompt_text="x",
@@ -1420,7 +2111,7 @@ async def test_method_create_with_all_params_overload_11(self, async_client: Asy
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_11(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_17(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
model="grok_imagine_1_5",
prompt_text="x",
@@ -1432,7 +2123,7 @@ async def test_raw_response_create_overload_11(self, async_client: AsyncRunwayML
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_11(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_17(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
model="grok_imagine_1_5",
prompt_text="x",
@@ -1446,7 +2137,7 @@ async def test_streaming_response_create_overload_11(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_12(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_18(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="wan3",
prompt_text="x",
@@ -1454,7 +2145,7 @@ async def test_method_create_overload_12(self, async_client: AsyncRunwayML) -> N
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_12(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_18(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="wan3",
prompt_text="x",
@@ -1478,7 +2169,7 @@ async def test_method_create_with_all_params_overload_12(self, async_client: Asy
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_12(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_18(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
model="wan3",
prompt_text="x",
@@ -1490,7 +2181,7 @@ async def test_raw_response_create_overload_12(self, async_client: AsyncRunwayML
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_12(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_18(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
model="wan3",
prompt_text="x",
@@ -1504,7 +2195,7 @@ async def test_streaming_response_create_overload_12(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_13(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_19(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="gemini_omni_flash_1.1",
prompt_text="x",
@@ -1512,7 +2203,7 @@ async def test_method_create_overload_13(self, async_client: AsyncRunwayML) -> N
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_13(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_19(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="gemini_omni_flash_1.1",
prompt_text="x",
@@ -1524,7 +2215,7 @@ async def test_method_create_with_all_params_overload_13(self, async_client: Asy
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_13(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_19(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
model="gemini_omni_flash_1.1",
prompt_text="x",
@@ -1536,7 +2227,7 @@ async def test_raw_response_create_overload_13(self, async_client: AsyncRunwayML
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_13(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_19(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
model="gemini_omni_flash_1.1",
prompt_text="x",
@@ -1550,7 +2241,7 @@ async def test_streaming_response_create_overload_13(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_14(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_20(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="wan3_prime",
prompt_text="x",
@@ -1558,7 +2249,7 @@ async def test_method_create_overload_14(self, async_client: AsyncRunwayML) -> N
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_14(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_20(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="wan3_prime",
prompt_text="x",
@@ -1582,7 +2273,7 @@ async def test_method_create_with_all_params_overload_14(self, async_client: Asy
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_14(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_20(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
model="wan3_prime",
prompt_text="x",
@@ -1594,7 +2285,7 @@ async def test_raw_response_create_overload_14(self, async_client: AsyncRunwayML
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_14(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_20(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
model="wan3_prime",
prompt_text="x",
@@ -1608,7 +2299,7 @@ async def test_streaming_response_create_overload_14(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_15(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_21(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="h3_max",
prompt_text="x",
@@ -1616,7 +2307,7 @@ async def test_method_create_overload_15(self, async_client: AsyncRunwayML) -> N
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_15(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_21(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="h3_max",
prompt_text="x",
@@ -1628,7 +2319,7 @@ async def test_method_create_with_all_params_overload_15(self, async_client: Asy
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_15(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_21(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
model="h3_max",
prompt_text="x",
@@ -1640,7 +2331,7 @@ async def test_raw_response_create_overload_15(self, async_client: AsyncRunwayML
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_15(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_21(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
model="h3_max",
prompt_text="x",
@@ -1654,7 +2345,66 @@ async def test_streaming_response_create_overload_15(self, async_client: AsyncRu
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_16(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_22(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="seedance2_5",
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_22(self, async_client: AsyncRunwayML) -> None:
+ text_to_video = await async_client.text_to_video.create(
+ model="seedance2_5",
+ audio=True,
+ draft=True,
+ draft_task_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ duration="auto",
+ output_format="mp4",
+ prompt_text="x",
+ ratio="992:432",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
+ references=[{"uri": "https://example.com/image.jpg"}],
+ reference_videos=[
+ {
+ "type": "video",
+ "uri": "https://example.com/video.mp4",
+ }
+ ],
+ seed=0,
+ )
+ assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_22(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.text_to_video.with_raw_response.create(
+ model="seedance2_5",
+ )
+
+ 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_22(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.text_to_video.with_streaming_response.create(
+ model="seedance2_5",
+ ) 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
+
+ @parametrize
+ async def test_method_create_overload_23(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="grok_imagine_1_5_lite",
prompt_text="x",
@@ -1662,7 +2412,7 @@ async def test_method_create_overload_16(self, async_client: AsyncRunwayML) -> N
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_16(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_23(self, async_client: AsyncRunwayML) -> None:
text_to_video = await async_client.text_to_video.create(
model="grok_imagine_1_5_lite",
prompt_text="x",
@@ -1672,7 +2422,7 @@ async def test_method_create_with_all_params_overload_16(self, async_client: Asy
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_16(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_23(self, async_client: AsyncRunwayML) -> None:
response = await async_client.text_to_video.with_raw_response.create(
model="grok_imagine_1_5_lite",
prompt_text="x",
@@ -1684,7 +2434,7 @@ async def test_raw_response_create_overload_16(self, async_client: AsyncRunwayML
assert_matches_type(TextToVideoCreateResponse, text_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_16(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_23(self, async_client: AsyncRunwayML) -> None:
async with async_client.text_to_video.with_streaming_response.create(
model="grok_imagine_1_5_lite",
prompt_text="x",
diff --git a/tests/api_resources/test_video_to_audio.py b/tests/api_resources/test_video_to_audio.py
new file mode 100644
index 0000000..4d10183
--- /dev/null
+++ b/tests/api_resources/test_video_to_audio.py
@@ -0,0 +1,128 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+import os
+from typing import Any, cast
+
+import pytest
+
+from runwayml import RunwayML, AsyncRunwayML
+from tests.utils import assert_matches_type
+from runwayml.types import VideoToAudioCreateResponse
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestVideoToAudio:
+ parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
+
+ @parametrize
+ def test_method_create(self, client: RunwayML) -> None:
+ video_to_audio = client.video_to_audio.create(
+ duration=1,
+ model="mirelo_sfx_2_0",
+ video_uri="https://example.com/video.mp4",
+ )
+ assert_matches_type(VideoToAudioCreateResponse, video_to_audio, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params(self, client: RunwayML) -> None:
+ video_to_audio = client.video_to_audio.create(
+ duration=1,
+ model="mirelo_sfx_2_0",
+ video_uri="https://example.com/video.mp4",
+ format="mp3",
+ negative_prompt="x",
+ num_variants=1,
+ preserve_speech=True,
+ prompt_text="x",
+ seed=0,
+ )
+ assert_matches_type(VideoToAudioCreateResponse, video_to_audio, path=["response"])
+
+ @parametrize
+ def test_raw_response_create(self, client: RunwayML) -> None:
+ response = client.video_to_audio.with_raw_response.create(
+ duration=1,
+ model="mirelo_sfx_2_0",
+ video_uri="https://example.com/video.mp4",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ video_to_audio = response.parse()
+ assert_matches_type(VideoToAudioCreateResponse, video_to_audio, path=["response"])
+
+ @parametrize
+ def test_streaming_response_create(self, client: RunwayML) -> None:
+ with client.video_to_audio.with_streaming_response.create(
+ duration=1,
+ model="mirelo_sfx_2_0",
+ video_uri="https://example.com/video.mp4",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ video_to_audio = response.parse()
+ assert_matches_type(VideoToAudioCreateResponse, video_to_audio, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+
+class TestAsyncVideoToAudio:
+ parametrize = pytest.mark.parametrize(
+ "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
+ )
+
+ @parametrize
+ async def test_method_create(self, async_client: AsyncRunwayML) -> None:
+ video_to_audio = await async_client.video_to_audio.create(
+ duration=1,
+ model="mirelo_sfx_2_0",
+ video_uri="https://example.com/video.mp4",
+ )
+ assert_matches_type(VideoToAudioCreateResponse, video_to_audio, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params(self, async_client: AsyncRunwayML) -> None:
+ video_to_audio = await async_client.video_to_audio.create(
+ duration=1,
+ model="mirelo_sfx_2_0",
+ video_uri="https://example.com/video.mp4",
+ format="mp3",
+ negative_prompt="x",
+ num_variants=1,
+ preserve_speech=True,
+ prompt_text="x",
+ seed=0,
+ )
+ assert_matches_type(VideoToAudioCreateResponse, video_to_audio, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.video_to_audio.with_raw_response.create(
+ duration=1,
+ model="mirelo_sfx_2_0",
+ video_uri="https://example.com/video.mp4",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ video_to_audio = await response.parse()
+ assert_matches_type(VideoToAudioCreateResponse, video_to_audio, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.video_to_audio.with_streaming_response.create(
+ duration=1,
+ model="mirelo_sfx_2_0",
+ video_uri="https://example.com/video.mp4",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ video_to_audio = await response.parse()
+ assert_matches_type(VideoToAudioCreateResponse, video_to_audio, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/test_video_to_video.py b/tests/api_resources/test_video_to_video.py
index 4bdf220..920ee6d 100644
--- a/tests/api_resources/test_video_to_video.py
+++ b/tests/api_resources/test_video_to_video.py
@@ -78,6 +78,63 @@ def test_streaming_response_create_overload_1(self, client: RunwayML) -> None:
@parametrize
def test_method_create_overload_2(self, client: RunwayML) -> None:
+ video_to_video = client.video_to_video.create(
+ model="klingO3_4k",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ )
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_2(self, client: RunwayML) -> None:
+ video_to_video = client.video_to_video.create(
+ model="klingO3_4k",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ provider_settings={
+ "keep_original_sound": True,
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ references="https://example.com/image.jpg",
+ )
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_2(self, client: RunwayML) -> None:
+ response = client.video_to_video.with_raw_response.create(
+ model="klingO3_4k",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ video_to_video = response.parse()
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ def test_streaming_response_create_overload_2(self, client: RunwayML) -> None:
+ with client.video_to_video.with_streaming_response.create(
+ model="klingO3_4k",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ video_to_video = response.parse()
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ def test_method_create_overload_3(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
model="hailuo3",
prompt_text="x",
@@ -86,7 +143,7 @@ def test_method_create_overload_2(self, client: RunwayML) -> None:
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_2(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_3(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
model="hailuo3",
prompt_text="x",
@@ -111,7 +168,7 @@ def test_method_create_with_all_params_overload_2(self, client: RunwayML) -> Non
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_raw_response_create_overload_2(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_3(self, client: RunwayML) -> None:
response = client.video_to_video.with_raw_response.create(
model="hailuo3",
prompt_text="x",
@@ -124,7 +181,7 @@ def test_raw_response_create_overload_2(self, client: RunwayML) -> None:
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_streaming_response_create_overload_2(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_3(self, client: RunwayML) -> None:
with client.video_to_video.with_streaming_response.create(
model="hailuo3",
prompt_text="x",
@@ -139,7 +196,121 @@ def test_streaming_response_create_overload_2(self, client: RunwayML) -> None:
assert cast(Any, response.is_closed) is True
@parametrize
- def test_method_create_overload_3(self, client: RunwayML) -> None:
+ def test_method_create_overload_4(self, client: RunwayML) -> None:
+ video_to_video = client.video_to_video.create(
+ model="klingO3_pro",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ )
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_4(self, client: RunwayML) -> None:
+ video_to_video = client.video_to_video.create(
+ model="klingO3_pro",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ provider_settings={
+ "keep_original_sound": True,
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ references="https://example.com/image.jpg",
+ )
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_4(self, client: RunwayML) -> None:
+ response = client.video_to_video.with_raw_response.create(
+ model="klingO3_pro",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ video_to_video = response.parse()
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ def test_streaming_response_create_overload_4(self, client: RunwayML) -> None:
+ with client.video_to_video.with_streaming_response.create(
+ model="klingO3_pro",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ video_to_video = response.parse()
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ def test_method_create_overload_5(self, client: RunwayML) -> None:
+ video_to_video = client.video_to_video.create(
+ model="klingO3_standard",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ )
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ def test_method_create_with_all_params_overload_5(self, client: RunwayML) -> None:
+ video_to_video = client.video_to_video.create(
+ model="klingO3_standard",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ provider_settings={
+ "keep_original_sound": True,
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ references="https://example.com/image.jpg",
+ )
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ def test_raw_response_create_overload_5(self, client: RunwayML) -> None:
+ response = client.video_to_video.with_raw_response.create(
+ model="klingO3_standard",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ video_to_video = response.parse()
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ def test_streaming_response_create_overload_5(self, client: RunwayML) -> None:
+ with client.video_to_video.with_streaming_response.create(
+ model="klingO3_standard",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ video_to_video = response.parse()
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ def test_method_create_overload_6(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
model="seedance2",
prompt_video="https://example.com/video.mp4",
@@ -147,7 +318,7 @@ def test_method_create_overload_3(self, client: RunwayML) -> None:
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_3(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_6(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
model="seedance2",
prompt_video="https://example.com/video.mp4",
@@ -173,7 +344,7 @@ def test_method_create_with_all_params_overload_3(self, client: RunwayML) -> Non
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_raw_response_create_overload_3(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_6(self, client: RunwayML) -> None:
response = client.video_to_video.with_raw_response.create(
model="seedance2",
prompt_video="https://example.com/video.mp4",
@@ -185,7 +356,7 @@ def test_raw_response_create_overload_3(self, client: RunwayML) -> None:
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_streaming_response_create_overload_3(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_6(self, client: RunwayML) -> None:
with client.video_to_video.with_streaming_response.create(
model="seedance2",
prompt_video="https://example.com/video.mp4",
@@ -199,7 +370,7 @@ def test_streaming_response_create_overload_3(self, client: RunwayML) -> None:
assert cast(Any, response.is_closed) is True
@parametrize
- def test_method_create_overload_4(self, client: RunwayML) -> None:
+ def test_method_create_overload_7(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
model="seedance2_fast",
prompt_video="https://example.com/video.mp4",
@@ -207,7 +378,7 @@ def test_method_create_overload_4(self, client: RunwayML) -> None:
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_4(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_7(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
model="seedance2_fast",
prompt_video="https://example.com/video.mp4",
@@ -233,7 +404,7 @@ def test_method_create_with_all_params_overload_4(self, client: RunwayML) -> Non
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_raw_response_create_overload_4(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_7(self, client: RunwayML) -> None:
response = client.video_to_video.with_raw_response.create(
model="seedance2_fast",
prompt_video="https://example.com/video.mp4",
@@ -245,7 +416,7 @@ def test_raw_response_create_overload_4(self, client: RunwayML) -> None:
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_streaming_response_create_overload_4(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_7(self, client: RunwayML) -> None:
with client.video_to_video.with_streaming_response.create(
model="seedance2_fast",
prompt_video="https://example.com/video.mp4",
@@ -259,7 +430,7 @@ def test_streaming_response_create_overload_4(self, client: RunwayML) -> None:
assert cast(Any, response.is_closed) is True
@parametrize
- def test_method_create_overload_5(self, client: RunwayML) -> None:
+ def test_method_create_overload_8(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
model="seedance2_mini",
prompt_video="https://example.com/video.mp4",
@@ -267,7 +438,7 @@ def test_method_create_overload_5(self, client: RunwayML) -> None:
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_5(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_8(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
model="seedance2_mini",
prompt_video="https://example.com/video.mp4",
@@ -293,7 +464,7 @@ def test_method_create_with_all_params_overload_5(self, client: RunwayML) -> Non
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_raw_response_create_overload_5(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_8(self, client: RunwayML) -> None:
response = client.video_to_video.with_raw_response.create(
model="seedance2_mini",
prompt_video="https://example.com/video.mp4",
@@ -305,7 +476,7 @@ def test_raw_response_create_overload_5(self, client: RunwayML) -> None:
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_streaming_response_create_overload_5(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_8(self, client: RunwayML) -> None:
with client.video_to_video.with_streaming_response.create(
model="seedance2_mini",
prompt_video="https://example.com/video.mp4",
@@ -319,7 +490,7 @@ def test_streaming_response_create_overload_5(self, client: RunwayML) -> None:
assert cast(Any, response.is_closed) is True
@parametrize
- def test_method_create_overload_6(self, client: RunwayML) -> None:
+ def test_method_create_overload_9(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
model="gemini_omni_flash",
prompt_text="x",
@@ -328,7 +499,7 @@ def test_method_create_overload_6(self, client: RunwayML) -> None:
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_6(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_9(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
model="gemini_omni_flash",
prompt_text="x",
@@ -338,7 +509,7 @@ def test_method_create_with_all_params_overload_6(self, client: RunwayML) -> Non
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_raw_response_create_overload_6(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_9(self, client: RunwayML) -> None:
response = client.video_to_video.with_raw_response.create(
model="gemini_omni_flash",
prompt_text="x",
@@ -351,7 +522,7 @@ def test_raw_response_create_overload_6(self, client: RunwayML) -> None:
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_streaming_response_create_overload_6(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_9(self, client: RunwayML) -> None:
with client.video_to_video.with_streaming_response.create(
model="gemini_omni_flash",
prompt_text="x",
@@ -366,45 +537,33 @@ def test_streaming_response_create_overload_6(self, client: RunwayML) -> None:
assert cast(Any, response.is_closed) is True
@parametrize
- def test_method_create_overload_7(self, client: RunwayML) -> None:
+ def test_method_create_overload_10(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
- model="seedance2_5",
- prompt_video="https://example.com/video.mp4",
+ model="gemini_omni_flash_1.1",
+ prompt_text="x",
+ video_uri="https://example.com/video.mp4",
)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_7(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_10(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
- model="seedance2_5",
- prompt_video="https://example.com/video.mp4",
- audio=True,
+ model="gemini_omni_flash_1.1",
+ prompt_text="x",
+ video_uri="https://example.com/video.mp4",
duration="auto",
mode="reference",
- prompt_text="x",
- ratio="992:432",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
+ ratio="640:360",
references=[{"uri": "https://example.com/image.jpg"}],
- reference_videos=[
- {
- "type": "video",
- "uri": "https://example.com/video.mp4",
- }
- ],
- seed=0,
)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_raw_response_create_overload_7(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_10(self, client: RunwayML) -> None:
response = client.video_to_video.with_raw_response.create(
- model="seedance2_5",
- prompt_video="https://example.com/video.mp4",
+ model="gemini_omni_flash_1.1",
+ prompt_text="x",
+ video_uri="https://example.com/video.mp4",
)
assert response.is_closed is True
@@ -413,10 +572,11 @@ def test_raw_response_create_overload_7(self, client: RunwayML) -> None:
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_streaming_response_create_overload_7(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_10(self, client: RunwayML) -> None:
with client.video_to_video.with_streaming_response.create(
- model="seedance2_5",
- prompt_video="https://example.com/video.mp4",
+ model="gemini_omni_flash_1.1",
+ prompt_text="x",
+ video_uri="https://example.com/video.mp4",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -427,33 +587,47 @@ def test_streaming_response_create_overload_7(self, client: RunwayML) -> None:
assert cast(Any, response.is_closed) is True
@parametrize
- def test_method_create_overload_8(self, client: RunwayML) -> None:
+ def test_method_create_overload_11(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
- model="gemini_omni_flash_1.1",
- prompt_text="x",
- video_uri="https://example.com/video.mp4",
+ model="seedance2_5",
+ prompt_video="https://example.com/video.mp4",
)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_method_create_with_all_params_overload_8(self, client: RunwayML) -> None:
+ def test_method_create_with_all_params_overload_11(self, client: RunwayML) -> None:
video_to_video = client.video_to_video.create(
- model="gemini_omni_flash_1.1",
- prompt_text="x",
- video_uri="https://example.com/video.mp4",
+ model="seedance2_5",
+ prompt_video="https://example.com/video.mp4",
+ audio=True,
+ draft=True,
duration="auto",
mode="reference",
- ratio="640:360",
+ output_format="mp4",
+ prompt_text="x",
+ ratio="992:432",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
references=[{"uri": "https://example.com/image.jpg"}],
+ reference_videos=[
+ {
+ "type": "video",
+ "uri": "https://example.com/video.mp4",
+ }
+ ],
+ seed=0,
)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_raw_response_create_overload_8(self, client: RunwayML) -> None:
+ def test_raw_response_create_overload_11(self, client: RunwayML) -> None:
response = client.video_to_video.with_raw_response.create(
- model="gemini_omni_flash_1.1",
- prompt_text="x",
- video_uri="https://example.com/video.mp4",
+ model="seedance2_5",
+ prompt_video="https://example.com/video.mp4",
)
assert response.is_closed is True
@@ -462,11 +636,10 @@ def test_raw_response_create_overload_8(self, client: RunwayML) -> None:
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- def test_streaming_response_create_overload_8(self, client: RunwayML) -> None:
+ def test_streaming_response_create_overload_11(self, client: RunwayML) -> None:
with client.video_to_video.with_streaming_response.create(
- model="gemini_omni_flash_1.1",
- prompt_text="x",
- video_uri="https://example.com/video.mp4",
+ model="seedance2_5",
+ prompt_video="https://example.com/video.mp4",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -543,6 +716,63 @@ async def test_streaming_response_create_overload_1(self, async_client: AsyncRun
@parametrize
async def test_method_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ video_to_video = await async_client.video_to_video.create(
+ model="klingO3_4k",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ )
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_2(self, async_client: AsyncRunwayML) -> None:
+ video_to_video = await async_client.video_to_video.create(
+ model="klingO3_4k",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ provider_settings={
+ "keep_original_sound": True,
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ references="https://example.com/image.jpg",
+ )
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.video_to_video.with_raw_response.create(
+ model="klingO3_4k",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ video_to_video = await response.parse()
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.video_to_video.with_streaming_response.create(
+ model="klingO3_4k",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ video_to_video = await response.parse()
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_3(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
model="hailuo3",
prompt_text="x",
@@ -551,7 +781,7 @@ async def test_method_create_overload_2(self, async_client: AsyncRunwayML) -> No
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_3(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
model="hailuo3",
prompt_text="x",
@@ -576,7 +806,7 @@ async def test_method_create_with_all_params_overload_2(self, async_client: Asyn
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
response = await async_client.video_to_video.with_raw_response.create(
model="hailuo3",
prompt_text="x",
@@ -589,7 +819,7 @@ async def test_raw_response_create_overload_2(self, async_client: AsyncRunwayML)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_2(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
async with async_client.video_to_video.with_streaming_response.create(
model="hailuo3",
prompt_text="x",
@@ -604,7 +834,121 @@ async def test_streaming_response_create_overload_2(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ video_to_video = await async_client.video_to_video.create(
+ model="klingO3_pro",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ )
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_4(self, async_client: AsyncRunwayML) -> None:
+ video_to_video = await async_client.video_to_video.create(
+ model="klingO3_pro",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ provider_settings={
+ "keep_original_sound": True,
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ references="https://example.com/image.jpg",
+ )
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.video_to_video.with_raw_response.create(
+ model="klingO3_pro",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ video_to_video = await response.parse()
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.video_to_video.with_streaming_response.create(
+ model="klingO3_pro",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ video_to_video = await response.parse()
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ video_to_video = await async_client.video_to_video.create(
+ model="klingO3_standard",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ )
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ async def test_method_create_with_all_params_overload_5(self, async_client: AsyncRunwayML) -> None:
+ video_to_video = await async_client.video_to_video.create(
+ model="klingO3_standard",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ provider_settings={
+ "keep_original_sound": True,
+ "multi_prompt": [
+ {
+ "duration": 1,
+ "prompt": "xxx",
+ }
+ ],
+ "shot_type": "intelligence",
+ },
+ references="https://example.com/image.jpg",
+ )
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ async def test_raw_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ response = await async_client.video_to_video.with_raw_response.create(
+ model="klingO3_standard",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ video_to_video = await response.parse()
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async with async_client.video_to_video.with_streaming_response.create(
+ model="klingO3_standard",
+ prompt_text="xx",
+ prompt_video="https://example.com/video.mp4",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ video_to_video = await response.parse()
+ assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_create_overload_6(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
model="seedance2",
prompt_video="https://example.com/video.mp4",
@@ -612,7 +956,7 @@ async def test_method_create_overload_3(self, async_client: AsyncRunwayML) -> No
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_6(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
model="seedance2",
prompt_video="https://example.com/video.mp4",
@@ -638,7 +982,7 @@ async def test_method_create_with_all_params_overload_3(self, async_client: Asyn
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
response = await async_client.video_to_video.with_raw_response.create(
model="seedance2",
prompt_video="https://example.com/video.mp4",
@@ -650,7 +994,7 @@ async def test_raw_response_create_overload_3(self, async_client: AsyncRunwayML)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_3(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
async with async_client.video_to_video.with_streaming_response.create(
model="seedance2",
prompt_video="https://example.com/video.mp4",
@@ -664,7 +1008,7 @@ async def test_streaming_response_create_overload_3(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_7(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
model="seedance2_fast",
prompt_video="https://example.com/video.mp4",
@@ -672,7 +1016,7 @@ async def test_method_create_overload_4(self, async_client: AsyncRunwayML) -> No
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_7(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
model="seedance2_fast",
prompt_video="https://example.com/video.mp4",
@@ -698,7 +1042,7 @@ async def test_method_create_with_all_params_overload_4(self, async_client: Asyn
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
response = await async_client.video_to_video.with_raw_response.create(
model="seedance2_fast",
prompt_video="https://example.com/video.mp4",
@@ -710,7 +1054,7 @@ async def test_raw_response_create_overload_4(self, async_client: AsyncRunwayML)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_4(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
async with async_client.video_to_video.with_streaming_response.create(
model="seedance2_fast",
prompt_video="https://example.com/video.mp4",
@@ -724,7 +1068,7 @@ async def test_streaming_response_create_overload_4(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_8(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
model="seedance2_mini",
prompt_video="https://example.com/video.mp4",
@@ -732,7 +1076,7 @@ async def test_method_create_overload_5(self, async_client: AsyncRunwayML) -> No
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_8(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
model="seedance2_mini",
prompt_video="https://example.com/video.mp4",
@@ -758,7 +1102,7 @@ async def test_method_create_with_all_params_overload_5(self, async_client: Asyn
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
response = await async_client.video_to_video.with_raw_response.create(
model="seedance2_mini",
prompt_video="https://example.com/video.mp4",
@@ -770,7 +1114,7 @@ async def test_raw_response_create_overload_5(self, async_client: AsyncRunwayML)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_5(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
async with async_client.video_to_video.with_streaming_response.create(
model="seedance2_mini",
prompt_video="https://example.com/video.mp4",
@@ -784,7 +1128,7 @@ async def test_streaming_response_create_overload_5(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_9(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
model="gemini_omni_flash",
prompt_text="x",
@@ -793,7 +1137,7 @@ async def test_method_create_overload_6(self, async_client: AsyncRunwayML) -> No
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_9(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
model="gemini_omni_flash",
prompt_text="x",
@@ -803,7 +1147,7 @@ async def test_method_create_with_all_params_overload_6(self, async_client: Asyn
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
response = await async_client.video_to_video.with_raw_response.create(
model="gemini_omni_flash",
prompt_text="x",
@@ -816,7 +1160,7 @@ async def test_raw_response_create_overload_6(self, async_client: AsyncRunwayML)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_6(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_9(self, async_client: AsyncRunwayML) -> None:
async with async_client.video_to_video.with_streaming_response.create(
model="gemini_omni_flash",
prompt_text="x",
@@ -831,45 +1175,33 @@ async def test_streaming_response_create_overload_6(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_10(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
- model="seedance2_5",
- prompt_video="https://example.com/video.mp4",
+ model="gemini_omni_flash_1.1",
+ prompt_text="x",
+ video_uri="https://example.com/video.mp4",
)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_10(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
- model="seedance2_5",
- prompt_video="https://example.com/video.mp4",
- audio=True,
+ model="gemini_omni_flash_1.1",
+ prompt_text="x",
+ video_uri="https://example.com/video.mp4",
duration="auto",
mode="reference",
- prompt_text="x",
- ratio="992:432",
- reference_audio=[
- {
- "type": "audio",
- "uri": "https://example.com/audio.mp3",
- }
- ],
+ ratio="640:360",
references=[{"uri": "https://example.com/image.jpg"}],
- reference_videos=[
- {
- "type": "video",
- "uri": "https://example.com/video.mp4",
- }
- ],
- seed=0,
)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
response = await async_client.video_to_video.with_raw_response.create(
- model="seedance2_5",
- prompt_video="https://example.com/video.mp4",
+ model="gemini_omni_flash_1.1",
+ prompt_text="x",
+ video_uri="https://example.com/video.mp4",
)
assert response.is_closed is True
@@ -878,10 +1210,11 @@ async def test_raw_response_create_overload_7(self, async_client: AsyncRunwayML)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_7(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_10(self, async_client: AsyncRunwayML) -> None:
async with async_client.video_to_video.with_streaming_response.create(
- model="seedance2_5",
- prompt_video="https://example.com/video.mp4",
+ model="gemini_omni_flash_1.1",
+ prompt_text="x",
+ video_uri="https://example.com/video.mp4",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -892,33 +1225,47 @@ async def test_streaming_response_create_overload_7(self, async_client: AsyncRun
assert cast(Any, response.is_closed) is True
@parametrize
- async def test_method_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_overload_11(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
- model="gemini_omni_flash_1.1",
- prompt_text="x",
- video_uri="https://example.com/video.mp4",
+ model="seedance2_5",
+ prompt_video="https://example.com/video.mp4",
)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_method_create_with_all_params_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_method_create_with_all_params_overload_11(self, async_client: AsyncRunwayML) -> None:
video_to_video = await async_client.video_to_video.create(
- model="gemini_omni_flash_1.1",
- prompt_text="x",
- video_uri="https://example.com/video.mp4",
+ model="seedance2_5",
+ prompt_video="https://example.com/video.mp4",
+ audio=True,
+ draft=True,
duration="auto",
mode="reference",
- ratio="640:360",
+ output_format="mp4",
+ prompt_text="x",
+ ratio="992:432",
+ reference_audio=[
+ {
+ "type": "audio",
+ "uri": "https://example.com/audio.mp3",
+ }
+ ],
references=[{"uri": "https://example.com/image.jpg"}],
+ reference_videos=[
+ {
+ "type": "video",
+ "uri": "https://example.com/video.mp4",
+ }
+ ],
+ seed=0,
)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_raw_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_raw_response_create_overload_11(self, async_client: AsyncRunwayML) -> None:
response = await async_client.video_to_video.with_raw_response.create(
- model="gemini_omni_flash_1.1",
- prompt_text="x",
- video_uri="https://example.com/video.mp4",
+ model="seedance2_5",
+ prompt_video="https://example.com/video.mp4",
)
assert response.is_closed is True
@@ -927,11 +1274,10 @@ async def test_raw_response_create_overload_8(self, async_client: AsyncRunwayML)
assert_matches_type(VideoToVideoCreateResponse, video_to_video, path=["response"])
@parametrize
- async def test_streaming_response_create_overload_8(self, async_client: AsyncRunwayML) -> None:
+ async def test_streaming_response_create_overload_11(self, async_client: AsyncRunwayML) -> None:
async with async_client.video_to_video.with_streaming_response.create(
- model="gemini_omni_flash_1.1",
- prompt_text="x",
- video_uri="https://example.com/video.mp4",
+ model="seedance2_5",
+ prompt_video="https://example.com/video.mp4",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
diff --git a/tests/test_video_to_audio_polling.py b/tests/test_video_to_audio_polling.py
new file mode 100644
index 0000000..b484739
--- /dev/null
+++ b/tests/test_video_to_audio_polling.py
@@ -0,0 +1,67 @@
+from __future__ import annotations
+
+from unittest.mock import AsyncMock, patch
+
+import httpx
+
+from runwayml import RunwayML, AsyncRunwayML
+
+
+def test_video_to_audio_waits_for_created_task() -> None:
+ paths: list[str] = []
+
+ def handler(request: httpx.Request) -> httpx.Response:
+ paths.append(request.url.path)
+ if request.method == "POST":
+ return httpx.Response(200, json={"id": "task-1", "estimatedCost": {"credits": 2}})
+ return httpx.Response(
+ 200,
+ json={
+ "id": "task-1",
+ "createdAt": "2026-01-01T00:00:00Z",
+ "status": "SUCCEEDED",
+ "output": ["https://example.com/audio.mp3"],
+ },
+ )
+
+ with RunwayML(api_key="test", http_client=httpx.Client(transport=httpx.MockTransport(handler))) as client:
+ response = client.video_to_audio.create(
+ duration=5, model="mirelo_sfx_2_0", video_uri="https://example.com/video.mp4"
+ )
+ assert response.estimated_cost.credits == 2
+ with patch("runwayml.lib.polling.time.sleep"):
+ result = response.wait_for_task_output()
+ assert result.status == "SUCCEEDED"
+ assert result.output == ["https://example.com/audio.mp3"]
+ assert paths == ["/v1/video_to_audio", "/v1/tasks/task-1"]
+
+
+async def test_async_video_to_audio_waits_for_created_task() -> None:
+ paths: list[str] = []
+
+ def handler(request: httpx.Request) -> httpx.Response:
+ paths.append(request.url.path)
+ if request.method == "POST":
+ return httpx.Response(200, json={"id": "task-1", "estimatedCost": {"credits": 2}})
+ return httpx.Response(
+ 200,
+ json={
+ "id": "task-1",
+ "createdAt": "2026-01-01T00:00:00Z",
+ "status": "SUCCEEDED",
+ "output": ["https://example.com/audio.mp3"],
+ },
+ )
+
+ async with AsyncRunwayML(
+ api_key="test", http_client=httpx.AsyncClient(transport=httpx.MockTransport(handler))
+ ) as client:
+ response = await client.video_to_audio.create(
+ duration=5, model="mirelo_sfx_2_0", video_uri="https://example.com/video.mp4"
+ )
+ assert response.estimated_cost.credits == 2
+ with patch("runwayml.lib.polling.anyio.sleep", new_callable=AsyncMock):
+ result = await response.wait_for_task_output()
+ assert result.status == "SUCCEEDED"
+ assert result.output == ["https://example.com/audio.mp3"]
+ assert paths == ["/v1/video_to_audio", "/v1/tasks/task-1"]