Pitchee: my own demo video studio for macOS

A native app that records me on green screen in front of my demo screen, runs a teleprompter that follows my voice, and hands the edit to Claude Code. Built with Claude Code over a weekend.

Pitchee is my own app for recording demo videos. I press Record, read my script from a teleprompter that follows my voice, and do the demo on my 2nd screen. Pitchee keys me out of the green screen, puts me in the bottom-left corner of the demo, and Claude Code edits the takes into a finished video with slides, captions and clean audio.

The name follows the -ee family of my other tools (Notee: my own Markdown editor for macOS, Dictee: my own local dictation app). My demos are sales pitches, hence Pitchee. The story of why I build my own apps is in The era of personal software is here. This note is the what and the how.

The Pitchee window: the camera preview on green screen and the final layout preview side by side, the red Record button and the checks on the right, the script paragraph with the prompter controls, the session slides, and the takes and Edit panels below

Why I built it

I record demo videos for clients regularly: set up a demo of a Kaltura solution, record myself in several takes, then edit. I did that in ScreenFlow for years. The recording was quick. The editing took hours: finding the best take of each part, cutting the stumbles, placing slides, fixing the sound.

I wanted an app that does only what I need from ScreenFlow, and does it better:

  • 2 screens and me: my demo screen recorded with its sound, and me from my camera, in sync.
  • Better keying than ScreenFlow's green screen, with hair that looks like hair.
  • The editing done for me: the best take per paragraph, cuts in the pauses, my slides as intro, outro and backgrounds.

How a demo gets made

  1. Prepare. I ask Claude Code for a demo. It writes the script and makes the slides, then 1 command creates the Pitchee session from them. All I have to do is press Record.
  2. Record. I press the Record key on my Stream Deck. The camera autofocuses, the script opens on my teleprompter, and it scrolls as I speak. I record paragraph by paragraph and restart whenever I stumble.
  3. Edit. I click Edit with Claude. Claude Code transcribes every take, picks the best one per paragraph, cuts inside the pauses and places the slides. A draft renders in seconds.
  4. Finish. After I've watched the draft, Render final keys me again at full quality, levels the sound, writes the captions, and delivers an MP4 and an SRT file ready for Kaltura MediaSpace.

The editing runs in a Claude Code session on my subscription. Pitchee never calls an AI API itself.

A frame of a Pitchee video: a Kaltura web page with an AI avatar fills the screen, and I sit keyed out of the green screen in the bottom-left corner

What it does

Feature How it works
Recording My camera through the ATEM Mini as ProRes 422 HQ, plus the demo screen and its sound, in sync
Crash safety Files are written in 2-second pieces. A crash costs at most the last 2 seconds of a take
Teleprompter The whole script on my Elgato Prompter. It follows my voice; scroll, speed, text size and margins by hand
Live previews The raw camera, and the final layout: me keyed over the demo screen, as the video will look
Checks Camera, microphone, screen, prompter and disk. A problem that would ruin a take blocks Record
Camera look 1 button sets the camera and the lights, then measures the picture against its targets
Slides Intro, outro and insert pictures for each session, dropped on the window or prepared by Claude
Stream Deck A profile of 19 keys. Each key shows its live state: the take timer, the prompter mode, the text size
Editing A Claude Code skill: transcripts, take choice, cuts, slides, captions, loudness

The Pitchee teleprompter: white script text on black, a red arrow marking the line to read, and a green Voice label at the top

The teleprompter was the part I wanted most. It shows the whole script, not 1 paragraph at a time, and the line I'm reading stays a third of the way down the screen. The words I've already said turn grey. If I paraphrase, add a filler word or restart a sentence, it still finds my place. When I scroll by hand, it waits until I'm back on script, then follows my voice again.

Pitchee keys on a Stream Deck: a red Record key with a running timer, Marker, Good and Bad take, New session, Camera look, Focus, the prompter keys, paragraph arrows, scroll and speed

For business people

For a seller, a demo video is a pitch that works while you sleep. The limit was never the idea, it was the hours of editing per video.

  • Time: recording stays what it was. The editing drops from hours to a draft in seconds and a final in minutes, while I do something else.
  • Quality: every video gets the same framing, keying, captions and loudness.
  • Volume: when a video costs little, I can record one per prospect instead of one per quarter.

For technical people

Part Built with
App Swift and SwiftUI on macOS 26. AVFoundation for the camera, ScreenCaptureKit for the screen and its sound
Sync Both recordings are timed on the Mac's host clock, so the edit lines them up without a clap
Prompter On-device speech recognition on the camera audio. A small matcher finds the heard words near the cursor in the script
Editor Python and ffmpeg. whisper.cpp (large-v3-turbo) for word timings
Keying A fast green-screen key for drafts, CorridorKey running in MLX on Apple silicon for the final
Audio A voice chain (rumble cut, less boom, light noise reduction, presence, de-esser, compression), then -14 LUFS and a limiter
Output H.264 1080p30, AAC 256 kbit/s, SRT captions of at most 2 lines of 42 characters
Stream Deck A native Swift plugin. The app writes a small status file and the keys redraw themselves from it 4 times a second

Some numbers from the 1st weekend, on a Mac Studio M1 Ultra:

Measure Result
Draft of a 47-second video about 25 s
Final keying with CorridorKey 0.48 s per frame
Transcription about 2 s for a 25 s take
Disk space while recording about 1.75 GB per minute
Recorder killed mid-take both files playable, take recovered

What I learned building it

  • Spec first, then build. Claude Code wrote the spec, then built and tested version 1 in one go. Most of the later changes came from my 1st real recordings, not from the spec.
  • Hardware fails in ways tests don't show. 2 recording processes on the same audio device froze the sound of the whole Mac, until a restart of Core Audio. Force-quitting the app while it held the camera left the ATEM's USB video stuck until I replugged the cable. Both now have a guard.
  • Defaults are opinions. The first version slowly zoomed every slide, and I wanted them still. My voice also sounded boomy until the render got a proper voice chain.
  • Specialists for the UI. 2 sub-agents reviewed the app, one for the user experience and one for the visual design. A 3rd one built what they specified. That's how the edit flow, the problem banner and the red recording frame came in.

The name

The first version was called Demoee. I renamed it after the 1st weekend: these videos are sales pitches, and Pitchee says it. The rename touched everything: the app, its links, its Stream Deck plugin, its folders and its Claude Code skill.

The Pitchee app icon: black and white clapperboard stripes at the top, my hexagon edelweiss logo, and the name Pitchee

The icon follows my NicAI design rules: the full hexagon logo, unchanged, with a clapperboard band above it and the name below, set like the one in my Notee icon.

Further reading

The open-source parts inside Pitchee:

NicAI
Written by NicAI, Nic's AI assistant, for his personal knowledge base. Researched and drafted by the model, not hand-written by Nic. Verify anything you plan to act on.