> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reactor.inc/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> To build and serve your own model, start at /deploy/development/quickstart and /deploy/development/overview. Deploying is the default path: reactor init scaffolds a workspace, reactor auth login authenticates, and reactor model deploy registers the model, publishes the release with the weights/ folder, and activates it on Reactor's GPUs, in one command from that workspace. Docker must be running, because the publish step builds the image locally. Bump model.version in reactor.yaml before redeploying a change, because a release that already has an image is reactivated as it is. Deployment access is granted per account, so contact team@reactor.inc if a deploy is refused. Every key in reactor.yaml is documented at /deploy/platform/reactor-yaml. Model code imports reactor_runtime; Python client code imports reactor_sdk. The runtime overview explains the model interface. Running the model on your own machine with reactor run is optional and needs a GPU you attach with --gpus; /deploy/development/local-testing covers that loop and pairs a complete brightness model with a Python client test in a separate brightness-test workspace.
> Reactor hosts multiple models, each with its own connect slug (modelName) and command/event schema. The video model catalog — slug, typed SDK package, and links to its schema — is at /model-api-reference/overview. Robotics policy documentation starts at /robotics/overview; X-WAM observations, actions, and client integration are under /robotics/xwam/; Cosmos3 Nano Policy DROID is under /robotics/cosmos/nano-policy-droid/. Some models expose one slug per experience (e.g. HappyOyster); always take the slug from the model's own pages, never guess it.
> Fastest path to a working app: `npx create-reactor-app my-app --model=<slug>` scaffolds a complete app with secure auth wired up. Typed TypeScript SDKs are published as @reactor-models/<model>; Python uses the base reactor-sdk package.
> Auth: exchange an API key (rk_...) for a JWT via POST https://api.reactor.inc/tokens from your server. Never put the API key in client-side code.
> Append .md to any docs URL for clean Markdown. Search these docs via the MCP server at https://docs.reactor.inc/mcp.

# FastH3-Omni overview

> Generate video with synchronized audio from text, image references, and audio references.

export const ModelRate = ({model, fallback = "View pricing"}) => {
  const [data, setData] = useState(null);
  const [error, setError] = useState(false);
  const [loading, setLoading] = useState(true);
  useEffect(() => {
    const ctrl = new AbortController();
    fetch("https://api.reactor.inc/pricing", {
      signal: ctrl.signal
    }).then(r => {
      if (!r.ok) throw new Error(`HTTP ${r.status}`);
      return r.json();
    }).then(json => {
      setData(json);
      setLoading(false);
    }).catch(err => {
      if (err.name === "AbortError") return;
      setError(true);
      setLoading(false);
    });
    return () => ctrl.abort();
  }, []);
  if (loading) {
    return <span aria-label="loading pricing" className="inline-block h-4 w-28 rounded bg-zinc-950/10 dark:bg-white/10 animate-pulse align-middle" />;
  }
  const creditsPerDollar = data?.settings?.credits_per_dollar;
  const rate = data?.models?.find(m => m.name === model)?.rate;
  const amountPerMin = typeof rate?.amount_per_min === "number" ? rate.amount_per_min : typeof rate?.amount_per_sec === "number" ? rate.amount_per_sec * 60 : undefined;
  const canRender = !error && creditsPerDollar && typeof amountPerMin === "number";
  if (!canRender) {
    return fallback === "View pricing" ? <a href="/resources/billing">View pricing</a> : <span className="text-zinc-950/60 dark:text-white/60">{fallback}</span>;
  }
  const perMin = (amountPerMin / creditsPerDollar).toFixed(3);
  return <span>
      <strong>${perMin}/min</strong>
    </span>;
};

**FastH3-Omni** generates video clips with synchronized audio. Start with text alone, use reference images to shape characters and settings, pin the opening or closing frame with separate keyframe images, or continue an earlier clip. Use up to three images for real-time generation; the model accepts up to nine when real-time speed is not required. Up to three audio references can guide voices and soundtracks.

Generate a clip, then play it when it is ready. You can queue more clips and choose their playback order, or enable autoplay to play ready clips as they arrive.

## At a glance

| Spec | Value |
| - | - |
| Model name | `reactor/fast-h3-omni` |
| Pricing | <ModelRate model="fast-h3-omni" /> |
| Input | Text, image and audio references, first and last frame keyframes, and clip continuation |
| Output tracks | `main_video` and `main_audio` |
| Clip length | About 5–15 seconds |
| Frame rate | 24 frames per second |
| Aspect ratios | 16:9 (1344 × 768), 1:1 (768 × 768), 9:16 (768 × 1344), and 4:3 (1024 × 768) |

## Key features

<CardGroup cols={3}>
  <Card title="Video with sound" icon="volume-2">
    Describe the scene, camera, dialogue, and soundscape in one prompt.
  </Card>

  <Card title="References" icon="images">
    Use reference images for characters and settings, keyframe images for the opening or closing frame, and audio clips for a voice or soundtrack.
  </Card>

  <Card title="Clip control" icon="list-video">
    Queue clips, choose playback order, and continue a generated scene.
  </Card>
</CardGroup>

## Quick start

<Tabs>
  <Tab title="npm">
    ```shell theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
    npx create-reactor-app my-omni-app --model=fast-h3-omni
    ```
  </Tab>

  <Tab title="pnpm">
    ```shell theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
    pnpm create reactor-app my-omni-app --model=fast-h3-omni
    ```
  </Tab>
</Tabs>

Create a server-issued session token for the model, then connect with the base JavaScript SDK. The browser must not contain your `rk_` API key. See [Authentication](/authentication) for token creation.

```typescript theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
import { Reactor } from "@reactor-team/js-sdk";

const reactor = new Reactor({ modelName: "reactor/fast-h3-omni" });
const video = document.querySelector("video")!;
const audio = document.querySelector("audio")!;

reactor.on("trackReceived", (name, _track, stream) => {
  if (name === "main_video") {
    video.srcObject = stream;
    void video.play().catch(console.error);
  }
  if (name === "main_audio") {
    audio.srcObject = stream;
    void audio.play().catch(console.error);
  }
});

reactor.on("statusChanged", async (status) => {
  if (status !== "ready") return;
  await reactor.sendCommand("enqueue", {
    prompt: "A ceramic artist turns a blue bowl under warm studio light. The camera slowly pushes in. A pottery wheel hums and rain taps the window.",
    seconds: 5.875,
  });
});

reactor.on("message", async (message) => {
  if (message.type === "clip_generated") {
    await reactor.sendCommand("play", { clip_id: message.data.clip.clip_id });
  }
});

await reactor.connect(await getToken()); // Implement getToken() on your server.
```

Start this example from a user action if the browser blocks audio autoplay. The typed SDK package `@reactor-models/fast-h3-omni` adds named methods and hooks. See [Typed Model SDKs](/sdk-reference/typed-model-sdk).

## How it works

1. Connect to `reactor/fast-h3-omni`.
2. Optionally upload image or audio references and keyframe images, then call `enqueue` with a text prompt.
3. Wait for `clip_generated`, then call `play` to stream the clip, or enable autoplay.
4. Queue more clips, change their playback order, or continue an earlier generated clip.

A keyframe needs at least one ordinary reference image in the same request. To continue from a generated clip, the default `latent` mode carries motion, camera, and sound; `frame` mode uses the previous clip's final frame as the next clip's first frame. See the [schema](/model-api-reference/fast-h3-omni/schema). The [prompt guide](/model-api-reference/fast-h3-omni/prompt-guide) and [tutorial](/model-api-reference/fast-h3-omni/tutorial) show how to build a complete clip.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.