Migrate from Runway ML to Railwail
Migration Guides

Migrate from Runway ML to Railwail

Switch from Runway ML API to Railwail. Gen-3 Alpha Turbo and equivalent video models (Veo-3, WAN-2.5), OpenAI-compatible API, EU hosting, EUR billing.

Railwail TeamĀ· Developer Relations8 min readMay 16, 2026

TL;DR — Switch in Under 15 Minutes

  • Drop Runway's task-based polling pattern — Railwail's POST /v1/videos blocks until complete
  • Runway Gen-3 Alpha Turbo maps to gen-3-alpha-turbo on Railwail (mirrored)
  • Plus Veo-3, WAN-2.5, AnimateDiff and Stable Video as alternatives
  • EU hosting, EUR billing
  • Same key unlocks the rest of the AI stack (text, image, audio)

Why Move Off Runway ML Direct?

Runway pioneered consumer-facing AI video and remains a strong choice for cinematic Gen-3 output. The API trade-offs: task-based async workflow with polling, USD-only billing, US hosting, and a narrow catalog (Runway models only). Railwail mirrors Gen-3 Alpha Turbo for compatibility and adds Veo-3 and WAN-2.5 as Google/Alibaba alternatives, all with synchronous calls and EU residency.

Step 1 — Get a Railwail API Key

Sign up at railwail.com and generate a key.

Sponsored

Access 100+ AI Models with One API Key

GPT-4o, Claude, Gemini, Llama, Flux, DALL-E and more — all through a single, OpenAI-compatible endpoint. No more juggling multiple providers.

Step 2 — Replace Task-Based Polling

TypeScript / JavaScript

Before (Runway):

import { RunwayML } from "@runwayml/sdk";

const runway = new RunwayML({ apiKey: process.env.RUNWAYML_API_SECRET });

const task = await runway.imageToVideo.create({
  model: "gen3a_turbo",
  promptImage: "https://example.com/img.jpg",
  promptText: "a slow zoom out",
  duration: 5,
});

// Poll for completion
let result;
while (true) {
  result = await runway.tasks.retrieve(task.id);
  if (result.status === "SUCCEEDED") break;
  if (result.status === "FAILED") throw new Error(result.failure);
  await new Promise(r => setTimeout(r, 5000));
}
console.log(result.output[0]);
After (Railwail):
const res = await fetch("https://api.railwail.com/v1/videos", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.RAILWAIL_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "gen-3-alpha-turbo",
    prompt: "a slow zoom out",
    image_url: "https://example.com/img.jpg",
    duration_seconds: 5,
  }),
});
const json = await res.json();
console.log(json.video_url);

Python

import os, requests

resp = requests.post(
    "https://api.railwail.com/v1/videos",
    headers={"Authorization": f"Bearer {os.environ['RAILWAIL_API_KEY']}"},
    json={
        "model": "gen-3-alpha-turbo",
        "prompt": "a slow zoom out",
        "image_url": "https://example.com/img.jpg",
        "duration_seconds": 5,
    },
    timeout=300,
)
print(resp.json()["video_url"])

cURL

curl https://api.railwail.com/v1/videos \
  -H "Authorization: Bearer $RAILWAIL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gen-3-alpha-turbo",
    "prompt": "a slow zoom out",
    "image_url": "https://example.com/img.jpg",
    "duration_seconds": 5
  }'

API Endpoint Mapping

Runway endpoint → Railwail equivalent

Runway MLRailwailNotes
POST /v1/image_to_videoPOST /v1/videos (image_url + prompt)I2V
POST /v1/text_to_videoPOST /v1/videos (prompt only)T2V
POST /v1/video_to_videoPOST /v1/videos (init_video_url)V2V
GET /v1/tasks/{id}Synchronous — not neededOr pass webhook_url
DELETE /v1/tasks/{id}Not exposedSync calls cannot be cancelled mid-flight

Model Mapping

Runway model → Railwail

RunwayRailwailNotes
gen3a_turbogen-3-alpha-turboMirrored
gen-3-alphagen-3-alphaMirrored, higher quality
upscale_v1upscale-v1Video upscaling
N/Aveo-3Google Veo as alternative
N/Awan-2.5-i2vAlibaba WAN as alternative
N/Astable-video-diffusionStability as alternative

Sponsored

Test Any AI Model Instantly

Our built-in playground lets you compare models side by side. Find the perfect model for your use case in minutes, not days.

Pricing Comparison (May 2026)

Same video model, Railwail in EUR

ModelRunway (USD)Railwail (EUR)Notes
gen-3-alpha-turbo 5s$0.25EUR 0.23Identical
gen-3-alpha 5s$0.50EUR 0.46Identical
veo-3 5sN/A on RunwayEUR 0.40Alternative
wan-2.5-i2v 5sN/A on RunwayEUR 0.28Cheaper alternative

Why Railwail Over Runway ML Direct

  • EU hosting and EUR billing
  • Synchronous responses — no task polling
  • Multiple video models to A/B (Runway Gen-3, Veo-3, WAN-2.5)
  • Same per-second pricing on Runway models
  • Adds the rest of the AI stack (text, image, audio) to one key
  • Per-key spend caps to prevent runaway video bills

FAQ

How long is the maximum video duration?

gen-3-alpha-turbo supports 5s or 10s. veo-3 supports up to 8s in the current API tier. For longer clips, generate multiple segments and concatenate.

Does the Runway Camera Motion control work?

Yes. Pass camera_motion: { type: 'pan-left', strength: 0.5 } as an extension parameter for Gen-3 models.

Can I do video-to-video?

Yes. Pass init_video_url to use an existing clip as the starting reference.

What about Runway's Video Upscaler?

Available as upscale-v1 via POST /v1/videos with mode: 'upscale' and source_video_url.

Webhook on completion supported?

Yes. Pass webhook_url in the request body. Railwail POSTs the completed response to that URL when ready.

Sponsored

Pay Only for What You Use

Transparent per-token pricing with no monthly minimums. Start with free credits and scale as you grow.

Next Steps

  • Sign up at railwail.com
  • Generate an API key
  • Replace Runway SDK with synchronous fetch / requests to /v1/videos
  • Optionally try veo-3 or wan-2.5-i2v as alternatives
  • Read the reference at railwail.com/docs
  • Compare pricing at railwail.com/pricing

Railwail Team

Developer Relations

The Railwail team writes integration guides for developers migrating from single-provider AI APIs to a unified multi-model platform.

Tags:
Runway ML
Migration
Video Generation
Gen-3
Veo
WAN