H3 Max · Creative notes

MiniMax H3 on Cloudflare Workers AI: Models, Prices, and Request Shape

Call MiniMax H3 through Cloudflare Workers AI with the right model ID, content roles, duration, resolution, cost estimate, and response fields.

AI Live GeneratorCreate an H3 Max video
Table of Contents

Cloudflare Workers AI now exposes four MiniMax H3 model IDs through one request shape: minimax/h3, minimax/h3-highspeed, minimax/h3-lite, and minimax/h3-max. If your application already runs in a Worker, the useful part is not another H3 wrapper. It is the ability to call the model through an AI binding, keep the token out of browser code, and switch tiers without rebuilding the transport layer.

The four IDs are not aliases. Resolution, minimum duration, price, and one Max-only control differ. Pick the model before validating the request, because a four-second 2K job and a five-second 480P job cannot go to the same ID.

The four Cloudflare H3 IDs are different contracts

These are the prices and hard output limits shown on Cloudflare's model pages on November 1, 2026:

Workers AI model IDOutputDurationPublished output priceThe practical reason to choose it
minimax/h3-lite480P, 768P4–15s$0.025/s, $0.04/sThe lowest-cost H3 draft route
minimax/h3-highspeed768P4–15s$0.06/sMiniMax's middle quality-and-speed tier
minimax/h3768P, 2K4–15s$0.08/s, $0.13/sThe only one of these four Cloudflare IDs with 2K output
minimax/h3-max480P, 768P5–15s$0.05/s, $0.08/sThe Max contract and its prompt-expansion mode

The source pages are Cloudflare's current documentation for H3 Lite, H3 Highspeed, H3, and H3 Max. They describe third-party MiniMax models running behind Workers AI. Cloudflare did not train a fifth H3 variant, and adding a binding does not change which output modes a model supports.

This is also why Max is not shorthand for “highest resolution.” Standard H3 reaches 2K; H3 Max stops at 768P. The H3 Highspeed versus H3 Lite comparison explains the product tiers in more detail.

A five-second budget exposes the real choice

For a plain five-second output, Cloudflare's displayed per-second rates produce this comparison:

Model and resolutionCalculationFive-second output
H3 Lite, 480P5 × $0.025$0.125
H3 Lite, 768P5 × $0.04$0.20
H3 Highspeed, 768P5 × $0.06$0.30
H3, 768P5 × $0.08$0.40
H3, 2K5 × $0.13$0.65
H3 Max, 480P5 × $0.05$0.25
H3 Max, 768P5 × $0.08$0.40

That table is a request estimate, not a promise about the rest of a Cloudflare account bill. Cloudflare's Workers AI pricing page says model pages now display granular per-model units while the backend still accounts in Neurons. The platform includes a daily 10,000-Neuron allocation, but the H3 pages do not publish a conversion that lets you responsibly turn that allowance into “free H3 videos.” Budget from the model's displayed rate, save the task usage, and reconcile billing in the Workers AI dashboard.

Do not choose Highspeed from its name alone. Cloudflare and MiniMax position it as a balance of speed and quality, but the documentation does not publish an end-to-end latency guarantee against Lite. Queueing, transfer, generation, and delivery still affect the wait a user experiences.

The binding call is intentionally small

With an AI binding named AI, a text-to-video call can be as small as this:

export default {
  async fetch(_request, env) {
    const result = await env.AI.run('minimax/h3-max', {
      content: [
        {
          type: 'text',
          text: 'One continuous macro shot of a paper moth unfolding on a workbench. Slow push in; dry paper rustle, quiet room tone, no music.',
        },
      ],
      duration: 5,
      ratio: '16:9',
      resolution: '768P',
      extra: { prompt_expansion_mode: 'balanced' },
    });

    return Response.json(result);
  },
};

The prompt is an illustrative request, not a result we generated. On H3 Max, Cloudflare documents disabled, balanced, and quality for extra.prompt_expansion_mode. Do not copy that field into the other three IDs unless their live schemas add it. Shared transport does not make every model parameter universal.

For image-led work, add an image_url item and give it an explicit job:

content: [
  {
    type: 'text',
    text: 'The moth opens its wings, then settles. Locked camera.',
  },
  {
    type: 'image_url',
    image_url: { url: 'https://cdn.example.com/moth-first-frame.png' },
    role: 'first_frame',
  },
];

