Client support
Portable formats
The Gateway classifies these formats as the portable native set shared by the browser, Apple players, and Android Media3:
The Linux companion can also play formats supplied by its installed GStreamer
plugins. Browser and operating-system updates may add native formats, but the
table above is the cross-client contract OpenClaw targets.
Lazy playback renditions
Both Gateway byte routes accept?playback=1: the managed attachment route
under /api/chat/media/outgoing/.../full and the Control UI assistant-media
route. Attachment metadata can report playback: "native" or
playback: "transcode" so a client can choose the rendition deliberately.
Playback conversion is lazy:
- A native source passes through unchanged.
- A recognized non-portable source starts a bounded
ffmpegjob. The route returns HTTP202with{ "status": "preparing" }while the rendition is being prepared. - A later request receives the cached M4A or MP4 rendition.
- If inspection or conversion is unavailable, fails, or exceeds a limit, the route falls back to the original bytes. The client can then show its unplayable-media fallback and keep the download action available.
HEAD before loading the inline
player. It shows Preparing playback while conversion is pending and keeps
the download action available when playback is unavailable.
Transcoding accepts sources up to 20 minutes and never raises the normal audio
or video byte cap. Cached playback renditions use a fixed seven-day retention
that Gateway maintenance enforces at startup and hourly, independently of
attachments.ttlHours.
Managed attachments and access
Agent-produced audio and video are stored as managed media artifacts. Images keep their separate managed-image artifact family. Native clients resolve the artifact throughartifacts.download, which returns inline base64 bytes when
the artifact is byte-backed or a short-lived, ticketed URL when it is
Gateway-managed.
Native clients resolve ticketed media against the connected Gateway URL,
preserving its reverse-proxy path prefix. A Gateway reached at
wss://gateway.example/openclaw loads managed media beneath
https://gateway.example/openclaw/api/chat/media/outgoing/, not the server root.
The ticketed byte routes support:
Rangerequests with HTTP206 Partial Contentfor seekingETagandIf-Rangefor safe resume of immutable managed originalsHEADrequests with the same content metadata and no response body
If-Range
requests receive the full representation. Ordinary Range requests still support
seeking. Managed playback responses remain private to the client cache.
Do not copy a ticketed URL into durable configuration. Clients reacquire a
ticket from the authenticated Gateway when needed.
Metadata and limits
Chat attachments may includesizeBytes, durationMs, width, and height.
OpenClaw also uses ffprobe, when available, to fill audio duration and video
duration/dimensions for media facts and the Control UI ?meta=1 availability
probe. Video dimensions account for quarter-turn display rotation; image
dimensions account for EXIF orientation. Probing is best-effort: a missing or
failed probe leaves fields absent instead of rejecting the attachment.
Gateway-managed assistant attachments use these per-file caps:
These are playback/storage caps, not the separate media-understanding limits.
For transcription and description limits, see
Image and media support.
Troubleshooting
Duration or dimensions are missing
Check thatffprobe is installed on the Gateway host and visible on its
PATH:
A recognized format downloads instead of playing
Check both media tools on the Gateway host:ffprobe classifies codecs and duration; ffmpeg creates the portable
rendition. If either step cannot safely handle the source, OpenClaw serves the
original file and the client keeps its fallback/download path.
Playback stays in preparing state
The first rendition request is asynchronous. Wait briefly and retry. Very large, longer than 20-minute, unprobeable, or unsupported sources remain on the original-byte fallback instead of blocking the Gateway.Linux reports a codec error
Use the package and source-build instructions in Linux media codecs. The.deb depends on the
required GStreamer plugin packages; the AppImage carries the media framework
and codecs installed by the release build.