All articles

October 14, 2026 / 12 MINUTES READ

Open WebUI v0.12.1: Channel Apps, Avatars in Standard Calls

Open WebUI v0.12.1: Channel Apps, Avatars in Standard Calls
SUMMARY

v0.12.1 lets an outside app join a channel as a member and answer when someone mentions it. A model's voice avatar now shows in Standard calls too, Realtime calls can run on Azure OpenAI, and a side-by-side view lets you check a model's rewrite before you take it. It also fixes the rough edges people ran into after v0.12.0.

v0.12.0 gave Open WebUI a voice that talks back, a face for it, and chats that more than one person can reply in. v0.12.1 takes those features further. An outside app can now join a channel as a member and answer when you mention it. Standard calls, the default kind of voice call, now show a model's voice avatar too.

Most of the release works the moment you upgrade. Three parts wait on an administrator: the Apps switch, a server text-to-speech engine for the avatar's mouth, and the new provider setting for Realtime calls on Azure. The fixes for problems people hit after v0.12.0 are reason enough to upgrade soon. Open WebUI v0.12.2 followed the same day with more fixes, listed in its release notes. This release changes the database, so back up first.

Apps that answer in a channel #

A channel can now hold more than people and models. An app is a program that runs on its own server and joins channels as a member. Mention it, and it answers in the channel with a message, a card, or buttons. An app might check the status of your websites or look something up in another system. Apps are written in Python with oix, the open-source SDK for Open WebUI apps (pip install oix), so apps suit a team with someone who writes code.

Apps is off by default and labeled experimental. An administrator turns it on under Admin Settings > General, or sets the ENABLE_APPS environment variable. Channels has to be on too. Once both are on, an Apps tab appears in Admin Settings.

Apps needs Channels on as well, since apps live in channels

In the Apps tab, you add an app by its address and the API key its maker gives you. Open WebUI connects with that key, and it checks each message against the public key that app publishes, or one you paste in. Before you save, the dialog lists the scopes the new app asks for, meaning the permissions it wants, such as reading its mentions in the channels it joins, reading every message there, or sending messages. Each scope has its own switch.

An app asks for scopes when you add it, and each one can be switched off before you continue

Access decides who can use each app. A new app starts open to Everyone, and Restricted limits it to administrators and the users and groups you add. A channel manager who has access to an app then adds it with Add Member in the channel info, where it's listed with the other members under its own picture.

An app allowed to read messages sees everything posted in the channels it joins, while one limited to mentions hears only what's addressed to it with @.

An app's replies can carry cards with a title, fields, and a thumbnail, along with buttons or links. A button press can bring a private answer for whoever pressed it, an update to the message, or a Markdown report to download.

A small demo app built with oix checks two websites when mentioned, answers with a card, and returns a report only the person who asked can see

Open WebUI connects out to each app and keeps that connection open, and the Apps tab shows whether each one is Connected. An app has to sit at a public address over HTTPS. Apps on your own network need their full addresses, such as http://192.168.1.20:8000, listed comma-separated in the APP_ALLOWED_PRIVATE_ORIGINS environment variable. A listed app may also use plain HTTP. The oix README walks through a small app that answers "hello", from creating its keys to inviting it into a channel.

Avatars in Standard calls #

In v0.12.0, a model's 3D avatar showed only in Realtime calls, and it now appears in Standard calls too. A Standard call, the default, passes your speech through speech-to-text, your chat model, and text-to-speech in turn, while a Realtime call hands the conversation to one voice model. In a Standard call, the avatar's mouth moves with the reply when your server reads it aloud.

The default Text-to-Speech Engine under Admin Settings > Audio is Web API, the browser's built-in voice, and the mouth stays still with that engine. Pick another engine, such as OpenAI or Transformers (Local), so the avatar's mouth moves. The engine applies to the whole instance, so it changes the voice everyone hears. OpenAI needs an API key and bills by use, and Transformers (Local) downloads a speech model and runs it on your server.

In Standard calls, the avatar also plays the model's gestures. For the gestures to play, Function Calling under Advanced Params in the model editor can't be Legacy, and Builtin Tools under Capabilities has to stay on, which is how both settings start. The Voice avatar row in the model editor now shows even when Realtime is off, so you can set one up without a Realtime key.

Asked to wave during a Standard call, the chat model plays the wave gesture and the avatar waves while the reply is spoken

You can turn the avatar to see it from any side, during a call and in the avatar setup preview. Dragging turns it, and a flick sets it spinning. You pan with a right drag, a Shift drag, or two fingers, and zoom with the mouse wheel or a pinch. A double-click or a double-tap resets the view.

In the avatar setup preview, a drag turns the character, the mouse wheel zooms, a right drag pans, and a double-click resets the view

Characters in the older VRM 0.x format, which held their arms up in v0.12.0, now stand with their arms down and sway the right way.

Steadier Realtime calls, now on Azure #

Realtime calls hold up better in a noisy room. Wind or background noise used to cut the model off mid-sentence. Now noise only pauses the reply until the call can tell whether it was speech. If it wasn't, the reply picks up again and the noise is dropped from the conversation. Chats that start with a Realtime call get a title and tags right away, and the screen stays on for the whole call.

