Reelwright
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| REELWRIGHT_HOME | No | Directory where Reelwright projects are stored. Defaults to ~/Reelwright/projects. | |
| REELWRIGHT_FFMPEG | No | Path to an ffmpeg binary to override the one found on PATH. | |
| REELWRIGHT_FFPROBE | No | Path to an ffprobe binary to override the one found on PATH. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Reelwright edits video through a JSON timeline. You cannot watch or hear media in real time, so use the perception tools to look and listen, then verify every edit.
Typical loop:
create_project → import_media (absolute paths on the user's machine).
Understand the footage: inspect_media (contact sheet), get_transcript / transcribe, detect_silence, detect_scenes, audio_loudness, audio_waveform.
Edit: add_clip, trim_clip, split_clip, delete_range (ripple), move_clip, remove_silences, add_text, add_music, set_captions. Every edit is one undo step.
Verify: check_frames at the exact times you changed (renders the edited timeline, overlays and captions included), timeline_contact_sheet for the whole edit, render_preview for a low-res MP4 of a range.
export with a preset (youtube, shorts, square, youtube_4k, project).
Times are seconds. Clip src_in/src_out are positions inside the source file; timeline times are positions in the finished video. get_timeline shows both. Check list_notes for human feedback pinned to timeline times.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_projectsB | List existing Reelwright projects. |
| create_projectB | Create a new project. width/height/fps define the canvas; |
| get_timelineC | The full edit: clips with timeline and source times, overlays, music, open notes, assets. |
| update_settingsC | Change canvas settings (resolution, fps, fit, background colour, font file for text). |
| undoC | Undo the last edit. |
| redoC | Redo the last undone edit. |
| historyC | Undo/redo stack descriptions (oldest first). |
| import_mediaB | Add media files (video, audio, images) to the project's asset library. Paths must be absolute paths on the machine running this server. |
| inspect_mediaB | Contact sheet: |
| detect_scenesB | Shot-change timestamps (source time) in a video asset. Lower threshold = more sensitive. |
| detect_silenceC | Silent ranges [start, end] (source time) in an asset's audio. |
| audio_loudnessB | Integrated loudness (LUFS), true peak, and a per-window loudness curve for an asset or a rendered file. YouTube normalises to about -14 LUFS. |
| audio_waveformC | Waveform image of an asset's or a rendered file's audio, to spot speech, pauses and peaks. |
| transcribeA | Transcribe an asset with word timestamps (needs |
| import_transcriptA | Attach an existing .srt or .vtt file (in source time) as an asset's transcript. |
| get_transcriptA | Read a transcript as timestamped lines. With asset_id: source time. Without it: the
edited timeline (only words that survive the edit). |
| add_clipA | Place [src_in, src_out] of an asset on the main track (appends unless |
| trim_clipC | Change a clip's in/out points (source time). Later clips ripple. |
| split_clipC | Split the clip under a timeline time into two clips. |
| delete_clipC | Remove a clip; everything after it ripples left. |
| delete_rangeA | Ripple-delete [start, end] of the timeline (e.g. a pause, a fumbled sentence). Works across clip boundaries; overlays and notes after it shift left. |
| move_clipB | Move a clip to a new position on the main track (0 = first). |
| set_clip_volumeB | Set a clip's audio gain (1.0 = unchanged, 0 = mute). |
| remove_silencesA | Cut dead air across the whole timeline: detects silence in every clip's audio and
ripple-deletes it, keeping |
| add_textC | Add a text overlay at timeline times. font_size is relative to a 1080p canvas. Use \n for line breaks. |
| update_textC | Change any property of a text overlay. |
| remove_textC | Delete a text overlay. |
| add_musicA | Lay background audio under the main track from timeline time |
| remove_musicC | Delete a music cue. |
| set_captionsB | Turn captions on/off. Captions are generated from asset transcripts and follow the edit automatically. burn_in=False exports a sidecar .srt instead of drawing them. |
| add_noteC | Pin a review note to a timeline time (e.g. a question for the human). |
| list_notesB | Review notes (human feedback such as "cut this pause"), in timeline order. |
| resolve_noteC | Mark a review note as handled. |
| check_framesA | Render frames of the EDITED timeline at the given timeline times (overlays and captions included) and return them as one labelled grid. Use after every edit to verify it. |
| timeline_contact_sheetC | Evenly spaced frames across the edited timeline (or a range of it) in one image. |
| render_previewB | Fast low-res MP4 of the edit (or of [start, end]) for review. Returns the file path. |
| exportB | Final render. Presets set resolution and loudness (-14 LUFS for youtube/shorts/square). Use a GPU encoder (h264_nvenc etc.) if the machine has one. Writes a sidecar .srt when captions are enabled. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 37 tools
Most tools map cleanly to one resource+action (clips, text, music, notes, transcripts), and the analysis tools (detect_scenes, detect_silence, audio_loudness, audio_waveform) are clearly separated. The only real blur is the preview trio — check_frames vs timeline_contact_sheet both render grids of the edited timeline, and inspect_media does the same for source assets — plus remove_silences overlaying detect_silence/delete_range. Descriptions do enough to steer an agent, but those pairs could be misselected.
Strong verb_noun snake_case pattern: add_clip, trim_clip, split_clip, delete_clip, move_clip, add_text/update_text/remove_text, add_music/remove_music, add_note/list_notes/resolve_note. The deviations are few and readable — noun-phrase analysis tools (audio_loudness, audio_waveform, timeline_contact_sheet) and bare commands (undo, redo, history, export, transcribe). Nothing chaotic, just minor convention drift.
37 tools is heavy for a single server, though the domain (ingest, analyze, edit, overlay, caption, render) genuinely demands breadth and almost every tool is doing distinct work. It still sits well past the comfortable 3-15 range and the preview/inspection cluster in particular feels padded. Borderline heavy rather than gratuitous.
Coverage is unusually deep: full clip lifecycle (add/trim/split/delete/move/volume/delete_range), overlays and music CRUD, transcripts, undo/redo/history, preview and final export with caption handling. Gaps are minor but real — no delete_project or asset/media removal, no read-side settings getter, and no transitions or fades between clips. Agents can work around these, but a few lifecycle ends are dead.