Cloudflare's examples distinguish first_frame, last_frame, and reference_image. The first two anchor an endpoint of the shot; a reference image guides a new shot without promising to become its first frame. H3, Highspeed, and Lite document first-and-last-frame examples. The current H3 Max page does not include a last-frame example, but its machine-readable input schema accepts last_frame alongside first_frame and reference_image. Still validate against the selected model's live schema instead of building one generous form and assuming its role list will never change.

REST uses the same input inside a wrapper

You do not need a Worker binding to use the catalog. The REST endpoint is:

POST https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/run

The model name sits beside the input object:

curl --request POST \
  --url "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run" \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "minimax/h3-lite",
    "input": {
      "content": [
        {
          "type": "text",
          "text": "A paper moth unfolds on a workbench. One continuous macro shot; dry paper rustle, no music."
        }
      ],
      "duration": 4,
      "ratio": "16:9",
      "resolution": "480P"
    }
  }'

The corresponding binding call passes only the inner input because the model ID is the first argument to env.AI.run. That small difference is worth representing in separate transport functions. Your product-level VideoRequest can stay the same, while the Cloudflare binding and REST adapters shape it for their own boundary.

Keep the API token and account ID on the server. A public browser bundle, HTML form, or client-visible environment variable is not a credential store.

Save the task object, not only the MP4 URL

Cloudflare's successful H3 examples return a task object. The useful fields include:

{
  "task": {
    "id": "PROVIDER_TASK_ID",
    "model": "MiniMax-H3-Max",
    "status": "succeeded",
    "content": { "url": "https://.../output.mp4" },
    "resolution": "768P",
    "duration": 5,
    "usage": {
      "total_seconds": 5,
      "input_seconds": 0,
      "output_seconds": 5,
      "input_image_count": 0
    },
    "ratio": "16:9",
    "task_type": "generation"
  }
}

Persist your own job ID, the exact Workers AI model ID, ordered content roles, prompt, duration, ratio, resolution, provider task ID, returned usage, and the final asset location. Copy completed media into storage governed by your retention and access rules. A provider URL is a delivery field, not a durable customer library.

The current schemas also expose an optional callback_url, but do not invent a queue protocol from that one field. If your product needs retries, callback verification, polling, or idempotent settlement, implement only the lifecycle Cloudflare actually documents for this API and record ambiguous submissions before allowing a second billable create.

Cloudflare, MiniMax direct, and fal solve different integration problems

The rendering model may be related, but the surrounding contracts are not interchangeable.

Choose Cloudflare Workers AI when the application already lives in Workers, one binding and one REST surface simplify operations, and the four listed model contracts cover the job.

Choose MiniMax Open Platform when you need its first-party V2 task lifecycle, Context-IR, Regenerate-2K, or its unified media contract. The MiniMax H3 Max API guide maps that direct API against fal, while the Context-IR guide covers the separate prompt-compilation stage.

Choose fal when you need H3 Max Turbo or one of fal's specialist H3 routes. minimax/h3-max on Cloudflare is not the same identifier as minimax/h3-max-turbo/text-to-video on fal. A price, option, or result field from one provider should not silently leak into an adapter for another.

AI Live Generator's regular browser workflow uses fal H3 Max Turbo, not Cloudflare Workers AI and not the standard Cloudflare minimax/h3-max ID. It does not expose API credentials or act as a Workers AI proxy.

A clean first deployment

Start with one model ID and one mode. H3 Lite text-to-video at four or five seconds is easier to validate than a launch form containing four models, three image roles, six ratios, and two resolutions.

Before widening the UI, confirm that you can answer five questions from one saved job record:

  1. Which exact model ID received the request?
  2. Which content item defined the prompt, first frame, last frame, or reference?
  3. Which resolution and duration were accepted?
  4. What usage did Cloudflare return?
  5. Where is the durable copy of the result?

Once those answers survive a closed browser and a process restart, add another role. The durable advantage of the Workers AI surface is not that every H3 model behaves the same. It is that the differences can stay explicit while the authentication and transport remain familiar.

The next shot is yours

Take the idea into the studio.

Start with a prompt or an image. Choose the duration and resolution, then check the credit cost before you generate.

Create an H3 Max video
More H3 Max articles