Realtime calls can also run on Azure OpenAI. An administrator opens the Voice calls section of Admin Settings > Audio and switches the new Provider setting from OpenAI / compatible to Azure OpenAI. The administrator then fills in the Azure OpenAI API Base URL and the Realtime Deployment Name and chooses API Key or Microsoft Entra ID under Authentication. When a call can't connect, the error now says whether the credentials were rejected or the address and deployment weren't found.

Choosing Azure OpenAI as the Provider brings up the Azure base URL, the deployment name, and the Authentication choice, above the new Input Parameters field

The new Input Parameters field works with either provider. It passes extra settings for the call's audio input as a JSON object, such as {"noise_reduction": {"type": "near_field"}} for callers on headsets.

See what a rewrite changed #

You asked a model to tighten a system prompt, and it handed back a full new version. Which lines did it actually change? The skill file editor, the prompt editor, and the system prompt in the model editor now have a Compare revision button. Paste the proposed version, and a side-by-side view steps through each change. You can copy changes in either direction, and Apply to draft puts the result in your draft.

Compare revision on a model's system prompt: paste a tightened version, step through its two changes, and apply it to the draft

The same view opens from the chat input, through Compare text in the + menu or the /compare command. There, Use in prompt puts the result in your message. In the Open Terminal file browser, pick one file with Select for Compare and a second with Compare with Selected, and the two open read-only side by side.

Channels you can turn down #

A busy channel no longer has to ping you. The menu of a channel or direct message has a new Notifications setting, and choosing Mentions only mutes the channel. A muted channel shows no unread count and stays quiet unless someone mentions you with @.

Mentions only mutes a channel for you alone, and the other members keep their own setting

Mentions got easier to make, too. An @name or #channel you type without picking from the list now becomes a real mention when the name matches a member, a model, an app, or a channel.

Group channels and direct messages now send their members channel message webhooks too, as regular channels already did. Members set those webhooks up under Settings > Notifications.

A skill in one file #

Sharing a skill used to mean zipping its folder. The skill menu now has Export .skill, which downloads one skill with all its files as a single .skill archive. A .skill file imports the same way a ZIP file does, from disk or from a link.

Export .skill sits next to the older JSON and ZIP exports

If you write skills, long ones take up less of the model's context now. With the model's Skills builtin tool on, as it is by default, a skill whose SKILL.md runs past 20,000 characters reaches the model as a 5,000-character preview, and the model reads on from there. Each read returns up to 20,000 characters, down from 100,000 characters, so a skill built to load one long file in a single call may take a few more reads. A new grep_skill_files tool lets the model search a skill's files for a word or a pattern instead of loading them whole.

The sidebar tells you more #

Hovering a folder in the sidebar now shows a card with its chat and unread counts, its default model, and its knowledge. Folders you can edit get an Edit Folder button on the card. Folders also open in a new tab with a middle click or a Ctrl or Cmd click.

The hover card for a folder with a default model and two knowledge files

Chats in shared folders show who wrote in them, with up to three pictures and a count for the rest. Clicking a picture opens that person's profile card. The profile card also opens from the picture of a message's author in a shared chat, from a shared chat's owner, and from the person you're messaging directly in the sidebar.

Also in this release #

Generate Message Pair (Ctrl+Shift+Enter) now adds a placeholder reply for every selected model, side by side, and that layout stays after a reload. Searching your chats for a single word checks each chat once instead of twice, which made it about 40% faster in the pull request's own test on PostgreSQL with 2,164 chats. The Analytics dashboard puts models and users in one table with a switch between them. Each view lists input, output, and total tokens in separate columns you can sort. On instances with context compaction turned on, compaction now also runs during a long series of tool calls, so the series no longer hits the model's context limit.

Upgrade problems, now fixed #

Some fixes in this release answer problems people ran into after updating to v0.12.0. The skill editor, gesture setup, Realtime calls, and the Playground chat work again on an instance opened over plain HTTP at a network address, such as http://192.168.1.20:3000. Before, they failed there with crypto.randomUUID is not a function. A tab you kept working in after signing in used to reconnect several times a second after any dropped connection, even one from a laptop going to sleep. That loop put heavy load on the server, and the tab now reconnects on the first try, still signed in. Users created through SCIM can sign in with SSO again. Tools, web search, and a skill picked in a new chat stay on after you switch away and back. Daily, weekly, and monthly automations run once, at the minute you chose in your own timezone. The full changelog has every entry with links.

Before you upgrade #

This release includes database migrations. Back up first, and if you run several instances behind a load balancer, update them all together, since rolling updates aren't supported. One migration adds the tables for apps. The other gives users created through SCIM the account record they were missing, without a password.

Follow-up suggestions change. The default follow-up prompt now suggests the messages you'd most likely send next, in your own tone and language, where it used to suggest questions based on the last six messages. It reads only the first message you wrote in the chat and the last four messages, each cut to 1,000 characters. If you've set your own follow-up prompt, nothing changes.

Upgrade instructions are in the documentation.

Get involved #

The Open WebUI Team