Skip to content

Video generation

Myra AI Workspace can generate a short video clip from a text description, or animate an image the user attached. It is exposed to the model as a single create_video tool: when a user asks the assistant to create, make, or animate a video, the model calls the tool, the gateway starts a job on a self-hosted video backend, and the finished clip appears in the chat.

Video generation runs entirely on Myra's own EU-hosted infrastructure. No third-party video provider is involved, and prompts and start images are sent only to that backend, so EU data-residency requirements are met.

Video generation is a test run on a single, non-redundant backend. Expect it to be unavailable at times.

How it works

  1. The gateway offers the create_video tool to the model only when all of these hold: the platform setting video_generation_available is on, the gateway has Video Generation enabled, the client sends the x-aig-video-gen header (the web chat always does), the gateway allows external tool calls (the tool is withheld where egress tools are blocked), the chat is a saved conversation, and the deployment has the blob store and the video backend configured.
  2. When the model calls the tool, the gateway checks the arguments, starts a job on the backend, and returns a short confirmation to the model. The model's reply finishes immediately; it does not wait for the GPU.
  3. The chat shows a placeholder in the assistant message. The gateway downloads the clip when the backend finishes it, and the placeholder turns into a video player. The clip usually takes 1 to 3 minutes; Wan 2.2 takes about 4 minutes.
  4. Closing the tab, reloading, or stopping the reply does not cancel the job. The clip is still there when you return to the conversation. Only the Cancel button stops a job.

While a clip is generating

The placeholder shows live progress, read from the video backend on every status poll (nothing is stored in the gateway):

  • A progress bar (0 to 100 %).
  • Time left ("About 40 s left", "About 2 min left") while the clip renders, or "Waiting - N ahead of yours" while it is queued behind other jobs. Either is omitted when the backend does not report it.
  • The prompt, the model and the size.
  • For an image-to-video clip, the start image, dimmed, under the progress bar. Text-to-video clips have no preview. The preview is proxied from the backend only while the job is active and is never stored by the gateway.
  • A Cancel button. Only the conversation owner sees it. Cancelling stops the render and marks the clip failed. If the conversation was forked while the clip was pending, cancelling affects only your own copy; the backend job keeps running for the other copy.

When a clip finishes while the browser tab is hidden, the tab title gets a "▶ " prefix until you return to the tab.

After a clip is ready

Every finished clip has three controls for everyone who can see it:

  • Download video saves the clip as a file (video-<first 8 characters of the clip id>.mp4).
  • Full screen plays it in full screen.
  • Open in new tab opens the clip on its own in a new browser tab.

The conversation owner also sees one-click actions. Shared readers and read-only viewers do not. An action does not send anything: it puts a short sentence with the clip's id into the message box as an editable draft. You can change it, add to it (for example "continue, but the boat sinks") or delete it, and then press Send. The assistant then re-runs the clip's stored settings through the normal create_video tool, so all limits (two clips per reply, two pending per user) still apply. If the message box is not available at that moment, a short note says so and nothing is placed.

Action What it does When it is shown
Again A new take: same prompt and settings, new random seed. For a clip made with Animate (it re-uses the same image). Not for a clip that started from an image attached to the message, nor for a continued clip, because that start image cannot be re-sent from the chat.
Render in 1080p A new render with the same prompt and the same seed at the 1080p size. It is not an upscale of the existing file, so details can differ. Only when a 1080p size exists for the clip's size. Same image rule as Again.
Continue A new clip that starts from the last frame of this one. ltx-2.5 clips only. The source clip must have been requested less than 24 hours ago (the backend keeps outputs for 24 hours from the request); an older clip is refused.

You can also ask for a change in the same message, for example "continue, but the boat sinks": a new prompt replaces the stored one.

In a forked conversation, Again and Render in 1080p are not offered for a clip made with Animate: the image it was made from belongs to the original conversation. Continue still works.

Animate an image

An Animate button appears under a generated image and under an image you uploaded in a saved message. Like the actions above, it only places an editable draft ("Animate image into a short video."); describe the motion you want and press Send. The assistant then calls create_video with that image as the start frame. The gateway loads the image itself from the conversation; it is not sent to the language model again.

Animate is shown only when it can work:

  • you own the conversation;
  • video generation is available for the next reply: on the gateway the chat uses, or, when the chat picks its gateway automatically, on every production gateway it could route to; never in a local-only project;
  • the image is a PNG, JPEG or WebP of at most 10 MiB (not a GIF);
  • for an upload, it is the last image of that message (the one the gateway would use).

