Open-Custom Visuals lets Open WebUI respond with visual and interactive content when a chart, diagram, data explainer, or interactive layout is clearer than plain text. Some visuals are generated from uploaded tabular data. Others are custom-built for the user's exact prompt as inline HTML, SVG, and JavaScript.
Two companion actions are included so users can reopen a finished visual or keep/export it after the reply is complete.
| File | Install In Open WebUI | Purpose |
|---|---|---|
tool.py |
Workspace -> Tools |
Main tool that streams or renders inline visuals |
SKILL.md |
Workspace -> Skills |
Instructions that teach the model how to build good visuals |
open_visual_action.py |
Admin Panel -> Functions |
Action button that reopens a visual from a message |
keep_visual_action.py |
Admin Panel -> Functions |
Action button for copying/downloading/exporting a visual |
- Open WebUI
0.6.0or newer - A model that can use custom tools
- Native function calling enabled if you want the model to lazy-load the attached skill automatically
Recommended permissions:
Workspace > Tools AccessandTools ImportWorkspace > Skills Access- Admin access for
Functions
No extra pip packages are required for this bundle.
- The files use Python standard-library modules plus Open WebUI runtime dependencies such as
fastapiandpydantic. - There is no separate
requirements.txtto install before importing these files into Open WebUI.
For the best live inline experience, enable:
Settings -> Interface -> Iframe Same-Origin Access
If this setting stays off:
- live streaming inside the inline iframe is limited
- the tool falls back to a guidance card instead of full live rendering
Open Visualcan still reconstruct the finished visual from the saved messageKeep Visualcan still run page-context export actions
Install each file in the correct Open WebUI section. Do not paste the action files into Tools, and do not place SKILL.md in Knowledge.
- Open Open WebUI.
- Go to
Workspace -> Tools. - Create a new tool or import a local file.
- Paste or upload
tool.py. - Save it.
- Confirm the tool appears as
Open-Custom Visuals. - Enable the tool if your instance uses per-tool activation.
- Go to
Workspace -> Skills. - Click
Importand selectSKILL.md, or create a new skill and paste the file contents. - Save the skill.
- If you create it manually instead of importing the file, make sure the Skill ID is exactly
open_custom_visuals.
Why the ID matters:
- the tool instructs the model to load this skill by calling
view_skill("open_custom_visuals") - if the Skill ID does not match, the model will not find the instructions automatically
Each action file must be saved as its own Function.
- Go to
Admin Panel -> Functions. - Create or import a function for
open_visual_action.py. - Review the code and click
Save. - Make sure Open WebUI detects it as an
Action. - Turn the function on.
- Repeat the same process for
keep_visual_action.py.
- Go to
Workspace -> Models. - Edit the model that should support inline visuals.
- In the
Toolssection, enableOpen-Custom Visuals. - In the
Skillssection, attachopen_custom_visuals. - In the
Actionssection, attach:Open VisualKeep Visual
- Save the model.
Open a chat with that model and ask for a chart, diagram, or interactive explainer. If the tool, skill, and actions were installed in the correct sections, the model can render inline visuals and the message toolbar should show the included actions.
- Ask naturally for a chart, diagram, flow, comparison, dashboard, or data explainer.
- Upload CSV, TSV, JSON, or markdown-table data if you want the visual built from attached data.
- Use
Open Visualon a message to reopen the visual. - Use
Keep Visualto copy or export the result.
If model-attached skill loading is unavailable in your setup, mention the skill manually in chat with $open_custom_visuals.
Attached tabular data is normalized before it is exposed to the visual runtime.
- Maximum parsed text:
5 MB - Maximum rows:
10,000 - Maximum columns:
100
Supported structured inputs:
.csv.tsv.json- markdown tables in
.md,.markdown, or.txt