
Generative media is the hardest inference workload most teams will run. Here is what top tier looks like for image, video, audio and 3D, the public evidence for fal, and how to choose between Model APIs, Serverless and Compute.
Generative media is the hardest inference workload most teams will run. Here is what top tier looks like for image, video, audio and 3D, the public evidence for fal, and how to choose between Model APIs, Serverless and Compute.

Generative media is the hardest inference workload most teams will run. Here is what top tier looks like for image, video, audio and 3D, the public evidence for fal, and how to choose between Model APIs, Serverless and Compute.
fal is a top AI inference provider for generative media. It hosts 1,000+ production-ready image, video, audio and 3D models, is a day-0 launch partner for frontier models such as MiniMax H3 Max, and runs them on the same serverless runtime that powers 1,300+ production endpoints across thousands of GPUs under a 99.99% uptime SLA. You can call hosted models through Model APIs, deploy your own on Serverless, or rent dedicated compute, and each path bills in a unit you can predict. fal's Serverless AI Inference platform is already being used by top companies in the generative media space, including Bria, Suno, Adobe, Canva, Creatify, Veed, HeyGen, Shopify, World Labs, Quora, Perplexity and many more. Where you run inference is now one of the biggest infrastructure decisions an AI product team makes.
Most inference comparisons are written for language models, where the unit is a token and the headline metric is tokens per second. Generative media changes almost every assumption.
The research backs this up:
A provider tuned for chat completions won't handle that well by default. Here are seven things to check on any provider:
Here is what fal publishes against each criterion, with the page where you can check it.
| What to look for | What fal publishes | Where to check |
|---|---|---|
| Speed | fal Inference Engine™ "up to 10x faster", built on custom CUDA kernels and optimized attention layers. On fal's benchmark, H3 Max returns a 5-second 768p video in under 3 s end to end. | fal.ai, Why fal, H3 Max |
| Model breadth | 1,000+ image, video, audio and 3D models behind one API, with day-0 launches for models such as MiniMax H3 and Kling 3.0 | Explore models, Why fal |
| Scale | 1,300+ production endpoints across thousands of GPUs. Scales from zero to thousands of GPUs. Serves tens of millions of requests a day. | fal Serverless, Why fal |
| Reliability | 99.99% uptime SLA on Serverless. Queued requests are never dropped and there is no queue size limit. Eligible failures are retried up to 10 times. | fal Serverless, Queue docs, Reliability docs |
| Price transparency | Model APIs priced per image, megapixel or video second. Serverless billed per second. H100 at $4.50/h list, as low as $2.49/h. | Pricing |
| Control | Deploy your own Python app or Docker container. Migration guides for Replicate, Modal, RunPod and Baseten. | Migrating to fal |
| Enterprise readiness | SOC 2 Type II, SSO, private endpoints, model access controls and region pinning. fal never trains its models on enterprise customers' data. | Trust Center, Enterprise |
| Enterprise adoption | fal Serverless inference is trusted by some of the top companies in generative media, including Bria, Suno, Adobe, Canva, Creatify, Veed, HeyGen, Shopify, World Labs, Quora, Perplexity and more. | fal Serverless, fal Inference, fal and AWS announcement |
fal's own numbers are a starting point. Outside sources tell you whether the market agrees.
One caveat: Artificial Analysis also publishes per-provider speed and price comparisons for popular open image models, and the fastest provider varies by model. Check the specific models you plan to run, then confirm with your own pilot (see below).
fal gives you three ways to run generative media. The right one depends on how much of the stack you want to own.

