Runway キャラクターパフォーマンスを作成する
CometAPI と Runway Control a character API を使用して、参照動画からキャラクターパフォーマンスタスクを開始し、表情と身体の動きを制御します。
curl https://api.cometapi.com/runwayml/v1/character_performance \
-H "Authorization: Bearer $COMETAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"character": {
"type": "video",
"uri": "https://your-video-host/character.mp4"
},
"reference": {
"type": "video",
"uri": "https://your-video-host/performance.mp4"
},
"model": "act_two",
"ratio": "1280:720"
}'import os
import requests
response = requests.post(
"https://api.cometapi.com/runwayml/v1/character_performance",
headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
json={
"character": {
"type": "video",
"uri": "https://your-video-host/character.mp4"
},
"reference": {
"type": "video",
"uri": "https://your-video-host/performance.mp4"
},
"model": "act_two",
"ratio": "1280:720"
},
)
task = response.json()
print(task["id"]) # poll GET /runwayml/v1/tasks/{id} until the output array appearsconst response = await fetch("https://api.cometapi.com/runwayml/v1/character_performance", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"character": {
"type": "video",
"uri": "https://your-video-host/character.mp4"
},
"reference": {
"type": "video",
"uri": "https://your-video-host/performance.mp4"
},
"model": "act_two",
"ratio": "1280:720"
}),
});
const task = await response.json();
console.log(task.id); // poll GET /runwayml/v1/tasks/{id} until the output array appears<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cometapi.com/runwayml/v1/character_performance",
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([
'character' => [
'type' => 'video',
'uri' => 'https://your-video-host/source.mp4'
],
'reference' => [
'type' => 'video',
'uri' => 'https://your-video-host/source.mp4'
],
'bodyControl' => true,
'expressionIntensity' => 3,
'seed' => 4294967295,
'model' => 'act_two',
'ratio' => '1280:720',
'contentModeration' => [
'publicFigureThreshold' => 'auto'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Runway-Version: <x-runway-version>"
],
]);
$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/character_performance"
payload := strings.NewReader("{\n \"character\": {\n \"type\": \"video\",\n \"uri\": \"https://your-video-host/source.mp4\"\n },\n \"reference\": {\n \"type\": \"video\",\n \"uri\": \"https://your-video-host/source.mp4\"\n },\n \"bodyControl\": true,\n \"expressionIntensity\": 3,\n \"seed\": 4294967295,\n \"model\": \"act_two\",\n \"ratio\": \"1280:720\",\n \"contentModeration\": {\n \"publicFigureThreshold\": \"auto\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Runway-Version", "<x-runway-version>")
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/character_performance")
.header("X-Runway-Version", "<x-runway-version>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"character\": {\n \"type\": \"video\",\n \"uri\": \"https://your-video-host/source.mp4\"\n },\n \"reference\": {\n \"type\": \"video\",\n \"uri\": \"https://your-video-host/source.mp4\"\n },\n \"bodyControl\": true,\n \"expressionIntensity\": 3,\n \"seed\": 4294967295,\n \"model\": \"act_two\",\n \"ratio\": \"1280:720\",\n \"contentModeration\": {\n \"publicFigureThreshold\": \"auto\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cometapi.com/runwayml/v1/character_performance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Runway-Version"] = '<x-runway-version>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"character\": {\n \"type\": \"video\",\n \"uri\": \"https://your-video-host/source.mp4\"\n },\n \"reference\": {\n \"type\": \"video\",\n \"uri\": \"https://your-video-host/source.mp4\"\n },\n \"bodyControl\": true,\n \"expressionIntensity\": 3,\n \"seed\": 4294967295,\n \"model\": \"act_two\",\n \"ratio\": \"1280:720\",\n \"contentModeration\": {\n \"publicFigureThreshold\": \"auto\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "5b91e444-c232-deaf-a4d7-8aef3e57336b"
}呼び出す前に
- 必須の
X-Runway-Versionヘッダーを送信します。例:2024-11-06 model: act_twoを使用します- アクセス可能な HTTPS URL として、1 つの
characterアセットと 1 つのreferenceアセットを指定します - スタイルを調整する前に、
bodyControl: trueと適度なexpressionIntensityから始めます
出力比率
| 設定 | サポートされる値 | デフォルトの開始値 | 境界時の挙動 |
|---|---|---|---|
ratio | 1280:720、720:1280、または選択した Runway model/version で受け入れられる別の比率 | 1280:720 | character アセットと reference アセットを、要求したフレーム形状にできるだけ近づけてください。 |
タスクの流れ
キャラクターパフォーマンスのリクエストを送信
返された task id を保存
id を保持してください。後でポーリングするために必要です。タスクステータスをポーリング
入力の役割
characterは、アニメーション化したい対象ですreferenceは、表情のパフォーマンスまたは身体の動きを提供する元のクリップですbodyControlは、モーション転送に表情転送に加えて身体の動きも含めるかどうかを決定しますcontentModerationは、リクエストに対してプロバイダーのモデレーションしきい値を適用します
承認
Bearer token authentication. Use your CometAPI key.
ヘッダー
Runway version header, for example 2024-11-06.
ボディ
The character to control. You can either provide a video or an image.
Show child attributes
Show child attributes
Reference performance clip. Provide type (video) and uri (HTTPS URL).
Show child attributes
Show child attributes
Enable body control.
Intensity of the expression transfer. Higher values produce more exaggerated expressions.
Random seed for reproducible results.
The model variant to use. Must be act_two.
Requested output frame shape, for example 1280:720 or 720:1280. Keep the character and reference assets close to the requested frame shape.
Show child attributes
Show child attributes
レスポンス
Task accepted.
curl https://api.cometapi.com/runwayml/v1/character_performance \
-H "Authorization: Bearer $COMETAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"character": {
"type": "video",
"uri": "https://your-video-host/character.mp4"
},
"reference": {
"type": "video",
"uri": "https://your-video-host/performance.mp4"
},
"model": "act_two",
"ratio": "1280:720"
}'import os
import requests
response = requests.post(
"https://api.cometapi.com/runwayml/v1/character_performance",
headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
json={
"character": {
"type": "video",
"uri": "https://your-video-host/character.mp4"
},
"reference": {
"type": "video",
"uri": "https://your-video-host/performance.mp4"
},
"model": "act_two",
"ratio": "1280:720"
},
)
task = response.json()
print(task["id"]) # poll GET /runwayml/v1/tasks/{id} until the output array appearsconst response = await fetch("https://api.cometapi.com/runwayml/v1/character_performance", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"character": {
"type": "video",
"uri": "https://your-video-host/character.mp4"
},
"reference": {
"type": "video",
"uri": "https://your-video-host/performance.mp4"
},
"model": "act_two",
"ratio": "1280:720"
}),
});
const task = await response.json();
console.log(task.id); // poll GET /runwayml/v1/tasks/{id} until the output array appears<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cometapi.com/runwayml/v1/character_performance",
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([
'character' => [
'type' => 'video',
'uri' => 'https://your-video-host/source.mp4'
],
'reference' => [
'type' => 'video',
'uri' => 'https://your-video-host/source.mp4'
],
'bodyControl' => true,
'expressionIntensity' => 3,
'seed' => 4294967295,
'model' => 'act_two',
'ratio' => '1280:720',
'contentModeration' => [
'publicFigureThreshold' => 'auto'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Runway-Version: <x-runway-version>"
],
]);
$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/character_performance"
payload := strings.NewReader("{\n \"character\": {\n \"type\": \"video\",\n \"uri\": \"https://your-video-host/source.mp4\"\n },\n \"reference\": {\n \"type\": \"video\",\n \"uri\": \"https://your-video-host/source.mp4\"\n },\n \"bodyControl\": true,\n \"expressionIntensity\": 3,\n \"seed\": 4294967295,\n \"model\": \"act_two\",\n \"ratio\": \"1280:720\",\n \"contentModeration\": {\n \"publicFigureThreshold\": \"auto\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Runway-Version", "<x-runway-version>")
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/character_performance")
.header("X-Runway-Version", "<x-runway-version>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"character\": {\n \"type\": \"video\",\n \"uri\": \"https://your-video-host/source.mp4\"\n },\n \"reference\": {\n \"type\": \"video\",\n \"uri\": \"https://your-video-host/source.mp4\"\n },\n \"bodyControl\": true,\n \"expressionIntensity\": 3,\n \"seed\": 4294967295,\n \"model\": \"act_two\",\n \"ratio\": \"1280:720\",\n \"contentModeration\": {\n \"publicFigureThreshold\": \"auto\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cometapi.com/runwayml/v1/character_performance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Runway-Version"] = '<x-runway-version>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"character\": {\n \"type\": \"video\",\n \"uri\": \"https://your-video-host/source.mp4\"\n },\n \"reference\": {\n \"type\": \"video\",\n \"uri\": \"https://your-video-host/source.mp4\"\n },\n \"bodyControl\": true,\n \"expressionIntensity\": 3,\n \"seed\": 4294967295,\n \"model\": \"act_two\",\n \"ratio\": \"1280:720\",\n \"contentModeration\": {\n \"publicFigureThreshold\": \"auto\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "5b91e444-c232-deaf-a4d7-8aef3e57336b"
}