Create a Runway text-to-video task
Generate a video from a text prompt with Runway Gen-4.5 through CometAPI.
curl "https://api.cometapi.com/runwayml/v1/text_to_video" \
--request POST \
--header "Authorization: Bearer $COMETAPI_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "gen4.5",
"promptText": "A paper boat drifts on calm water at sunrise.",
"ratio": "1280:720",
"duration": 5
}'import os
import requests
payload = {'model': 'gen4.5',
'promptText': 'A paper boat drifts on calm water at sunrise.',
'ratio': '1280:720',
'duration': 5}
response = requests.post(
"https://api.cometapi.com/runwayml/v1/text_to_video",
headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
json=payload,
timeout=60,
)
response.raise_for_status()
print(response.json()["id"])
const payload = {
"model": "gen4.5",
"promptText": "A paper boat drifts on calm water at sunrise.",
"ratio": "1280:720",
"duration": 5
};
const response = await fetch(
"https://api.cometapi.com/runwayml/v1/text_to_video",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
},
);
if (!response.ok) throw new Error(await response.text());
console.log((await response.json()).id);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cometapi.com/runwayml/v1/text_to_video",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'gen4.5',
'promptText' => 'A paper boat drifts on calm water at sunrise.',
'ratio' => '1280:720',
'duration' => 5
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cometapi.com/runwayml/v1/text_to_video"
payload := strings.NewReader("{\n \"model\": \"gen4.5\",\n \"promptText\": \"A paper boat drifts on calm water at sunrise.\",\n \"ratio\": \"1280:720\",\n \"duration\": 5\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cometapi.com/runwayml/v1/text_to_video")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"gen4.5\",\n \"promptText\": \"A paper boat drifts on calm water at sunrise.\",\n \"ratio\": \"1280:720\",\n \"duration\": 5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cometapi.com/runwayml/v1/text_to_video")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"gen4.5\",\n \"promptText\": \"A paper boat drifts on calm water at sunrise.\",\n \"ratio\": \"1280:720\",\n \"duration\": 5\n}"
response = http.request(request)
puts response.read_body{
"id": "00000000-0000-4000-8000-000000000001"
}{
"code": "<string>",
"message": "<string>",
"data": "<unknown>"
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}gen4.5 to generate a video from a text prompt. Send your CometAPI API
key with Bearer authentication and a JSON request body.
Prepare the request
- Set
modeltogen4.5. - Describe the scene and motion in
promptText, using 1 to 1,000 UTF-16 code units. - Set
ratioto1280:720for landscape or720:1280for portrait. - Set
durationto a whole number from2through10seconds.
promptImage or an audio toggle in this text-to-video request.
Set optional controls
For an explicit sampling seed, use1 through 4294967295. Omission or 0
selects a random seed. If you include contentModeration, set its
publicFigureThreshold to auto or low; otherwise omit the object.
Use outputFormat to select MP4, ProRes, PNG sequences, or one of the HDR
formats listed in the request schema. Omit it for H.264 MP4. You can set
proresProfile only when outputFormat is prores or hdr_prores.
The HDR ProRes format accepts 422, 422 HQ, or 4444.
Retrieve the result
Save the returnedid and use Get a Runway task.
When status is SUCCEEDED, read the video URLs in output.Authorizations
Use your CometAPI API key.
Body
Request parameters for gen4.5.
Model ID for this request variant.
gen4.5 "gen4.5"Describe the requested scene or motion in 1 to 1,000 UTF-16 code units.
1 - 1000Requested output dimensions, expressed as width:height. Choose a value listed for this model and endpoint.
1280:720, 720:1280 Requested video duration in whole seconds, from 2 through 10.
2 <= x <= 10Optional sampling seed. Use a positive integer for an explicit seed. Omission or 0 selects a random seed.
0 <= x <= 4294967295Optional content moderation settings. Omit the object to use standard moderation.
Show child attributes
Show child attributes
Output encoding. Omit for mp4 (H.264). prores returns MOV; png_sequence returns a PNG ZIP; sdr_rec709_10bit returns 10-bit Rec.709 HEVC. hdr10 and hlg return 10-bit HDR MP4; hdr_pq_12bit_master returns 12-bit HEVC MOV; hdr_prores returns HDR ProRes MOV. The HDR PNG/EXR sequence formats return ZIP archives; the ACEScg variants target the named ACES version.
mp4, prores, png_sequence, hdr10, hlg, sdr_rec709_10bit, hdr_pq_12bit_master, hdr_prores, hdr_png_sequence, hdr_exr_sequence, hdr_exr_acescg_sequence_1_3, hdr_exr_acescg_sequence_2_0 Profile for outputFormat prores or hdr_prores. Omit for 4444 with prores, or 422 HQ with hdr_prores. hdr_prores accepts only 422, 422 HQ, or 4444. Omit this field for other formats.
422, 4444, 422 Proxy, 422 LT, 422 HQ, 4444 XQ Response
Task submitted. Save its id to retrieve task status.
Task ID for GET /runwayml/v1/tasks/{id}.
Task state, when returned.
Task submission timestamp, when returned.
Result URLs, when returned.
Failure explanation, when returned.
Machine-readable failure code, when returned.
Task estimate metadata, when returned.
Show child attributes
Show child attributes
Task cost metadata, when returned.
Show child attributes
Show child attributes
curl "https://api.cometapi.com/runwayml/v1/text_to_video" \
--request POST \
--header "Authorization: Bearer $COMETAPI_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "gen4.5",
"promptText": "A paper boat drifts on calm water at sunrise.",
"ratio": "1280:720",
"duration": 5
}'import os
import requests
payload = {'model': 'gen4.5',
'promptText': 'A paper boat drifts on calm water at sunrise.',
'ratio': '1280:720',
'duration': 5}
response = requests.post(
"https://api.cometapi.com/runwayml/v1/text_to_video",
headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
json=payload,
timeout=60,
)
response.raise_for_status()
print(response.json()["id"])
const payload = {
"model": "gen4.5",
"promptText": "A paper boat drifts on calm water at sunrise.",
"ratio": "1280:720",
"duration": 5
};
const response = await fetch(
"https://api.cometapi.com/runwayml/v1/text_to_video",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
},
);
if (!response.ok) throw new Error(await response.text());
console.log((await response.json()).id);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cometapi.com/runwayml/v1/text_to_video",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'gen4.5',
'promptText' => 'A paper boat drifts on calm water at sunrise.',
'ratio' => '1280:720',
'duration' => 5
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cometapi.com/runwayml/v1/text_to_video"
payload := strings.NewReader("{\n \"model\": \"gen4.5\",\n \"promptText\": \"A paper boat drifts on calm water at sunrise.\",\n \"ratio\": \"1280:720\",\n \"duration\": 5\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cometapi.com/runwayml/v1/text_to_video")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"gen4.5\",\n \"promptText\": \"A paper boat drifts on calm water at sunrise.\",\n \"ratio\": \"1280:720\",\n \"duration\": 5\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cometapi.com/runwayml/v1/text_to_video")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"gen4.5\",\n \"promptText\": \"A paper boat drifts on calm water at sunrise.\",\n \"ratio\": \"1280:720\",\n \"duration\": 5\n}"
response = http.request(request)
puts response.read_body{
"id": "00000000-0000-4000-8000-000000000001"
}{
"code": "<string>",
"message": "<string>",
"data": "<unknown>"
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}