Web Viewer
The Web Viewer LOP embeds a Chromium-based browser directly in TouchDesigner. It can browse live websites, render styled Markdown documents, display HTML from a connected DAT, or connect to LOP Studio. When wired to an Agent LOP, it exposes up to 14 tools that let an AI agent navigate pages, read content, click elements, fill forms, and scroll — effectively giving the agent a web browser.
Key Features
Section titled “Key Features”- Four web modes: Navigate (live browsing), Markdown (styled document rendering), DAT in1 (render HTML from a connected DAT), and LOP Studio (authenticated dashboard connection)
- Link containment: Automatically patches
target="_blank"links andwindow.opencalls so all navigation stays inside the operator - Six Markdown themes: DOT/LOPs, Simple Dark, Simple Light, Spring, Sunset, and Stormy
- JavaScript execution API: Other operators can execute JavaScript in the browser and receive results via callback through the
ExecuteJavaScriptmethod - URL sync: The URL parameter automatically updates to reflect the browser’s current address
Agent Tool Integration
Section titled “Agent Tool Integration”This operator exposes 14 tools that allow Agent and Gemini Live LOPs to browse websites, extract page content, discover and click interactive elements, fill and submit forms, scroll pages, and retrieve page info.
Use the Tool Debugger operator to inspect exact tool definitions, schemas, and parameters.
Tools are organized into four tiers controlled by the Tool Preset menu on the AgentTools page:
| Preset | What it enables |
|---|---|
| Read Only | Navigation, content extraction, scrolling, page info |
| Interactive | Everything in Read Only plus element discovery and clicking |
| Full (Form Submission) | All tools including form fill, type-and-enter, and type-into-focused |
| Custom | Pick individual toggles manually |
When an agent navigates to a URL, the tool automatically extracts a content preview and discovers clickable elements, giving the agent immediate context about the page.
Input/Output
Section titled “Input/Output”Inputs
Section titled “Inputs”- Input 1 (DAT): When Web Mode is set to “DAT in1”, the operator renders HTML content from the connected DAT.
Outputs
Section titled “Outputs”- Output 1 (TOP): The rendered web page as a texture, usable anywhere in your TouchDesigner network.
- Output 2 (DAT): The webrender info table containing current URL, page title, loading status, and other browser state.
Usage Examples
Section titled “Usage Examples”Browsing a Website
Section titled “Browsing a Website”- On the Navigation page, set Web Mode to “Navigate”.
- Enter a URL in the URL field.
- Pulse Go to load the page.
- Use Back, Forward, and Refresh for navigation. You can also interact directly with mouse and keyboard when the component viewer is active.
Rendering Markdown
Section titled “Rendering Markdown”- Create a Text DAT with Markdown content, or wire one into the network.
- Set Web Mode to “Markdown”.
- Drag your Text DAT onto the Markdown Source parameter.
- Choose a style from the Markdown Style menu.
- Pulse Render Markdown — or enable Render onChange to re-render automatically whenever the source DAT changes.
Agent-Driven Web Research
Section titled “Agent-Driven Web Research”- Place a Web Viewer and an Agent LOP in your network.
- On the Web Viewer’s AgentTools page, set Tool Preset to “Interactive”.
- Wire the Web Viewer into the Agent’s tool inputs.
- Ask the agent to visit a website and summarize its contents — the agent will navigate, extract text, and report back.
Troubleshooting
Section titled “Troubleshooting”- Form tools triggering CAPTCHA: The form submission and typing tools work best on local or custom web portals. Public sites may present CAPTCHA challenges that the agent cannot solve.
- Page not rendering after navigation: Some sites load content dynamically. Use the Refresh button or have the agent call
web_refresh_pageand wait before extracting content.
Parameters
Section titled “Parameters”Navigation
Section titled “Navigation”op('web_viewer').par.Status Str - Default:
"" (Empty String)
op('web_viewer').par.Url Str - Default:
https://dotdocs.netlify.app/
op('web_viewer').par.Markdowndat DAT - Default:
"" (Empty String)
op('web_viewer').par.Rendermarkdown Pulse - Default:
False
op('web_viewer').par.Autorendermd Toggle - Default:
False
op('web_viewer').par.Go Pulse - Default:
False
op('web_viewer').par.Back Pulse - Default:
False
op('web_viewer').par.Forward Pulse - Default:
False
op('web_viewer').par.Refresh Pulse - Default:
False
AgentTools
Section titled “AgentTools”op('web_viewer').par.Enablenavigate Toggle - Default:
False
op('web_viewer').par.Enablegoback Toggle - Default:
False
op('web_viewer').par.Enablegoforward Toggle - Default:
False
op('web_viewer').par.Enablerefresh Toggle - Default:
False
op('web_viewer').par.Enableextract Toggle - Default:
False
op('web_viewer').par.Enablescrollup Toggle - Default:
False
op('web_viewer').par.Enablescrolldown Toggle - Default:
False
op('web_viewer').par.Enablescrolltop Toggle - Default:
False
op('web_viewer').par.Enablegetinfo Toggle - Default:
False
op('web_viewer').par.Enablefindelements Toggle - Default:
False
op('web_viewer').par.Enableclick Toggle - Default:
False
op('web_viewer').par.Enableformsubmit Toggle - Default:
False
op('web_viewer').par.Enabletypeenter Toggle - Default:
False
op('web_viewer').par.Enabletypefocused Toggle - Default:
False
Settings
Section titled “Settings”op('web_viewer').par.Serverport Int - Default:
0- Range:
- 0 to 1
- Slider Range:
- 0 to 1
op('web_viewer').par.Restartserver Pulse - Default:
False
op('web_viewer').par.Autorestart Toggle - Default:
False
op('web_viewer').par.Autorestartpulse Pulse - Default:
False
op('web_viewer').par.Maxrenderrate Int - Default:
30- Range:
- 1 to 1
- Slider Range:
- 1 to 60
Changelog
Section titled “Changelog”v1.1.02026-03-01
- Add per-tool Enable* toggle parameters with Toolpreset preset bank - Use onPar prefix for toggle/preset callbacks (not promoted) - Remove fallback extraction methods (_find_elements_fallback, _extract_content_fallback) - Remove TD_* title prefix parsing from OnWebRenderInfoChange - Remove patch_is_pending flag, simplify check_for_patch - Remove duplicate import statements and test_js_escaping - Consolidate webserver_callbacks /web-data and /js-exec into single handler - Remove verbose debug prints from webserver_callbacks
- Add LOP Studio mode with authenticated dashboard connection - Uses LOPStudioConnector for embed token auth flow - Remove unused Testjscallback parameter and test methods
v1.0.22025-12-26
- Add LOP Studio mode with authenticated dashboard connection via LOPStudioConnector embed token auth
- Remove unused Testjscallback parameter and test methods
- Initial commit
v1.0.12025-07-24
- FIXED: Resolved a critical navigation bug that caused new URLs to fail with an
ERR_ABORTEDerror, which kept the browser stuck on the original page. - DETAILS: The fix prevents a race condition where a page-load event would improperly re-trigger navigation to the old URL. This was solved by adding a state flag (
is_syncing_url) that is reset on a deferred script, breaking the feedback loop.
v1.0.02025-07-19
- Initial Release of the Web Viewer LOP.
- Added URL navigation capabilities, allowing users to browse web pages within TouchDesigner.
- Implemented
Go,Back,Forward, andRefreshpulse parameters for web navigation control. - Introduced a
Webmodeparameter with options forNavigate(web browsing) andMarkdownrendering. - Developed a robust Markdown rendering system, allowing
.toxto display Markdown content from a specified DAT. - Provided multiple Markdown style options:
DOT/LOPs Style,Simple Dark,Simple Light,Sunset,Spring, andStormy. - Implemented automatic patching of new tab links to ensure they open within the current
webrenderTOP, preventing external browser launches. This includes handlingtarget="_blank", JavaScript event handlers, andwindow.opencalls. - Integrated
SendKeyandInteractMousemethods to allow for programmatic keyboard and mouse interaction with the rendered web content. - Utilized
DotLOPUtilsfor parameter creation and logging, ensuring consistent operator development practices. - Designed with robust error handling for markdown rendering, checking for essential operators and content placeholders.