{"id":17513008,"url":"https://github.com/tryagi/runway","last_synced_at":"2026-05-09T02:25:05.760Z","repository":{"id":258437340,"uuid":"873925344","full_name":"tryAGI/Runway","owner":"tryAGI","description":"C# SDK based on Runway OpenAPI specification","archived":false,"fork":false,"pushed_at":"2025-04-10T15:33:50.000Z","size":249,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T04:52:47.295Z","etag":null,"topics":["ai","autosdk","csharp","dotnet","langchain","langchain-dotnet","netstandard","openapi","sdk"],"latest_commit_sha":null,"homepage":"https://tryagi.github.io/Runway/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tryAGI.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"HavenDV","patreon":"havendv","ko_fi":"havendv","custom":["https://www.paypal.me/havendv","https://www.buymeacoffee.com/havendv","https://donate.stripe.com/00gfZ19zkeKLh1eaEE","https://www.upwork.com/freelancers/~017b1ad6f6af9cc189"]}},"created_at":"2024-10-17T00:46:03.000Z","updated_at":"2025-04-10T15:33:54.000Z","dependencies_parsed_at":"2024-11-12T16:22:36.379Z","dependency_job_id":"b09685c5-eb20-4873-a657-527e02b0ecf2","html_url":"https://github.com/tryAGI/Runway","commit_stats":{"total_commits":13,"total_committers":3,"mean_commits":4.333333333333333,"dds":"0.46153846153846156","last_synced_commit":"e3a8dce1dc9ddf2da6a72e5aa508032d7105ac14"},"previous_names":["tryagi/runway"],"tags_count":1,"template":false,"template_full_name":"tryAGI/SdkTemplate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tryAGI%2FRunway","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tryAGI%2FRunway/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tryAGI%2FRunway/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tryAGI%2FRunway/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tryAGI","download_url":"https://codeload.github.com/tryAGI/Runway/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248345291,"owners_count":21088243,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","autosdk","csharp","dotnet","langchain","langchain-dotnet","netstandard","openapi","sdk"],"created_at":"2024-10-20T06:06:41.964Z","updated_at":"2026-05-09T02:25:05.747Z","avatar_url":"https://github.com/tryAGI.png","language":"C#","funding_links":["https://github.com/sponsors/HavenDV","https://patreon.com/havendv","https://ko-fi.com/havendv","https://www.paypal.me/havendv","https://www.buymeacoffee.com/havendv","https://donate.stripe.com/00gfZ19zkeKLh1eaEE","https://www.upwork.com/freelancers/~017b1ad6f6af9cc189"],"categories":[],"sub_categories":[],"readme":"# Runway\n\n[![Nuget package](https://img.shields.io/nuget/vpre/Runway)](https://www.nuget.org/packages/Runway/)\n[![dotnet](https://github.com/tryAGI/Runway/actions/workflows/dotnet.yml/badge.svg?branch=main)](https://github.com/tryAGI/Runway/actions/workflows/dotnet.yml)\n[![License: MIT](https://img.shields.io/github/license/tryAGI/Runway)](https://github.com/tryAGI/Runway/blob/main/LICENSE.txt)\n[![Discord](https://img.shields.io/discord/1115206893015662663?label=Discord\u0026logo=discord\u0026logoColor=white\u0026color=d82679)](https://discord.gg/Ca2xhfBf3v)\n\n## Features 🔥\n- Fully generated C# SDK based on [official Runway OpenAPI specification](https://raw.githubusercontent.com/runwayml/openapi/refs/heads/next/openapi.json) using [AutoSDK](https://github.com/tryAGI/AutoSDK)\n- Same day update to support new features\n- Updated and supported automatically if there are no breaking changes\n- All modern .NET features - nullability, trimming, NativeAOT, etc.\n\n### Usage\n\n#### Avatar Video\nGenerate a talking-avatar video from text using a Runway preset avatar.\n```csharp\nusing Runway;\n\nusing var client = new RunwayClient(apiKey);\n\nvar response = await client.AvatarVideos.CreateAvatarVideosAsync(\n    xRunwayVersion: \"2024-11-06\",\n    request: new CreateAvatarVideosRequest\n    {\n        Avatar = new CreateAvatarVideosRequestAvatarRunwayPresetAvatar\n        {\n            PresetId = CreateAvatarVideosRequestAvatarRunwayPresetAvatarPresetId.Influencer,\n        },\n        Speech = new CreateAvatarVideosRequestSpeechTextInput\n        {\n            Text = \"Welcome to the Runway API hackathon. Here is a quick prototype walkthrough.\",\n            Voice = new CreateAvatarVideosRequestSpeechTextInputVoiceRunwayPresetVoice\n            {\n                PresetId = CreateAvatarVideosRequestSpeechTextInputVoiceRunwayPresetVoicePresetId.Clara,\n            },\n        },\n    });\n```\n\n#### Create Avatar\nCreate a custom realtime avatar from a reference image, personality prompt, and voice.\n```csharp\nvar avatar = await client.Avatars.CreateAvatarsAsync(\n    xRunwayVersion: \"2024-11-06\",\n    request: new CreateAvatarsRequest\n    {\n        Name = \"Hackathon Producer\",\n        ReferenceImage = \"https://example.com/reference.jpg\",\n        Personality = \"You are a concise creative producer who helps teams turn rough ideas into practical video plans.\",\n        StartScript = \"Tell me what you want to make and I will help shape the shot list.\",\n        Voice = new CreateAvatarsRequestVoiceRunwayLivePresetVoice\n        {\n            PresetId = CreateAvatarsRequestVoiceRunwayLivePresetVoicePresetId.Adrian,\n        },\n        ImageProcessing = CreateAvatarsRequestImageProcessing.Optimize,\n    });\n```\n\n#### Realtime Avatar Session\nUse this path for live Characters calls and backend bridges. The session ID is also the conversation ID for transcript and recording retrieval.\n```csharp\nvar session = await client.RealtimeSessions.CreateRealtimeSessionsAsync(\n    request: new CreateRealtimeSessionsRequest\n    {\n        Avatar = new CreateRealtimeSessionsRequestAvatarRunwayPresetAvatar\n        {\n            PresetId = CreateRealtimeSessionsRequestAvatarRunwayPresetAvatarPresetId.Influencer,\n        },\n        MaxDuration = 60,\n    });\n\nGetRealtimeSessionsResponse status;\ndo\n{\n    status = await client.RealtimeSessions.GetRealtimeSessionsByIdAsync(id: session.Id);\n    await Task.Delay(TimeSpan.FromSeconds(1));\n}\nwhile (status.IsNotReady);\n\nif (!status.IsReady)\n{\n    throw new InvalidOperationException(\"Realtime session did not become ready.\");\n}\n\nvar credentials = await client.RealtimeSessions.ConsumeRealtimeSessionAsync(\n    id: session.Id,\n    sessionKey: status.Ready!.SessionKey);\n```\n\nFor watchOS or other clients without WebRTC support, terminate WebRTC in your backend using the returned LiveKit credentials and relay optimized media over your own transport. `AvatarVideos.CreateAvatarVideosAsync` and `StartGenerating.CreateCharacterPerformanceAsync` are asynchronous generation endpoints, not live conversation transports.\n\nThe watch bridge controls the client-facing media shape after it receives the realtime avatar track. Set only `watchVideoWidth` to preserve the source aspect ratio, or set both width and height for a fixed player surface:\n\n```json\n{\n  \"presetAvatar\": \"influencer\",\n  \"maxDurationSeconds\": 60,\n  \"audioEnabled\": true,\n  \"videoEnabled\": true,\n  \"watchVideoMode\": \"h264-fmp4\",\n  \"watchVideoWidth\": 256,\n  \"watchVideoHeight\": 256,\n  \"watchVideoResizeMode\": \"cover\",\n  \"watchVideoCropTop\": 0,\n  \"watchVideoFps\": 8,\n  \"watchVideoBitrateKbps\": 220,\n  \"watchFmp4FragmentMs\": 500\n}\n```\n\n`watchVideoResizeMode` can be `cover` for a center-cropped exact size, `fit` for letterboxed/padded exact size, or `stretch` for exact dimensions with distortion. If a generated avatar includes an unwanted top border, set `watchVideoCropTop` to crop output pixels from the top before encoding. For watchOS, start with H.264/fMP4 at `256x256`, `cover`, 6-8 FPS, and roughly 160-300 kbps. H.265 can reduce bandwidth if your watchOS playback path supports HEVC; JPEG mode is simpler but usually costs more bandwidth, so keep it around 45-60 quality for small watch previews. PNG mode preserves alpha when the upstream avatar track has transparent pixels, but it is much larger and should be treated as a diagnostic or overlay-specific mode.\n\n#### Image to Video\n```csharp\nusing Runway;\n\nusing var client = new RunwayClient(apiKey);\n\nvar response = await client.StartGenerating.CreateImageToVideoAsync(\n    xRunwayVersion: \"2024-11-06\",\n    request: new CreateImageToVideoRequestGen3aTurbo\n    {\n        PromptImage = \"https://example.com/photo.jpg\",\n        PromptText = \"The girl smiles a little\",\n        Seed = 999999999,\n        Model = \"gen3a_turbo\",\n        Duration = 5,\n        Ratio = CreateImageToVideoRequestGen3aTurboRatio.x1280_768,\n    });\n\n// Poll until complete\nGetTasksResponse taskDetail;\ndo\n{\n    taskDetail = await client.TaskManagement.GetTasksByIdAsync(\n        id: response.Id,\n        xRunwayVersion: \"2024-11-06\");\n    await Task.Delay(TimeSpan.FromSeconds(10));\n}\nwhile (!taskDetail.IsFailed \u0026\u0026 !taskDetail.IsSucceeded \u0026\u0026 !taskDetail.IsCancelled);\n\nforeach (var output in taskDetail.Succeeded!.Output)\n{\n    Console.WriteLine($\"Video URL: {output}\");\n}\n```\n\n#### Text to Video\nGenerate video from a text prompt using Veo 3.1 Fast.\n```csharp\nvar response = await client.StartGenerating.CreateTextToVideoAsync(\n    xRunwayVersion: \"2024-11-06\",\n    request: new CreateTextToVideoRequestVeo31Fast\n    {\n        PromptText = \"A calm ocean with gentle waves under a starlit sky\",\n        Ratio = CreateTextToVideoRequestVeo31FastRatio.x1280_720,\n        Duration = 4,\n    });\n```\n\n#### Text to Image\nGenerate images from text using Gemini 2.5 Flash.\n```csharp\nvar response = await client.StartGenerating.CreateTextToImageAsync(\n    xRunwayVersion: \"2024-11-06\",\n    request: new CreateTextToImageRequestGemini25Flash\n    {\n        PromptText = \"A vibrant coral reef teeming with tropical fish\",\n        Ratio = CreateTextToImageRequestGemini25FlashRatio.x1024_1024,\n    });\n```\n\n#### Text to Speech\nChoose from 48 preset voices including Maya, Arjun, Eleanor, Bernard, and more.\n```csharp\nvar response = await client.StartGenerating.CreateTextToSpeechAsync(\n    xRunwayVersion: \"2024-11-06\",\n    request: new CreateTextToSpeechRequestElevenMultilingualV2\n    {\n        PromptText = \"Hello! Welcome to Runway's text-to-speech API.\",\n        Voice = new CreateTextToSpeechRequestElevenMultilingualV2VoiceRunwayPresetVoice\n        {\n            PresetId = CreateTextToSpeechRequestElevenMultilingualV2VoiceRunwayPresetVoicePresetId.Maya,\n        },\n    });\n```\n\n#### Sound Effects\nGenerate sound effects from text descriptions (0.5–30 seconds, optional seamless looping).\n```csharp\nvar response = await client.StartGenerating.CreateSoundEffectAsync(\n    xRunwayVersion: \"2024-11-06\",\n    request: new CreateSoundEffectRequestElevenTextToSoundV2\n    {\n        PromptText = \"A thunderstorm with heavy rain and distant thunder rumbling\",\n        Duration = 10.0,\n        Loop = false,\n    });\n```\n\n#### Voice Dubbing\nDub audio to a target language with automatic voice cloning.\n```csharp\nvar response = await client.StartGenerating.CreateVoiceDubbingAsync(\n    xRunwayVersion: \"2024-11-06\",\n    request: new CreateVoiceDubbingRequestElevenVoiceDubbing\n    {\n        AudioUri = \"https://example.com/audio.mp3\",\n        TargetLang = CreateVoiceDubbingRequestElevenVoiceDubbingTargetLang.Es,\n        DisableVoiceCloning = false,\n        DropBackgroundAudio = false,\n    });\n```\n\n#### Speech to Speech\nTransform the voice in an audio file while preserving the original speech content.\n```csharp\nvar response = await client.StartGenerating.CreateSpeechToSpeechAsync(\n    xRunwayVersion: \"2024-11-06\",\n    request: new CreateSpeechToSpeechRequestElevenMultilingualStsV2\n    {\n        Media = new CreateSpeechToSpeechRequestElevenMultilingualStsV2MediaSpeechToSpeechAudio\n        {\n            Uri = \"https://example.com/speech.mp3\",\n        },\n        Voice = new CreateSpeechToSpeechRequestElevenMultilingualStsV2VoiceRunwayPresetVoice\n        {\n            PresetId = CreateSpeechToSpeechRequestElevenMultilingualStsV2VoiceRunwayPresetVoicePresetId.Eleanor,\n        },\n        RemoveBackgroundNoise = true,\n    });\n```\n\n#### Error Handling and Cancellation\nAll generation APIs return async tasks. Check for failures or cancel running tasks.\n```csharp\n// Check for failures with machine-readable error codes\nif (taskDetail.IsFailed)\n{\n    Console.WriteLine($\"Failure: {taskDetail.Failed!.Failure}\");\n    Console.WriteLine($\"Code: {taskDetail.Failed.FailureCode}\");\n}\n\n// Cancel a running task or delete a completed one\nawait client.TaskManagement.DeleteTasksByIdAsync(\n    id: taskId,\n    xRunwayVersion: \"2024-11-06\");\n```\n\n### AI Agent Tools\n\nThe SDK exposes Runway generation endpoints as `Microsoft.Extensions.AI` tools for use with any `IChatClient`.\n\n```csharp\nusing Microsoft.Extensions.AI;\nusing Runway;\n\nusing var runway = new RunwayClient(apiKey);\n\nvar tools = runway.AsTools();\n```\n\n### GPT Image 2\n\nRunway's current model list includes `gpt_image_2`. The SDK also keeps a typed convenience helper for GPT Image 2 text/image-to-image calls.\n\n```csharp\nusing Runway;\n\nusing var client = new RunwayClient(apiKey);\n\nvar response = await client.StartGenerating.CreateGptImage2TextToImageAsync(\n    request: new CreateGptImage2TextToImageRequest\n    {\n        PromptText = \"A clean poster that says RUNWAY CLI in precise typography\",\n        Ratio = \"1920:1088\",\n        Quality = GptImage2Quality.Low,\n        OutputCount = 1,\n    });\n```\n\n### CLI\n\nThis repository includes a local .NET tool project for Runway generation, task management, uploads, documents, voices, realtime sessions, organization usage, workflows, and avatar workflows. It reads `RUNWAY_API_KEY`, `RUNWAYML_API_SECRET`, or the nearest `.env` file by default.\n\n```bash\ncat \u003e .env \u003c\u003c'EOF'\nRUNWAY_API_KEY=...\nEOF\n\n# One-shot via dnx. The installed tool command is `runway`; dnx uses the package ID.\n# Add `--prerelease --yes` after `Runway.Cli` until the first stable CLI package is tagged.\ndnx Runway.Cli video a cinematic drone shot over a neon desert highway\n\ndnx Runway.Cli image a product photo of a translucent glass speaker on a steel table\n\ndnx Runway.Cli image \"a clean app icon for a studio camera tool\" \\\n  --model gemini-2.5-flash \\\n  --ratio 1024:1024 \\\n  --output ./runway-image\n\ndnx Runway.Cli image-to-video \"a slow push in on the reference image\" \\\n  --image ./reference.png \\\n  --model gen4-turbo \\\n  --output ./runway-video\n\ndnx Runway.Cli short-video \"a tiny robot finds a glowing seed and turns a rooftop into a garden\" \\\n  --shots 3 \\\n  --output ./runway-short-video\n\n# Normal generation also saves the exact plan beside the final video as *.plan.json.\n\ndnx Runway.Cli short-video \"a calm product launch film for a transparent speaker\" \\\n  --shots 3 \\\n  --plan-only \u003e ./short-video-plan.json\n\ndnx Runway.Cli short-video \"a three-shot cyberpunk food commercial\" \\\n  --planner claude \\\n  --planner-model opus \\\n  --planner-tools read-only \\\n  --plan-only\n\ndnx Runway.Cli short-video run \\\n  --plan ./short-video-plan.json \\\n  --output ./runway-short-video\n\ndnx Runway.Cli product-photoshoot create \\\n  --prompt \"transparent speaker on a brushed steel table\" \\\n  --mode social_carousel \\\n  --plan-only \u003e ./product-photoshoot-plan.json\n\ndnx Runway.Cli marketplace-cards create \\\n  --prompt \"compact travel kettle\" \\\n  --scope full-set \\\n  --plan-only \u003e ./marketplace-cards-plan.json\n\ndnx Runway.Cli ad-video create \\\n  --prompt \"hands-free camera strap for travel creators\" \\\n  --mode ugc \\\n  --shots 3 \\\n  --plan-only \u003e ./ad-video-plan.json\n\n# Installed tool form.\ndotnet tool install --global Runway.Cli\nrunway video a cinematic drone shot over a neon desert highway\n\n# Local development from the repo.\ndotnet run --project src/cli/Runway.Cli -- video a cinematic drone shot over a neon desert highway\n\ndotnet run --project src/cli/Runway.Cli -- image a product photo of a translucent glass speaker on a steel table\n\ndotnet run --project src/cli/Runway.Cli -- image a logo-style glass speaker icon \\\n  --model gemini-2.5-flash \\\n  --ratio 1024:1024 \\\n  --output ./runway-image\n\ndotnet run --project src/cli/Runway.Cli -- image \"a sharp product poster with readable text\" \\\n  --model gpt-image-2 \\\n  --ratio 1920:1088 \\\n  --quality low \\\n  --output-count 1 \\\n  --output ./runway-gpt-image\n\ndotnet run --project src/cli/Runway.Cli -- video a slow push in on the reference image \\\n  --image ./reference.png \\\n  --output ./runway-output\n\ndotnet run --project src/cli/Runway.Cli -- short-video \"a tiny robot finds a glowing seed and turns a rooftop into a garden\" \\\n  --shots 3 \\\n  --output ./runway-short-video\n\ndotnet run --project src/cli/Runway.Cli -- short-video run \\\n  --plan ./short-video-plan.json \\\n  --output ./runway-short-video\n\ndotnet run --project src/cli/Runway.Cli -- models\n\ndotnet run --project src/cli/Runway.Cli -- text-to-speech \"A warm, concise product walkthrough voiceover.\" \\\n  --voice-preset clara \\\n  --output ./runway-audio\n\ndotnet run --project src/cli/Runway.Cli -- task get 17f20503-6c24-4c16-946b-35dbbce2af2f \\\n  --wait \\\n  --download \\\n  --kind video\n\ndotnet run --project src/cli/Runway.Cli -- avatar presets\n\ndotnet run --project src/cli/Runway.Cli -- avatar list --limit 20\n\ndotnet run --project src/cli/Runway.Cli -- avatar video \\\n  --preset-avatar influencer \\\n  --voice-preset clara \\\n  --text \"Welcome to the Runway API hackathon.\" \\\n  --wait\n\ndotnet run --project src/cli/Runway.Cli -- upload create --file ./reference.png\n\ndotnet run --project src/cli/Runway.Cli -- workflow list\n\ndotnet run --project src/cli/Runway.Cli -- gallery create \\\n  --input ./runway-short-video \\\n  --output ./runway-short-video/gallery.html\n```\n\nCLI endpoint and model coverage:\n\n| Command | Endpoint(s) | Models |\n| --- | --- | --- |\n| `video`, `text-to-video` | `POST /v1/text_to_video` | `gen4.5`, `veo3.1`, `veo3.1_fast`, `veo3` |\n| `short-video` | Multi-shot planner over `POST /v1/text_to_video`; `short-video run --plan` executes edited plan JSON; optionally concatenates downloaded clips with `ffmpeg` | `gen4.5`, `veo3.1`, `veo3.1_fast`, `veo3` |\n| `ad-video create` | Runway-native ad recipe planner over `POST /v1/text_to_video` or `POST /v1/image_to_video` when `--image` is supplied | `veo3.1_fast` by default; accepts video models |\n| `image-to-video` | `POST /v1/image_to_video` | `gen4.5`, `gen4_turbo`, `gen3a_turbo`, `veo3.1`, `veo3.1_fast`, `veo3` |\n| `video-to-video` | `POST /v1/video_to_video` | `gen4_aleph` |\n| `image` | `POST /v1/text_to_image` | `gen4_image_turbo`, `gen4_image`, `gemini_image3_pro`, `gpt_image_2`, `gemini_2.5_flash` |\n| `product-photoshoot create` | Runway-native product photoshoot recipe planner over `POST /v1/text_to_image` | `gpt_image_2` by default; accepts image models |\n| `marketplace-cards create` | Runway-native marketplace-style card recipe planner over `POST /v1/text_to_image` | `gpt_image_2` by default; accepts image models |\n| `character-performance` | `POST /v1/character_performance` | `act_two` |\n| `sound-effect` | `POST /v1/sound_effect` | `eleven_text_to_sound_v2` |\n| `speech-to-speech` | `POST /v1/speech_to_speech` | `eleven_multilingual_sts_v2` |\n| `text-to-speech` | `POST /v1/text_to_speech` | `eleven_multilingual_v2` |\n| `voice-dubbing` | `POST /v1/voice_dubbing` | `eleven_voice_dubbing` |\n| `voice-isolation` | `POST /v1/voice_isolation` | `eleven_voice_isolation` |\n| `task` | `GET /v1/tasks/{id}`, `DELETE /v1/tasks/{id}` | Task management |\n| `gallery create` | Local HTML gallery for generated MP4 files and adjacent `*.plan.json` files | No API call |\n| `avatar` | `GET/POST/PATCH/DELETE /v1/avatars`, conversation and usage endpoints | `gwm1_avatars`, avatar presets |\n| `avatar video` | `POST /v1/avatar_videos` | `gwm1_avatars` |\n| `document` | `GET/POST/PATCH/DELETE /v1/documents` | Knowledge documents |\n| `upload` | `POST /v1/uploads` | Ephemeral uploads |\n| `voice` | `GET/POST/PATCH/DELETE /v1/voices`, `POST /v1/voices/preview` | `eleven_ttv_v3`, `eleven_multilingual_ttv_v2` |\n| `realtime` | `POST/GET/DELETE /v1/realtime_sessions` | `gwm1_avatars` |\n| `organization`, `account` | `GET /v1/organization`, `POST /v1/organization/usage` | Usage and metadata; `account` is an alias for `organization get` |\n| `workflow` | `GET/POST /v1/workflows`, `GET /v1/workflow_invocations/{id}` | Published workflows |\n| `soul-id` | Local client-side registry under `~/.runway-cli/soul-ids/\u003cid\u003e/` | No API call; reference photos for face-faithful generation |\n| `auth` | Local credentials file under `~/.runway-cli/credentials.json` | No API call; `set/show/clear` API key |\n| `generate` | Router into `image`, `video`, `image-to-video`, `text-to-speech`, `sound-effect` by `--kind` | Per underlying command |\n| `models schema \u003cmodel\u003e` | None (parses embedded Runway OpenAPI spec) | Auto-derived endpoints + required/optional request parameters per model id; pre-flight validates `--model` against the target endpoint on `image`/`video`/`text-to-video`/`image-to-video` |\n| `marketing-studio avatars list` | `GET /v1/avatars` | Alias of `avatar list`; for Higgsfield Marketing Studio parity |\n| `marketing-studio webproducts fetch --url` | None (client-side OG/Twitter metadata extraction) | No API call |\n\nThe CLI `short-video` command can plan with external agents before using Runway: `--planner auto` (default) tries Claude Code first, Codex CLI second, then the deterministic planner; `--planner deterministic` keeps output fully local and CI-safe. `--planner-model`, `--planner-tools`, and `--planner-timeout-seconds` also support `RUNWAY_SHORT_VIDEO_PLANNER_MODEL`, `RUNWAY_SHORT_VIDEO_PLANNER_TOOLS`, and `RUNWAY_SHORT_VIDEO_PLANNER_TIMEOUT_SECONDS`. `short-video run --plan` is execution-only and never invokes a planner. The bundled planner prompt is Runway-owned and was shaped by storyboard-creation workflows; no external storyboard skill is installed or required. Normal `short-video` generation writes the exact executed plan next to the final video as `*.plan.json`, and logs which planner source was used.\n\nThe creative recipe commands are Runway-native. `product-photoshoot create`, `marketplace-cards create`, and `ad-video create` bundle product/ad/storyboard prompt guidance inspired by compact creator workflows: concise sensory prompts, camera and motion structure, lighting, positive phrasing, mode routing, reference-image handling, and model-fit defaults. They do not install or call Higgsfield, and marketplace-card plans are creative asset bundles rather than marketplace compliance claims. For face-faithful identity reuse, the CLI ships a local `soul-id` registry (see \"Higgsfield Parity\" below) that auto-attaches reference photos to every generation call that supports them; it does not train a server-side identity model. For presenter-like talking videos, use the existing `avatar` and `character-performance` commands.\n\n#### Higgsfield Parity\n\nThe CLI ships a Higgsfield-parity surface so an agent trained on `higgsfield-ai/skills` verbs can drive Runway with the same vocabulary. Mapping:\n\n| Higgsfield CLI | Runway CLI | Notes |\n| --- | --- | --- |\n| `higgsfield generate create` | `runway generate \u003cprompt\u003e --kind image\\|video\\|image-to-video\\|text-to-speech\\|sound-effect` | Thin router. For per-modality options, prefer `runway image`, `runway video`, `runway image-to-video`, `runway text-to-speech`, `runway sound-effect` directly. |\n| `higgsfield soul-id create/list/get/wait` | `runway soul-id create/list/get/wait/delete` | Local registry under `~/.runway-cli/soul-ids/\u003cid\u003e/`. Photos are stored client-side; `wait` is a no-op. Pass `--soul-id \u003cid\u003e` to `image`, `image-to-video`, `product-photoshoot create`, `marketplace-cards create`, or `ad-video create` to auto-attach the registered photos as reference images. Not wired into `short-video` because text-to-video does not accept reference images; chain `image` → `image-to-video` per shot for identity-faithful multi-shot stories. |\n| `higgsfield product-photoshoot --mode` (10 modes) | `runway product-photoshoot create --mode` (10 modes) | All Higgsfield modes mapped: `product_shot`, `lifestyle_scene`, `closeup_product_with_person`, `moodboard_pin`, `hero_banner`, `social_carousel`, `ad_creative_pack`, `virtual_model_tryout`, `conceptual_product`, `restyle`. |\n| `higgsfield marketplace-cards --scope` | `runway marketplace-cards create --scope` | All four scopes match: `main`, `product-images`, `aplus`, `full-set`. |\n| `higgsfield marketing-studio avatars` | `runway marketing-studio avatars list` | Re-exposes the existing avatar list endpoints. |\n| `higgsfield marketing-studio webproducts fetch --url` | `runway marketing-studio webproducts fetch --url` | Client-side OG/Twitter metadata extraction. |\n| `higgsfield marketing-studio products/hooks/settings/ad-references` | _not supported_ | Runway has no analog. Use `workflow` and `document` for adjacent capabilities. |\n| `higgsfield auth login` (device flow) | `runway auth set/show/clear` | Runway uses an API key, not OAuth device flow. The stored credentials file is `~/.runway-cli/credentials.json` (mode 0600). |\n| `higgsfield account` | `runway account` | Alias of `runway organization get`. |\n| `higgsfield model list` / `higgsfield model schema \u003cmodel\u003e` | `runway models` / `runway models schema \u003cmodel\u003e` | `models` lists Runway endpoint families and supported model IDs. `models schema \u003cmodel\u003e` parses the embedded Runway OpenAPI spec at runtime, splits parameters into `required` vs `optional`, and adds a per-endpoint breakdown for multi-endpoint models. The same data backs a pre-flight model/endpoint check on `image`, `video`, `text-to-video`, and `image-to-video` — wrong-endpoint pairings fail with a spec-derived error before the API call; unknown model IDs pass through. |\n| `higgsfield upload` | `runway upload create` | Same shape, single subcommand. |\n| `higgsfield generate wait \u003ctask-id\u003e` | `runway task get \u003ctask-id\u003e --wait` | With `--download --kind image` or `--kind video` for one-step retrieval. |\n\n#### Pre-flight Validation\n\nThe CLI consults the embedded Runway OpenAPI spec before sending generation requests. Two checks run automatically — wrong-endpoint pairings and missing required parameters — both with spec-derived error messages so the user gets feedback before paying for an API round-trip. Unknown model IDs always pass through (brand-new spec entries work without a CLI release).\n\n```bash\n$ runway video \"a cinematic shot\" --model gpt_image_2\n# Model `gpt_image_2` is not supported by `text_to_video` per the Runway OpenAPI spec.\n# Supported endpoints: text_to_image.\n\n$ runway image \"a poster\" --model gen4_image_turbo\n# Model `gen4_image_turbo` on `text_to_image` requires referenceImages (--reference-image) per the Runway OpenAPI spec.\n# Run `runway models schema gen4_image_turbo` for the full parameter list.\n\n$ runway image-to-video --image ./pic.png --model gen3a_turbo\n# Model `gen3a_turbo` on `image_to_video` requires promptText (--prompt) per the Runway OpenAPI spec.\n# Run `runway models schema gen3a_turbo` for the full parameter list.\n\n$ runway text-to-video \"a cinematic shot\" --model gen4.5\n# Model `gen4.5` on `text_to_video` requires duration (--duration) per the Runway OpenAPI spec.\n# Run `runway models schema gen4.5` for the full parameter list.\n\n$ runway product-photoshoot create --prompt \"x\" --model gen4_image_turbo --plan-only\n# Model `gen4_image_turbo` on `text_to_image` requires referenceImages (--reference-image) per the Runway OpenAPI spec.\n# Run `runway models schema gen4_image_turbo` for the full parameter list.\n```\n\nEach missing required parameter is rendered as `\u003cspec-name\u003e (\u003ccli-flag\u003e)` so humans see which flag to add; agents and scripts that grep for the spec name still match. Validation runs even with `--plan-only`, so recipe commands (`product-photoshoot create`, `marketplace-cards create`, `ad-video create`) catch wrong-input combinations before any per-job API call. Audio, avatar, character-performance, and realtime commands hardcode their model id; the validator runs as a sentinel that surfaces spec drift if the upstream Runway spec ever drops a model.\n\nSoul-id example flow:\n\n```bash\n# Create a soul-id from 5+ reference photos\ndnx Runway.Cli soul-id create --name \"alice\" \\\n  --image ./refs/1.jpg --image ./refs/2.jpg --image ./refs/3.jpg \\\n  --image ./refs/4.jpg --image ./refs/5.jpg\n\n# List entries\ndnx Runway.Cli soul-id list\n\n# Generate a product shot using the soul-id (auto-attaches the photos)\ndnx Runway.Cli image \"alice holding a vintage camera in golden-hour light\" \\\n  --model gpt-image-2 --soul-id \u003cid\u003e --output ./runway-output\n\n# Soul-id flows through every reference-aware recipe\ndnx Runway.Cli product-photoshoot create \\\n  --prompt \"alice in a quiet studio kitchen\" \\\n  --mode closeup_product_with_person --soul-id \u003cid\u003e --plan-only\n```\n\nAuth and account:\n\n```bash\ndnx Runway.Cli auth set --api-key \"$RUNWAY_API_KEY\"\ndnx Runway.Cli auth show\ndnx Runway.Cli auth clear\n\ndnx Runway.Cli account\ndnx Runway.Cli models schema gen4_turbo\n```\n\nMarketing-studio webproducts dossier:\n\n```bash\ndnx Runway.Cli marketing-studio webproducts fetch --url https://example.com/product\n```\n\nThe short-video workflow is also available from the SDK through `RunwayShortVideoExtensions.CreateShortVideoPlan(...)`, `IChatClient.CreateShortVideoPlanAsync(...)`, `client.CreateShortVideoAsync(...)`, and `client.CreateShortVideoAsync(plan, ...)`. Backend code can use the deterministic planner, supply a custom `RunwayShortVideoPlanner`, ask any Microsoft.Extensions.AI `IChatClient` for richer storyboard JSON, review or edit the plan, then execute the edited plan. `RunwayShortVideoJsonSerializerContext` provides AOT-safe JSON metadata for serializing plans and results.\n\n### Agent Skill\n\nThe repo includes a compact Codex-compatible skill at `.agents/skills/runway-cli/SKILL.md`. It mirrors the official [runwayml/skills](https://github.com/runwayml/skills) agent-skill flow, but uses `dnx Runway.Cli` as the runtime instead of bundled Python or Node scripts. The skill covers direct media generation, scenario-to-short-video planning, creative product/ad recipes, resource inspection, uploads, task polling/downloads, and simple multi-step recipes such as concept image to video and batch product-image animation.\n\n## Support\n\nPriority place for bugs: https://github.com/tryAGI/Runway/issues  \nPriority place for ideas and general questions: https://github.com/tryAGI/Runway/discussions  \nDiscord: https://discord.gg/Ca2xhfBf3v  \n\n## Acknowledgments\n\n![JetBrains logo](https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.png)\n\nThis project is supported by JetBrains through the [Open Source Support Program](https://jb.gg/OpenSourceSupport).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftryagi%2Frunway","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftryagi%2Frunway","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftryagi%2Frunway/lists"}