The gateway uses the image id only when your message names it (the Animate draft does). If you ask to animate "the picture" without attaching one, or the assistant picks an image of the chat on its own, the most recent image of the chat is shown with Use this image / Pick another / Attach new, and the video starts only after you confirm (see Editing an image from earlier in the chat — the same card).

Several clips in one reply

Ask for two versions and the assistant can start two clips in one reply. They are shown in a carousel: one clip at a time, with Previous and Next buttons and a "1 / 2" counter. Switching pauses the clip you leave. Clips still being generated keep updating while you look at another one.

Enabling it

Two switches, both required:

Switch Who Where
Platform setting video_generation_available Platform admin PUT /admin/v1/settings/video_generation_available with { "value": true } (see the settings API). Default off.
Gateway toggle Video Generation (video_generation.enabled) Gateway admin Gateways -> select the gateway -> Edit -> Search & tools -> Video Generation -> tick Enable video generation -> Save Changes. Default off; self-service signup does not enable it.

The platform setting gates new requests only. Turning it off does not cancel clips that are already being generated; they still finish and appear. Gateway config changes are picked up within about a minute.

Only a tool-capable model on the gateway will call the tool. Video generation is not available to scheduled or automated agent runs.

Models and options

The model decides the options from the user's request. The backend is the single authority on which values are allowed.

Option ltx-2.5 (default) wan-2.2
Length (seconds) 4, 5 (default), 8, 10 5
Size 960x544 (default), 544x960, 768x768, 1280x704, 704x1280, 1920x1088, 1088x1920 640x640 (default), 832x480, 480x832
Frame rate (fps) 24 (default), 25 16
Audio On by default; can be switched off for a silent clip None (silent)
Start image Supported Not supported
Seed 0 to 4294967295; random if not given same
Negative prompt Optional Optional
  • Model choice. The model uses ltx-2.5 unless the user asks for Wan 2.2.
  • 1080p sizes (1920x1088, 1088x1920) take longer than the default size.
  • Start image. Attach a PNG, JPEG or WebP to the message that asks for the video, up to 10 MiB, or use Animate on an image already in the chat. Attach one image: when the message carries two or more images, no start frame is picked and the assistant asks you to attach the one image to start from (see Several images in one message). A video from text only is still made in a message with attachments; the assistant is told it was made from your text, not from your images. The gateway sends it to the same EU backend only, never to the language model. The model does not need to see the image.
  • Seed. The confirmation the model receives includes the seed that was used. To get the same take again, ask for it with the same prompt and settings.
  • Request record. Each submit the gateway sends to the video service is a row in the request's legs (kind video_generation: status, error class, latency, and the model the service confirmed — no prompt, no image; request-log legs). It records the submit only: the clip itself renders afterwards, so an accepted submit says the job started, not that the clip was made. The seed is kept with the clip's stored settings, not on the leg.
  • Prompt. 1 to 2000 characters.

Limits

  • Two clips per reply at most. The tool may be called three times in one reply (two clips and one correction after a rejected call).
  • Two pending videos per user. A request is refused while the user already has two clips being generated, including clips started earlier in the same reply.
  • Saved conversations only. The clip is stored with the conversation, so a private (ghost) or unsaved chat cannot generate video.
  • Not available where the blob store is disabled (clips are stored there). In that case the tool is not offered.
  • Continue works for 24 hours after the source clip was requested.
  • The backend queue is bounded; when it is full the model is told to ask the user to try again later.

What users see on failure

  • Rejected before starting (invalid option, limit reached, service busy or unavailable): the model receives the reason and tells the user in its reply. No job is started.
  • The job fails or the backend loses it (for example after a backend restart): the placeholder changes to a failed card. The model's reply has already ended, so nothing further is said in the chat.
  • Still not finished after 75 minutes: the clip is marked failed. The chat stops waiting after 90 minutes and shows a hint to reload and check again.
  • Cancelled by the owner: the placeholder changes to a cancelled card.
  • The conversation is deleted while the clip is pending: the job is dropped and nothing is stored.
  • If the placeholder cannot reach the gateway for a long time it shows the failed card with a hint to reload the page and check again.

Data lifecycle

Generated videos are stored with their conversation and are deleted with it (including under a GDPR Art. 17 erasure). A forked conversation gets its own copy of finished clips; clips still being generated at fork time complete in both. The backend keeps finished outputs for 24 hours and deletes uploaded start frames after the job ends. The backend's generation history on the GPU host retains prompts. Details of the storage side are in the API reference for conversations and the inference API reference.