| Model APIs | Serverless Inference | Compute | |
|---|---|---|---|
| Best for | Shipping features on hosted image, video, audio and 3D models | Your own weights, fine-tunes and multi-step pipelines | Training, fine-tuning and long batch jobs |
| What you control | The inputs each endpoint exposes | Your Python code, dependencies, weights and schema | The whole machine, over SSH |
| What fal runs | Weights, GPUs, queue, retries and scaling | GPUs, autoscaling, queue and observability | The hardware and provisioning |
| Scaling | Managed | Managed, from zero to thousands of GPUs | Manual: you add and remove instances |
| Billing | Per output (image, megapixel or video second) | Per second while your runners are alive | Fixed hourly rate, whether busy or idle |
A common path is to start with Model APIs, move to Serverless when you need custom weights or code, and add Compute when you need to train. All three run under the same fal account.
Use Model APIs when a hosted model already does what you need. You skip weights, containers and GPUs entirely, and you can switch between models by changing an endpoint ID.
Each endpoint has its own input schema, so check the model's API page for supported prompts, references and controls. Results come back as JSON with file URLs on fal's CDN. By default, output files stay available for at least 7 days, and you can change that per request.
fal's clients offer three ways to call a model:
| Method (Python / JavaScript) | What it does | Use it for |
|---|---|---|
fal_client.run / fal.run | Direct HTTP call with no queue and no server-side retries | Quick tests |
fal_client.subscribe / fal.subscribe | Submits to the queue and waits for the result | Scripts and short jobs |
fal_client.submit / fal.queue.submit | Submits to the queue and returns immediately | Production, especially video |
For production video, submit to the queue with a webhook. Store the request ID so any process can check status or fetch the result later.
import fal_client
handler = fal_client.submit(
"minimax/h3-max/text-to-video",
arguments={
"prompt": "A slow dolly shot through a sunlit greenhouse. Sound: rain on the glass roof.",
"duration": 10,
"resolution": "768P",
"prompt_expansion_mode": "balanced",
},
webhook_url="https://your-server.com/api/fal-webhook",
)
print(handler.request_id) # save this to check status or fetch the result laterWebhook payloads are signed with ED25519, so you can verify that a callback came from fal. You can also cancel a queued request. If it hasn't started yet, it is removed and never processed.
The queue retries automatically on 429 rate limits, 503 and 504 errors, connection errors and request timeouts, up to 10 times with backoff. If an endpoint keeps failing, fal can route the request to an equivalent endpoint.
Two cases need your own logic:
run() and stream() calls are never retried. That is why production traffic should go through the queue.If retrying would cause a side effect you don't want, you can turn retries off for a single request with the X-Fal-No-Retry: 1 header.
For the latest pricing, you can visit our pricing page. Most models bill per output, such as per image, per megapixel or per second of video. MiniMax H3 Max is a good example, because duration and resolution both change the price. It bills per second of output video, and every clip includes synchronized audio. These are the published list rates, and what a 10-second clip costs:
| Endpoint | Resolution | Per second | 10-second clip |
|---|---|---|---|
| H3 Max | 480p | $0.05 | $0.50 |
| H3 Max | 768p | $0.08 | $0.80 |
| H3 Max | 1080p | $0.16 | $1.60 |
| H3 Max Turbo | 480p | $0.025 | $0.25 |
| H3 Max Turbo | 768p | $0.04 | $0.40 |
| H3 Max Turbo | 1080p | $0.08 | $0.80 |
H3 Max's default request is a 5-second 768p clip, which costs $0.40. Price scales with both settings: a 15-second clip costs three times the 5-second default, and 1080p costs twice as much per second as 768p. H3 Max Turbo, the faster variant, costs half of H3 Max at every resolution.
Prices are also available programmatically from the pricing API, so you can show cost estimates in your own product.
Use Serverless Inference when a hosted endpoint isn't enough. That might be a private checkpoint, a fine-tune, custom pre- and post-processing, or a multi-stage pipeline. You write the app and fal runs the GPUs, autoscaling, queue and observability.
This is the same runtime that serves fal's own model catalog. Your endpoint gets the same queue, retries, webhooks and client SDKs as every hosted model.
Write a class that extends fal.App, load weights once in setup(), and expose endpoints with @fal.endpoint:
import fal
from pydantic import BaseModel
from fal.toolkit import Image
class Input(BaseModel):
prompt: str
class Output(BaseModel):
image: Image
class MyImageModel(fal.App):
machine_type = "GPU-H100"
requirements = ["torch", "diffusers", "transformers", "accelerate"]
min_concurrency = 0 # scale to zero when idle
max_concurrency = 20 # cap burst capacity
keep_alive = 300 # keep idle runners warm for 5 minutes
def setup(self):
# Runs once per runner, so weights load at startup, not per request
import torch
from diffusers import StableDiffusionXLPipeline
self.pipe = StableDiffusionXLPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
torch_dtype=torch.float16,
).to("cuda")
@fal.endpoint("/")
def generate(self, request: Input) -> Output:
result = self.pipe(request.prompt)
return Output(image=Image.from_pil(result.images[0]))fal run app.py::MyImageModel # temporary test endpoint
fal deploy app.py::MyImageModel # persistent production endpointfal builds the container image in the cloud, so you don't need Docker installed locally. If you already have a Dockerfile, you can use a custom container image. Production deployments are private by default, so callers need an API key.
Serverless access is approved per account, so contact the fal team before you plan a migration.
You tune autoscaling with a handful of settings, and you can change them on a running app without redeploying. These are the documented defaults:
| Setting | Default | What it does |
|---|---|---|
keep_alive | 60 seconds | How long an idle runner stays warm after its last request |
min_concurrency | 0 | Runners kept alive at all times, your 24/7 warm floor |
concurrency_buffer | 0 | Spare runners held beyond current demand, to absorb bursts |
scaling_delay | 0 seconds | A pause before scaling up, so brief spikes don't start runners |
max_multiplexing | 1 | Concurrent requests per runner |
Cold starts mostly come down to loading weights. fal attacks that in three ways:
/data volume keeps weights in a three-layer cache: local NVMe, a datacenter cache and a global object store.torch.compile artifacts instead of recompiling.For the full picture, read What Is a Serverless GPU Cold Start?
If you raise max_multiplexing, test GPU memory first. Requests that share a runner also share its VRAM and compute.
Serverless billing is per second for the total time your runners are alive, by machine type:
keep_alive), running, draining and teardown.PENDING), pulling your image (DOCKER_PULL), and requests that fail with a 5xx error.Warm capacity is the main cost lever. One H100 runner kept warm around the clock (min_concurrency = 1) for a 30-day month is 720 hours. That costs $3,240 at the $4.50/h list price, or $1,792.80 at the as-low-as rate of $2.49/h. Compare that to scaling to zero with a longer keep_alive, which only bills between bursts.
App Analytics splits every request into Request Startup and Request Duration, at P50, P75 and P90:
Runner Analytics breaks each cold start into its pending, image pull and setup stages, with GPU utilization and VRAM charts. You can also send logs to Datadog or any HTTPS endpoint, scrape a Prometheus-compatible metrics endpoint, or export OpenTelemetry traces.
Use fal Compute when you need a machine rather than an endpoint. That covers training runs, long fine-tuning jobs and batch processing. You SSH in, install your stack and use the GPUs directly.
Compute runs on NVIDIA H100 SXM GPUs in two sizes:
| Instance | GPUs | vCPU | RAM | Storage | Suited to |
|---|---|---|---|---|---|
| 1xH100-SXM | 1 × H100 (80 GB) | 16 | 200 GB | 1 TB SSD | Development, single-GPU fine-tuning, inference |
| 8xH100-SXM | 8 × H100 (640 GB total) | 128 | 1,600 GB | 8 TB SSD | Large-scale training, multi-GPU inference, distributed jobs |
8x instances in the same sector can connect over InfiniBand for multi-node training. A new instance takes about 2–3 minutes to provision.
Three things set Compute apart from Serverless:
A common pattern is to train or fine-tune on Compute, then deploy the result to Serverless for inference that scales with demand.
Headline numbers are a starting point. Your own workload is the real test. Run a pilot that mirrors production before you commit.
Send the same mix of models, resolutions and durations you expect in production, including your bursts. A steady benchmark hides the cold starts your users will actually hit.
Track request startup (queue wait and cold start) apart from request duration (inference) at P50 and P90. On fal, App Analytics already splits these. If the total is slow, you'll know whether to fix warm capacity or the model.
Record which status codes you see, which ones were retried automatically, and which ones your code had to handle. Check that your retries are idempotent, so a resubmitted video job can't bill or publish twice.
The output that matters is the one you actually use. Divide total spend by the number of outputs that passed your quality bar:
Cost per accepted output = total spend ÷ accepted outputs
For example, if you generate 1,000 ten-second H3 Max clips at 768p for $0.80 each and accept 800, you spent $800 for 800 usable clips. That's $1.00 per accepted clip, not $0.80. On Serverless, include warm idle time in total spend.
Before launch, confirm:
X-Fal-Store-IO: 0.us-west, us-central, us-east, eu-north or eu-west.If you are building with image, video, audio or 3D models, fal is built for you. You get the model catalog, the speed and the scaling of a media-first platform, plus a path to your own models and your own GPUs on the same account.
Then run the five-step pilot above, and decide on cost per accepted output.
Create an account, grab an API key and call your first model in a few minutes. If you want to bring your own model or reserve capacity, talk to the fal team.
fal is built specifically for generative media inference. You get 1,000+ hosted image, video, audio and 3D models with day-0 availability, plus a serverless runtime tuned for large media models, with fast weight loading, autoscaling, a durable queue and per-output pricing. General GPU clouds give you machines and leave the serving layer to you.
fal says its Inference Engine™ is up to 10x faster, using custom CUDA kernels and optimized attention layers. On fal's own benchmark, MiniMax H3 Max returns a 5-second 768p video in under 3 seconds end to end, of which 2.46 seconds is generation. Speed varies by model, resolution and duration, so measure the endpoints you plan to use.
Move when you need something a hosted endpoint can't give you, such as private weights, a fine-tune, custom pre- or post-processing, or a multi-stage pipeline. Your Serverless app gets the same queue, retries, webhooks and SDKs as fal's hosted models.
Switch to fal Compute when you need a persistent machine with SSH access, usually for training, long fine-tuning runs or batch jobs. Compute doesn't autoscale and bills per hour whether busy or idle, so many teams train on Compute and serve on Serverless.
Divide total spend by the number of outputs that passed your quality bar. Model APIs bill per output, for example $0.08 per second of 768p video for MiniMax H3 Max. Serverless bills per second while runners are alive, including warm idle time.
Submit through the queue with fal_client.submit or fal.queue.submit and track jobs by request ID or webhook. The queue retries 429, 503 and 504 errors, connection errors and timeouts up to 10 times. 500 and 502 errors need your own resubmit logic, so make jobs idempotent first.
Yes. fal is SOC 2 Type II, with SSO, private endpoints, model access controls and region pinning. fal never trains its models on enterprise customers' data.
I work on everything customer facing for Serverless: onboarding enterprise customers, UI/UX, docs and tutorials. Linkedin: https://www.linkedin.com/in/alex-matthews-1b282918b/
Hundreds of production-ready image, video, and audio models behind one API.