clipwright-text
MCP tool for annotating an OTIO timeline with text overlay markers.
Text is not rendered here — clipwright-render reads the markers and applies
drawtext filters when producing the output video.
Overview
clipwright-text is part of the clipwright
suite. It is designed for AI agents, not humans — there is no GUI or
interactive CLI. All interaction is via the MCP (Model Context Protocol) stdio
transport.
Available Tools
| Tool | Description |
|---|---|
clipwright_add_text |
Append a text_overlay marker to an OTIO timeline for later rendering. |
How It Works
- AI calls
clipwright_add_text(timeline, output, options)once per text overlay. - The tool appends a
text_overlaymarker (nametext_0,text_1, …) to the first video track of the timeline and writes a new.otiofile tooutput. - The input timeline is never modified (non-destructive).
- Repeated calls with identical options are idempotent — the second call returns
applied=0with a warning instead of duplicating the marker. - After annotating, pass the output OTIO to
clipwright-renderwhich converts the markers intodrawtextffmpeg filters and bakes the text into the video.
MCP Client Registration
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"clipwright-text": {
"command": "clipwright-text",
"args": []
}
}
}
If clipwright-text is not on PATH, use the full path to the script or the
Python interpreter:
{
"mcpServers": {
"clipwright-text": {
"command": "/path/to/.venv/bin/clipwright-text",
"args": []
}
}
}
clipwright_add_text Reference
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
timeline |
str |
Yes | Path to the input .otio timeline file. |
output |
str |
Yes | Path for the new .otio output (must end in .otio, must differ from timeline). |
options |
AddTextOptions |
Yes | Text overlay options (see below). |
AddTextOptions Fields
| Field | Type | Default | Description |
|---|---|---|---|
text |
str |
— | Text to display. Single-line; no newlines or control characters. |
start_sec |
float |
— | Start time in seconds (>= 0). |
duration_sec |
float |
— | Duration in seconds (> 0). |
x |
str |
"(w-tw)/2" |
Horizontal position (ffmpeg drawtext expression). |
y |
str |
"h-th-40" |
Vertical position (ffmpeg drawtext expression). |
font_size |
int |
48 |
Font size in points (> 0). |
font_color |
str |
"white" |
Font color: named color, #RRGGBB, or name@alpha. |
box |
bool |
False |
Draw a background box behind the text. |
box_color |
str |
"black@0.5" |
Background box color. |
fade_in_sec |
float |
0.3 |
Fade-in duration (>= 0; fade_in + fade_out <= duration). |
fade_out_sec |
float |
0.3 |
Fade-out duration (>= 0). |
font_path |
str | None |
None |
Absolute path to a .ttf/.otf font file. None lets clipwright-render resolve a platform default. |
Return Value
{
"ok": true,
"summary": "Added text overlay \"Hello\" at 1.0s for 3.0s. Timeline now has 1 text overlay(s). Output: out.otio.",
"data": {
"applied": 1,
"overlay_count": 1,
"start_sec": 1.0,
"duration_sec": 3.0
},
"artifacts": [
{ "role": "timeline", "path": "/abs/path/out.otio", "format": "otio" }
],
"warnings": []
}
On error:
{
"ok": false,
"error": {
"code": "INVALID_INPUT",
"message": "...",
"hint": "..."
}
}
Requirements
- Python >= 3.11
- opentimelineio >= 0.18
- mcp >= 1.27.2
- clipwright >= 0.3.0 (core library)
License
MIT
Metadata
Release files for clipwright-text 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| clipwright_text-0.2.2.tar.gz | 9.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| clipwright_text-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.7 kB
Release files / clipwright_text-0.2.2.tar.gz
| Download URL | clipwright_text-0.2.2.tar.gz |
|---|---|
| Size | 9.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d32fa69da3ccd069660b1a380b271f4a2f132d52e383598a438cca77bbbff72c
|
|
BLAKE2b-256 checksum How to use checksums |
5733d8532a52d70cf2e96934743a2b27339798c9a06beb00f3a705613503099a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 8, 2026.
Transparency logRelease files / clipwright_text-0.2.2-py3-none-any.whl
| Download URL | clipwright_text-0.2.2-py3-none-any.whl |
|---|---|
| Size | 11.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2223a7e9fc31859c264396ba5a109a6928ed79db1612ab130bbe0245e0f847da
|
|
BLAKE2b-256 checksum How to use checksums |
03bc08906c067920aed6bebfa5ae66e3661f789a7d9c844753303041c153b3fa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 8, 2026.
Transparency log