DashboardExplore modelsQuick startDocumentationPricing
Playground
API keysAnalyticsBilling
Contact salesStatus
Sume API
Studio1MCP2API3
DashboardExplore modelsQuick startDocumentationPricing
Playground
API keysAnalyticsBilling
Contact salesStatus
Sume API
Explore/MiniMax/Hailuo H3 Regen
Video$0.0500 / s

Hailuo H3 Regen

Generates video from a source video · 2K · 5–16 s

video-to-video
View docs
curl -X POST https://api.dev.sume.com/v1/video-router/generate \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"hailuo-h3-regen","prompt":"The same meadow and puppy, repainted as a hand-painted watercolor animation with soft paper texture.","video_url":"https://media.sume.com/artifacts/artf_pOs9ikAgWY-O2XEedmc9D1clKD4bLj3r/video.mp4","duration":6,"resolution":"2K"}'
PlaygroundAPIRequestsAnalytics

Input

prompt What happens in the video.
video_url Source video (HTTPS).
Drop a video here, or click to choose
Additional settings

Customize your input with more control.

Pricing…

Result Example

Example output of the input shown, made with Hailuo H3 Regen on Sume. Opening the playground does not charge; Run bills your Sume API balance at the price shown.

Table of contents

About

Generates video from a source video · 2K · 5–16 s

Model id hailuo-h3-regen, sent to POST https://api.dev.sume.com/v1/video-router/generate.

1. Calling the API

Install the client

npm install @sume-com/client

Setup your API key

Set SUME_API_KEY as an environment variable in your server runtime. Make the key in Sume API → API keys.

export SUME_API_KEY="YOUR_API_KEY"

Submit a request

This sends the Playground's request, with the input it holds now. Change the input there and this updates. subscribe submits it, waits for the job and returns the result.

import { createSumeClient } from "@sume-com/client";

const sume = createSumeClient({ baseURL: "https://api.dev.sume.com" });

const response = await sume.subscribe("/v1/video-router/generate", {
  input: {
    "model": "hailuo-h3-regen",
    "prompt": "The same meadow and puppy, repainted as a hand-painted watercolor animation with soft paper texture.",
    "video_url": "https://media.sume.com/artifacts/artf_pOs9ikAgWY-O2XEedmc9D1clKD4bLj3r/video.mp4",
    "duration": 6,
    "resolution": "2K"
  },
});

console.log(response.status, response.video?.url);

2. Authentication

API key

Send your Sume API key as a bearer token from server code only. Keys made under Sume API → API keys spend the workspace balance, the same one Studio spends, and call the model API only.

Authorization: Bearer $SUME_API_KEY

3. Queue

A submit answers at once with the job. Poll its status until it is completed, failed or canceled. Failed and canceled jobs are refunded.

Fetch request status

const response = await fetch(`https://api.dev.sume.com/v1/jobs/${jobId}/status`, {
  headers: { authorization: `Bearer ${process.env.SUME_API_KEY}` },
});
const { data: job } = await response.json();

Get the result

A completed job returns its media. A queued or running job answers 409 job_not_completed with the current status; a failed one 409 job_failed with the reason, and a canceled one 409 job_canceled.

const response = await fetch(`https://api.dev.sume.com/v1/jobs/${jobId}/result`, {
  headers: { authorization: `Bearer ${process.env.SUME_API_KEY}` },
});
const { data: result } = await response.json();

Cancel a request

A job can be canceled until generation starts.

const response = await fetch(`https://api.dev.sume.com/v1/jobs/${jobId}/cancel`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.SUME_API_KEY}` },
});
const { data: job } = await response.json();

4. Files

Hosted files (URL)

Fields that end in _url or _urls take public HTTPS URLs. Some hosts block or rate-limit fetches from servers.

Uploading files

Upload a local file to Sume's storage, then send the URL it returns.

import { readFile } from "node:fs/promises";
import { createSumeClient } from "@sume-com/client";

const sume = createSumeClient({ baseURL: "https://api.dev.sume.com" });

const url = await sume.uploadImage(await readFile("input.png"), "png");

5. Schema

Input

modelstringrequired
"hailuo-h3-regen"
promptstringrequired
What happens in the video.
video_urlstringrequired
Source video (HTTPS).
durationinteger
Seconds, 5–16.Default value: 5Range: 5–16
resolutionstring
Output resolution.Default value: "2K"Possible enum values: 2K
{
  "model": "hailuo-h3-regen",
  "prompt": "The same meadow and puppy, repainted as a hand-painted watercolor animation with soft paper texture.",
  "video_url": "https://media.sume.com/artifacts/artf_pOs9ikAgWY-O2XEedmc9D1clKD4bLj3r/video.mp4",
  "duration": 6,
  "resolution": "2K"
}

Output

data.result.artifactsArtifact[]required
The generated media, in order.
data.jobJobrequired
The job record: id, status, model, input, created_at, started_at and completed_at.

Artifact

urlstringrequired
Public Sume CDN URL for the file. Do not parse the path.
typestringrequired
image, video, audio, model or file.
content_typestringrequired
The file's MIME type.
idstringrequired
Opaque artifact id, safe to log.
widthinteger
Pixels, when known.
heightinteger
Pixels, when known.
duration_msinteger
Length of a video or audio file, when known.
size_bytesinteger
File size, when known.

6. Price before you submit

The estimate is the charge: the same function prices both. This one prices the Playground's input.

const response = await fetch("https://api.dev.sume.com/v1/open/estimate", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    "model": "hailuo-h3-regen",
    "input": {
      "prompt": "The same meadow and puppy, repainted as a hand-painted watercolor animation with soft paper texture.",
      "video_url": "https://media.sume.com/artifacts/artf_pOs9ikAgWY-O2XEedmc9D1clKD4bLj3r/video.mp4",
      "duration": 6,
      "resolution": "2K"
    }
  }),
});
const { data } = await response.json();
console.log(data.usd);

Full reference: /docs

Request history

Updating while a run is going

No requests

Loading this model's requests…

Analytics

Total requests—No requests
Execution p50—No requests
Execution p75—No requests
Execution p90—No requests
Execution p95—No requests
Execution p99—No requests
Success rate—No requests
Startup p50—No requests
Startup p75—No requests
Startup p90—No requests
Startup p95—No requests
Startup p99—No requests

Request counts

Completed 0Failed 0

Loading this model's requests…

End-to-end latency

Total time from request received to response sent.

No latency data available for this time range.

Recent errors

IDWhenTotal timeStatus
No requests foundThere are no requests that match the criteria

Slower requests

IDWhenTotal timeStatus
No requests foundThere are no requests that match the criteria

Pricing

Dollars per unit at each option, from our rate card; a request rounds up to $0.0001. The estimate above is the exact charge.

OptionPrice
2K$0.0500 / s

More models by MiniMax

Price, resolution and duration show each model's full range.

ModelTypePriceResolutionDuration
MiniMax H3video$0.0600 – $0.1560 / s768p – 4K5 – 15 s
MiniMax H3 Maxvideo$0.0500 – $0.1000 / s480p – 1080p5 – 15 s
H3 Max Recastvideo$0.3000 – $0.4500 / s768p – 1080p5 – 30 s
Hailuo 2.3video$0.04667 – $0.08167 / s768p – 1080p6 – 10 s
Hailuo 2.3 Fastvideo$0.03167 – $0.0550 / s768p – 1080p6 – 10 s
MiniMax H3 Max Lip Synclipsync$0.0500 – $0.1600 / s480p – 1080p5 – 14 s
H3 Max Relightvideo$0.0500 – $0.3200 / s480p – 2K3 – 15 s