
Tourwright
io.github.CXmiloxxPublished by GitHub account CXmiloxxv2.6.1Updated Nov 7, 2026
Turn a script into a narrated product tour video: real browser, captions, voice, MP4.
Overview
Turns a YAML tour script into a narrated product-tour video: real Chromium walkthrough, captions, voice and MP4 output.
- What you can do
- Write, validate and check tour scripts, including a step-by-step guide with screenshots
- Render narrated videos from a script, or film a single step, with captions, chapters and a thumbnail
- List available text-to-speech voices
- Submit render jobs to a Tourwright API and list or delete those jobs
- Read a script file from disk when file access is explicitly enabled
- When to use it
- Useful when you want an assistant to produce or refresh demo, onboarding or how-to videos of a web app without manual screen recording, and to re-render them after UI changes.
- Requirements
- Runs locally as a Node.js 22+ process (npm package tourwright, started with the mcp argument) on Linux, macOS or Windows; a first-time install downloads ffmpeg, Chromium and voice engines into a local folder. Optionally set TOURWRIGHT_API_URL and TOURWRIGHT_API_TOKEN to send jobs to a remote Tourwright API instead of rendering locally.
Installation
In SourceWeft
- Open Tourwright in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
[Tourwright]
[npm] [CI] [License: MIT] [MCP]
Narrated product tours and how-to videos, without editing. Click through your app once, or ask your AI
agent for the video: Tourwright writes the script, films a real browser in a studio frame, guides the eye to each
element, speaks with a natural voice and delivers an .mp4 with captions, chapters and a thumbnail. When the UI
changes, you render again. Built for people and AI agents, on any server, from a laptop to a cluster.
[A Tourwright video: a login with 2FA, a guided focus on each field, invented data instead of real customers, an upload and a live notice]
Made by Tourwright from examples/app.yaml, with nobody at the keyboard. ▶ Watch it with sound (77 s)
Why Tourwright
Screen recorders (Loom) and click-through demo tools (Arcade, Supademo, Scribe) need a person to record, and every redesign means recording again. Tourwright videos are code:
What you get
- Browser walkthroughs: real Chromium, a smooth animated cursor, click ripples, highlights, spotlights, callout bubbles, camera zoom, drag and drop, blurred personal data, title cards and captions in your colors and logo.
- Guided focus: the tour an app shows the first time you open it. Everything dims but the element, a
ring marks it, a bubble with a
2/4badge explains it and the camera pushes in, right on the word the voice is saying. - Narrated slides: title cards, images (with slow pan/zoom), HTML, crossfades. No website needed.
- Voices, your choice: Pocket TTS (offline, open, natural:
tourwright install --pocket), Piper (offline, open source, light), Microsoft Edge neural voices, any OpenAI-compatible TTS server (OpenAI, Kokoro, LocalAI…), or your own command. Every sentence is cached: re-rendering never re-synthesizes. - A cast, and how each line is said: several voices per video, speed, pitch and volume per line on any
engine, exact pauses (
[[1s]]), a pronunciation dictionary, sound presets (warm, radio, podcast…), click, typing and other sound effects, music with fades. - Scripts that scale with you: variables (
{{name}}, also from the CLI or the API), reusable blocks, repeats, conditions and steps that may fail. One script, many videos. - Plugins: new actions, TTS engines and voices as small modules (docs/PLUGINS.md).
- Tight edits, automatically: page loads, slow waits and voice synthesis are cut out; narration never overlaps; background music ducks under the voice.
- Deliverables: H.264/AAC
.mp4with chapters and the captions drawn on it,.srt,.vtt, thumbnail and a JSON manifest (duration, chapters, captions) for automation. - Four ways in: CLI, HTTP API with job queue and webhooks, MCP server for AI agents, Node library.
- Scales out: stateless API replicas, any number of workers on any number of servers, Redis/BullMQ queue, S3-compatible storage. Or a single process with a folder, on a Raspberry Pi.
Install
Docker (recommended)
A full service (API + 2 workers + Redis):
From npm (quickest to try)
Node.js 22+, on Linux, macOS or Windows:
Without installing anything globally: npx tourwright <command>. With pnpm: pnpm add -g tourwright
(on 2.0.0, add --no-optional).
The Redis queue and Claude for narrate are optional: install bullmq ioredis or @anthropic-ai/sdk next to
Tourwright when you use them (npm install -g bullmq ioredis). The Docker image already has them.
Without Docker (Linux, macOS, Windows)
Node.js 22+. tourwright install puts ffmpeg, Piper, voices, edge-tts and Chromium in TOURWRIGHT_HOME, with no
root or admin rights; what the system already has is kept.
Each piece is looked for on the PC first and only downloaded when it is missing:
Also reused: a Chromium left by another Playwright or Puppeteer version, and CHROME_PATH, CHROME_BIN or
PUPPETEER_EXECUTABLE_PATH. Snap and Flatpak browsers are skipped (their sandbox blocks Playwright).
TOURWRIGHT_SYSTEM_BROWSER=0 always uses Playwright's own Chromium. tourwright doctor shows what was found.
Nothing is installed on the system: what is downloaded lives in one folder (TOURWRIGHT_HOME), and the Python
packages run in a virtual environment, so yours is never changed. To uninstall, delete that folder.
Xvfb (apt install xvfb, Linux only) gives the sharpest capture; without it Tourwright records headless
(screencast), which works everywhere Chromium runs. Clients of the HTTP API or MCP can be on any system.
Use it
From a site to a video, without writing selectors by hand:
The draft goes through every section of the site with narration taken from its pages; edit it in your words.
Credentials are asked for once, never shown and never written in the script (tourwright secret list;
tourwright forget deletes them).
The script format, every action and the voices: docs/SCRIPTS.md.
JSON Schema for editors and agents: schema/script.schema.json.
HTTP API
Endpoints, assets, webhooks: docs/API.md.
AI agents (MCP)
Claude Code, as a plugin (the MCP server plus a skill that writes, checks and renders the script):
Any other MCP client (Claude Desktop, Cursor, VS Code…):
Tools: tourwright_guide, tourwright_voices, tourwright_validate, tourwright_check, tourwright_render, tourwright_job,
tourwright_jobs, tourwright_delete_job (and
tourwright_render_file with TOURWRIGHT_MCP_ALLOW_FILES=true). Point it at a remote API with TOURWRIGHT_API_URL
and TOURWRIGHT_API_TOKEN. Details: docs/AGENTS.md.
GitHub Action
Re-render your tours on every release, or fail the build when a deploy broke one:
Inputs: scripts, command, out, voice, quality, voices, version, upload (action.yml).
Node library
Scaling
Each worker renders TOURWRIGHT_CONCURRENCY videos at a time (one Chromium + ffmpeg each: plan ~1–2 CPU and
~1 GB RAM per video at 720p). Workers run at low CPU and disk priority so a shared server stays responsive.
More: docs/DEPLOYMENT.md · configuration: docs/CONFIGURATION.md.
Security
API jobs run in a sandbox: data-only scripts (no JavaScript), files limited to the job's assets, optional host allowlist and private-network blocking, secrets off by default, per-token job isolation, signed download links. Read SECURITY.md before exposing the API to untrusted clients.
License
MIT. Piper voices have their own licenses (see each voice's model card); Edge voices are a Microsoft online service, check its terms for your use.
Source: README.md at commit 28a37bc
Tools
0Version history
5- v2.6.1LatestNov 7, 2026
- v2.6.0Nov 6, 2026
- v2.5.0Nov 5, 2026
- v2.3.0Nov 4, 2026
- v2.2.0Nov 3, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts