> ## 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 prompt guide

> Write scenes with image references, audio references, and clear sound direction.

FastH3-Omni generates video and sound together. Start by naming who or what appears, what happens during the clip, how the camera sees it, and what the viewer hears. You can write this as sentences or separate labeled lines. The labels in the examples below are prompt text, not required API fields.

## Give each clip one clear beat

For a short clip, choose an action that can play out in the time available. Describe the setting and camera, then spell out dialogue, ambient sound, and music, including when you want no music.

```text theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
A ceramic artist turns a blue bowl on a wheel in a sunlit studio. She lifts it to inspect the glaze.
Camera: A slow push from a wide view to her hands.
Dialogue: She says, “This one is almost ready.”
Soundscape: The wheel hums and rain taps the window.
Music: None.
```

Set `seconds` on `enqueue` to 5.875, 8, 10.125, 12.25, or 14.375. The model refuses other values. Give the action enough time to fit the length you choose.

## Name image references

Upload one `reference_image` or up to three images in `reference_images` for real-time generation. The model accepts up to nine images when real-time speed is not required. Give each image a role in the prompt: a person, object, setting, or style. Use `<Picture 1>`, `<Picture 2>`, and so on in upload order, and name the details that matter for the clip.

```text theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
<Subject 1> is the ceramic artist in <Picture 1>, with short dark hair and a green apron.
<Picture 2> is the sunlit pottery studio, with a wheel beside the window.
In one shot, <Subject 1> lifts a blue bowl from the wheel and turns it toward the light.
Camera: Move slowly from her face to the bowl.
Soundscape: The wheel slows and rain taps the glass.
Dialogue: None.
Music: None.
```

The `<Subject 1>` label helps tie later actions to the person in `<Picture 1>`. These angle-bracket labels are prompt text, not separate command parameters. A reference image guides appearance; by itself, it does not pin the clip's first or last frame. The model may fit an image to a supported shape with black bars. Use `set_canvas` to choose the output aspect ratio.

## Pin the first or last frame

Use `first_frame_image` to set the opening frame and `last_frame_image` to set the closing frame. These are separate keyframe inputs, not `<Picture N>` reference images. Include at least one ordinary `reference_image` or `reference_images` entry in the same `enqueue` request. Use the prompt to describe what happens between the keyframes.

For a continuation, `continue_mode: "frame"` takes the previous clip's final frame as the new opening frame. You may add `last_frame_image` to choose its ending, but you cannot add `first_frame_image` because the continuation already supplies it. The default `latent` continuation carries motion, camera, and audio instead and accepts no keyframes. See the [schema](/model-api-reference/fast-h3-omni/schema#keyframes-and-continuation) for `enqueue` examples.

## Give audio references a role

Upload one `reference_audio` or up to three clips in `reference_audios`. Each clip must be 2 to 15 seconds long, in mono or stereo. A request with audio also needs an image reference or a retained `continue_from_clip_id`. A continued clip's soundtrack takes one of the three audio slots, so you can upload at most two more.

Refer to uploads as `<Audio 1>`, `<Audio 2>`, and so on. Give each uploaded clip its own sentence saying whether it supplies a voice, background sound, or music, and connect a voice to the person who should use it. Without a stated role, the model may ignore the audio reference. The Sandbox offers Voice, Sound, and Soundtrack roles and adds the selected role to the prompt:

```text theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
<Subject 1> is the singer in <Picture 1>, in a small rehearsal room.
<Audio 1> is the voice reference for <Subject 1>.
In one shot, <Subject 1> faces the microphone and sings, “Stay with the morning light.”
Soundscape: Her voice in a quiet room.
Music: A soft piano chord beneath her voice.
```

For generated speech or singing, put the intended words in the prompt rather than assuming the voice reference supplies them. Treat references as guidance rather than a request for sample-exact audio. Listen to the result before relying on an exact sound.

The Sandbox requires a picture before it lets you add audio. The raw model API also permits audio with a retained `continue_from_clip_id` and no new picture.

## Continue a clip

Set `continue_from_clip_id` to an already generated clip from the same session and canvas. Give the next clip a new action, then name what should carry over: the person's appearance, lighting, camera motion, and sound.

```text theme={"theme":{"light":"github-light","dark":"github-dark-high-contrast"}}
The artist sets the blue bowl on a shelf and steps back to inspect it.
Keep her green apron, the studio light, and the slow camera move from the previous clip.
Soundscape: The wheel's hum fades while rain continues outside.
End on a close view of the finished glaze. No music or dialogue.
```

With the default continuation, the previous clip's ending guides the next clip's motion, camera, and audio; it is not a frame-accurate edit. The model refuses an ID from another canvas or one it no longer retains. It keeps the eight most recent generated clips as continuation sources, so make a dependent clip before its source expires.

## Keep prompts within the budget

The model checks the prompt and image references against the deployment's text and presentation budgets. If a request exceeds either budget, `enqueue` returns `command_error`. The model does not trim the prompt for you; shorten it or remove references before retrying.

## See also

* [FastH3-Omni overview](/model-api-reference/fast-h3-omni/overview)
* [FastH3-Omni schema](/model-api-reference/fast-h3-omni/schema)
* [FastH3-Omni tutorial](/model-api-reference/fast-h3-omni/tutorial)
* [Commands and messages](/concepts/commands-and-messages)


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