We use cookies. Cookies and browser storage keep you signed in and remember your preferences. With your permission we also measure how the site is used. You can any time. See our cookie policy.

HeyGen: HeyGen Video vs SpaceXAI: Grok Imagine Video 1.5 Lite

A side-by-side comparison of HeyGen: HeyGen Video ($0.35 / second) and SpaceXAI: Grok Imagine Video 1.5 Lite ($3.50 / second) using current USD prices and capabilities from the api14 catalog. Both run through the same OpenAI-compatible API.

Specifications

HeyGen: HeyGen VideoSpaceXAI: Grok Imagine Video 1.5 Lite
ProviderHeyGenxAI
duration_seconds_2k$0.35 / second-
duration_seconds_480p$0.07 / second-
duration_seconds_768p$0.13 / second-
reference_input_images$0.14 / second-
reference_duration_seconds_2k$0.63 / second-
reference_duration_seconds_480p$0.25 / second-
reference_duration_seconds_768p$0.35 / second-
cents_per_image_input-$3.50 / second
cents_per_video_output_second_480p-$7.00 / second
cents_per_video_output_second_720p-$10.50 / second
cents_per_video_output_second_1080p-$49.00 / second
Context window--
Max output--
Inputtext, image, video, audiotext, image
Outputvideovideo
Tool calling
Structured output
Reasoning control
AddedSep 30, 2026Oct 6, 2026

Switch with one string

Both models use the same endpoint and request shape. Change the model value from "heygen/heygen-video-1" to "x-ai/grok-imagine-video-1.5-lite" and prompts, streaming and tools keep working.

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api14.com/api/v1",
  apiKey: process.env.API14_API_KEY,
});

// Video generation is asynchronous: submit, then poll until completed.
let job = await client.post("/videos", { body: {
  "model": "x-ai/grok-imagine-video-1.5-lite",
  "prompt": "A drone shot over turquoise ocean waves at sunrise",
  "duration": 8,
  "resolution": "720p",
  "aspect_ratio": "16:9"
} });
while (!["completed", "failed"].includes(job.status)) {
  await new Promise((r) => setTimeout(r, 5000));
  job = await client.get(`/videos/${job.id}`);
}
console.log(job.status, job.unsigned_urls);

More comparisons