Open source · MIT

Script in,
short out.

A plugin-based framework for agent-made short videos.

Write 150 words of markdown. Your coding agent turns them into a finished vertical video: a voice, subtitles synced to every word, motion graphics, and an MP4 ready to post. Every step is a plain file, every provider is a plugin, and nothing renders or posts until you approve it.

How it works

Three steps, each one a file you can read.

  1. 1

    Write

    A markdown script: scenes, one sentence per line, a line of scene hints each. You write it, or your agent does.

    videos/<name>/script.md
  2. 2

    Voice

    A TTS voice or your own take from the built-in teleprompter. Whisper gives every word a timestamp.

    reelsmith tts
  3. 3

    Animate and render

    One HTML file, every overlay bound to the word that introduces it. Rendered in parallel browsers straight into ffmpeg.

    reelsmith render
Between the animation and the render sit four gates: the sync linters, a contact sheet the agent scores, a draft you watch, and an approval the renderer checks.

What you get

The boring parts, done right every time.

Word-synced subtitles

One SubtitleRail per scene highlights every word on Whisper's timestamps. Overlays appear exactly when their word is spoken.

Deterministic renders

Every frame is a pure function of time, so a render is repeatable and splits across parallel browsers.

Plugins all the way down

TTS, STT, styles and publish targets share one registry. The built-ins are plugins too, so yours are first-class.

Style packs

A STYLE.md and a component kit define the look. Reflective, tech-news and motion ship built in.

Own voice or TTS

Record with the teleprompter and re-record single lines, or synthesize per line or in one performance call. Same output either way.

Quality gates

Linters, a contact sheet scored to 8+, a draft you watch, and an approval fingerprint. The final render refuses without it.

Agent-native

Skills, CLAUDE.md and markdown config tell a coding agent exactly how to drive the pipeline, and where to stop.

Plain files

A markdown script, one HTML file, JSON contracts between steps. Everything diffs, reviews and versions in git.

Built for coding agents

Your agent does the creative work. You approve.

Open a Reelsmith project in Claude Code and ask for a video. The shipped skills tell the agent how to research, write the script, voice it, build the animation, check its own frames, and publish. It stops for you at every gate.

  • reelsmith-pipeline
  • research
  • script-writing
  • teleprompter-prep
  • take-review
  • html-animation
  • publish
  • market-research

How the agent drives it →

Youmake me a video about prompt caching
Agentresearch.md is ready (Status: DRAFT) with three angles. Approve one?
gate · research
Youapproved, angle A
AgentScript written, 152 spoken words. Which voice should I use?
gate · script + voice
Youlooks good. Leda, performance mode
AgentLint clean, contact sheet 8+ on every criterion. Here is draft.mp4. OK to render?
gate · preview

Plugin kinds

Four kinds. One contract.

tts

Text to audio.

tts-openrouter

stt

Audio to word timings.

stt-whisper

style

A visual look.

reflective · tech-news · motion

publish

Send the MP4 somewhere.

youtube · meta · discord

module.exports = {
  name: 'tts-elevenlabs',
  kind: 'tts',
  version: '1.0.0',
  async synthesize({ text, voice, model, format }) {
    // call the provider, return { audio: Buffer, format: 'mp3' }
  },
};

Write a plugin →

Requirements

A laptop, four tools and a key.

macOS or Linux. reelsmith doctor checks all of it and tells you what is missing.

  • Node.js 2220 is the minimum
  • ffmpegaudio, mixing, encoding
  • Python 3.11 + Whisperword timings
  • Playwright Chromiumcontact sheets and renders
  • An OpenRouter keyfor TTS; not needed for your own voice
$ npx github:Aabishkar2/reelsmith init my-channel
$ cd my-channel
$ npx reelsmith doctor

Once the package is on npm, npx reelsmith init my-channel does the same. From a clone: node bin/reelsmith.js init ../my-channel

Script and animation on GitHub →